数据集 拿走:

链接:https://pan.baidu.com/s/1zH5xhpEmx2_u5qO9W4gCkw
提取码:2wl5

数据集来自航空业,有一些关于航线的基本信息。有某段旅程的起始点和目的地。还有一些列表示每段旅程的到达和起飞时间。这个数据集非常适合作为图进行分析。想象一下通过航线(边)连接的几个城市(节点)。

如果你是航空公司,你可以问如下几个问题:

  • 从A到B的最短途径是什么?分别从距离和时间角度考虑。
  • 有没有办法从C到D?
  • 哪些机场的交通最繁忙?
  • 哪个机场位于大多数其他机场“之间”?这样它就可以变成当地的一个中转站。
import numpy as np
import pandas as pd
data = pd.read_csv('C:\\Users\\Style\\Desktop\\flights.csv')
print(data.shape)
# 336776行,19列

print(data.dtypes)  #各类型的变量

2.数据清洗

#将sched_dep_time转换为'std'—预定的出发时间
data['std'] = data.sched_dep_time.astype(str).str.replace('(\d{2}$)', '') + ':' + data.sched_dep_time.astype(str).str.extract('(\d{2}$)', expand=False) + ':00' #将sched_arr_time转换为“sta”—预定到达时间
data['sta'] = data.sched_arr_time.astype(str).str.replace('(\d{2}$)', '') + ':' + data.sched_arr_time.astype(str).str.extract('(\d{2}$)', expand=False) + ':00' #将dep_time转换为'atd' -实际出发时间
data['atd'] = data.dep_time.fillna(0).astype(np.int64).astype(str).str.replace('(\d{2}$)', '') + ':' + data.dep_time.fillna(0).astype(np.int64).astype(str).str.extract('(\d{2}$)', expand=False) + ':00' #将arr_time转换为'ata' -实际到达时间
data['ata'] = data.arr_time.fillna(0).astype(np.int64).astype(str).str.replace('(\d{2}$)', '') + ':' + data.arr_time.fillna(0).astype(np.int64).astype(str).str.extract('(\d{2}$)', expand=False) + ':00'

3.时间信息合并

data['date'] = pd.to_datetime(data[['year', 'month', 'day']])
data = data.drop(columns = ['year', 'month', 'day'])

4.创建图

import networkx as nx

FG = nx.from_pandas_edgelist(data, source='origin', target='dest', edge_attr=True,)
# 查看所有节点
print(FG.nodes())
['EWR', 'IAH', 'LGA', 'JFK', 'MIA', 'BQN', 'ATL', 'ORD', 'FLL', 'IAD', 'MCO', 'PBI', 'TPA', 'LAX', 'SFO', 'DFW', 'BOS', 'LAS', 'MSP', 'DTW', 'RSW', 'SJU', 'PHX', 'BWI', 'CLT', 'BUF', 'DEN', 'SNA', 'MSY', 'SLC', 'XNA', 'MKE', 'SEA', 'ROC', 'SYR', 'SRQ', 'RDU', 'CMH', 'JAX', 'CHS', 'MEM', 'PIT', 'SAN', 'DCA', 'CLE', 'STL', 'MYR', 'JAC', 'MDW', 'HNL', 'BNA', 'AUS', 'BTV', 'PHL', 'STT', 'EGE', 'AVL', 'PWM', 'IND', 'SAV', 'CAK', 'HOU', 'LGB', 'DAY', 'ALB', 'BDL', 'MHT', 'MSN', 'GSO', 'CVG', 'BUR', 'RIC', 'GSP', 'GRR', 'MCI', 'ORF', 'SAT', 'SDF', 'PDX', 'SJC', 'OMA', 'CRW', 'OAK', 'SMF', 'TUL', 'TYS', 'OKC', 'PVD', 'DSM', 'PSE', 'BHM', 'CAE', 'HDN', 'BZN', 'MTJ', 'EYW', 'PSP', 'ACK', 'BGR', 'ABQ', 'ILM', 'MVY', 'SBN', 'LEX', 'CHO', 'TVC', 'ANC']

查询图中的所有边

