文章目录

  • 专栏导读
  • 一、关系网图介绍
    • 1. 关系网图是什么?
    • 2. 关系网图的应用场景
  • 二、关系网图类配置选项
    • 1. 导包
    • 2. add函数
    • 3. 关系网络图的节点
    • 4. 关系网络图的边
    • 5. 节点分类的类目
  • 三、关系网图实战
    • 1. 普通关系网图
    • 2. 复杂关系网图
    • 3. 带边信息的关系网络图
    • 4. 微博转发关系图
    • 5. NPM Dependencies关系图
    • 6. 圆形布局关系网图
  • 书籍推荐(包邮送书)

专栏导读

本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html

  • 优点订阅限时9.9付费专栏进入千人全栈VIP答疑群,作者优先解答机会(代码指导、远程服务),群里大佬众多可以抱团取暖(大厂内推机会)
  • 专栏福利简历指导、招聘内推、每周送实体书、80G全栈学习视频、300本IT电子书:Python、Java、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等

一、关系网图介绍

1. 关系网图是什么?

关系网图(relationship network diagram)是一种用于可视化和分析关系、连接和交互的图形表示方法。它可以用来显示和理解各种事物之间的关联、依赖和影响关系。

关系网图通常由节点(node)和边(edge)组成。节点代表各种事物,可以是人、组织、概念、事件等,而边则表示节点之间的关系或连接。边可以是有向的或无向的,有向边表示关系的方向,无向边表示关系的对称性。

关系网图可以用于各种领域的分析和研究,例如社交网络分析、组织结构分析、知识图谱构建等。通过关系网图,我们可以直观地看到各个节点之间的关系密度、集群结构、中心节点等特征,从而帮助我们理解和发现隐藏在数据中的模式和规律。

2. 关系网图的应用场景

关系网图在许多领域中都有广泛的应用。以下是一些常见的应用场景:

  1. 社交网络分析:关系网图可用于分析社交媒体平台上的社交网络,帮助理解用户之间的连接和交互模式,发现社区结构、影响力节点和信息传播路径等。

  2. 组织结构分析:关系网图可用于分析组织内部的人员关系、部门之间的协作关系,帮助理解组织结构、权力分配和信息流动,从而优化组织运作和决策流程。

  3. 知识图谱构建:关系网图可用于构建知识图谱,将各种实体(人、地点、概念等)及其之间的关系表示为图结构,帮助组织和管理知识,支持智能搜索、推荐和推理等应用。

  4. 交通网络分析:关系网图可用于分析交通网络中的道路、交叉口和交通流量之间的关系,帮助优化交通规划、交通流量管理和交通安全措施。

  5. 金融风险管理:关系网图可用于分析金融市场中各个金融机构之间的关联关系,帮助评估系统性风险和传染性风险,以及进行风险监测和应对策略的制定。

  6. 生物网络分析:关系网图可用于分析生物网络中的蛋白质、基因和代谢物之间的相互作用关系,帮助理解生物系统的结构和功能,以及研究疾病机制和药物靶点。

  7. 网络安全分析:关系网图可用于分析网络中的攻击者、受害者和攻击路径之间的关系,帮助发现潜在的安全漏洞和威胁,以及制定网络安全防御策略。

这只是关系网图的一些应用场景,实际上它在许多其他领域中也有广泛的应用,如供应链管理、市场营销、医疗健康等。关系网图的优势在于它能够将复杂的关系和连接可视化,帮助人们更好地理解和分析复杂系统和数据。

二、关系网图类配置选项

1. 导包

from pyecharts import options as optsfrom pyecharts.charts import Graph

2. add函数

add方法用于向关系网图中添加节点和连接。参数详细说明在注释中已经给出:

