Построить ориентированный график или блок-схему networkx из более чем одного столбца данных pandas - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть pandas dataframe, который состоит из 10 столбцов.

  • каждая строка представляет собой шаг, выполняемый пользователем в режиме онлайн.всего 10 столбцов, поэтому все 10 этапов процесса
  • скажем, первое действие - это бронирование авиабилета, поэтому шаги - это сайт входа в систему -> указать время назначения src -> выбрать места -> оплатить - просмотреть

enter image description here

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

в настоящее время networkx поддерживает только 2 столбца в

# libraries
import pandas as pd
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt

# Build your graph
G=nx.from_pandas_dataframe(df, 'src', 'dest',create_using=nx.DiGraph())

# Plot it
nx.draw(G, with_labels=True)
plt.show()

Может кто-нибудь сказать мне, как сделать это для более чем двух столбцов ориентированного графа

1 Ответ

0 голосов
/ 20 ноября 2018

networkx from_pandas_dataframe использует add_edges_from, вы можете сделать похожую вещь:

# libraries
import pandas as pd
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt

# Build your graph

df = pd.DataFrame(np.random.randn(2,4),columns=list('ABCD')) #Create a 4 column data frame

columns = list(df.columns.values)# Get columns name

g = nx.empty_graph(0, nx.DiGraph()) #initialize an empty graph

for i in range(len(columns)-1):
    g.add_edges_from(zip(df[columns[i]], df[columns[i+1]])) #Create edge between 2 values, between all consecutive coumns

# Plot it
nx.draw(g, with_labels=True)
plt.show()

С результатом:

Resulting graph

...