复杂网络分析_NetworkX

news2024/10/1 3:37:02

一:NetworkX简介

NetworkX库是一个用于创建、操作复杂网络的结构、动态和功能的Python库。在经济网络中,它可以帮助分析各种经济实体(如公司、个人、国家)之间的相互关系和互动模式。以下是一些NetworkX在经济网络分析中的实际应用:

  1. 金融市场网络分析:分析股票、债券或其他金融资产之间的相关性,识别市场中的关键节点和连接,以及检测市场风险传递的路径。

  2. 供应链网络优化:通过构建供应链网络图,分析供应商、制造商、分销商和零售商之间的联系,优化物流路径,减少成本,提高效率。

  3. 社交网络分析:在经济领域,分析企业家、投资者、专家之间的社交网络,可以帮助识别关键影响者,理解信息传播的机制。

  4. 国际贸易网络分析:研究国家之间的贸易关系,识别贸易集群,分析贸易政策变化对全球经济网络的影响。

  5. 公司治理网络分析:分析公司董事会成员、高管之间的网络关系,以及他们与其他公司的联系,评估公司治理结构和潜在的利益冲突。

  6. 经济危机传播分析:通过构建银行间贷款网络,分析金融危机在网络中的传播机制,预测系统性风险。

  7. 消费者行为分析:通过分析消费者之间的社交网络和购买行为,预测市场趋势,制定营销策略。

  8. 经济复杂性分析:研究国家或地区的经济结构,通过产品出口网络分析,评估经济的多样性和复杂性。

二:NetworkX示例应用

1:网格可视化

接下来,我将使用NetworkX库创建一个简单的经济网络示例,以演示其在实际分析中的应用。

import networkx as nx
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows系统可使用SimHei
plt.rcParams['axes.unicode_minus'] = False  # 解决负号'-'显示为方块的问题

# 创建一个空的图
G = nx.Graph()

# 添加节点,代表供应链的不同部分
G.add_node("供应商A", type="供应商")
G.add_node("供应商B", type="供应商")
G.add_node("制造商X", type="制造商")
G.add_node("分销商Y", type="分销商")
G.add_node("零售商Z", type="零售商")

# 添加边,代表供应链中的关系
G.add_edge("供应商A", "制造商X")
G.add_edge("供应商B", "制造商X")
G.add_edge("制造商X", "分销商Y")
G.add_edge("分销商Y", "零售商Z")

# 设置节点颜色
node_colors = ["blue" if G.nodes[node]["type"] == "供应商" else "green" if G.nodes[node]["type"] == "制造商" else "red" for node in G.nodes()]

# 绘制网络图
plt.figure(figsize=(8, 6))
nx.draw(G, with_labels=True, node_color=node_colors, node_size=3000, font_size=15, font_weight="bold")
plt.title("供应链网络示例", fontsize=20)
plt.show()

通过这个简单的供应链网络示例,我们可以看到NetworkX库如何用于表示和分析经济网络。在这个图中,不同的颜色代表供应链的不同部分:蓝色代表供应商,绿色代表制造商,红色代表分销商和零售商。这种可视化帮助我们理解供应链的结构和各个实体之间的关系。

2:网络中心性、路径与网络脆弱性分析

NetworkX库提供了丰富的功能和算法,可以进一步分析这个网络,例如:

  • 中心性分析:识别网络中的关键节点,如最有影响力的供应商或分销商。
  • 路径分析:找出产品从供应商到消费者的最短或最关键的路径。
  • 网络脆弱性分析:评估如果某个节点(如关键供应商)失效,对整个网络的影响。

中心性分析、路径分析和网络脆弱性分析是网络分析中的三个重要方面。我们将分别对它们进行简要概述,并使用 NetworkX 库进行相应的分析。

  1. 中心性分析:中心性是衡量网络中节点重要性的指标。常见的中心性指标包括度中心性(Degree Centrality)、介数中心性(Betweenness Centrality)和接近中心性(Closeness Centrality)。这些指标帮助我们识别网络中的关键节点。

  2. 路径分析:路径分析涉及找出网络中两个节点之间的最短路径。这可以帮助我们理解网络中信息或资源如何流动。

  3. 网络脆弱性分析:网络脆弱性分析涉及评估网络在面对节点或边移除时的鲁棒性。这通常通过移除关键节点或边,并观察网络性能的变化来进行。

我们将使用之前创建的网络图来进行这些分析。首先,我们将进行中心性分析,计算每个节点的度中心性、介数中心性和接近中心性。然后,我们将找出网络中任意两个节点之间的最短路径。最后,我们将通过移除一个关键节点来模拟网络脆弱性分析,并观察网络结构的变化。

# 中心性分析
degree_centrality = nx.degree_centrality(G)
betweenness_centrality = nx.betweenness_centrality(G)
closeness_centrality = nx.closeness_centrality(G)

# 路径分析
shortest_paths = {}
for node in G.nodes():
    paths = {target: nx.shortest_path(G, source=node, target=target) for target in G.nodes() if node != target}
    shortest_paths[node] = paths

