微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法用相关系数作为连接的基础来绘制网络图?

如何解决有没有办法用相关系数作为连接的基础来绘制网络图?

我希望根据列之间的相关性绘制网络图,例如。 我的数据有 200 行和 100 列,示例如下:

A (Zone1) B(Zone1) C (Zone2) D (Zone2) E (Zone3) F (Zone3) 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

所以我想看到的网络是根据它们的相关值按区域划分的列名:

enter image description here

因此,如果 2 列之间没有良好的相关性 (

解决方法

您可以使用以下工具:

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,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()

Graph with edges if correlation >= 0.3

另见这个问题:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。