def add(self,series_name: str,# 系列名称nodes: types.Sequence[types.GraphNode],# 节点列表links: types.Sequence[types.GraphLink],# 连接列表categories: types.Union[types.Sequence[types.GraphCategory], None] = None,# 类别列表(可选)*,is_focusnode: bool = True,# 是否聚焦节点is_roam: bool = True,# 是否开启漫游is_draggable: bool = False,# 是否可拖拽is_rotate_label: bool = False,# 是否旋转标签layout: str = "force",# 布局方式,默认为力引导布局symbol: types.Optional[str] = None,# 节点图标(可选)symbol_size: types.Numeric = 10,# 节点图标大小edge_length: types.Numeric = 30,# 连接线长度gravity: types.Numeric = 0.2,# 节点间引力大小friction: types.Numeric = 0.6,# 节点间摩擦力大小is_layout_animation: bool = True,# 是否开启布局动画repulsion: types.Numeric = 50,# 节点间斥力大小edge_label: types.Label = None,# 连接线标签edge_symbol: types.Union[types.Sequence[str], str] = None,# 连接线图标edge_symbol_size: types.Numeric = 10,# 连接线图标大小label_opts: types.Label = opts.LabelOpts(),# 标签选项linestyle_opts: types.LineStyle = opts.LineStyleOpts(),# 连接线样式选项tooltip_opts: types.Tooltip = None,# 提示框选项itemstyle_opts: types.ItemStyle = None,# 图元样式选项)

3. 关系网络图的节点

pyecharts.options.GraphNode 是用于设置关系网图中节点的参数选项的类,下面是对 GraphNode 类的参数进行说明:

class GraphNode(BasicOpts):def __init__(self,name: Optional[str] = None,# 节点名称,默认为空x: Optional[Numeric] = None,# 节点的 x 坐标,默认为空y: Optional[Numeric] = None,# 节点的 y 坐标,默认为空is_fixed: bool = False,# 节点是否固定位置,默认为 Falsevalue: Union[str, Sequence, None] = None,# 节点的值,默认为空category: Optional[int] = None,# 节点的类别,默认为空symbol: Optional[str] = None,# 节点标记的图形类型,默认为空symbol_size: Union[Numeric, Sequence, None] = None,# 节点标记的大小,默认为空symbol_rotate: Optional[int] = None,# 节点标记的旋转角度,默认为空itemstyle_opts: Union[ItemStyleOpts, dict, None] = None,# 节点的样式选项,默认为空label_opts: Union[LabelOpts, dict, None] = None,# 节点标签的选项,默认为空is_disabled_emphasis: Optional[bool] = None,# 是否禁用节点的高亮样式,默认为空emphasis_itemstyle_opts: Union[ItemStyleOpts, dict, None] = None,# 高亮样式选项,默认为空emphasis_label_opts: Union[LabelOpts, dict, None] = None,# 高亮标签选项,默认为空blur_itemstyle_opts: Union[ItemStyleOpts, dict, None] = None,# 模糊样式选项,默认为空blur_label_opts: Union[LabelOpts, dict, None] = None,# 模糊标签选项,默认为空is_disabled_select: Optional[bool] = None,# 是否禁用节点的选中样式,默认为空select_itemstyle_opts: Union[ItemStyleOpts, dict, None] = None,# 选中样式选项,默认为空select_label_opts: Union[LabelOpts, dict, None] = None,# 选中标签选项,默认为空tooltip_opts: Union[TooltipOpts, dict, None] = None,# 提示框选项,默认为空)

4. 关系网络图的边

pyecharts.options.GraphLink 是用于设置关系网图中连接线的参数选项的类,下面是对 GraphLink 类的参数进行说明:

class GraphLink(BasicOpts):def __init__(self,source: Union[str, int, None] = None,# 连接的源节点,默认为空target: Union[str, int, None] = None,# 连接的目标节点,默认为空value: Optional[Numeric] = None,# 连接的值,默认为空symbol: Union[str, Sequence, None] = None,# 连接线的图形类型,默认为空symbol_size: Union[Numeric, Sequence, None] = None,# 连接线的大小,默认为空linestyle_opts: Union[LineStyleOpts, dict, None] = None,# 连接线的样式选项,默认为空label_opts: Union[LabelOpts, dict, None] = None,# 连接线的标签选项,默认为空is_disabled_emphasis: Optional[bool] = None,# 是否禁用连接线的高亮样式,默认为空emphasis_linestyle_opts: Union[LineStyleOpts, dict, None] = None,# 高亮样式选项,默认为空emphasis_label_opts: Union[LabelOpts, dict, None] = None,# 高亮标签选项,默认为空blur_linestyle_opts: Union[LineStyleOpts, dict, None] = None,# 模糊样式选项,默认为空blur_label_opts: Union[LabelOpts, dict, None] = None,# 模糊标签选项,默认为空is_disabled_select: Optional[bool] = None,# 是否禁用连接线的选中样式,默认为空select_linestyle_opts: Union[LineStyleOpts, dict, None] = None,# 选中样式选项,默认为空select_label_opts: Union[LabelOpts, dict, None] = None,# 选中标签选项,默认为空is_ignore_force_layout: bool = False# 是否忽略力引导布局,默认为 False)

5. 节点分类的类目

pyecharts.options.GraphCategory用于设置节点分类的类目,通过传入不同的参数值,可以定制节点分类的名称、符号、符号大小和标签样式。:

class GraphCategory(BasicOpts):def __init__(self,name: Optional[str] = None,# 节点分类的名称属性,可选参数,默认为 Nonesymbol: Optional[str] = None,# 节点分类的符号属性,可选参数,默认为 None。符号属性可以用于区分不同的节点分类。symbol_size: Union[Numeric, Sequence, None] = None,# 节点分类的符号大小属性,可选参数,默认为 None。符号大小属性可以设置节点分类的大小。label_opts: Union[LabelOpts, dict, None] = None,# 节点分类的标签选项属性,可选参数,默认为 None。标签选项属性用于设置节点分类的标签样式。):

三、关系网图实战

1. 普通关系网图

Pyecharts是一个基于Echarts的Python可视化库,可以用来绘制各种图表,包括关系网络图。下面是使用Pyecharts链式写法绘制普通的关系网络图的示例代码:

from pyecharts import options as optsfrom pyecharts.charts import Graph# 构建节点数据nodes = [{"name": "A"},{"name": "B"},{"name": "C"},{"name": "D"},{"name": "E"},]# 构建边数据links = [{"source": "A", "target": "B"},{"source": "B", "target": "C"},{"source": "C", "target": "D"},{"source": "D", "target": "E"},{"source": "E", "target": "A"},]# 创建关系网络图对象graph = (Graph().add("", nodes, links, repulsion=8000).set_global_opts(title_opts=opts.TitleOpts(title="关系网络图")))# 渲染图表graph.render("graph.html")# 在Jupyter Notebook中显示graph.render_notebook()

运行以上代码,将生成一个名为graph.html的关系网络图文件。可以在浏览器中打开该文件,查看绘制的关系网络图。

2. 复杂关系网图

以下代码中,我们使用了链式写法创建了一个关系网络图对象,并设置了节点数据和边数据。然后,我们设置了全局选项,包括图表标题。最后,我们使用render方法将图表渲染成一个HTML文件,并使用render_notebook方法在Jupyter Notebook中显示图表:

from pyecharts import options as optsfrom pyecharts.charts import Graph# 构建节点数据nodes = [{"name": "结点1", "symbolSize": 10},{"name": "结点2", "symbolSize": 20},{"name": "结点3", "symbolSize": 30},{"name": "结点4", "symbolSize": 40},{"name": "结点5", "symbolSize": 50},{"name": "结点6", "symbolSize": 40},{"name": "结点7", "symbolSize": 30},{"name": "结点8", "symbolSize": 20},]# 构建边数据links = []for i in nodes:for j in nodes:links.append({"source": i.get("name"), "target": j.get("name")})# 创建关系网络图对象graph = (Graph().add("", nodes, links, repulsion=8000).set_global_opts(title_opts=opts.TitleOpts(title="关系网图")))# 生成html文件graph.render("关系网图.html")# 在Jupyter Notebook中显示graph.render_notebook()

运行结果:

3. 带边信息的关系网络图

from pyecharts import options as optsfrom pyecharts.charts import Graph# 构建节点数据nodes_data = [opts.GraphNode(name="结点1", symbol_size=10),opts.GraphNode(name="结点2", symbol_size=20),opts.GraphNode(name="结点3", symbol_size=30),opts.GraphNode(name="结点4", symbol_size=40),opts.GraphNode(name="结点5", symbol_size=50),opts.GraphNode(name="结点6", symbol_size=60),]# 构建边数据links_data = [opts.GraphLink(source="结点1", target="结点2", value=2),opts.GraphLink(source="结点2", target="结点3", value=3),opts.GraphLink(source="结点3", target="结点4", value=4),opts.GraphLink(source="结点4", target="结点5", value=5),opts.GraphLink(source="结点5", target="结点6", value=6),opts.GraphLink(source="结点6", target="结点1", value=7),]# 创建一个Graph实例graph = (Graph().add("",nodes_data,# 节点数据links_data, # 边数据repulsion=4000, # 节点之间的斥力大小edge_label=opts.LabelOpts(is_show=True, # 显示边的标签position="middle", # 标签位置为中间formatter="{b} 的数据 {c}" # 标签内容的格式化字符串),# 修改节点的颜色itemstyle_opts=opts.ItemStyleOpts(color="#FF0000")).set_global_opts(title_opts=opts.TitleOpts(title="关系网图")))# 生成html文件graph.render("关系网图.html")# 在Jupyter Notebook中显示graph.render_notebook()

运行结果:

4. 微博转发关系图

下载数据集:https://pan.baidu.com/s/1KqfmId3_jAe63lhU6HxnKw?pwd=nqor

提取码:nqor

微博转发关系图是一种图形化展示微博转发关系的工具,用于展示微博在社交媒体平台上的传播路径和关系。在一个微博转发关系图中,每个微博都表示为一个节点,节点之间的连接表示微博之间的转发关系:

import jsonfrom pyecharts import options as optsfrom pyecharts.charts import Graph# 从json文件中读取数据with open("weibo.json", "r", encoding="utf-8") as f:j = json.load(f)nodes, links, categories, cont, mid, userl = j# 创建Graph实例graph = (Graph()# 添加数据.add("",# 图例名称为空nodes,# 节点数据links,# 边数据categories,# 节点分类信息repulsion=50,# 节点之间的斥力大小linestyle_opts=opts.LineStyleOpts(curve=0.2),# 边的曲度label_opts=opts.LabelOpts(is_show=False),# 不显示节点标签)# 设置全局配置.set_global_opts(legend_opts=opts.LegendOpts(is_show=False),# 不显示图例title_opts=opts.TitleOpts(title="Graph-微博转发关系图"),# 设置标题))# 生成html文件graph.render("关系网图.html")# 在Jupyter Notebook中显示graph.render_notebook()

运行结果:

5. NPM Dependencies关系图

NPM(Node Package Manager)是Node.js的包管理器,用于管理和安装第三方模块。在一个Node.js项目中,通常会有多个NPM依赖,这些依赖之间存在着不同的关系。

NPM依赖关系图是一个图形化展示NPM依赖关系的工具,可以帮助开发者更好地理解和管理项目的依赖关系。它可以将项目中的NPM依赖以图形的形式展示出来,并显示它们之间的关系。

在NPM依赖关系图中,每个NPM包都表示为一个节点,节点之间的连接表示依赖关系。如果一个包依赖于另一个包,那么这两个包之间就会有一条连接。连接的箭头指向被依赖的包,表示依赖的方向。

先安装第三方模块:

pip install aiohttp

完整源码:

import asynciofrom aiohttp import TCPConnector, ClientSessionimport pyecharts.options as optsfrom pyecharts.charts import Graph# 异步函数,用于获取JSON数据async def get_json_data(url: str) -> dict:async with ClientSession(connector=TCPConnector(ssl=False)) as session:async with session.get(url=url) as response:return await response.json()# 获取数据data = asyncio.run(get_json_data(url="https://echarts.apache.org/examples/data/asset/data/npmdepgraph.min10.json"))# 处理节点数据nodes = [{"x": node["x"],"y": node["y"],"id": node["id"],"name": node["label"],"symbolSize": node["size"],"itemStyle": {"normal": {"color": node["color"]}},}for node in data["nodes"]]# 处理边数据edges = [{"source": edge["sourceID"], "target": edge["targetID"]}for edge in data["edges"]]# 创建Graph实例graph = (Graph().add(series_name="",# 系列名称为空nodes=nodes,# 节点数据links=edges,# 边数据layout="none",# 不采用力引导布局is_roam=True,# 可以拖拽和缩放is_focusnode=True,# 点击节点时高亮相关节点和边label_opts=opts.LabelOpts(is_show=False),# 不显示节点标签linestyle_opts=opts.LineStyleOpts(width=0.5, curve=0.3, opacity=0.7),# 边的样式).set_global_opts(title_opts=opts.TitleOpts(title="NPM Dependencies"))# 设置标题)# 生成html文件graph.render("关系网图.html")# 在Jupyter Notebook中显示graph.render_notebook()

运行结果:

6. 圆形布局关系网图

数据集链接:https://pan.baidu.com/s/1FB1OY4TXWdSbusClD9fh3Q?pwd=8bty
提取码:8bty

图表采用圆形布局,每个节点代表一个角色,节点之间的边表示角色之间的关系。图表的节点根据不同的分类进行着色,使得不同类型的角色易于区分。边的样式使用曲线连接,并根据边的起始节点进行着色,以增强可视化效果。标签显示在节点的右侧,方便查看每个角色的名称:

# 首先导入所需的库import jsonfrom pyecharts import options as optsfrom pyecharts.charts import Graph# 读取JSON文件with open("les-miserables.json", "r", encoding="utf-8") as f:j = json.load(f)nodes = j["nodes"]links = j["links"]categories = j["categories"]# 创建Graph对象,并设置图表的初始化选项,包括宽度和高度graph = (Graph(init_opts=opts.InitOpts(width="1000px", height="600px"))# 添加图表的节点、边和分类信息.add("",# 图例名称为空nodes=nodes,# 添加节点信息links=links,# 添加边信息categories=categories,# 添加分类信息layout="circular",# 设置布局方式为圆形is_rotate_label=True,# 是否旋转标签linestyle_opts=opts.LineStyleOpts(color="source", curve=0.3),# 设置边的样式label_opts=opts.LabelOpts(position="right"),# 设置标签的位置)# 设置全局选项,包括标题和图例的位置.set_global_opts(title_opts=opts.TitleOpts(title="Graph-Les Miserables"),# 设置标题legend_opts=opts.LegendOpts(orient="vertical", pos_left="2%", pos_top="20%"),# 设置图例的位置))# 生成图表并保存为HTML文件graph.render("graph_les_miserables.html")# 在Jupyter Notebook中显示图表graph.render_notebook()

运行结果:

书籍推荐(包邮送书)

《用ChatGPT轻松玩转机器学习与深度学习》

  • 随着机器学习和深度学习技术的不断发展和进步,它们的复杂性也在不断增强。对于初学者来说,学习这两个领域可能会遇到许多难题和挑战,如理论知识的缺乏、数据处理的困难、算法选择的不确定性等。此时,ChatGPT可以提供强有力的帮助。利用ChatGPT,读者可以更轻松地理解机器学习和深度学习的概念和技术,并解决学习过程中遇到的各种问题和疑惑。此外,ChatGPT还可以为读者提供更多的实用经验和技巧,帮助他们更好地掌握机器学习和深度学习的基本原理和方法。本书主要内容包括探索性数据分析、有监督学习(线性回归、SVM、决策树等)、无监督学习(降维、聚类等),以及深度学习的基础原理和应用等。
  • 本书旨在为广大读者提供一个系统全面、易于理解的机器学习和深度学习入门教程。不需要过多的数学背景,只需掌握基本的编程知识即可轻松上手。
  • 京东购买链接 :http://product.dangdang.com/29610425.html
  • 当当购买链接 :https://item.jd.com/14092188.html

抽奖送书老规矩(不点赞收藏中奖无效):注意记得关注博主不然中奖了还不知道!!!

  • 1. 点赞收藏文章
  • 2. 评论区留言:人生苦短,我用Python!!!(留言才能进入奖池,每人最多留言三条)
  • 3. 周六八点爬虫抽奖5人