# 网络脆弱性分析
# 移除一个关键节点(例如度中心性最高的节点)
removed_node = max(degree_centrality, key=degree_centrality.get)
G_removed = G.copy()
G_removed.remove_node(removed_node)

# 可视化原始网络和移除关键节点后的网络
fig, axes = plt.subplots(1, 2, figsize=(12, 6))

# 原始网络
nx.draw(G, with_labels=True, node_color="lightblue", edge_color="gray", node_size=2000, font_size=16, ax=axes[0])
axes[0].set_title("原始网络", fontsize=20)

# 移除关键节点后的网络
nx.draw(G_removed, with_labels=True, node_color="lightgreen", edge_color="gray", node_size=2000, font_size=16, ax=axes[1])
axes[1].set_title(f"移除节点 {removed_node} 后的网络", fontsize=20)

plt.tight_layout()
plt.show()

degree_centrality, betweenness_centrality, closeness_centrality, shortest_paths

这些分析展示了如何使用 NetworkX 进行网络分析,以及如何理解网络结构的不同方面。

3:网络聚类分析

NetworkX 还支持网络聚类分析。网络聚类分析旨在发现网络中的社区结构或模块,即一组紧密相连的节点。NetworkX 提供了多种算法来进行网络聚类,包括:

  1. Girvan-Newman 算法:这是一种基于边缘介数的社区检测算法,通过逐步移除网络中最重要的边来划分社区。

  2. 快速解社区结构算法(Fast Community Structure Detection):这是一种更高效的社区检测方法,通过优化模块度来识别社区。

  3. 标签传播算法(Label Propagation):这是一种基于图的流算法,通过传播标签来发现社区。

  4. 基于密度的聚类算法(Density-Based Clustering):如 DBSCAN,它基于节点的密度来识别社区。

我们将使用 NetworkX 中的 Girvan-Newman 算法来演示网络聚类分析。这个算法将帮助我们识别网络中的社区结构。

# 使用 Girvan-Newman 算法进行网络聚类分析
from networkx.algorithms.community import girvan_newman

# 执行 Girvan-Newman 算法
communities = girvan_newman(G)

# 获取前两个社区
sorted_communities = tuple(sorted(c) for c in next(communities))

# 可视化社区结构
node_color = []
for node in G.nodes():
    if node in sorted_communities[0]:
        node_color.append('red')
    else:
        node_color.append('blue')

nx.draw(G, with_labels=True, node_color=node_color, edge_color="gray", node_size=2000, font_size=16)
plt.title("网络聚类分析结果", fontsize=20)
plt.show()

sorted_communities

通过使用 Girvan-Newman 算法,我们成功地将网络图划分为两个社区:

  1. 第一个社区包含供应商A,供应商B和制造商X。
  2. 第二个社区包含分销商Y和零售商Z。

这种聚类分析有助于理解网络中的社区结构,揭示节点之间的紧密联系,

想要探索多元化的数据分析视角,可以关注之前发布的相关内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2166548.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ArrayList源码实现(一)

