复杂网络分析库NetworkX学习笔记(4):统计指标计算

无论是实际网络还是对模型网络进行分析,都离不开对网络拓扑统计指标的计算。反映网络结构与动力学特性的统计指标有很多,Costa等的Characterization of Complex Networks: A Survey of measurements一文对此有全面的综述,本文仅介绍一些常用的统计指标在NetworkX中如何计算。

一、度、度分布

NetworkX可以用来统计图中每个节点的度,并生成度分布序列。下边是一段示例代码(这段代码可以在Shell里一行一行的输入,也可以将其保存为一个以py结尾的纯文本文件后直接运行),注意看注释部分:

import networkx as nx
G = nx.random_graphs.barabasi_albert_graph(1000,3)   #生成一个n=1000,m=3的BA无标度网络
print G.degree(0)                                   #返回某个节点的度
print G.degree()                                     #返回所有节点的度
print nx.degree_histogram(G)    #返回图中所有节点的度分布序列(从1至最大度的出现频次)

对上述结果稍作处理,就可以在Origin等软件里绘制度分布曲线了,当然也可以用matplotlib直接作图,在上述代码后接着输入:

import matplotlib.pyplot as plt                 #导入科学绘图的matplotlib包
degree =  nx.degree_histogram(G)          #返回图中所有节点的度分布序列
x = range(len(degree))                             #生成x轴序列,从1到最大度
y = [z / float(sum(degree)) for z in degree]  
#将频次转换为频率,这用到Python的一个小技巧:列表内涵,Python的确很方便:)
plt.loglog(x,y,color="blue",linewidth=2)           #在双对数坐标轴上绘制度分布曲线  
plt.show()                                                          #显示图表

二、群聚系数

这个在NetworkX里实现起来很简单,只需要调用方法nx.average_clustering(G) 就可以完成平均群聚系数的计算,而调用nx.clustering(G) 则可以计算各个节点的群聚系数。

三、直径和平均距离

nx.diameter(G)返回图G的直径(最长最短路径的长度),而nx.average_shortest_path_length(G)则返回图G所有节点间平均最短路径长度。

四、匹配性

这个也比较简单,调用 nx.degree_assortativity(G) 方法可以计算一个图的度匹配性。

五、中心性

这个我大部分不知道怎么翻译,直接上NX的帮助文档吧,需要计算哪方面的centrality自己从里边找:)

Degree centrality measures.(点度中心性?)
degree_centrality(G)     Compute the degree centrality for nodes.
in_degree_centrality(G)     Compute the in-degree centrality for nodes.
out_degree_centrality(G)     Compute the out-degree centrality for nodes.

Closeness centrality measures.(紧密中心性?)
closeness_centrality(G[, v, weighted_edges])     Compute closeness centrality for nodes.

Betweenness centrality measures.(介数中心性?)
betweenness_centrality(G[, normalized, ...])     Compute betweenness centrality for nodes.
edge_betweenness_centrality(G[, normalized, ...])     Compute betweenness centrality for edges.

Current-flow closeness centrality measures.(流紧密中心性?)
current_flow_closeness_centrality(G[, ...])     Compute current-flow closeness centrality for nodes.
Current-Flow Betweenness

Current-flow betweenness centrality measures.(流介数中心性?)
current_flow_betweenness_centrality(G[, ...])     Compute current-flow betweenness centrality for nodes.
edge_current_flow_betweenness_centrality(G)     Compute current-flow betweenness centrality for edges.

Eigenvector centrality.(特征向量中心性?)
eigenvector_centrality(G[, max_iter, tol, ...])     Compute the eigenvector centrality for the graph G.
eigenvector_centrality_numpy(G)     Compute the eigenvector centrality for the graph G.

Load centrality.(彻底晕菜~~~)
load_centrality(G[, v, cutoff, normalized, ...])     Compute load centrality for nodes.
edge_load(G[, nodes, cutoff])     Compute edge load.


六、小结

