我的CSV文件在不同的人之间有大约260万条交易记录。我试图从这个文件中创建一个图形:人具有唯一ID作为节点,边表示两个人之间的事务,并希望从图中获取所有可能的周期。我正在尝试使用networkx.simple_cycles(graph_name)
从此图表中获取所有周期,但会收到此错误:
NetworkXNotImplemented Traceback (most recent call
last)
<ipython-input-21-c36e4cd0e220> in <module>()
----> 1 nx.simple_cycles(Directed_G)
<decorator-gen-215> in simple_cycles(G)
~\AppData\Local\Continuum\anaconda3\lib\site-
packages\networkx\utils\decorators.py in _not_implemented_for(f, *args,
**kwargs)
64 if match:
65 raise nx.NetworkXNotImplemented('not implemented for %s
type'%
---> 66 '
'.join(graph_types))
67 else:
68 return f(*args,**kwargs)
NetworkXNotImplemented: not implemented for undirected type
我的Python代码如下所示:
import pandas as pd
import time
import networkx as nx
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
data=pd.read_csv(path/to/csv/file)
Directed_G=nx.DiGraph()
Directed_G=nx.from_pandas_dataframe(data, 'from', 'to')
nx.simple_cycles(Directed_G)
我的数据看起来像这样:
from to
0 000028c1f8598db 1a55bc3aab8562f
1 00003147f02a255 9c1f54d9859ce12
2 00003cdc5ed35a0 472f48d28903b43
3 00003cdc5ed35a0 5ab9e7e07978f9d
4 00003cdc5ed35a0 693452b7ae2fd0c
有人可以帮我解决这个错误。可以通过其他方式从该图中找到所有可能的周期吗?
答案 0 :(得分:1)
执行此操作时:
Directed_G=nx.from_pandas_dataframe(data, 'from', 'to')
它从pandas数据框创建一个图形,并将结果分配给名称Directed_G
。它没有去检查先前的Directed_G
图形类型Graph
。因此,它使用默认类型(Directed_G
)创建图形,并且存储在create_using=DiGraph
中的上一个图形被覆盖,丢失到天空中的大垃圾收集器。然后找到循环的命令就会消失,因为它无法处理无向图。
将可选参数from_pandas_dataframe
添加到您对from_pandas_dataframe
的调用中。
您应该知道,在最新版本的networkx from_pandas_dataframe
已被删除:https://networkx.github.io/documentation/networkx-2.0/release/release_2.0.html
以前,函数
to_pandas_dataframe
假设数据框具有类似边缘列表的结构,但from_pandas_edgelist
生成邻接矩阵。我们现在提供四种功能to_pandas_edgelist
,from_pandas_adjacency
,to_pandas_adjacency
和vr <- list( babies=0.3, kids=0.5, teens=0.75, adults=0.98 ) Ax <- expression( matrix(c( 0,0,0,0,teens*0.5,adults*0.8, babies,0,0,0,0,0, 0,kids,0,0,0,0, 0,0,kids,0,0,0, 0,0,0,teens,0,0, 0,0,0,0,teens,adults), ncol=6, byrow = TRUE )) A1 <- eval(Ax, vr) lambda(A1) [1] 1.011821
。