(1-6)从(1-2)和(1-3)提取出来的文件的读取

本文深入探讨使用Networkx进行网络图的构建与可视化,包括从不同格式文件中读取数据,以及通过numpy和pandas进行高效数据存储、读取与分析。同时,介绍了统计随机网络特性的方法和电影评分数据集的分析流程。

一、Networkx读取文件绘图

在这里插入图片描述
已知一个网络矩阵如下,请输出这个网络的边,并将网络绘制出来
在这里插入图片描述

import networkx as nx
G = nx.Graph()#创建一个空的网络
with open( 'Karate_club.txt', 'r' )as file:
    lines = file. readlines( )
for i in range(len(lines)):
    lines[i] = lines[i].strip('\n').split(' ')
#lines[i].strip('\n')得到了[0 1 1 1...]
#lines[i].strip('\n').split(' ')得到了['0', '1', '1', '1'...,'0','']
    for j in range(len(lines[i])):
        if lines[i][j] == '1':
            G.add_edge(i + 1, j + 1)
nx.draw(G,with_labels=True)
print(list(G.edges))

在这里插入图片描述
在这里插入图片描述
已知一个网络连边如下,请将网络绘制出来
在这里插入图片描述

import networkx as nx
G = nx.Graph()
with open('karate_edges.txt', 'r' )as file:
    for line in file:
        a,b=line.strip('\n').split('\t')#\t 跳格,一个tap键的大小(下面有\t的解释)
        #也可以是a,b=line.strip('\n').split('	')
        G.add_edge(a,b)
nx.draw(G,with_labels=True)
print(list(G.edges))

在这里插入图片描述
在这里插入图片描述
\t是什么

#\t就是一个tap键
print("123")
print("\t123")
print("123\t456\t789")
print("\n123\n456\n789")
print("自然数:\n\t123\n\t456\n\t789")
print("\t\n123\t\n456\t\n789")

在这里插入图片描述

二、numpy的存储与读取

①二维数组的存储与读取
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
②多维数组的存储与读取
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、pandas读取文件

①csv文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import pandas as pd

# read csv file directly from a URL and save the results
data = pd.read_csv('text.csv', index_col=0)

# display the first 5 rows
data.head()

在这里插入图片描述

# display the last 5 rows
data.tail()

在这里插入图片描述

# check the shape of the DataFrame(rows, colums)
data.shape

输出:(200, 4)    
#200行数据,四列特征值

②txt文件如下:
这些数据表示的是每个城市的(x,y)坐标。(中间是用空格分开的)
在这里插入图片描述

import pandas as pd     #引入pandas包
citys=pd.read_table('./1.txt',sep='\t',header=None)     #读入txt文件,分隔符为\t;若不写head=None,则会把第一行当成列名,读取时会没了第一行数据
print(citys)

打印结果:
在这里插入图片描述
可以看到全部数据就只有一列了,因为分割符为制表符,而制表符存在于txt文件每行的末尾。
接着把第一列的名字改成x,并添加一列,名字为y,y这一列的数值全是None:

citys.columns=['x']
citys['y']=None
print(citys)

在这里插入图片描述
最后把 x列中的数据,以空格为分割符,分给y一个数:

for i in range(len(citys)):         #遍历每一行
    coordinate = citys['x'][i].split() #分开第i行,x列的数据。split()默认是以空格等符号来分割,返回一个列表
    citys['x'][i]=coordinate[0]        #分割形成的列表第一个数据给x列
    citys['y'][i]=coordinate[1]        #分割形成的列表第二个数据给y列
print(citys)

可以看到,已经给txt的数据打上了x和y的标志了。
在这里插入图片描述
③pandas实例-----电影评分数据集分析
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import pandas as pd

#读取电影的评分人的数据
unames=['uid','age','gender','occupation','zip']
users=pd.read_table('E:\\快乐的程序猿\\test6\\u_user.txt',sep='|',header=None,names=unames) #sep='|'是分隔符,header=None就是没有行标题,unames是映射关系
print(users[:5])

#读取电影的评分数据
rnames=['uid','mid','rating','timestamp']
ratings=pd.read_table('E:\\快乐的程序猿\\test6\\u_data.txt',sep='\t',header=None,names=rnames) #分隔符是table键
print(ratings[:5])

#读取电影数据
mnames=['mid','title','date1','date2','url',
        'unkown','Action','Adventure','Animation','Children','Comedy','Crime','Documentary','Drama','Fantasty','File-Noir','Horror','Muscial','Mystery','Romance','Sci-Fi','Thriller','War','Weatern']
movies=pd.read_table('E:\\快乐的程序猿\\test6\\u_item.txt',sep='|',header=None,names=mnames)
print(movies[:5])

在这里插入图片描述

四、类似于文件读取的思想

如何统计100幅图片的平均值

①如何统计100幅随即网络的平均度、平均集聚系数、平均最短距离、平均最大联通集团

N=100
pro=[0.2,0.4,0.6,0.8,1.0,1.2,1.4,1.6]

Avg_deg=[]
Avg_cls=[]
Avg_spl=[]
Avg_gcc=[]

for p in pro:
    avg_deg=[]
    avg_cls=[]
    avg_spl=[]
    avg_gcc=[]
    
    for _ in range(100):
        g=nx.erdos_renyi_graph(N,p,directed=False) #根据每一个p与N绘制一个随即网络图
        
        avg_deg.append(np.mean(nx.degree(g).values()))
        avg_cls.append(nx.average_clustering(g))
        avg_gcc.append( max([len(x) for x in nx.connected_components(g)] )
        avg_spl.append(nx.average_shorteest_path_length(g))
        
    Avg_deg.append(np.mean(avg_deg))
    Avg_cls.append(np.mean(avg_cls))
    Avg_spl.append(np.mean(avg_spl))
    Avg_gcc.append(np.mean(avg_gcc))

'''avg_deg里面存放着100个随即网络图的平均度
   avg_cls里面存放着100个随即网络图的平均集聚系数
   avg_gcc里面存放着100个随即网络图的最大连通集团
   avg_spl里面存放着100个随即网络图的平均最短距离
'''


在这里插入图片描述

③如何统计100次实验的平均数据
已知我们有一个函数,suspect_infect_recovery(g, sources, beta, gamma),g是一个网络,sources是一个列表涵盖了这个网络最先得了传染病的那个节点,beta=0.3是感染概率,gamma=1是恢复概率;这个函数可以返回一个state,state里面记录了本次传染病盛行后各个节点得状态是“I”还是“R”还是“S”(I是感染,R是感染后恢复,S是未感染)

g=nx.karate_club_graph() #空手道俱乐部

res=[[] for i in g] #res事实上就是[[], [], [], [], []...]
for _ in range(100): #让g中的每一个节点都循环100次得到较为客观的值
    for i in g:
        state=suspect_infect_recovery(g, [i], 0.3, 1)#让g中的每一个节点都做一次sources(第一个被感染的人)
        s=sum([1 for i in state if state[i] !="S"])#统计共有多少人受到了感染
        res[i].append(s)  #res[i]就是列表中的列表,它当然可以调用列表的方法
#此时的res就是[[24, 16, 5, 24, 24..],[21, 8, 25, 15, 7..]...]
impact=[sum(r)/len(r) for r in res] #让g中的每一个节点都循环100次再做平均得到一个客观的值
#impact就是[18.02, 15.69, 17.07, 14.68...]的样子
Impact_sort=sorted([(i,impact[i]) for i in range(len(impact))],key=lambda x:x[1],reverse=True)
for i in Impact_sort:
    print(i)

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BlackTurn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值