#查看所有边
print(FG.edges())
[('EWR', 'IAH'), ('EWR', 'ORD'), ('EWR', 'FLL'), ('EWR', 'SFO'), ('EWR', 'LAS'), ('EWR', 'PBI'), ('EWR', 'MIA'), ('EWR', 'ATL'), ('EWR', 'PHX'), ('EWR', 'MSP'), ('EWR', 'LAX'), ('EWR', 'CLT'), ('EWR', 'IAD'), ('EWR', 'SNA'), ('EWR', 'TPA'), ('EWR', 'RSW'), ('EWR', 'SJU'), ('EWR', 'SEA'), ('EWR', 'DFW'), ('EWR', 'DEN'), ('EWR', 'MCO'), ('EWR', 'BOS'), ('EWR', 'JAX'), ('EWR', 'CHS'), ('EWR', 'MEM'), ('EWR', 'MYR'), ('EWR', 'JAC'), ('EWR', 'RDU'), ('EWR', 'DTW'), ('EWR', 'SAN'), ('EWR', 'MDW'), ('EWR', 'STT'), ('EWR', 'CLE'), ('EWR', 'EGE'), ('EWR', 'DCA'), ('EWR', 'AVL'), ('EWR', 'STL'), ('EWR', 'BUF'), ('EWR', 'IND'), ('EWR', 'MKE'), ('EWR', 'PWM'), ('EWR', 'SAV'), ('EWR', 'SYR'), ('EWR', 'CMH'), ('EWR', 'ROC'), ('EWR', 'BWI'), ('EWR', 'BTV'), ('EWR', 'DAY'), ('EWR', 'HOU'), ('EWR', 'ALB'), ('EWR', 'BDL'), ('EWR', 'SLC'), ('EWR', 'PIT'), ('EWR', 'HNL'), ('EWR', 'MHT'), ('EWR', 'MSN'), ('EWR', 'GSO'), ('EWR', 'CVG'), ('EWR', 'AUS'), ('EWR', 'RIC'), ('EWR', 'GSP'), ('EWR', 'GRR'), ('EWR', 'MCI'), ('EWR', 'BNA'), ('EWR', 'SAT'), ('EWR', 'SDF'), ('EWR', 'PDX'), ('EWR', 'OMA'), ('EWR', 'BQN'), ('EWR', 'TUL'), ('EWR', 'TYS'), ('EWR', 'OKC'), ('EWR', 'PVD'), ('EWR', 'DSM'), ('EWR', 'ORF'), ('EWR', 'XNA'), ('EWR', 'MSY'), ('EWR', 'CAE'), ('EWR', 'PHL'), ('EWR', 'HDN'), ('EWR', 'BZN'), ('EWR', 'MTJ'), ('EWR', 'SBN'), ('EWR', 'TVC'), ('EWR', 'ANC'), ('EWR', 'LGA'), ('IAH', 'LGA'), ('IAH', 'JFK'), ('LGA', 'ATL'), ('LGA', 'IAD'), ('LGA', 'ORD'), ('LGA', 'DFW'), ('LGA', 'FLL'), ('LGA', 'MSP'), ('LGA', 'DTW'), ('LGA', 'MIA'), ('LGA', 'BWI'), ('LGA', 'MCO'), ('LGA', 'DEN'), ('LGA', 'PBI'), ('LGA', 'XNA'), ('LGA', 'MKE'), ('LGA', 'RSW'), ('LGA', 'TPA'), ('LGA', 'CLT'), ('LGA', 'CMH'), ('LGA', 'CLE'), ('LGA', 'STL'), ('LGA', 'RDU'), ('LGA', 'BNA'), ('LGA', 'PHL'), ('LGA', 'MDW'), ('LGA', 'SRQ'), ('LGA', 'DCA'), ('LGA', 'CAK'), ('LGA', 'MSY'), ('LGA', 'BOS'), ('LGA', 'MEM'), ('LGA', 'BUF'), ('LGA', 'PIT'), ('LGA', 'MCI'), ('LGA', 'CRW'), ('LGA', 'CVG'), ('LGA', 'GRR'), ('LGA', 'RIC'), ('LGA', 'ROC'), ('LGA', 'TYS'), ('LGA', 'BHM'), ('LGA', 'PWM'), ('LGA', 'EYW'), ('LGA', 'GSO'), ('LGA', 'HOU'), ('LGA', 'JAX'), ('LGA', 'BTV'), ('LGA', 'CHS'), ('LGA', 'SAV'), ('LGA', 'SDF'), ('LGA', 'IND'), ('LGA', 'DAY'), ('LGA', 'BGR'), ('LGA', 'MSN'), ('LGA', 'ORF'), ('LGA', 'OMA'), ('LGA', 'DSM'), ('LGA', 'GSP'), ('LGA', 'ILM'), ('LGA', 'SYR'), ('LGA', 'SBN'), ('LGA', 'LEX'), ('LGA', 'MHT'), ('LGA', 'CAE'), ('LGA', 'CHO'), ('LGA', 'AVL'), ('LGA', 'TVC'), ('LGA', 'MYR'), ('JFK', 'MIA'), ('JFK', 'BQN'), ('JFK', 'MCO'), ('JFK', 'PBI'), ('JFK', 'TPA'), ('JFK', 'LAX'), ('JFK', 'BOS'), ('JFK', 'ATL'), ('JFK', 'SFO'), ('JFK', 'RSW'), ('JFK', 'SJU'), ('JFK', 'PHX'), ('JFK', 'BUF'), ('JFK', 'LAS'), ('JFK', 'MSY'), ('JFK', 'SLC'), ('JFK', 'FLL'), ('JFK', 'ROC'), ('JFK', 'SYR'), ('JFK', 'SRQ'), ('JFK', 'SEA'), ('JFK', 'RDU'), ('JFK', 'CLT'), ('JFK', 'MSP'), ('JFK', 'PIT'), ('JFK', 'SAN'), ('JFK', 'DCA'), ('JFK', 'JAX'), ('JFK', 'ORD'), ('JFK', 'DTW'), ('JFK', 'BWI'), ('JFK', 'HNL'), ('JFK', 'AUS'), ('JFK', 'BTV'), ('JFK', 'STT'), ('JFK', 'IAD'), ('JFK', 'PWM'), ('JFK', 'HOU'), ('JFK', 'LGB'), ('JFK', 'BUR'), ('JFK', 'CLE'), ('JFK', 'IND'), ('JFK', 'CMH'), ('JFK', 'BNA'), ('JFK', 'DFW'), ('JFK', 'CVG'), ('JFK', 'PHL'), ('JFK', 'DEN'), ('JFK', 'EGE'), ('JFK', 'ORF'), ('JFK', 'PDX'), ('JFK', 'SJC'), ('JFK', 'CHS'), ('JFK', 'OAK'), ('JFK', 'SMF'), ('JFK', 'SAT'), ('JFK', 'PSE'), ('JFK', 'MEM'), ('JFK', 'RIC'), ('JFK', 'PSP'), ('JFK', 'ACK'), ('JFK', 'MCI'), ('JFK', 'ABQ'), ('JFK', 'MVY'), ('JFK', 'STL'), ('JFK', 'JAC'), ('JFK', 'SDF'), ('JFK', 'MKE'), ('JFK', 'BHM')]

