ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python 计算网络基本统计量——度,平均度,度分布

2021-05-15 15:34:37  阅读:390  来源: 互联网

标签:dir1 python writer 网络 key net csv 节点 统计


今天也要超级努力啊……

原数据展示:

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中作出的度的分布的散点图

 

 

标签:dir1,python,writer,网络,key,net,csv,节点,统计
来源: https://blog.csdn.net/m0_52498198/article/details/116851535

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有