2017-02-17 6 views
1

Я не могу найти эквивалентное преобразование graph_from_data_frame, присутствующего в R во что-то в PythonIGRAPH из R кода варианта Python

То, что я сделал это:

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

Выход выше:

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)... 

Что я пытался в питона следующее:

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

Это дало мне ниже вывод, который является неправильным (я получаю вывод в обратном порядке), вероятно, потому, что я не смог выполнить сортировку (уникальный (unlist())) вариант в python. Но я не уверен. Выхода из питона кода:

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

Я узнал, что нет прямого варианта graph_from_data_frame в R во что-нибудь в Python, но любой ведущего к такому подходу и этот результат ценятся.

Выборочные данные из dataframe:

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

Я прошел через многие результаты от Google дифференцируя о IGRAPH в R против Python, но ничего не помогло ГУП-случае, я работаю.

+0

вы можете '' dput' ваш образец frame' данных? –

+0

@SandipanDey - Я также обновил выше данные. Порядок вершин - это то, что я думаю, что-то неправильно. –

+0

@SandipanDey - также 'dput' данных выглядит следующим образом: '> dput (dataframe_1) структура (список (ID_FROM = с ("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 ")' –

ответ

1

R Код

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 код

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

отлично объяснил, как это работает! Thanks –

+0

Когда запустите для фактических данных, это дало мне большой шар графика без краев. Любая идея, почему? прилагается скриншот снизу ниже –

+0

Вы добавили вершины, а затем ребра один за другим? вы можете попробовать некоторые макеты при построении и изменении размера вершины. –

Смежные вопросы