使用pyvis对社交网络数据可视化

Posted Python数据之道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用pyvis对社交网络数据可视化相关的知识,希望对你有一定的参考价值。




pyvis是专为关系网络而生,使用javascript渲染,所以效果比networkx更加的炫酷。当然使用javascript渲染的也有很多,比如pyecharts也可以处理关系网络,不过生成的节点不可以单独拖拽。 

pyecharts与pyvis区别

具体可看下面的效果,红色为pyecharts,蓝色为pyvis


使用pyvis对社交网络数据可视化

使用pyvis对社交网络数据可视化

语法与networkx近似,只要熟悉networkx就能很快使用pyvis。

一、导入Network

from pyvis.network import Network

net = Network()

二、添加节点

#添加单个节点
net.add_node(1, label='Node 1')
net.add_node(2, label='Node 2')

三、添加属性

#注意这里是添加多个节点,使用add_nodes
#属性值传入的是列表,要保证列表长度与节点列表长度一致
net.add_nodes([3,4,5],              value=[10,20,30],              title=["I am node 3", "node 4 here", "and im node 5"],              x=[21.4, 54.2, 11.2],              y=[100.2, 23.54, 32.1],              label=["NODE 3", "NODE 4", "NODE 5"],              color=["#00ff1e", "#162347", "#dd4b39"])

#显示,输出为demo1.html
net.show('demo1.html')

使用pyvis对社交网络数据可视化


四、添加边

#一次添加一条边
net.add_edge(1, 2)
net.add_edge(1, 3)
net.add_edge(1, 4)

#有权重边
net.add_edge(2, 1, wright=0.87)

#显示,输出为demo1.html
net.show('demo1.html')


使用pyvis对社交网络数据可视化

五、结合networkx使用

from pyvis.network import Network
import networkx as nx

#生成5个节点,每个点与其他所有点相互联系
nxg = nx.complete_graph(5)
G = Network()
G.from_nx(nxg)

#输出并生成demo2.html
G.show('demo2.html')


使用pyvis对社交网络数据可视化

六、交互调整

nxg = nx.complete_graph(5)
G = Network()G.from_nx(nxg)

#可对打开的html进行调整
G.show_buttons(filter_=['physics'])
G.show('demo3.html')

使用pyvis对社交网络数据可视化


七、可在notebook中渲染

#pyvis可在Jupyter中渲染
from pyvis.network import Network
import networkx as nx G = Network(notebook=True)
nxg = nx.complete_graph(10)
G.from_nx(nxg)G.show('example.html')

使用pyvis对社交网络数据可视化


八、权利游戏人物关系网络图

from pyvis.network import Network
import pandas as pd got_net = Network(notebook=True, height="750px", width="750px", bgcolor="#222222", font_color="white")

# 这是pyvis中的文档,但是却没有这个barnes_hut方法的任何说明
# 这里我理解成一个用来存放边数据的特殊空集合
got_net.barnes_hut()

got_data = pd.read_csv("stormofswords.csv")
sources = got_data['Source']
targets = got_data['Target']
weights = got_data['Weight']

edge_data = zip(sources, targets, weights)

for e in edge_data:    src = e[0]    dst = e[1]    w = e[2]        #往空集合中添加节点和边    got_net.add_node(src, src, title=src)    got_net.add_node(dst, dst, title=dst)    got_net.add_edge(src, dst, value=w)

#对空集合中的数据进行处理,去重
neighbor_map = got_net.get_adj_list()

#让每个节点显示周围的相邻的人物关系
for node in got_net.nodes:    node["title"] += " Neighbors:<br>" + "<br>".join(neighbor_map[node["id"]])    
   node["value"] = len(neighbor_map[node["id"]])

got_net.show("gameofthrones.html")



项目代码下载

链接: https://pan.baidu.com/s/1o3BGGBaNiids4jqGQRJ4hA 密码: hsjh


END

以上是关于使用pyvis对社交网络数据可视化的主要内容,如果未能解决你的问题,请参考以下文章

如何在pyvis python网络图中插入图像?

Python 实现社交网络可视化,看看你的人脉影响力如何

在 Jupyter Lab 单元格中显示 Pyvis HTML 时出错

Python实现社交网络可视化,看看你的人脉影响力如何

pyvis 图形重叠或不显示标签

您如何对社交网络节点进行分组?