networkx edge 属性_社会网络分析(一) | python的Networkx库基础知识

作为计算社会科学的重要方法,社会网络分析是近年来国内逐渐普及的人文社科新方法。

社会网络又叫复杂网络,社会网络用节点与边表示一组事物之间关系的方式,这种思想来源于数学中的图论。对广大文科生来说,虽然不需要理解图论的全部知识,但需要了解社会网络相关的基本概念,数据猿就以Networkx和Gephi为例,展开对社会网络分析的探索。

希望能通过对python的networkx的学习和使用,逐渐熟悉社会网络分析在人文社科中的应用。今天先从Networkx开始,学习networkx生成图的基本方法。

本文目录如下——

f09c9f5608330cb1b4afe2db2a900e63.png

Networkx,可以用于创建、操控和研究复杂网络的结构、动力和功能的Python第三方库。

networkx功能和优势

Networkx脱胎于图论,是一款针对复杂网络的软件,其功能和优势如下——

  • 可描述简单图、有向图和多图数据结构

  • 多种标准图算法

  • 网络结构和分析方法

  • 生成经典图,随机图和语义网络

  • 任意数据形式可构成节点,任意数据属性可形成边

  • 3种 BSD 附属开源协议

  • 已测试良好的代码覆盖90%

  • 其他python的优势,如快速成型、易于教授和多平台适应

networkx的安装

需要 Python 3.6, 3.7,  3.8版本。

pip安装pip install networkx升级pip install --upgrade networkx卸载pip uninstall networkx

安装networx,同时需要安装过以下软件

  • NumPy 提供矩阵和线性代数的相关数学算法支持

  • SciPy

  • pandas 提供稀疏矩阵表示图和许多数值科学工具

  • Matplotlib 提供灵活的绘图工具

  • PyGraphviz and pydot 提供绘图和布局

  • PyYAML 提供YAML格式的读写

  • gdal 提供shapefile格式的读写

  • lxml 适用于 GraphML XML 格式的读写

networkx简单绘图.Graph()

导入库

import networkx as nximport matplotlib.pyplot as plt

创建简单的图——无向单图

#创建最简单的图G = nx.Graph() # 注意,Graph,而不是graph# 添加点G.add_node(1)# 添加边G.add_edge(2,3)#元组# 绘图nx.draw(G)

11c8b5b654e7027ab702364a7e6bec2c.png

可以看到,3个节点被创建,节点2,3之间有一条边。这就是networkx中最简单的图,无向单图。

networkx有向单图.DiGraph()

Digraph中,除了add_node()方法添加元组类型的边,还可以通过add_nodes_from()添加列表类型的边。在旧版本的networkkx还可以使用add_cycle(),利用列表创建一个闭环的图。number_of_edges()可以计算边的数量和。

G = nx.DiGraph()G.add_node(1)G.add_node(2)G.add_nodes_from([3, 4, 5, 6])#G.add_cycle([1, 2, 3, 4])G.add_edge(1, 3)G.add_edges_from([(3, 5), (3, 6), (6, 7)])print("输出全部节点:{}".format(G.nodes()))print("输出全部边:{}".format(G.edges()))print("输出全部边的数量:{}".format(G.number_of_edges()))nx.draw(G)plt.show()

12529f14d2b14a81a2d3935eba223a2f.png

添加字符串为节点

G.add_node("wenkeshuju")        # adds node "wenkeshuju"G.add_nodes_from("wenkeshuju")  # adds 10 nodesG.add_edge(3, 'w')

872926bec5a8a1bed81c5a1c68992237.png

路径图.path_Graph()

.path_Graph()可以添加节点的任何可迭代容器。如果容器产生2元组(node, node属性dict),则还可以添加节点和节点属性。

路径图.path_Graph()G = nx.path_graph(8)nx.draw(G)plt.show()

fcb0a84229c594127d8cd486068838a0.png

循环图.cycle_graph()

.cycle_graph()可以形成一个完善的首尾相接循环图,是基本的复杂网络结构之一。

G = nx.cycle_graph(24)pos = nx.spring_layout(G, iterations=200)nx.draw(G, pos, node_color=range(24), node_size=800, cmap=plt.cm.Blues)plt.show()

注意,这里的pos参数,采用了spring_layout()布局,iterations是迭代次数,一般来说,迭代次数越多,节点的布局越合理。node_colornode_size调控节点颜色和大小,cmap限定主题颜色。

87a6cca04b1c8f3abf395e4c48d43a79.png

皮特森图.petersen_graph()

皮特森图是一种特殊的图,它是一个有趣的连通简单图,一般画作五边形中包含有五角星的造型。Petersen图的构成多种多样,形态各异,共120多种,然而它不是平面图,因而没有一种使得边与边没有交点。

# 绘制皮特森图G = nx.petersen_graph()plt.subplot(121)nx.draw(G, with_labels=True, font_weight='bold')plt.subplot(122)nx.draw_shell(G, nlist=[range(5, 10), range(5)], with_labels=True, font_weight='bold')plt.show()

9a2425c9050c7f5bb1664bd2cf4252d1.png

可以看到,Petersen图的顶点具有轮换对称性,即Petersen图是旋转对称的,Petersen图的边也随着点一起对称。

除以上经典的图形外,还需要了解的是无向多图和有向多图两种类型,以及非常多的基本图形。如下表所示——

58bc530da1caeeb603abd169b3df15d4.png

小结

了解到networkx生成图的方式和种类只是networkx的第一步,对于文科生来说,我们还需要掌握如何将多种类型的数据转为社会网络和语义网络,并充分理解社会网络分析的各项分析指标,如pagerank接近中性度最短网络直径等。并且,还需充分理解社会网络分析的布局等可视化方法,这样才能从容地解决大量的社会网络分析问题。

往期经典文章:

python办公自动化(一) | chardet库自动读写多编码格式的文件

python制作微信公众号聊天机器人

文科数据员公众号历史记录 | 2020年2月-5月

python清洗知网文献数据,生成共现矩阵

某校新传院的Python作业(一) | 三个女孩的奇幻之旅

参考资料:

networkx官方文档:

https://networkx.github.io/documentation/

文字编辑:数据猿Riggle

首发平台:公众号:文科数据员(HSS_data)

f26bfcbf3ad9c62a4ba57993f5b61a54.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值