有没有一种方法可以使用相关系数作为连接的基础来绘制网络图?
Is there a way to draw the network diagram using correlation coefficient as the basis of connections?
我想根据列之间的相关性绘制网络图,例如。
我的数据有 200 行和 100 列,示例如下:
A(区域 1)
B(1区)
C(2区)
D (Zone2)
E(3区)
F(3区)
G(最终版)
2
23
21
4
4
34
33
4
-2
7
3
10
4
12
23
21
4
4
34
33
12
10
4
12
0
4
-2
7
所以我想看到的网络是根据它们的相关值的区域明智的列名称:
因此,如果两列之间没有良好的相关性 (<=0.3),则不应使用相关性将它们连接起来。
在 python?
中是否有算法或方法可以做到这一点
您可以使用以下工具:
import pandas
import itertools
import networkx
import matplotlib.pyplot as plt
data = pandas.read_csv('data.csv')
vertices = data.columns.values.tolist()
edges = [((u,v),data[u].corr(data[v])) for u,v in itertools.combinations(vertices, 2)]
edges = [(u,v,{'weight': c}) for (u,v),c in edges if c >= 0.3]
G = networkx.Graph()
G.add_edges_from(edges)
networkx.draw(G, with_labels=True, font_weight='bold')
plt.show()
另见这个问题:
我想根据列之间的相关性绘制网络图,例如。 我的数据有 200 行和 100 列,示例如下:
A(区域 1) | B(1区) | C(2区) | D (Zone2) | E(3区) | F(3区) | G(最终版) |
---|---|---|---|---|---|---|
2 | 23 | 21 | 4 | 4 | 34 | 33 |
4 | -2 | 7 | 3 | 10 | 4 | 12 |
23 | 21 | 4 | 4 | 34 | 33 | 12 |
10 | 4 | 12 | 0 | 4 | -2 | 7 |
所以我想看到的网络是根据它们的相关值的区域明智的列名称:
因此,如果两列之间没有良好的相关性 (<=0.3),则不应使用相关性将它们连接起来。 在 python?
中是否有算法或方法可以做到这一点您可以使用以下工具:
import pandas
import itertools
import networkx
import matplotlib.pyplot as plt
data = pandas.read_csv('data.csv')
vertices = data.columns.values.tolist()
edges = [((u,v),data[u].corr(data[v])) for u,v in itertools.combinations(vertices, 2)]
edges = [(u,v,{'weight': c}) for (u,v),c in edges if c >= 0.3]
G = networkx.Graph()
G.add_edges_from(edges)
networkx.draw(G, with_labels=True, font_weight='bold')
plt.show()
另见这个问题: