【Python】pyvis实现excel数据读取&构图&网络可视化

结果图:

在这里插入图片描述
局部放大:
在这里插入图片描述

数据格式:

node:人员
在这里插入图片描述
边关系:couple,parent,friend
在这里插入图片描述

注意事项:

pyvis=0.3.1版本
文件格式.xls (非.xlsx)
pyvis参考文档:https://pyvis.readthedocs.io/en/latest/tutorial.html

代码:

from pyvis.network import Network # pip install pyvis==0.3.1

import xlrd


def load_graph(path):
    g = Network(directed=False)  # 实例化网络图
    # 读取.xls文件(不能是.xlsx文件)
    xlsx = xlrd.open_workbook(path)

    #-------------------------------------------节点部分------------------------------
    # 获取节点
    tab_peo = xlsx.sheet_by_name("People")  # 读取People sheet
    nodesNum = tab_peo.nrows  # 获取该sheet中的有效行数(总人数+1)
    nodes = []
    for i in range (1, nodesNum): # 添加节点,按索引
        nodes.append(i)
    # 设置节点颜色,以某个颜色开始,按照索引顺序,渐变
    color = ['#00ffff']  # 为第一个结点赋予特殊颜色
    for x in range(len(nodes) - 1):
        current_of_color = int(x / len(nodes) * 255 * 2)
        if current_of_color > 255:
            color.append('#%02x%02x%02x' % (255, current_of_color - 255, current_of_color - 255))
        else:
            color.append('#%02x%02x%02x' % (current_of_color, 0, 0))
    # 添加节点(参数:节点列表,标签列表,颜色列表)
    g.add_nodes(nodes,
                label=['G'] * len(nodes),
                color=color)

    # -------------------------------------------边部分------------------------------
    edges = []

    # 添加couple关系
    tab_cp = xlsx.sheet_by_name("couple")  # 根据工作表名字读取excel中的某个表
    rowsNum = tab_cp.nrows  # 获取该sheet中的有效行数
    for i in range (rowsNum): # 遍历行,添加每一行所有单元格的数据内容(边关系)
        edges.append(tab_cp.row_values(i, start_colx=0, end_colx=None))  # 返回由该行中所有单元格的数据组成的列表

    # 添加parent关系
    tab_par = xlsx.sheet_by_name("parent")  # 根据工作表名字读取excel中的某个表
    rowsNum = tab_par.nrows  # 获取该sheet中的有效行数
    for i in range(rowsNum):
        edges.append(tab_par.row_values(i, start_colx=0, end_colx=None))  # 返回由该行中所有单元格的数据组成的列表


    # 添加friend关系
    tab_fri = xlsx.sheet_by_name("friend")  # 根据工作表名字读取excel中的某个表
    rowsNum = tab_fri.nrows  # 获取该sheet中的有效行数
    for i in range(int(rowsNum*0.6)):
        edges.append(tab_fri.row_values(i, start_colx=0, end_colx=None))  # 返回由该行中所有单元格的数据组成的列表

    g.add_edges(edges) # 添加所有边关系(参数:边列表)该函数参数仅为边列表,无颜色等设置项(颜色随节点)

    # -------------------------------------------图展示------------------------------
    return g # 返回图




if __name__ == '__main__':
    crime = '涉恐' # 修改犯罪类型即可
    path = 'C:/Users/DELL/Desktop/构图数据/demo/' + crime + '.xls' # 需要另存为.xls文件,非.xlsx文件
    g = load_graph(path)
    g.show_buttons(filter_=['nodes', 'edges', 'physics']) # 在图展示的html中显示调参按钮
    g.show(crime + 'graph.html', notebook=False) # 图以html形式展示 pyvis=0.3.1(notebook=False)



修改一下,之前以为添加边不能设置颜色。
下面是指定颜色版本代码:

from pyvis.network import Network # pip install pyvis==0.3.1

import xlrd


def load_graph(path):
    g = Network(directed=False)  # 实例化网络图
    # 读取.xls文件(不能是.xlsx文件)
    xlsx = xlrd.open_workbook(path)

    #-------------------------------------------节点部分------------------------------
    # 获取节点
    tab_peo = xlsx.sheet_by_name("People")  # 读取People sheet
    nodesNum = tab_peo.nrows  # 获取该sheet中的有效行数(总人数+1)
    nodes = []
    for i in range (1, nodesNum): # 添加节点,按索引
        nodes.append(i)
    # 设置节点颜色,以某个颜色开始,按照索引顺序,渐变
    color = ['#00ffff']  # 为第一个结点赋予特殊颜色
    for x in range(len(nodes) - 1):
        current_of_color = int(x / len(nodes) * 255 * 2)
        if current_of_color > 255:
            color.append('#%02x%02x%02x' % (255, current_of_color - 255, current_of_color - 255))
        else:
            color.append('#%02x%02x%02x' % (current_of_color, 0, 0))
    # 添加节点(参数:节点列表,标签列表,颜色列表)
    g.add_nodes(nodes,
                label=['G'] * len(nodes),
                color=color)

    # -------------------------------------------边部分------------------------------

    # 添加couple关系
    edges = []
    tab_cp = xlsx.sheet_by_name("couple")  # 根据工作表名字读取excel中的某个表
    rowsNum = tab_cp.nrows  # 获取该sheet中的有效行数
    for i in range (rowsNum): # 遍历行,添加每一行所有单元格的数据内容(边关系)
        edges.append(tab_cp.row_values(i, start_colx=0, end_colx=None))  # 返回由该行中所有单元格的数据组成的列表
    g.inherit_edge_colors(False)
    for edge in edges:
        g.add_edge(edge[0], edge[1], color='green', label="couple", width = 8)

    # 添加parent关系
    edges = []
    tab_par = xlsx.sheet_by_name("parent")  # 根据工作表名字读取excel中的某个表
    rowsNum = tab_par.nrows  # 获取该sheet中的有效行数
    for i in range(rowsNum):
        edges.append(tab_par.row_values(i, start_colx=0, end_colx=None))  # 返回由该行中所有单元格的数据组成的列表
    g.inherit_edge_colors(False)
    for edge in edges:
        g.add_edge(edge[0], edge[1], color='blue', label="parent", width = 6)


    # 添加friend关系
    edges = []
    tab_fri = xlsx.sheet_by_name("friend")  # 根据工作表名字读取excel中的某个表
    rowsNum = tab_fri.nrows  # 获取该sheet中的有效行数
    for i in range(int(rowsNum*0.6)):
        edges.append(tab_fri.row_values(i, start_colx=0, end_colx=None))  # 返回由该行中所有单元格的数据组成的列表
    g.inherit_edge_colors(False)
    for edge in edges:
        g.add_edge(edge[0], edge[1], color='orange', label="friend", width = 6)


    # -------------------------------------------图展示------------------------------
    return g # 返回图




if __name__ == '__main__':
    crime = '涉恐' # 修改犯罪类型即可
    path = 'C:/Users/DELL/Desktop/构图数据/demo/' + crime + '.xls' # 需要另存为.xls文件,非.xlsx文件
    g = load_graph(path)
    g.show_buttons(filter_=['nodes', 'edges', 'physics']) # 在图展示的html中显示调参按钮
    g.show(crime + 'graph.html', notebook=False) # 图以html形式展示 pyvis=0.3.1(notebook=False)



结果图:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炖鹅小铁锅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值