数据可视化案例-基于NetworkX网络的美国飞机航线可视化

2024-03-22 21:50

本文主要是介绍数据可视化案例-基于NetworkX网络的美国飞机航线可视化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

NetworkX网络数据可视化

我们选用美国飞机航线的数据集,包括起始机场、终点、飞行时间等
注:此处数据集下载地址为:

数据集下载地址

import pandas as pd
import numpy as np 
flights = pd.read_csv('./input/flights.csv') 
flights.shape
flights.columns
Out:(5819079, 31)Index(['YEAR', 'MONTH', 'DAY', 'DAY_OF_WEEK', 'AIRLINE', 'FLIGHT_NUMBER','TAIL_NUMBER', 'ORIGIN_AIRPORT', 'DESTINATION_AIRPORT', 'SCHEDULED_DEPARTURE', 'DEPARTURE_TIME', 'DEPARTURE_DELAY', 'TAXI_OUT','WHEELS_OFF', 'SCHEDULED_TIME', 'ELAPSED_TIME', 'AIR_TIME', 'DISTANCE','WHEELS_ON', 'TAXI_IN', 'SCHEDULED_ARRIVAL', 'ARRIVAL_TIME','ARRIVAL_DELAY', 'DIVERTED', 'CANCELLED', 'CANCELLATION_REASON','AIR_SYSTEM_DELAY', 'SECURITY_DELAY', 'AIRLINE_DELAY','LATE_AIRCRAFT_DELAY', 'WEATHER_DELAY'],dtype='object')
## 检测缺失值
flights.isnull().any() 
Out:YEAR                   FalseMONTH                  FalseDAY                    FalseDAY_OF_WEEK            FalseAIRLINE                FalseFLIGHT_NUMBER          FalseTAIL_NUMBER             TrueORIGIN_AIRPORT         FalseDESTINATION_AIRPORT    FalseSCHEDULED_DEPARTURE    FalseDEPARTURE_TIME          TrueDEPARTURE_DELAY         TrueTAXI_OUT                TrueWHEELS_OFF              TrueSCHEDULED_TIME          TrueELAPSED_TIME            TrueAIR_TIME                TrueDISTANCE               FalseWHEELS_ON               TrueTAXI_IN                 TrueSCHEDULED_ARRIVAL      FalseARRIVAL_TIME            TrueARRIVAL_DELAY           TrueDIVERTED               FalseCANCELLED              FalseCANCELLATION_REASON     TrueAIR_SYSTEM_DELAY        TrueSECURITY_DELAY          TrueAIRLINE_DELAY           TrueLATE_AIRCRAFT_DELAY     TrueWEATHER_DELAY           Truedtype: bool

比如我们想找出哪个机场是热门中转机场,或是我们想从机场A飞到机场B,如果没有直达航班,如何最优选择路线(因为数据集中没有给出费用,所以我们找到时间最短的路线)

那么我们只需要提取三列:起始机场(ORIGIN_AIRPORT),终点机场(DESTINATION_AIRPORT),飞行时间(AIR_TIME),数据集中还包括了字段"CANCELLED",反映了是否取消了航班,所以我们先删除已取消的航班。

flights1 = flights[flights['CANCELLED'] == 0]
flights2 = flights1[['ORIGIN_AIRPORT','DESTINATION_AIRPORT','AIR_TIME']].reset_index(drop=True) ## 提取三列且重新建立索引
## 删除缺失值
flight2 = flights2[flights2['AIR_TIME'].notnull()]

我们先来看看总共有多少个机场

list(set(flights2['ORIGIN_AIRPORT']))[:5]
Out:['14685', '13360', 'ECP', '12892', '12177']

我们发现起始航班中有数字(不是机场名称的缩写),我们认为其是无效的,那么先删除起始机场和到达机场中包含数字的所有行

## 先将这一列转为字符串类型,因为其中的数字有可能是int类型有可能是字符串类型
flights2['ORIGIN_AIRPORT'] = flights2['ORIGIN_AIRPORT'].astype(str)
flights3 = flights2[flights2['ORIGIN_AIRPORT'].str.contains('1|2|3|4|5|6|7|8|9|0')==False]
list(set(flights3['ORIGIN_AIRPORT']))[:5]
Out:['ECP', 'STC', 'ADQ', 'HIB', 'BTV']

