网络数据处理:将无向网络的编号从1开始,并使编号连续
1.假设我有一个无向有权网络,如下所示。v1表示起始节点,v2表示终节点,(v1,v2)表示从节点v1有一条边连接到v2,w为对应边的权重。如0 9 1.1表示从节点0有一条边连接到9,且这条边的权重为1.1。
v1 v2 w
0 9 1.1
0 3 0.1
4 5 1.5
4 8 1.4
5 7 0.1
5 8 0.1
7 8 1.5
6 7 1.4
6 8 1.5
使用matplotlib图形化显示为:
可以看见,节点编号从0开始,而且编号是间断的。
2.接下来,我们处理一下数据,使得节点编号从1开始,而且将节点连续。
注意,第一列是使用pandas时的索引,不是数据v1 v2 w
0 1 2 1.1
1 1 4 0.1
2 5 6 1.5
3 5 3 1.4
4 6 8 0.1
5 6 3 0.1
6 8 3 1.5
7 7 8 1.4
8 7 3 1.5
3.完整代码,注释很清楚。需要使用numpy,pandas,networkx,matplotlib。自己准备无向网络有权网络,调用的函数注意参数的含义,如sep='\t'为读取的数据文件分隔符是\t,有问题先查文档、百度。实在解决不了可以评论大家讨论。
import pandas as pd
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt# 如何减少循环内的运算量是提高程序运行效率应该注意的
# 处理网络,无向有权图。通过编程使节点从1开始编号,且节点编号连续。
# (注意,输入的网络为无向图,即(1,2)既代表(1,2),又代表(2,1),但是边列表里面只能出现(1,2),不能再出现(2,1),出现了你不就多此一举嘛)
# 当你做实验的时候一定要注意这个问题。# 统计网络的拓扑特性
fpaths = {'test': './undirected_weight/Test.txt','USAir': './undirected_weight/USAir.txt','Celegans': './undirected_weight/Celegans.txt','CGScience': './undirected_weight/CGScience.txt','NetScience': './undirected_weight/NetScience.txt',
}
# 获取数据
fname = 'test'
fpath = fpaths[fname]
data = pd.read_csv(filepath_or_buffer=fpath, sep='\t', header=None, names=['v1', 'v2', 'w'])# 获取边列表
edges = data.get(['v1', 'v2']).values# 图形化1
# g1 = nx.Graph()
# g1.add_edges_from(edges)
# nx.draw(g1, with_labels=True, edge_color="red", font_color="black")
# plt.show()# 节点从1开始编号
if np.any(edges == 0):edges = edges + 1# 假如nodes=[1,2,3,7,9],我想把它变成nodes=[1,2,3,4,5],即使得节点编号连续
max_node = np.max(edges)# 获取边对应的权重
weights = data.get(['w']).values# 原网络的节点(可能不连续)
nodes_source = np.sort(np.unique(edges))
len_ns = len(nodes_source)# 从1开始编号时,根据最大的那个节点,生成连续的网络节点列表
nodes_all = np.arange(1, max_node + 1, 1)# 从连续列表中找出除原始节点外不存在的节点。
# 如nodes_source=[ 1 4 5 6 7 8 9 10],nodes_all=[ 1 2 3 4 5 6 7 8 9 10],则找出nodes_notExist=[2 3]
mask = ~(np.isin(nodes_all, nodes_source))
nodes_notExist = nodes_all[mask]# 循环
while max_node != len_ns:# 这里的思想就是,将edges中最大的那个编号替换成nodes_notExist中最小的那个编号。循环之后,节点就能连续。# 开始循环之前,edges=[[ 1 10], [ 1 4], [ 5 6], [ 5 9], [ 6 8], [ 6 9], [ 8 9], [ 7 8], [ 7 9]],max_node=10,nodes_notExist=[2 3]# 开始循环,index就是edges中值为10的布尔索引,找到不存在的节点的最小值,min_nodes_notExist=2,将edges中的10换成2,# edges=[[1 2], [1 4], [5 6], [5 9], [6 8], [6 9], [8 9], [7 8], [7 9]],记录换之后的最大的节点编号,此时为max_node=9。# 2已经被替换了,从nodes_notExist中删除2,现在nodes_notExist剩下3,再次进入while循环。# 重复上面的工作,即,将edges中最大的那个编号替换成nodes_notExist中最小的那个编号index = (max_node == edges)min_nodes_notExist = np.min(nodes_notExist)edges[index] = min_nodes_notExistmax_node = np.max(edges)nodes_notExist = np.delete(nodes_notExist, 0, axis=0)df = pd.DataFrame()
df['v1'] = list(edges[:, 0])
df['v2'] = list(edges[:, 1])
df['w'] = weights
df.to_csv('./undirected_weight_standard/{fname}.txt'.format(fname=fname), encoding='utf-8', header=False, index=False, sep='\t')
print(df)# 图形化2
g2 = nx.Graph()
g2.add_edges_from(edges)
nx.draw(g2, with_labels=True, edge_color="black", font_color="red")
plt.show()
网络数据处理:将无向网络的编号从1开始,并使编号连续相关推荐
- Python网络编程之day01-网络编程基础
Python网络编程之day01-网络编程基础 文章目录 Python网络编程之day01-网络编程基础 一.网络通信概述 二.IP地址 三.ping,ifconfig,ipconfig 四.端口 代 ...
- 网络监控软件百络网警 v6.6b 企业版 bt
Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...
- word课程表设置符号与编号_Word2003文档怎么添加编号
通给文档添加编号可以更加便捷的进行管理,Word2003文档添加编号的功能,有不少用户并不知道怎么使用,这里为大家介绍一下. Word2003文档添加编号 一.启动Word2003文档编辑软件,打开需 ...
- wps编号无法继续_wps怎么自动编号【解决步骤】
我们在使用电脑工作的过程中时常会遇到各种奇奇怪怪的问题,比如最近就有不少用户来问小编关于wps怎么自动编号的问题,于是小编就在网上查了一下wps怎么自动编号的解决方法,其实wps怎么自动编号操作起来很 ...
- 中国线规(GB)编号与美国线规(AWG)编号对比(简洁版)
中国线规(GB)编号与美国线规(AWG)编号对比 序号 CWG (mm^2)(详细版请点击访问) AWG 实际导体截面积 (mm^2) 1 0.05 30 0.05097 2 0.08 28 0.08 ...
- 在html中怎么去掉自动编号,Word怎么取消自动编号 烦人的Word自动编号如何取消?...
Word怎么取消自动编号 烦人的Word自动编号如何取消?,最近到了季度汇报的时候,掌握一手word技能在此刻显得多么重要,为了是你的word看起来更高大上,今天教大家设置Word怎么取消自动编号,今 ...
- word编号技巧:如何将手动编号批量转为自动编号
我们在制作Word文档的时候,总有需要编号的内容,但是,许多同学常会使用手动编号.不仅费劲,而且容易出错.一旦需要删除或者添加内容,就等于所有编号需要重新更改一遍,那酸爽,我相信经历过的人都懂. 案 ...
- html中如何去除编号点,如何去掉WORD自动编号后的小点。
自动编号与后2113面语句有很大5261空格,于是调整文4102字位置(1653选择所需要改版动的部分,点"格式权"-"项目符号和编号"-点你需要的编号类型-& ...
- 算法题:150盏亮着的电灯,各有一个拉线开关控制,编号为1~150 将编号为1~150倍数的灯,依次拉一下 问:拉完后亮着的灯数为几盏? 哪盏灯被拉的最多?
(以前写的东西,现在搬上来,现在变笨了,何解?/(ㄒoㄒ)/~~) 同学在朋友圈分享了一个问题,我试着写了下. 问题: 150盏亮着的电灯,各有一个拉线开关控制,编号为1-150 将编号为1-150倍 ...
最新文章
- android随手记
- python求分段函数值_高中数学知识点整理(2)——函数概念及基本初等函数篇(上)...
- linux内核唤醒过程,Linux内核启动过程分析
- Exchange 2010无法安装问题解决方法
- get,post请求的编码统一
- 暴走大侠显示进入服务器失败,暴走大侠:常见问题详解,再遇见这样的问题也不再迷糊...
- 注册表改win 7更新服务器,Win7 SP1 修改注册表升级的说明事项
- Python(65)_写函数,判断用户传入列表的长度,若大于2,则仅保留前两个长度的内容,并将其返回给调用者...
- 音频总线之I2S总线介绍及相关协议
- android手机开机密码,安卓手机锁屏密码忘了怎么办 锁屏密码解决方法
- 原生android ui设计,在拟物和扁平之间寻找平衡 原生安卓UI设计进化史
- ems与nms_告警处理方法、装置、nms、oss及ems的制作方法
- IP协议(网际协议)
- 特斯拉 开源_开源与癌症作斗争,特斯拉采用Coreboot,Uber和Lyft发行开源机器学习...
- 单片机/树莓派扩展双串口(TTL和RS485)
- excel2007整体调整行间距
- 闲人闲谈PS之三十一——新收入准则中的合同损失计提
- CactiEZ 中文版V10.1安装使用以及139邮箱短信报警设置
- 【计算机网络】思科实验(4):综合实验作业之办公室的跨VLAN通信
- NR 5G 终端TMSI上报
热门文章
- android获取录音读写权限设置,Android编程检测手机录音权限是否打开的方法
- 印度为何“盛产”CEO?
- 用行最简矩阵求矩阵的逆解矩阵方程
- 2019年5月30日:新坑C#
- 用鼠标滚轮滚动控制图片的缩小放大
- python多项式求导_链表 一元多项式求导
- Android Studio中高德地图的黑屏和白屏问题
- AI二次开发C#图形项
- Java求一组数中最大值的方法
- android 8.0.0-r1 源码编译遇到的问题build/core/main.mk:21: recipe for target 'run_soong_ui' failed 解决