基于python的数学建模---机场航线设计
数据集 拿走:
链接: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的数学建模---机场航线设计的更多相关文章
- Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理
基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...
- 《基于Python的GMSSL实现》课程设计个人报告
<基于Python的GMSSL实现>课程设计个人报告 一.基本信息 姓名:刘津甫 学号:20165234 题目:GMSSL基于python的实现 指导老师:娄嘉鹏 完成时间:2019年5月 ...
- 使用Python scipy linprog 线性规划求最大值或最小值(使用Python学习数学建模笔记)
函数格式 scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method='simp ...
- Python数学建模-01.新手必读
Python 完全可以满足数学建模的需要. Python 是数学建模的最佳选择之一,而且在其它工作中也无所不能. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数学 ...
- Python小白的数学建模课-A1.国赛赛题类型分析
分析赛题类型,才能有的放矢. 评论区留下邮箱地址,送你国奖论文分析 『Python小白的数学建模课 @ Youcans』 带你从数模小白成为国赛达人. 1. 数模竞赛国赛 A题类型分析 年份 题目 要 ...
- Python小白的数学建模课-15.图论基本概念
图论中所说的图,不是图形图像或地图,而是指由顶点和边所构成的图形结构. 图论不仅与拓扑学.计算机数据结构和算法密切相关,而且正在成为机器学习的关键技术. 本系列结合数学建模的应用需求,来介绍 Netw ...
- Python小白的数学建模课-18.最小生成树问题
最小生成树(MST)是图论中的基本问题,具有广泛的实际应用,在数学建模中也经常出现. 路线设计.道路规划.官网布局.公交路线.网络设计,都可以转化为最小生成树问题,如要求总线路长度最短.材料最少.成本 ...
- Python数学建模-02.数据导入
数据导入是所有数模编程的第一步,比你想象的更重要. 先要学会一种未必最佳,但是通用.安全.简单.好学的方法. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数据导入 ...
- Python小白的数学建模课-A1.2021年数维杯C题(运动会优化比赛模式探索)探讨
Python小白的数学建模课 A1-2021年数维杯C题(运动会优化比赛模式探索)探讨. 运动会优化比赛模式问题,是公平分配问题 『Python小白的数学建模课 @ Youcans』带你从数模小白成为 ...
- Python小白的数学建模课-05.0-1规划
0-1 规划不仅是数模竞赛中的常见题型,也具有重要的现实意义. 双十一促销中网购平台要求二选一,就是互斥的决策问题,可以用 0-1规划建模. 小白学习 0-1 规划,首先要学会识别 0-1规划,学习将 ...
随机推荐
- 手写tomcat——编写一个echo http服务器
核心代码如下: public class DiyTomcat1 { public void run() throws IOException { ServerSocket serverSocket = ...
- python的环境,你再也不用愁-conda
Conda Guide Conda简介 conda是一个包,依赖和环境管理工具,适用于多种语言,如: Python, R, Scala, Java, Javascript, C/ C++, FORTR ...
- ConcurrentDictionary<T,V> 的这两个操作不是原子性的
好久不见,马甲哥封闭居家半个月,记录之前遇到的一件小事. ConcurrentDictionary<TKey,TValue>绝大部分api都是线程安全且原子性的, 唯二的例外是接收工厂委托 ...
- 分布式安装部署MinIO
官方文档地址:http://docs.minio.org.cn/docs/master/distributed-minio-quickstart-guide 前提条件:分布式Minio至少需要4个硬盘 ...
- Elastic:使用Kafka部署Elastic Stack
- 文档的CURD
Index方式,需要指定ID 如果ID不存在,创建新的文档,状态是created 如果ID存在,会先删除现有ID的文档,然后创建一个新文档,ID数加1,状态是updated PUT test/_doc ...
- Grafana的基本概念
Grafana基本概念 首先Grafana是一个通用的可视化工具.'通用'意味着Grafana不仅仅适用于展示Prometheus下的监控数据,也同样适用于一些其他的数据可视化需求.在开始使用Graf ...
- 《HelloGitHub》第 78 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...
- Optional源码解析与实践
1 导读 NullPointerException在开发过程中经常遇到,稍有不慎小BUG就出现了,如果避免这个问题呢,Optional就是专门解决这个问题的类,那么Optional如何使用呢?让我们一 ...
- nsis插件nsisSlideshow.dll更新
更新至1.7版本,作者wiz0u已解决关于ie9的兼容问题.Good 下载地址: http://wiz0u.free.fr/prog/nsisSlideshow/latest.php