你可以建立一個二分圖,其中日期時間爲一部分,ColA/ColC值爲另一部分。然後將該圖「投影」到日期時間節點上 - 如果它們都鏈接到ColA/ColC節點,則在兩個日期時間之間創建鏈接。
下面是一些代碼,顯示了一種方法來創建一個無向圖。我不明白你的例子中的方向意味着什麼。
import csv
import StringIO
import networkx as nx
from networkx.algorithms import bipartite
data ="""Datetime,ColA,ColB,ColC
2015/07/12 08:45:34,ABC,12,
2015/07/12 08:46:04,DCD,10,ABC
2015/07/12 08:46:23,XYZ,34,ABC
2015/07/12 08:46:56,MNO,10,XYZ
2015/07/12 08:46:56,FGH,20,"""
G = nx.Graph()
csvfile = StringIO.StringIO(data)
reader = csv.DictReader(csvfile)
nodes = []
for row in reader:
nodes.append(row['Datetime'])
G.add_node(row['Datetime'])
if row['ColA'] != '':
G.add_edge(row['Datetime'],row['ColA'])
if row['ColC'] != '':
G.add_edge(row['Datetime'],row['ColC'])
print G.edges()
B = bipartite.projected_graph(G, nodes)
print B.edges()
輸出
[('2015/07/12 08:46:23', 'XYZ'), ('2015/07/12 08:46:23', 'ABC'), ('ABC', '2015/07/12 08:46:04'), ('ABC', '2015/07/12 08:45:34'), ('DCD', '2015/07/12 08:46:04'), ('FGH', '2015/07/12 08:46:56'), ('2015/07/12 08:46:56', 'XYZ'), ('2015/07/12 08:46:56', 'MNO')]
[('2015/07/12 08:46:23', '2015/07/12 08:46:04'), ('2015/07/12 08:46:23', '2015/07/12 08:46:56'), ('2015/07/12 08:46:23', '2015/07/12 08:45:34'), ('2015/07/12 08:46:04', '2015/07/12 08:45:34')]
你可以用鄰接表來呈現圖形結構。看看這篇文章。 http://interactivepython.org/LpOMZ/courselib/static/pythonds/Graphs/graphintro.html#an-adjacency-list – czheo
@czheo謝謝你的建議。我試圖創建所有列作爲屬性的節點。超出了這裏簡單示例所示的內容。 – sfactor