一、 背景

今天准备学习网络图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 网络可视化方法相关推荐

  1. 超实用的7种 pytorch 网络可视化方法,进来收藏一波

    引导 前言 1. torchsummary 2. graphviz + torchviz 3. Jupyter Notebook + tensorwatch 4. tensorboardX 5. ne ...

  2. Adapting Grad-CAM for Embedding Networks - 度量学习网络可视化方法(reid、人脸识别)

    Adapting Grad-CAM for Embedding Networks TL;DR 基于 grad-cam 修改得到一种适配embedding网络的可视化方法,可以用于人脸识别.reid等任 ...

  3. Python 几种可视化方法随笔

    Python matplotlib可视化随笔 plt.figure plt.figure来设置窗口尺寸.其中figsize用来设置图形的大小,a为图形的宽, b为图形的高,单位为英寸. plt.fig ...

  4. Python networkx 根据节点坐标来画网络图

    上篇请移步到python 使用networkx绘制带权无向图和带权有向图,以及标注特定路径_networkx 有向图_水w的博客-CSDN博客 python networkx图可视化 基础知识以及解决 ...

  5. python画多层网络_基于Python的多层网络可视化包Multinetx

    之前记录过基于R语言和Octave的多层网络可视化工具,但安装起来比较麻烦,发现Github上有基于Python的版本,提供了supra-adjency和多关系网络可视化,直接看:https://gi ...

  6. python复杂网络点图可视化_数据分析:R与Python怎么选?

    作者介绍 知春里@伟仔 不知名数据科学家. 持续写<数据分析>和<数据产品>的系列文章,欢迎关注. 01 选R还是Python? "球鞋是买阿迪还是买耐克?" ...

  7. python读取数据文件、并把里面的数据变成x的二维坐标_python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法...

    python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法 1. test.txt文件,数据以逗号分割,第一个数据为x坐标,第二个为y坐标,数据如下:1.1,2 2.1,2 3.1 ...

  8. python与excel做数据可视化-用Python进行数据可视化的10种方法

    原标题:用Python进行数据可视化的10种方法 2015-11-19 关于转载授权 大数据文摘作品,欢迎个人转发朋友圈,自媒体.媒体.机构转载务必申请授权,后台留言"机构名称+转载&quo ...

  9. python下载文件到本地-Python下载网络文本数据到本地内存的四种实现方法示例

    本文实例讲述了Python下载网络文本数据到本地内存的四种实现方法.分享给大家供大家参考,具体如下: import urllib.request import requests from io imp ...

  10. Python语言学习之图表可视化:python语言中可视化工具包的简介、安装、使用方法、经典案例之详细攻略

    Python语言学习之图表可视化:python语言中可视化工具包的简介.安装.使用方法.经典案例之详细攻略 目录 python语言中可视化工具包的简介 python语言中可视化工具包的安装 pytho ...

最新文章

  1. Enterprise Manager Cloud Control 安装
  2. git 提交失败 HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too Large
  3. 抽象:程序员必备的能力
  4. SQL Server Profiler (SQL跟踪器)的简单使用
  5. 分割数组的最大值—leetcode410
  6. libevent源码深度剖析五
  7. 数据结构专题(二):2.2单链表与顺序表,求元素个数,取值与查找
  8. With语句是什么?
  9. jquery实现章节目录效果
  10. linux 路由跟踪命令_一文掌握linux系统路由跟踪指令traceroute
  11. BP神经网络python代码详细解答(来自原文)
  12. java腾讯云通信(注册账号)
  13. anime.js的学习小结
  14. 爬取智联招聘(搜索含关键词职位)
  15. Kong API Gateway 管理API详解
  16. 上证指数30年k线图_仔细分析了过去30年的季线图后,我们发现了个秘密……
  17. 推荐系统CTR(CVR)预估模型(多任务学习)之ESMM
  18. 类和对象的定义和关系
  19. Android 10.0 进入recovery模式(等待用户选择recovery模式界面)实现自动恢复出厂设置
  20. 改进YOLOv5系列:6.修改Soft-NMS,Soft-CIoUNMS,Soft-SIoUNMS,Soft-DIoUNMS,Soft-EIoUNMS,Soft-GIoUNMS...

热门文章

  1. 【数据库认证】OCM准备及考试经验总结
  2. 慢就是快的人生哲理_非常精辟的人生哲理句子,句句经典睿智,不管多忙都要看看!...
  3. 有效沟通沟通的9大技巧
  4. JS实现数组和数组对象倒序(reverse方法)
  5. AMD zen3 5600X + B550M 黑苹果 EFI Big Sur 11.5.2
  6. 优酷 Android 包瘦身治理思路全解
  7. 将Linux 标准输出,错误输出重定向到文件
  8. html页面加载蒙版,HTML / CSS - 在图像上创建alpha蒙版
  9. 【学习笔记】seckill-秒杀项目--(8)页面优化
  10. 【SOT】SiamRPN代码笔记