2017-02-17 10 views
1

Ich bin nicht in der Lage eine äquivalente Umwandlung von graph_from_data_frame in R in etwas in PythonIGRAPH Umwandlung von R-Code zu Python Variante

Was ich getan habe, zu finden ist:

graph_from_data_frame(d = dataframe_1[,c("ID_TO","ID_FROM")], directed = TRUE, vertices = sort(unique(unlist(dataframe_1)))) 

Ausgabe der oben:

IGRAPH DN-- 195 201 -- 
+ attr: name (v/c) 
+ edges (vertex names): 
[1] 46753->46627 46737->46642 46753->46629 46737->46629 46646->46600 enter code here... (and so on)... 

Was ich in python versucht, ist die folgende:

# Convert dataframe to matrix 
edges = dataframe_1.as_matrix(columns=None) 
# create directed graph 
MAP = Graph.TupleList(directed=True, edges = edges) 

Das gab mir unten Ausgabe, die falsch ist (ich bekomme die Ausgabe umgekehrt) wahrscheinlich, weil ich nicht in der Lage, eine Sortierung (eindeutige (unlist())) Variante in Python zu tun. Aber ich bin unsicher. Ausgabe von Python-Code:

IGRAPH DN-- 339 201 -- 
+ attr: name (v) 
+ edges (vertex names): 
46627->46753, 46642->46737, 46629->46753, 46629->46737, 46600->46646 

kam ich zu wissen, dass es keine direkte Variante graph_from_data_frame ist in R in allem in Python, aber jede führen zu diesem Ansatz und dieses Ergebnis sehr geschätzt wird.

Beispieldaten aus Datenrahmen:

ID_FROM  ID_TO 
0 46627   46753 
1 46642   46737 
2 46629   46753 
3 46629   46737 
4 46600   46646 
5 46552   46633 

Ich habe durch viele Ergebnisse von Google gegangen Differenzierung über IGRAPH in R vs Python aber nichts half zum sue-Fall, der ich arbeite.

+0

können Sie '' Ihre Daten frame' Probe dput'? –

+0

@SandipanDey - Ich habe die oben genannten Daten ebenfalls aktualisiert. Die Reihenfolge der Vertices ist, was ich denke irgendwie schief geht. –

+0

@SandipanDey - auch die 'dput' der Daten wird wie folgt: '> dput (dataframe_1) Struktur (list (ID_FROM = c ("46627", "46642", "46629", "46629", "46600", "46552"), ID_TO = c ("46753", "46737", "46753", "46737", "46646", "46633"), .Names = c ("ID_FROM", " ID_TO "), row.names = c (NA, -201L), class =" data.frame ")' –

Antwort

1

R-Code

library(igraph) 
dataframe_1 <- read.table(text='  ID_FROM  ID_TO 
           0 46627   46753 
           1 46642   46737 
           2 46629   46753 
           3 46629   46737 
           4 46600   46646 
           5 46552   46633', header=TRUE) 
g <- graph_from_data_frame(d = dataframe_1[,c("ID_TO","ID_FROM")], directed = TRUE, vertices = sort(unique(unlist(dataframe_1)))) 
plot(g) 

enter image description here

Python-Code

from igraph import * 
import pandas as pd 

dataframe_1 = pd.DataFrame({'ID_FROM':[46627, 46642, 46629, 46629, 46600, 46552], 'ID_TO':[46753,46737,46753,46737,46646,46633]}) 
#print dataframe_1 
g = Graph(directed=True) 
for index, row in dataframe_1.iterrows(): 
    g.add_vertex(str(row['ID_FROM'])) 
    g.add_vertex(str(row['ID_TO'])) 
    g.add_edge(str(row['ID_FROM']), str(row['ID_TO'])) 
g.vs["label"] = g.vs["name"] 
plot(g) 

enter image description here

+1

perfekt erklärt, wie das funktioniert! Danke –

+0

Danke run für die tatsächlichen Daten, das gab mir einen großen Ball des Graphen ohne Kanten. Irgendeine Idee warum? Anfügen einer Beispiel-Screenshot unter –

+0

Haben Sie Scheitelpunkte und dann Kanten einzeln hinzugefügt? Sie können beim Plotten einige Layouts ausprobieren und die Scheitelpunktgröße ändern. –