博雅数智|第四次直播|PageRank算法

使用 PageRank 对全球机场进行排序、

 

 

 人工分类----文本分类----

 

 

 6指的就是图中所有的节点

 

 再说一个包

数据保存在./dataset/out.opsahl-openflights.csv 中

networkx 中的 read_edgelist 函数

作用:从边列表中读出一个图。

参数含义:create_using为创建的图的类型(有向图,无向图等)

由于我们处理的是有向网络,所以需要将 create_using 参数设置为 nx.DiGraph()

使用 nx.draw 函数,将网络进行可视化。

# 导入数据
import pandas as pd

#分隔符sep设置为 空格
flights = pd.read_csv('./dataset/out.opsahl-openflights.csv',header=None,sep=' ')

# 读取数据
## 读取数据
import networkx as nx

flights_network = nx.read_edgelist("./dataset/out.opsahlopenflights.csv",create_using=nx.DiGraph())

## 观察样本类别分布
print("航班数:" + str(len(flights_network.nodes))) # 读取节点
print("航线数:" + str(len(flights_network.edges))) # 读取边

## len() 计算数量

## 网络可视化
## 网络绘制
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, pos = pos_flights,ax=ax)

得出的图 发现不是连通图

从图中可以看出,这个网络不是一个连通图所以我们需要从航线网络中提取出最大连通子图进行下一步分析。 对于有向网络, nx.weakly_connected_component_subgraphs() 函数可以返回网络中的连通子图列表。我们只提取最大连通子图。


largest_component = max(nx.weakly_connected_component_subgraphs(flights_network),
                        key=len)#找出最大连通子图
## 输出最大连通子图的类别数
print("航班数:" + str(len(largest_component.nodes)))
print("航线数:" + str(len(largest_component.edges)))

# 得到航班数和航线数

再次进行网络可视化

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)
## 调用PageRank算法计算值
pr_dict = nx.pagerank(largest_component)  # 用字典存储

# 将计算出来的PageRank值列出来
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) # .head(20)表示查看前20行

设置一个函数 get_nodesize_pagerank ,将网络中节点的 PageRank 值,映射为网络中节点的大小。参数pagerank为pr_dict。

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
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)

总结:

首先先对数据集进行了简单介绍,其次介绍了利用networkx中的read_edgelist函数,加载网络的方法,然后学习了利用nx.draw()将网络进行可视化,然后我们通过networkx中的 weakly_connected_component_subgraphs函数,提取最大连通子图。最后我们计算每个节点的PageRank 值,将节点大小与 PageRank 值关联并可视化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值