我有一个大型数据集(数百万行),我想将其用于图分析。经过数据准备和清理之后,数据现在为python格式(pandas数据框)。
为了进行图形分析,我使用的是斯坦福网络分析项目(SNAP)。即使使用networkx或GraphLab等其他框架,我也使用SNAP的原因是SNAP可以处理非常大的图形。
但是SNAP使用的数据结构与我们使用大熊猫时所习惯的数据结构不同。它使用向量,哈希表和对。
https://snap.stanford.edu/snappy/doc/tutorial/tutorial.html
我发现很难从数据帧格式转换为任何这些格式。我目前正在做的是先将数据帧转换为文本格式,然后将其保存在硬盘上,然后使用SNAP重新读取 snap.LoadEdgeListStr
https://snap.stanford.edu/snappy/doc/reference/LoadEdgeListStr1.html?highlight=loadedgeliststr
是否可以在两种格式之间进行直接转换,所以我不需要每次都执行相同的过程?
答案 0 :(得分:0)
如果您希望将熊猫数据框转换为内存中的SNAP图,则可以创建一个新图,并用节点和边填充它,如下所示:
import pandas as pd
import snap
# Create a sample pandas dataframe:
data = {
's': [0, 0, 1],
't': [1, 2, 0]
}
df = pd.DataFrame(data)
# Create SNAP directed graph:
G1 = snap.TNGraph.New()
# Add nodes:
nodes = set(df['s'].tolist() + df['t'].tolist())
for node in nodes:
G1.AddNode(int(node))
# Add edges:
for index, row in df.iterrows():
G1.AddEdge(int(row['s']), int(row['t']))
# Print result:
G1.Dump()
如果您仍然希望在首次创建图形后保存/加载图形,请考虑以二进制格式保存它们,而不是使用文本文件(使用save()
和load()
函数)。那应该更有效率。
SNAP还提供了Tables:
SNAP中的表旨在提供大规模的快速性能,并毫不费力地处理包含数亿行的数据集。可以使用提供的方法将它们以二进制格式保存并加载到磁盘中。
这些允许使用方便的API来转换tables into graphs,但是我不认为我会用它们代替熊猫数据框。