本页说明了如何绘制相关网络:基于相关矩阵构建的网络。假设您有10个人,并且知道他们彼此之间的亲密关系。可以在网络中表示这些关系。每个人都是一个节点。如果2个人足够接近(我们设定了一个阈值),则它们由边链接。那将显示人口结构!
import pandas as pd
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
ind1=[5,10,3,4,8,10,12,1,9,4]
ind5=[1,1,13,4,18,5,2,11,3,8]
df = pd.DataFrame({ 'A':ind1, 'B':ind1 + np.random.randint(10, size=(10)) , 'C':ind1 + np.random.randint(10, size=(10)) , 'D':ind1 + np.random.randint(5, size=(10)) , 'E':ind1 + np.random.randint(5, size=(10)), 'F':ind5, 'G':ind5 + np.random.randint(5, size=(10)) , 'H':ind5 + np.random.randint(5, size=(10)), 'I':ind5 + np.random.randint(5, size=(10)), 'J':ind5 + np.random.randint(5, size=(10))})
corr = df.corr()
links = corr.stack().reset_index()
links.columns = ['var1', 'var2','value']
links_filtered=links.loc[ (links['value'] > 0.8) & (links['var1'] != links['var2']) ]
G=nx.from_pandas_edgelist(links_filtered, 'var1', 'var2')
nx.draw(G, with_labels=True, node_color='orange', node_size=500, edge_color='black', linewidths=5, font_size=15)
| A | B | C | D | E | F | G | H | I | J |
---|
0 | 5 | 13 | 6 | 8 | 8 | 1 | 4 | 2 | 1 | 3 |
---|
1 | 10 | 19 | 10 | 14 | 12 | 1 | 3 | 4 | 4 | 5 |
---|
2 | 3 | 9 | 3 | 5 | 3 | 13 | 17 | 13 | 14 | 15 |
---|
3 | 4 | 6 | 5 | 4 | 5 | 4 | 7 | 4 | 7 | 4 |
---|
4 | 8 | 13 | 9 | 12 | 10 | 18 | 19 | 19 | 20 | 19 |
---|
5 | 10 | 13 | 13 | 11 | 11 | 5 | 8 | 9 | 7 | 9 |
---|
6 | 12 | 16 | 14 | 15 | 13 | 2 | 2 | 3 | 6 | 3 |
---|
7 | 1 | 7 | 6 | 3 | 4 | 11 | 14 | 14 | 14 | 11 |
---|
8 | 9 | 11 | 9 | 9 | 9 | 3 | 4 | 5 | 7 | 5 |
---|
9 | 4 | 9 | 4 | 7 | 4 | 8 | 8 | 8 | 10 | 8 |
---|
| A | B | C | D | E | F | G | H | I | J |
---|
A | 1.000000 | 0.816480 | 0.901905 | 0.936634 | 0.949857 | -0.409401 | -0.505922 | -0.327200 | -0.325622 | -0.276172 |
---|
B | 0.816480 | 1.000000 | 0.706978 | 0.928908 | 0.876425 | -0.380840 | -0.440560 | -0.291830 | -0.369119 | -0.214817 |
---|
C | 0.901905 | 0.706978 | 1.000000 | 0.830659 | 0.926892 | -0.343944 | -0.416735 | -0.200915 | -0.245105 | -0.230368 |
---|
D | 0.936634 | 0.928908 | 0.830659 | 1.000000 | 0.939070 | -0.282163 | -0.397256 | -0.212778 | -0.229146 | -0.151093 |
---|
E | 0.949857 | 0.876425 | 0.926892 | 0.939070 | 1.000000 | -0.412766 | -0.488815 | -0.301198 | -0.346611 | -0.278961 |
---|
F | -0.409401 | -0.380840 | -0.343944 | -0.282163 | -0.412766 | 1.000000 | 0.972397 | 0.968543 | 0.975579 | 0.965554 |
---|
G | -0.505922 | -0.440560 | -0.416735 | -0.397256 | -0.488815 | 0.972397 | 1.000000 | 0.952668 | 0.923379 | 0.957782 |
---|
H | -0.327200 | -0.291830 | -0.200915 | -0.212778 | -0.301198 | 0.968543 | 0.952668 | 1.000000 | 0.956089 | 0.973569 |
---|
I | -0.325622 | -0.369119 | -0.245105 | -0.229146 | -0.346611 | 0.975579 | 0.923379 | 0.956089 | 1.000000 | 0.927947 |
---|
J | -0.276172 | -0.214817 | -0.230368 | -0.151093 | -0.278961 | 0.965554 | 0.957782 | 0.973569 | 0.927947 | 1.000000 |
---|
NETWORK CHART(网络图)代码下载网络图 (或图表或图形)显示了一组实体之间的互连。每个实体由一个或多个节点表示。节点之间的连接通过链接(或边)表示。网络的理论与实现是一个广阔的研究领域。整个网络都可以致力于此。例如,网络可以是有向的或无向的,加权的或未加权的。有许多不同的输入格式。为了指导您该领域,我建议按照建议的顺序执行以下示例。请注意关于该工具,我主要依靠NetworkX库(2....
nx.circular_layout()指定网络图节点的布局方式
nx.draw_networkx_nodes()绘制网络图的节点
nx.draw_networkx_edges()绘制网络的边
nx.draw_networkx_labels()为节点添加标签
import networkx as nx
import pandas as pd
import matplotlib.pyplot as plt
import os
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicod
使用networkx生成带有边标签和节点名称的网络图
第一次画这种关系图,本来还想尝试自己画出来的,结果发现除效果图惨不忍睹,还是借用了python的nwtworkx画的网络关系图,也踩了很多坑,最终得到一个看起的结果,亲测可用,效果如下:
代码如下,核心代码其实只有两行。
node_labels = nx.get_node_attributes(G, 'desc') # 获取节点的desc属性
nx.draw_networkx_labels(G, pos, node_labels=node_labels
1.1图论基本概念
一个图G = (V, E)由一些点及点之间的连线(称为边)构成,V、E分别计G的点集合和边集合。在图的概念中,点的空间位置,边的区直长短都无关紧要,重要的是其中有几个点以及那些点之间有变相连。
图1:图示例
Graph分类
Graph:指无向图(undirected Graph),即忽略了两节点间边的方向。
DiGraph:指有向图(directed Graph),即考虑了边的有向性。
MultiGraph:指多重无向图,即两个结点之间的边数多于一条,又允
网络图(或图表)对于可视化实体之间的连接很有用。例如,地铁地图是最常遇到的网络图之一。节点是要可视化的数据中的标签。这些节点之间的关系由线条表示。因此,要可视化的数据必须采用包含节点信息和“从-到”数据的格式。让我们生成虚拟数据来可视化。
我创建了 9 个虚拟节点,给每个节点一个字母。draw_number函数确定一个随机索引。根据这些索引,我们从节点列表中选择字母并将它们添加到from或to列表中。我们总共有 20 个连接。
对于可视化,我们将使用networkx和plotly库。
导入库后,我要做的第一