上边介绍的统计指标只是NetworkX能计算的指标中的一小部分内容,除此之外NetworkX还提供了很多(我还没有用到过的)统计指标计算方法,感兴趣的朋友可以去查NetworkX的在线帮助文档:http://networkx.lanl.gov/reference/index.html。对于加权图的统计指标计算,NetworkX似乎没有直接提供方法(也可能是我没找到),估计需要自己动手编制一些程序来完成。

这些模块有哪些要安装的 在数学建模竞赛中,Python 凭借其丰富的科学计算和灵活性成为重要工具。以下是 Python 在数学建模中的核心应用领域及相关工具,按模块分类整理: --- ### **一、基础科学计算与数据处理** 1. **数值计算** - **NumPy**:矩阵运算、线性代数、随机数生成 - **SciPy**:积分/微分求解、优化算法、插值、傅里叶变换 - **SymPy**:符号计算(符号求导、方程解析解) 2. **数据处理** - **Pandas**:数据清洗、时间序列分析、表格操作 - **OpenPyXL**:Excel 文件交互 - **SQLAlchemy**:数据连接(如需外部数据) --- ### **二、建模与算法实现** 1. **经典数学模型** - **Scikit-learn**:回归/分类/聚类(如线性回归、SVM、K-Means) - **Statsmodels**:统计模型(假设检验、时间序列ARIMA) 2. **优化问题** - **PuLP/CVXPY**:线性/整数规划建模 - **SciPy.optimize**:非线性规划求解器 - **GEKKO**:动态系统优化(化工、控制领域) 3. **图论与网络分析** - **NetworkX**:复杂网络建模(最短路径、PageRank算法) 4. **微分方程** - **ODEINT(SciPy)**:常微分方程数值解 - **FEniCS**:偏微分方程有限元法(高阶需求) --- ### **三、数据可视化** 1. **基础绘图** - **Matplotlib**:2D/3D静态图绘制 - **Seaborn**:统计图表美化(热力图、分布图) 2. **交互式可视化** - **Plotly**:动态可交互图表(地图、3D轨迹) - **Bokeh**:网页端交互可视化 3. **地理信息** - **Basemap/Cartopy**:地理空间数据可视化 --- ### **四、高级工具链** 1. **自动化建模** - **AutoML(TPOT/Auto-Sklearn)**:自动机器学习(时间紧迫时) 2. **高性能计算** - **Numba**:加速数值计算(基于JIT编译) - **Dask**:并行计算(大数据集处理) 3. **文档生成** - **Jupyter Notebook**:代码/公式/图表混合排版 - **Latex**:通过`pythontex`包与Python联动 --- ### **五、特殊场景工具** 1. **图像处理** - **OpenCV**:图像识别、特征提取(如卫星图像分析) 2. **文本分析** - **NLTK/Spacy**:自然语言处理(舆情类赛题) 3. **物理仿真** - **PyBullet**:刚体动力学模拟(机械控制类题目) --- ### **六、效率提升技巧** - **代码调试**:`pdb`调试器 + `logging`日志记录 - **版本控制**:Git + GitHub/Gitee 团队协作 - **环境管理**:`conda`虚拟环境隔离依赖项 - **API调用**:`requests`获取实时数据(如天气、经济指标) --- ### **典型应用场景示例** 1. **预测类题目**:ARIMA(Statsmodels) + LSTM(PyTorch) 2. **优化调度题**:整数规划(PuLP) + 遗传算法(DEAP) 3. **评价模型题**:熵权法(NumPy) + TOPSIS(Pandas) 4. **动态系统题**:微分方程(SciPy) + 相空间图(Matplotlib) --- ### **注意事项** 1. **避免过度复杂**:优先使用成熟而非重复造轮子 2. **结果可解释性**:关键步骤添加注释,便于论文复现 3. **资源管理**:大数据场景注意内存控制(使用生成器/分块读取) 建议赛前重点掌握:NumPy/Pandas数据处理链 + Matplotlib/Seaborn可视化 + Scikit-learn基础模型,这些覆盖80%常规需求。特殊题型(如神经网络、复杂优化)可针对性扩展。
最新发布
03-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值