ArrayList源码实现(一) 1. ArrayList的大小是如何自动增加的? 初始化 在构造函数中,可以设定列表的初始值大小,如果没有的话默认使用,提供的静态数据 public ArrayList(int initialCapacity) {if (initi…

Milvus - 架构设计详解

Milvus 是一个专为在大规模密集向量数据集上进行相似性搜索而设计的开源向量数据库系统。其架构建立在流行的向量搜索库之上,如 Faiss、HNSW、DiskANN 和 SCANN,能够处理数百万、数十亿甚至数万亿的向量数据。为了全面了解 Milvus 架构,我们首…

计网作业3

1.交换机是依据 MAC地址 来转发数据包的 2.数据链路层 负责将数据封装成帧,在相邻节点间进行传输 数据链路层负责以下任务: 封装数据 物理地址寻址:使用MAC地址进行寻址,确保数据能够在局域网中正确传输到目标节点 介质访问控…

正确理解C++的友元friend

C的友元(friend)是个很重要的概念,该如何正确理解呢?本文将以友元函数为例讲解一下,仔细看。 友元的特性: 1、使用friend修饰的成员函数可以访问其他成员的私有成员(private)和保护成员(protected)。 2、…

快速上手基于Vue的动画引擎vueuse/motion

在现代前端开发中,动画可以极大地提升用户体验和界面美感。VueUse Motion 是一个强大的动画库,旨在为 Vue 应用提供简单易用的动画功能。那我们就来看看它在Vue项目中是如何应用的,快速手上为主,官网地址👇 vueuse/mo…

DevExpress WinForms中文教程:Data Grid - 如何添加或删除行?

本教程介绍DevExpress WinForm的Data Grid控件UI元素和API,它们使您和最终用户能够添加或删除数据行。您将首选学习如何启用内置的数据导航器,然后学习如何使用Microsoft Outlook启发的New Item行添加新记录。最后教程将向您展示基本的API,它…

全景可视化特点+可视化功能实现

全景可视化介绍 全景可视化是一种利用现代计算机技术、图像处理技术和虚拟现实技术,将现实世界中的场景以360度全景的方式呈现在用户面前的技术。它不仅能够提供水平方向360度的全景视野,还能通过垂直方向的视角变化,实现上下视角的调节&…

MVC core 、MVC framework addTagHelper、htmlhelper 、Environment

mvc core 标签助手 TagHelper 只有core 支持 htmlhelper mvc、mvc core 都支持 Environment <environment include"Development">*开发环境,使用不压缩的文件&#xff0c;排除压缩的文件*<link rel"stylesheet" asp-href-include"css/*"…

Linux相关概念和重要知识点(8)(操作系统、进程的概念)

1.操作系统&#xff08;OS&#xff09; &#xff08;1&#xff09;基本结构的认识 任何计算机系统都包含一个基本的程序集合&#xff0c;用于实现计算机最基本最底层的操作&#xff0c;这个软件称为操作系统。操作系统大部分使用C语言编写&#xff0c;少量使用汇编语言。 从…

[极客大挑战 2019]RCE ME1

<?php error_reporting(0); if(isset($_GET[code])){$code$_GET[code];if(strlen($code)>40){die("This is too Long.");}if(preg_match("/[A-Za-z0-9]/",$code)){die("NO.");}eval($code); } else{highlight_file(__FILE__); }// ?>…

【React】组件通信

1. 组件通信 组件间的数据传递 1.1 父传子 步骤&#xff1a; 父组件传递数据——在子组件标签上绑定属性子组件接收数据——子组件通过props参数接收数据 function Son(props) {return <div>{props.value}</div> }function App() {const value 父组件传给子…

实验二十:ds1302时钟实验

数码管硬件如以前实验所示‘ 完整代码如下 ds1302驱动 C文件 #include "ds1302.h" #include "intrins.h"u8 gWRITE_RTC_ADDR[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};//秒,分,时,日,月,周,年 u8 gREAD_RTC_ADDR[7]={0x81,0x83,0x85,0x87,0x89,…

Vue3 + TS 实现同一项目同一链接,pc端打开是web应用,手机打开是H5应用

前言&#xff1a; 我自己搭建的项目基本都是用 postcss-px-to-viewport 插件进行适配的&#xff1b; 最近在做一个项目&#xff0c;需求是同样的功能&#xff0c;用户可以在电脑上打开操作使用&#xff0c;也可以在手机上登录进去操作使用&#xff0c;但是跳转链接是同一个&am…

前端工程化之vite

vite常用的插件有哪些? vitejs/plugin-vue&#xff1a;用于支持 Vue.js 单文件组件&#xff08;.vue 文件&#xff09; vitejs/plugin-react&#xff1a;用于支持 React 和 JSX 语法 rollup-plugin-visualizer: 用于打包分析 vite-plugin-restart: 文件修改时自动重启vite …

Python 课程18-SQLAlchemy

前言 SQLAlchemy 是一个功能强大的 Python SQL 工具包和对象关系映射&#xff08;ORM&#xff09;库&#xff0c;它使得开发者能够通过 Python 代码与数据库进行交互&#xff0c;而不必编写 SQL 查询。SQLAlchemy 提供了对多种数据库的支持&#xff0c;包括 MySQL、PostgreSQL…

电路板上电子元件检测系统源码分享

电路板上电子元件检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comp…

【线程】POSIX信号量---基于环形队列的生产消费者模型

信号量概念 这篇文章是以前写的&#xff0c;里面讲了 System V的信号量的概念&#xff0c;POSIX信号量和SystemV信号量作用相同&#xff0c;都是用于同步操作&#xff0c;达到无冲突的访问共享资源目的。 但POSIX可以用于线程间同步。 信号量的概念 POSIX信号量的接口 初始化…

Python pypattyrn库:简化设计模式的实现

更多Python学习内容&#xff1a;ipengtao.com 在软件开发中&#xff0c;设计模式是解决常见问题的最佳实践。设计模式提供了一种简洁、可复用的代码结构&#xff0c;能够提高代码的灵活性和可维护性。Python 语言作为一种灵活的编程语言&#xff0c;允许开发者使用多种设计模式…

认知杂谈83《同样读书:不同态度,别样收获》

内容摘要&#xff1a; 在知识的海洋中&#xff0c;读书的态度决定了收获的深度。主要有两种读书方式&#xff1a;一是期待书籍像快餐一样提供直接答案&#xff0c;结果常常一无所获&#xff1b;二是将书籍作为探索工具&#xff0c;认真思考&#xff0c;与作者进行深度的“对话”…

Java | Leetcode Java题解之第436题寻找右区间

题目&#xff1a; 题解&#xff1a; class Solution {public int[] findRightInterval(int[][] intervals) {int n intervals.length;int[][] startIntervals new int[n][2];int[][] endIntervals new int[n][2];for (int i 0; i < n; i) {startIntervals[i][0] inter…