从TXT文件中读取网络节点绘制度分布散点图

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()

2、统计以上网络中每个节点的度,整个网络的平均度,以及每个度的频率(即度的分布),将度分布的散点图画出来。

#节点的度
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))
 
#度的分布
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()

结果:
节点的度.csv截图:

度的分布.csv截图:

度的分布散点图:

posted @ 2020-05-25 16:14  莱莱Michelle  阅读(617)  评论(1编辑  收藏  举报