数据集 拿走:

链接: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. 字节跳动 DanceCC 工具链系列之Xcode LLDB耗时监控统计方案

    作者:李卓立 仲凯宁 背景介绍 在<字节跳动 DanceCC 工具链系列之Swift 调试性能的优化方案>[1]一文中,我们介绍了如何使用自定义的工具链,来针对性优化调试器的性能,解决大型 ...

  2. java8 新特性 -Optional的常见用法

    1. Optional 一. 简介 Opitonal是java8引入的一个新类,目的是为了解决空指针异常问题.本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为 ...

  3. 腾讯云即时通信 IM 服务 实例项目

    腾讯云即时通信 IM 服务  https://github.com/tencentyun/TIMSDK

  4. ProxySQL 审计

    1.审计日志 ProxySQL 2.0.5 引入了审计日志.此功能允许跟踪某些连接活动.要启用此功能,需要配置变量 mysql-auditlog_filename,也就是审计日志的文件名.此变量的默认 ...

  5. 第六章:Django 综合篇

    前面五章,已经将Django最主要的五大系统介绍完毕,除了这些主要章节,还有很多比较重要的内容,比如开发流程相关.安全.本地化与国际化.常见工具和一些框架核心功能.这些内容的篇幅都不大,但整合起来也是 ...

  6. ExecutorService、Callable、Future实现有返回结果的多线程原理解析

    原创/朱季谦 在并发多线程场景下,存在需要获取各线程的异步执行结果,这时,就可以通过ExecutorService线程池结合Callable.Future来实现. 我们先来写一个简单的例子-- pub ...

  7. C++面向对象编程之类的写法

    1.头文件中的防卫式声明 例如自己要建复数complex类,可以建立一个complex.h的头文件. 头文件中必须先写防卫式声明: #ifndef __COMPLEX__ #define __COMP ...

  8. Python全栈工程师之从网页搭建入门到Flask全栈项目实战(1) - ES6标准入门和Flex布局

    1.简述 1.什么是ES6?ES6, 全称 ECMAScript 6.0,是 JavaScript 的下一个版本标准,2015年6月份发版.ES6的主要目的是为了解决 ES5 的先天不足. 2.了解E ...

  9. (Java初学篇)IDEA项目新建流程和软件配置优化以及怎么彻底删除项目

    相信很多小伙伴们在初学 Java 时都会出现这样的情况,就是在网上一顿搜索加捣鼓终于把 JDK 和IDEA 这两款软件安装配置好,但是发现面对这个陌生的软件此时却无从下手,那么接下来我就给大家简单地介 ...

  10. 魔改editormd组件,优化ToC渲染效果

    前言 我的StarBlog博客目前使用 editor.md 组件在前端渲染markdown文章,但这个组件自动生成的ToC(内容目录)不是很美观,我之前魔改过一个树形组件 BootStrap-Tree ...