今天也要超级努力啊……
原数据展示:
1、从文件中读取网络数据,选择你认为适合的数据结构进行存储
注:txt格式文件中,每一列的数字代表节点的编号,因此每一行表示这两个节点有一条边,例如第一行为(0 769),表示第0号节点与第769号节点相连
file = open('example_1.txt','r')#打开文件
lines = file.readlines()#对文件进行逐行读取
edge = len(lines)#网络边的条数
net = dict()#创建空字典,value为元组形
for line in lines:#遍历每行数据
whole = line.split( )# 以空格为分隔符,包含 \n
k = whole[0]#取出每行数据的第一个数
tup1 = (whole[1],)#取出每行数据的第二个数,存入元组
if k not in net:#如果字典中不存在与k相同的key,就添加key-value值
net[k] = tup1
else:#如果字典中存在与k相同的key值,就将对于的值添加到value中
net[k] = net[k] +tup1
file.close()
统计以上网络中每个节点的度,整个网络的平均度,以及每个度的频率(即度的分布),将度分布的散点图画出来。
#节点的度
file1 = open("节点的度.csv",'w',encoding='utf-8',newline='')#创建节点的度.csv文件
csv_writer = csv.writer(file1)#构建csv写入对象
csv_writer.writerow(["节点","度"])#构建列表头
count = 0#计算节点的个数
for key in net:
count += 1
f = key
d = len(net[key])
csv_writer.writerow([f, d])
file1.close()
#网络平均度
print("网络平均度为:{}".format(2*edge/count))
计算度分布,写入表格‘度的分布.csv’中
#度的分布
du = open('节点的度.csv','r',encoding='utf-8')
reader = csv.reader(du)
newfile = open('度的分布.csv', 'w',encoding='utf-8', newline='')
csv_writer = csv.writer(newfile)#构建csv写入对象
csv_writer.writerow(["度","度的分布"])#构建列表头
dir1 = dict()
for row in reader:
if row[1] == '度':
continue
else:
h = row[1]
if h not in dir1:
dir1[h] = 1
else:
dir1[h] += 1
for key in dir1:
dir1[key] = dir1[key]/count
csv_writer.writerow([key, dir1[key]])
du.close()
newfile.close()
由于pycharm中无法成功安装matplotlip库,无法做散点图,这里根据度的分布的表,在csv中作出的度的分布的散点图