Python+networkx 网络可视化方法
一、 背景
今天准备学习网络图networkx的基本操作。选择的用例为一百年以前美国一些社会科学家从报纸上搜集的“知名女士参加社会活动的记录”,表结构简化如下:
通过网络图能否找出社交中的明星呢?这里说的明星是指:参加社交活动较多且认识其他知名女士较多的Lady。
二、 思路
按照以上定义,我们首先探索数据,先找出参加活动较多的女士,结果如下,看起来W01、W03参加活动最多,她们是不是就是我们要找的“明星”呢?
我们还需要找一下,这些人中,谁认识的人较多。这个目标怎么实现呢?老师给我们一个思路:假设参加同一个活动的Lady能相互认识,我们整理一个“女士见面次数表”。这样以来,我们就可以通过活动将这些女士联系起来,并形成一个网络图,形如:
图一
怎么看这样的图,难道在中心位置的就是圈子最大的人吗?为理清这一点,老师提出让我们把见面(同时参加活动)小于4次的信息去掉,再整理出网络图,结果如下:
图二
我们兴奋地发现,网络图上只有两个圈子,这些都是见面次数大于等于4次的人员网络图。
我们再试着降低要求,调小见面次数,让次数变为大于等于3,结果如图三所示:
图三
看上去W3和另一个圈子的W13、W10和W14都有联系,她可以将两个圈子融在一起。同样,W9、W13、W10和W14也起到同样的作用,看来这些就是社交达人了。我们再看看这几个人参加活动的次数:
看上去社交达人W09、W10虽然活动的次数不太多,但却是圈子共融的关键人物之一,大家可以从这个小结论发散思维,考虑一下这两个人有什么样的素质?
三、 Python+networkx脚本实现
import matplotlib.pyplot as plt
import pandas as pd
import networkx as nxdata = pd.read_csv(r'D:\southernladies.csv', encoding='GBK')
#表自身关联,找出和某女士参加相同活动的其他女士
data1 = pd.merge(data, data, left_on='Activity', right_on='Activity')
#去重
data1 = data1[data1['Lady_x'] < data1['Lady_y']]
#汇总有关联的女士参加相同活动的次数,以便了解每一对女士的关联密切程度
data1 = data1[['Activity']].groupby([data1['Lady_x'], data1['Lady_y']]).count()#将社交活动少于4次的去掉
data1 = data1.drop(index=(data1.loc[data1['Activity'] < 4].index))#取出索引的值,生成一个列表,形如[(1,2),(1,3)……]
#这个索引生成的列表,可以做为网络图的“边”,即指明了边的两个端点
edge = data1.index.tolist()
#记录权重
weight = data1['Activity'].tolist()
#得到所有女士节点,以准备网络图的“点”,方法1
#nodes = data.groupby(data['Lady']).count().index.tolist()
'''
#得到所有女士节点,以准备网络图的“点” 方法2
data1 = data1.reset_index()
nodes1 = data1.drop_duplicates('Lady_x')['Lady_x'].tolist()
nodes2 = data1.drop_duplicates('Lady_y')['Lady_y'].tolist()
nodes = nodes1+nodes2
print(nodes)
g = nx.Graph()g.add_edges_from(edge)
g.add_nodes_from(nodes)
'''
#得到所有女士节点,以准备网络图的“点” 方法3:
data1 = data1.reset_index()
g = nx.from_pandas_edgelist(data1, 'Lady_x', 'Lady_y', create_using=nx.Graph())nx.draw(g, weight=weight, edge_color=weight,with_labels=True, node_shape='s', alpha=0.9,node_color='blue', node_size=1000, font_size=14,font_color='yellow')
plt.show()
四、 几处对我个人而言不熟悉的语法整理
1、 drop_duplicates()的用法
data1.drop_duplicates(‘Lady_x’)[‘Lady_x’].tolist()
理解:按()内指定列去重,此后取[ ]内数据转为list
2、 drop的用法
注意格式:drop(index=[行索引]),其中行索引可以用loc[].
3、 groupby多个字段时的用法
注意格式:groupby([f[],f[]]),其中f为dataframe实例名。
4、 重点是networkx画图的方法,先生成一个graph,往graph中添加节点和边后再draw:
g = nx.Graph()
g.add_edges_from(edge)
g.add_nodes_from(nodes)
nx.draw(g)
这个方法不同于pyecharts中的graph的使用方法,如:
graph.add('', nodes, links)
pyecharts中的graph是直接往graph中add节点和边即可看到图形,没有最后一个draw的动作。
【语法为自己总结,以便于记忆,非老师所讲,有误之处可以帮助指正,谢谢!】
Python+networkx 网络可视化方法相关推荐
- 超实用的7种 pytorch 网络可视化方法,进来收藏一波
引导 前言 1. torchsummary 2. graphviz + torchviz 3. Jupyter Notebook + tensorwatch 4. tensorboardX 5. ne ...
- Adapting Grad-CAM for Embedding Networks - 度量学习网络可视化方法(reid、人脸识别)
Adapting Grad-CAM for Embedding Networks TL;DR 基于 grad-cam 修改得到一种适配embedding网络的可视化方法,可以用于人脸识别.reid等任 ...
- Python 几种可视化方法随笔
Python matplotlib可视化随笔 plt.figure plt.figure来设置窗口尺寸.其中figsize用来设置图形的大小,a为图形的宽, b为图形的高,单位为英寸. plt.fig ...
- Python networkx 根据节点坐标来画网络图
上篇请移步到python 使用networkx绘制带权无向图和带权有向图,以及标注特定路径_networkx 有向图_水w的博客-CSDN博客 python networkx图可视化 基础知识以及解决 ...
- python画多层网络_基于Python的多层网络可视化包Multinetx
之前记录过基于R语言和Octave的多层网络可视化工具,但安装起来比较麻烦,发现Github上有基于Python的版本,提供了supra-adjency和多关系网络可视化,直接看:https://gi ...
- python复杂网络点图可视化_数据分析:R与Python怎么选?
作者介绍 知春里@伟仔 不知名数据科学家. 持续写<数据分析>和<数据产品>的系列文章,欢迎关注. 01 选R还是Python? "球鞋是买阿迪还是买耐克?" ...
- python读取数据文件、并把里面的数据变成x的二维坐标_python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法...
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法 1. test.txt文件,数据以逗号分割,第一个数据为x坐标,第二个为y坐标,数据如下:1.1,2 2.1,2 3.1 ...
- python与excel做数据可视化-用Python进行数据可视化的10种方法
原标题:用Python进行数据可视化的10种方法 2015-11-19 关于转载授权 大数据文摘作品,欢迎个人转发朋友圈,自媒体.媒体.机构转载务必申请授权,后台留言"机构名称+转载&quo ...
- python下载文件到本地-Python下载网络文本数据到本地内存的四种实现方法示例
本文实例讲述了Python下载网络文本数据到本地内存的四种实现方法.分享给大家供大家参考,具体如下: import urllib.request import requests from io imp ...
- Python语言学习之图表可视化:python语言中可视化工具包的简介、安装、使用方法、经典案例之详细攻略
Python语言学习之图表可视化:python语言中可视化工具包的简介.安装.使用方法.经典案例之详细攻略 目录 python语言中可视化工具包的简介 python语言中可视化工具包的安装 pytho ...
最新文章
- Enterprise Manager Cloud Control 安装
- git 提交失败 HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too Large
- 抽象:程序员必备的能力
- SQL Server Profiler (SQL跟踪器)的简单使用
- 分割数组的最大值—leetcode410
- libevent源码深度剖析五
- 数据结构专题(二):2.2单链表与顺序表,求元素个数,取值与查找
- With语句是什么?
- jquery实现章节目录效果
- linux 路由跟踪命令_一文掌握linux系统路由跟踪指令traceroute
- BP神经网络python代码详细解答(来自原文)
- java腾讯云通信(注册账号)
- anime.js的学习小结
- 爬取智联招聘(搜索含关键词职位)
- Kong API Gateway 管理API详解
- 上证指数30年k线图_仔细分析了过去30年的季线图后,我们发现了个秘密……
- 推荐系统CTR(CVR)预估模型(多任务学习)之ESMM
- 类和对象的定义和关系
- Android 10.0 进入recovery模式(等待用户选择recovery模式界面)实现自动恢复出厂设置
- 改进YOLOv5系列:6.修改Soft-NMS,Soft-CIoUNMS,Soft-SIoUNMS,Soft-DIoUNMS,Soft-EIoUNMS,Soft-GIoUNMS...
热门文章
- 【数据库认证】OCM准备及考试经验总结
- 慢就是快的人生哲理_非常精辟的人生哲理句子,句句经典睿智,不管多忙都要看看!...
- 有效沟通沟通的9大技巧
- JS实现数组和数组对象倒序(reverse方法)
- AMD zen3 5600X + B550M 黑苹果 EFI Big Sur 11.5.2
- 优酷 Android 包瘦身治理思路全解
- 将Linux 标准输出,错误输出重定向到文件
- html页面加载蒙版,HTML / CSS - 在图像上创建alpha蒙版
- 【学习笔记】seckill-秒杀项目--(8)页面优化
- 【SOT】SiamRPN代码笔记