计算图的平均边密度

nx.draw_networkx(FG, with_labels=True)
nx.algorithms.degree_centrality(FG)
plt.show()
# 图的平均边密度
print(nx.density(FG))

图中所有路径的平均最短路径长度

#图中所有路径的平均最短路径长度
print(nx.average_shortest_path_length(FG))

#对于一个度为k的节点-它的邻居度的平均值是多少

# k:相邻有几个可以飞的机场,就有几个度
result = nx.average_degree_connectivity(FG)
print(result)

#{86: 3.1511627906976742, 3: 75.0, 69: 3.7246376811594204, 70: 2.4571428571428573, 2: 77.27142857142857, 1: 75.66666666666667}

计算航线

# 找出所有 JAX 到 DFW 的航线
for path in nx.all_simple_paths(FG, source='JAX', target='DFW'):
print(path) #找出从JAX到DFW的dijkstra路径。
# 按照距离
dijpath = nx.dijkstra_path(FG, source='JAX', target='DFW')
print(dijpath)
# 按照时间
short_time = nx.dijkstra_path(FG, source='JAX', target='DFW', weight='air_time')
print(short_time)

  • 起始点和目的地可以作为节点,其他信息应当作为节点或边属性;单条边可以被认为是一段旅程。这样的旅程将有不同的时间,航班号,飞机尾号等相关信息。
  • 注意到年,月,日和时间信息分散在许多列;想创建一 个包含所有这些信息的日期时间列,还需要将预计的 (scheduled)和实际的(actual)到达离开时间分开;最终 应该有4个日期时间列(预计到达时间、预计起飞时间、 实际到达时间和实际起飞时间)
  • 时间格式问题
  • 数据类型问题
  • NaN值的麻烦

参考:https://juejin.cn/post/7014324199896383525

