2017-02-05 3 views
1

Ich habe versucht, einen wirklich großen Datensatz, der ein zweigeteiltes Netzwerk ist, in ein gewogenes Ein-Modus-Netzwerk zu konvertieren, so dass ich es mit Gephi visuell darstellen kann. Es gibt ein Plugin in Gephi dafür, aber das Programm stürzt ab, wenn ich es ausführe, weil das Dataset zu groß ist. Ich habe auch ein bisschen mit R versucht, aber ich habe keine Erfahrung damit, also dachte ich mir, ich würde die Möglichkeiten mit dem erkunden, womit ich schon etwas Erfahrung habe.Bipartite Graphdaten mit MySQL-Abfrage in Ein-Modus umwandeln?

Meine Frage: Kann dies mit einer MySQL-Abfrage getan werden, und wird es effizient sein?

Meine Daten auf einer MySQL-Datenbank gespeichert ist, und sieht derzeit wie folgt aus:

A | 1 
A | 2 
A | 3 
B | 1 
B | 2 
C | 2 
C | 3 

Und was ich brauche, wie das ist, wo die dritte Säule ist das Gewicht, wie viele sie gemeinsam haben.

A | B | 2 
A | C | 2 
B | C | 1 

Ich bin nicht zu groß mit MySQL-Abfragen, aber ich dachte, wenn ich könnte irgendwie eine Abfrage machen, die Daten zu transformieren wie folgt aussehen:

A | 1 | B 
A | 2 | B 
A | 2 | C 
A | 3 | C 
B | 2 | C 

Ich würde dann in der Lage sein, zu machen Zählen Sie auf die Daten, um das Gewicht zu erhalten.

Ich bin nicht nur auf der Suche nach Hilfe, wie man eine Abfrage für diese, sondern auch, wenn es eine effiziente Möglichkeit der Umwandlung der Daten wäre.

Ich hoffe, Sie können mir helfen und wenn ich etwas näher ausführen muss, lass es mich wissen.

+0

Sie sollten "wirklich großen Datensatz" quantifizieren. –

+0

Ich habe derzeit 11 Millionen Zeilen in der ersten Tabelle, die im Laufe der Zeit ziemlich wachsen würde, wenn ich mir vorstellen kann, wie man damit arbeitet. –

Antwort

1

Sie können dies mit einem selbst tun verbinden und eine Aggregation:

select t1.col1, t2.col1, count(*) 
from t t1 join 
    t t2 
    on t1.col2 = t2.col2 
group by t1.col1, t2.col1; 

Dies wird nicht wirklich effizient sein, aber es ist wahrscheinlich so effizient wie Sie mit den Tools, die Sie zur Hand haben, erhalten werden.

+0

Zunächst einmal vielen Dank, dass Sie sich die Zeit genommen haben, eine Antwort zu geben. Ich kann es nicht funktionieren lassen. Es ist wahrscheinlich, weil ich es nicht verstehe. Ich habe nur eine Tabelle, die wie das erste Beispiel in meinem Beitrag aussieht, also bin ich etwas verwirrt darüber, was t1 und t2 ist. Ich kann auch nicht genau sagen, was das "t" in den Zeilen 2 und 3 ist. –

+0

Eigentlich glaube ich, ich habe es, t ist die vorhandene Tabelle, oder? Zumindest läuft es jetzt, also werde ich zurückkommen, wenn ich das Ergebnis sehe :) –

+0

@ M.Kahlen. . . Ja, "t" ist die vorhandene Tabelle, die Sie in der Frage nicht nennen. –