我正在尝试使用在线课程讨论论坛中的问题、答案和评论为 SNA 项目构建一个边缘列表。
这是我构建边缘列表的代码:
# import libraries
import csv
import collections
from collections import defaultdict
def multi_dimensions(n, type):
# """ Creates an n-dimension dictionary where the n-th dimension is of type 'type'
if n<=1:
return type()
return defaultdict(lambda:multi_dimensions(n-1, type))
edgelist = multi_dimensions(2,dict)
csv.field_size_limit(1600000)
f = open('/Users/samuelfinegold/Documents/harvard/edXresearch/snaCreationFiles/time_series/time_series.csv','rU')
reader = csv.DictReader(f, delimiter=',')
for line in reader:
# edgelist
if line['types'] == 'Question':
#print 'T'
source = line['author_id']
else:
edgelist[source]['target'] = line['author_id']
edgelist[source]['start_time'] = line['time']
这是上下文的csv:
post_id thread_id author_id types time votes_up votes_down posters
1 0 Jan Question 3/1/12 10:45 5 1 Jan, Janet, Jack
2 0 Janet Answer 3/1/12 11:00 2 1 Jan, Janet, Jack
3 0 Jack Comment 3/2/12 8:00 0 0 Jan, Janet, Jack
4 1 Jason Question 3/4/12 9:00 3 1 Jason, Jan, Janet
5 1 Jan Answer 3/7/12 1:00 3 1 Jason, Jan, Janet
6 1 Janet Answer 3/7/12 2:00 1 2 Jason, Jan, Janet
这就是我为我的边缘列表得到的:
source target time
Jan Jack 999
Jason Janet 999
我不知道是什么导致时间如此不同。
期望的输出:
source target start_time
Jan Janet 3/1/12 11:00
Jan Jack 3/2/12 8:00
Jason Jan 3/7/12 1:00
Jason Janet 3/7/12 2:00
请注意,时间是发布答案或评论的时间。对于那些熟悉动态 SNA 图的人,您可能想知道为什么我没有结束时间。这是因为,为简单起见,我将简单地为每个帖子手动添加一个具有相同结束时间的列,这意味着图表不会显示任何消失。