前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >直播案例 | 使用PageRank对全球机场进行排序

直播案例 | 使用PageRank对全球机场进行排序

原创
作者头像
数据酷客
修改于 2020-05-18 06:24:29
修改于 2020-05-18 06:24:29
2.7K00
代码可运行
举报
运行总次数:0
代码可运行

查看本案例完整的数据、代码和报告请登录数据酷客(http://cookdata.cn)案例板块。

PageRank 是谷歌公司起家的算法,在数据科学领域具有重要的地位和作用。PageRank 算法最初提出来用于利用网页之间的链接关系来对网页进行排序,从而优化搜索引擎的效果。如今,我们可以将 PageRank 算法用作网络中节点排序的一般算法。

在本案例中,我们使用一个全球机场之间航线的网络数据集,借助 Python 中的复杂网络分析库 networkx 中实现的 PageRank 算法,完成对全球机场的排序。

1 数据集介绍

文件 ./input/out.opsahl-openflights.csv 中的有向网络包含世界各机场之间的航班。有向边表示从一个机场到另一个机场的飞行航线。这个数据集是从Openflights.org 数据中提取出来的,与 Tore Opsahl 在数据集列表中的网络14c相对应,来源网址为:toreopsahl.com

利用 networkx 中的 read_edgelist 函数,将网络加载到内存中。注意,由于我们处理的是有向网络,所以需要将 create_using 参数设置为 nx.DiGraph()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import networkx as nx
flights_network = nx.read_edgelist("./input/out.opsahl-openflights.csv",create_using=nx.DiGraph())
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print("航班数:" + str(len(flights_network.nodes)))
print("航线数:" + str(len(flights_network.edges)))

航班数:2939 航线数:30501

在这个航线网络中,一共包含 2939 个机场,30501 条航线。下面我们使用 nx.draw 函数,将网络进行可视化。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt
%matplotlib inline
fig, ax = plt.subplots(figsize=(24, 16)) 
pos_flights = nx.kamada_kawai_layout(flights_network) #网络布局
ax.axis("off")
plt.box(False)
nx.draw(flights_network, node_size=30,node_color = "green", edge_color = "#D8D8D8",width=.3, ax=ax)

2 找出最大连通子图

从上图中很容易看出,这个网络不是一个连通图。我们从航线网络中提取出最大连通子图进行进一步分析。 对于有向网络, networkx 中的 weakly_connected_component_subgraphs 函数可以返回网络中的连通子图列表。我们只提取最大连通子图。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
largest_component = max(nx.weakly_connected_component_subgraphs(flights_network), key=len)#找出最大连通子图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print("航班数:" + str(len(largest_component.nodes)))
print("航线数:" + str(len(largest_component.edges)))

航班数:2905 航线数:30442

在最大连通子图中,一共包含 2905 个机场和 30442 条航线。下面将最大连通子图进行可视化。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fig, ax = plt.subplots(figsize=(24, 16)) 
pos_flights2 = nx.kamada_kawai_layout(largest_component)
ax.axis("off")
plt.box(False)
nx.draw(largest_component, node_size=30,node_color = "green", edge_color = "#D8D8D8",width=.3,pos = pos_flights2, ax=ax)

3 PageRank 算法简介

PageRank算法是由谷歌创始人拉里·佩奇(Larry Page)和谢尔盖·布林(Sergey Brin)所设计出来的谷歌搜索引擎上的页面排序算法,最早作为论文发表于 1998 年。 论文发表之后没多久,佩奇和布林就以此论文为基础创立了谷歌公司。、

阻尼系数 β 用来表示在PageRank迭代过程中一个点沿着出边跳转到下一个点的概率。 (1 - β) 表示在浏览过程不沿着边跳转,而是在所有点中随机挑选下一个点的概率。 实际试验证明 β 被设置成 0.85 时 PageRank 的计算结果最符合实际情况。

4 使用 PageRank 算法对机场进行排序

networkx 中,使用 pagerank 函数即可计算网络中节点的 PageRank 值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pr_dict = nx.pagerank(largest_component)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
pr_df = pd.DataFrame.from_dict(pr_dict,orient="index")
pr_df.columns = ["pr_value"]
pr_df.sort_values(by = "pr_value").head(20)
pr_df.head(20)

5 将节点大小与 PageRank 值关联并可视化

实现一个函数 get_nodesize_pagerank ,将网络中节点的 PageRank 值,映射为网络中节点的大小。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def get_nodesize_pagerank(pagerank, min_size, max_size):
    nodesize_list = []
    pr_max = max(pagerank.values())
    for node, pr in pagerank.items():
        nodesize = (max_size - min_size)*pr/pr_max + min_size
        nodesize_list.append(nodesize)
    return nodesize_list
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fig, ax = plt.subplots(figsize=(24, 16)) 
pos_flights2 = nx.kamada_kawai_layout(largest_component)
ax.axis("off")
plt.box(False)
nx.draw(largest_component, node_size=get_nodesize_pagerank(pr_dict,1,100),node_color = "green", edge_color = "#D8D8D8",width=.3,pos = pos_flights2, ax=ax)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
NetworkX,网络结构图最强绘制工具·····
今天给大家介绍Python语言中绘制网络结构图的可视化拓展工具-NetworkX包。NetworkX提供了丰富的数据结构和函数,使得用户能够轻松地构建、分析和可视化复杂网络。
DataCharm
2023/10/17
1.9K0
NetworkX,网络结构图最强绘制工具·····
基于Python的社交网络分析与图论算法实践
社交网络分析和图论算法在理解和分析复杂网络结构方面发挥着重要作用。本文将介绍如何使用Python和相关库进行社交网络分析,并实现一些常用的图论算法。我们将涵盖从网络构建和可视化到基本的算法应用的全过程。
一键难忘
2024/10/08
5740
【数学建模】——【python】实现【最短路径】【最小生成树】【复杂网络分析】
假设有一个包含多个城市及其之间距离的列表(或图结构),其中每个城市是图中的一个节点,城市之间的距离是边的权重。使用Dijkstra算法或Floyd-Warshall算法(视情况而定,如果图中节点数较多,推荐使用Dijkstra;如果需要求出所有点对间的最短路径,则使用Floyd-Warshall)来计算并绘制出从一个指定城市到其他所有城市的最短路径图。
小李很执着
2024/08/05
3350
【数学建模】——【python】实现【最短路径】【最小生成树】【复杂网络分析】
二项式随机图中巨大连接的分量的突然出现的巨型零件。
import math import matplotlib.pyplot as plt import networkx as nx try: import pygraphviz from networkx.drawing.nx_agraph import graphviz_layout layout = graphviz_layout except ImportError: try: import pydot from networkx.
裴来凡
2022/05/28
3230
二项式随机图中巨大连接的分量的突然出现的巨型零件。
图神经网络(GNN)的基本原理
本文结合一个具体的无向图来对最简单的一种GNN进行推导。本文第一部分是数据介绍,第二部分为推导过程中需要用的变量的定义,第三部分是GNN的具体推导过程,最后一部分为自己对GNN的一些看法与总结。
Cyril-KI
2022/09/19
9250
图神经网络(GNN)的基本原理
图论与图学习(二):图算法
本文是其中第二篇,介绍了图算法。更多文章和对应代码可访问:https://github.com/maelfabien/Machine_Learning_Tutorials
机器之心
2019/08/06
3.7K0
图论与图学习(二):图算法
使用Python实现深度学习模型:图神经网络(GNN)
图神经网络(Graph Neural Network,GNN)是一类能够处理图结构数据的深度学习模型。与传统的神经网络不同,GNN可以直接处理图结构数据,例如社交网络、分子结构和知识图谱等。本文将详细介绍如何使用Python实现一个简单的GNN模型,并通过具体的代码示例来说明。
Echo_Wish
2024/07/01
3570
有向图,无向图,网络图,加入权重。
import matplotlib.pyplot as plt import networkx as nx H = nx.path_graph(10) G.add_nodes_from(H) nx.draw(G, with_labels=True) plt.show() G=nx.Graph() G.add_edges_from([(1,2),(1,3),(2,4),(2,5),(3,6),(4,8),(5,8),(3,7)]) nx.draw(G, with_labels=True, edge_co
裴来凡
2022/05/28
1K0
有向图,无向图,网络图,加入权重。
Python数据分析 利用NetworkX绘制网络图
NetworkX 是一个用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析、仿真建模等工作。networkx支持创建简单无向图、有向图和多重图;内置许多标准的图论算法,节点可为任意数据;支持任意的边值维度,功能丰富。主要用于创造、操作复杂网络,以及学习复杂网络的结构、动力学及其功能。用于分析网络结构,建立网络模型,设计新的网络算法,绘制网络等等。
叶庭云
2020/09/17
7.9K0
Python数据分析    利用NetworkX绘制网络图
图论入门——从基础概念到NetworkX
图(Graph)是一种表示对象之间关系的抽象数据结构。图由节点(Vertex)和边(Edge)组成,节点表示对象,边表示对象之间的关系。图可以用于建模各种实际问题,如社交网络、交通网络、电力网络等。
曼亚灿
2023/12/13
1.8K0
图论入门——从基础概念到NetworkX
NetworkX绘图,更上一层
官网学习地址:https://networkx.org/documentation/stable/auto_examples/drawing/index.html
皮大大
2024/06/13
2880
基于NetworkX构建复杂网络的应用案例
本文主要包含两个部分: 1.networkx的安装以及校园网络拓扑图的绘制。这一步骤有固定生成节点的位置,添加节点的自定义图标的功能实现。 主要函数为: G.add_nodes_from(nodes=nodes_list,pos=pos) G.add_node(“信息中心”, image=images[“router”])
用户2225445
2022/11/12
1.7K0
基于NetworkX构建复杂网络的应用案例
Python社交网络——NetworkX入门
实例来自:https://www.cnblogs.com/yu-liang/p/9117643.html
里克贝斯
2021/05/21
1.6K0
Python社交网络——NetworkX入门
民主算法:PageRank
了解Google公司,多半都对“PageRank”算法有所耳闻。该算法是一种典型的“从群众中来,到群众中去”的民主算法。
herain
2022/04/27
6160
民主算法:PageRank
python实现之数据血缘关系,by networkx
最近在进行数据逆向分析,无业务无界面无数据库的情况下,想通过对存储过程中关于输出输入表的分析快速了解业务的核心问题,然后再对核心业务进行逆向回溯。
python与大数据分析
2022/03/11
1.9K0
python实现之数据血缘关系,by networkx
流程图(二)利用python绘制网络图
网络图使用节点和连接线来显示事物之间的连接关系,用于说明实体之间的关系。一般分为定向网络图和非定向网络图。
HsuHeinrich
2024/12/24
1430
流程图(二)利用python绘制网络图
Networkx:Python的图论与复杂网络建模工具
今天我们来聊聊 Networkx,这是一个用 Python 语言开发的图论与复杂网络建模工具。它内置了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析、仿真建模等工作。
TechHarmony
2024/04/16
9780
Python3画图系列——Network
NetworkX 主要用于创造、操作复杂网络,以及学习复杂网络的结构、动力学及其功能。用于分析网络结构,建立网络模型,设计新的网络算法,绘制网络等等。安装networkx看以参见官网 。
py3study
2020/01/20
1K0
一文读懂Python复杂网络分析库networkx | CSDN博文精选
networkx是一个用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析、仿真建模等工作。
AI科技大本营
2019/10/21
29.5K0
一文读懂Python复杂网络分析库networkx | CSDN博文精选
知识图谱入门:使用Python创建知识图,分析并训练嵌入模型
接下来,创建一个NetworkX图(G)来表示KG。DataFrame (df)中的每一行都对应于KG中的三元组(头、关系、尾)。add_edge函数在头部和尾部实体之间添加边,关系作为标签。
deephub
2023/08/30
1.1K0
知识图谱入门:使用Python创建知识图,分析并训练嵌入模型
推荐阅读
相关推荐
NetworkX,网络结构图最强绘制工具·····
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验