现在只留下了机场名的缩写,我们再检查到达机场,看看有没有包含数字。

list(set(flights3['DESTINATION_AIRPORT']))[:5]
len(set(flights3['DESTINATION_AIRPORT']))
## 很不错,也没有,那么我们开始进行下一步处理
Out:['ECP', 'STC', 'ADQ', 'BTV', 'HIB']322

现在将起始机场和到达机场作为节点,若要选择最短时间,其实跟选择最短路径一样,我们将边的属性weight设置为每个航线之间的飞行时间。

## 给图添加边和边的属性 
G = nx.Graph()
for i in range(len(flights3)):G.add_edge(flights3.iloc[i,0],flights3.iloc[i,1],weight = flights3.iloc[i,2])
## 比如我们现在想知道从'ANC'机场取'LAR'机场,如何转机所需时间最短
print(nx.dijkstra_path(G,'ANC','LAR'))
Out:['ANC', 'DEN', 'LAR']
## 画出航线的网络图
nx.draw(G, with_labels=True)

在这里插入图片描述
这样随机分布的机场不直观,也没办法获取机场的地理位置,所以我们把他们画到美国的地图上。

from mpl_toolkits.basemap import Basemap
## 读取机场的数据,包括机场的经纬度和所属的洲
airports = pd.read_csv('./input/airports.csv').drop(['AIRPORT','CITY','COUNTRY'],axis = 1) ## 直接将一些不需要的列删除
## m为生成的美国地图,其中的参数llrnrlon到urcrnrlon是设置美国的经度和维度范围
m = Basemap(projection='merc',llcrnrlon=-150,llcrnrlat=20,urcrnrlon=-50,urcrnrlat=60,lat_0 = 40,lon_0=-100, resolution='l',suppress_ticks=True)
mx,my = m(list(airports['LONGITUDE']),list(airports['LATITUDE']))
pos = {}
for i in range(len(airports)):pos[airports.iloc[i,0]] = (mx[i],my[i])   
## 根据航线来表现节点的大小
deg = nx.degree(G)
sizes = [ 10* deg[i] for i in G.nodes]
## 如果节点过小的话,则不加标签
labels = {i: i if deg[i] >= 20 else '' for i in G.nodes}
## 根据机场所在的洲决定机场节点的颜色,故先给节点添加state属性
for i in range(len(airports)):G.nodes[airports['IATA_CODE'][i]]['state'] = airports['STATE'][i]
## 按照G.nodes中航班的顺序,将其对应的洲排列在一个列表中
state = [ G.nodes[i]['state']   for i in G.nodes]## 将字符串转为数值,因为要按照洲添加颜色
a,indices = np.unique(state,return_inverse=True)
figure = plt.figure(figsize=(30,30))
nx.draw_networkx(G, pos,font_size=16,alpha=.8,width=.075, node_size=sizes,labels=labels,node_color=indices,edge_color='#9400D3')## 绘制地图
m.drawcountries()
m.drawstates()
# m.bluemarble()
m.drawcoastlines()plt.show()

在这里插入图片描述
从图中,我们可以看到东部主要是中转机场,航线比较多,机场也比较密集。

这篇关于数据可视化案例-基于NetworkX网络的美国飞机航线可视化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/836267

相关文章

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

Python实现将实体类列表数据导出到Excel文件

《Python实现将实体类列表数据导出到Excel文件》在数据处理和报告生成中,将实体类的列表数据导出到Excel文件是一项常见任务,Python提供了多种库来实现这一目标,下面就来跟随小编一起学习一... 目录一、环境准备二、定义实体类三、创建实体类列表四、将实体类列表转换为DataFrame五、导出Da

Python实现数据清洗的18种方法

《Python实现数据清洗的18种方法》本文主要介绍了Python实现数据清洗的18种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1. 去除字符串两边空格2. 转换数据类型3. 大小写转换4. 移除列表中的重复元素5. 快速统

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用