基于python的数学建模---机场航线设计的更多相关文章

  1. Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理

    基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客  QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...

  2. 《基于Python的GMSSL实现》课程设计个人报告

    <基于Python的GMSSL实现>课程设计个人报告 一.基本信息 姓名:刘津甫 学号:20165234 题目:GMSSL基于python的实现 指导老师:娄嘉鹏 完成时间:2019年5月 ...

  3. 使用Python scipy linprog 线性规划求最大值或最小值(使用Python学习数学建模笔记)

    函数格式 scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method='simp ...

  4. Python数学建模-01.新手必读

    Python 完全可以满足数学建模的需要. Python 是数学建模的最佳选择之一,而且在其它工作中也无所不能. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数学 ...

  5. Python小白的数学建模课-A1.国赛赛题类型分析

    分析赛题类型,才能有的放矢. 评论区留下邮箱地址,送你国奖论文分析 『Python小白的数学建模课 @ Youcans』 带你从数模小白成为国赛达人. 1. 数模竞赛国赛 A题类型分析 年份 题目 要 ...

  6. Python小白的数学建模课-15.图论基本概念

    图论中所说的图,不是图形图像或地图,而是指由顶点和边所构成的图形结构. 图论不仅与拓扑学.计算机数据结构和算法密切相关,而且正在成为机器学习的关键技术. 本系列结合数学建模的应用需求,来介绍 Netw ...

  7. Python小白的数学建模课-18.最小生成树问题

    最小生成树(MST)是图论中的基本问题,具有广泛的实际应用,在数学建模中也经常出现. 路线设计.道路规划.官网布局.公交路线.网络设计,都可以转化为最小生成树问题,如要求总线路长度最短.材料最少.成本 ...

  8. Python数学建模-02.数据导入

    数据导入是所有数模编程的第一步,比你想象的更重要. 先要学会一种未必最佳,但是通用.安全.简单.好学的方法. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数据导入 ...

  9. Python小白的数学建模课-A1.2021年数维杯C题(运动会优化比赛模式探索)探讨

    Python小白的数学建模课 A1-2021年数维杯C题(运动会优化比赛模式探索)探讨. 运动会优化比赛模式问题,是公平分配问题 『Python小白的数学建模课 @ Youcans』带你从数模小白成为 ...

  10. Python小白的数学建模课-05.0-1规划

    0-1 规划不仅是数模竞赛中的常见题型,也具有重要的现实意义. 双十一促销中网购平台要求二选一,就是互斥的决策问题,可以用 0-1规划建模. 小白学习 0-1 规划,首先要学会识别 0-1规划,学习将 ...

随机推荐

  1. LVGL 入门使用教程

    一.准备资料 开发板:ESP32-S3 开发环境:VS Code + PlatformIO 串口屏驱动 TFT-eSPI:https://github.com/Bodmer/TFT_eSPI 触摸驱动 ...

  2. 点赞和取消点赞实现Redis缓存(只思路)

    思路:点赞.取消点赞 --> Redis --> (每两个小时)存到数据库(MySQL),所以就相当于每次查询或者存储都需要先经过Redis,而查询的目的是为了判断用户的点赞状态(已点赞o ...

  3. filebeat读取超链接日志 symlinks

    filebeat读取超链接日志文件,还需要增加配置上额外的参数:symlinks: true 符号链接选项允许Filebeat除常规文件外,可以收集符号链接.收集符号链接时,即使报告了符号链接的路径, ...

  4. Kubernetes实践技巧:升级为集群

    高可用 前面我们课程中的集群是单 master 的集群,对于生产环境风险太大了,非常有必要做一个高可用的集群,这里的高可用主要是针对控制面板来说的,比如 kube-apiserver.etcd.kub ...

  5. Elasitcsearch7.X集群/索引备份与恢复实战

    文章转载自:https://mp.weixin.qq.com/s/_0RlojDsE30CeDSyLNP44w 1.问题引出 ES中文社区中,有如下问题: 问题1:存储数据,data目录从一个机器直接 ...

  6. windows系统下使用bat脚本文件设置 tomcat 系统环境变量

    说明:在一个bat文件中设置tomcat环境变量后,不能直接使用,需要另起一个bat文件才能使用 号开头的行不要写在bat文件中 # tomcat1.bat # 这个bat文件实现的功能:设置环境变量 ...

  7. kubernetes kubectl 命令自动补全

    yum install -y bash-completion source /usr/share/bash-completion/bash_completion source <(kubectl ...

  8. 移动端touch拖动事件和click事件冲突问题解决

    通过一个悬浮球交互功能的案例来阐述问题,以及解决办法. 实现效果 类似微信里的悬浮窗效果,苹果手机的悬浮球功能效果 可以点击拖动,然后吸附在窗口边缘 点击悬浮球,可以跳转界面,或者更改悬浮球的形态 准 ...

  9. [Android开发学iOS系列] 快速上手UIKit

    快速上手iOS UIKit UIKit是苹果官方的framework, 其中包含了各种UI组件, window和view, 事件处理, 交互, 动画, 资源管理等基础设施支持. 按照前面的介绍, 用U ...

  10. flutter系列之:builder为构造器而生

    目录 简介 Builder StatefulBuilder LayoutBuilder 总结 简介 flutter中有很多种Builder,虽然所有的builder都是构造器,但是不同的builder ...