写在开头:这一节的内容是根据家庭作业来的,我们会对家庭作业中的问题展开的进行代码的运行与讲解,然后将代码进行封装直接跑出所有程序,数据的话会放在百度网盘以供下载。
航空公司数据匹配
今天要完成的一个小任务就是利用pandas去匹配航空公司数据,会给定几个简单的题目,然后对每个任务分别进行完成。首先呢我们需要对数据的字符段进行说明。
数据段说明
变量名 | 解释说明 |
---|---|
year、month、day | 起飞日期 |
dep_time、arr_time | 起飞(departure)时间和到达时间。格式:HHMM,当地时间。 |
sched_dep_time、sched_arr_time | 计划起飞时间、计划到达时间 |
dep_delay、arr_delay | 起飞延误、到达延误 |
hour、minute | 计划起飞时间拆分为 hour 和 minute |
carrier | 承运商缩写 |
tailnum | 飞机尾号 |
origin、dest | 始发地、目的地 |
airtime | 空中时间 |
distance | 机场间距 |
未说明数据可以忽略。
问题展示
问题 | 内容 |
---|---|
问题1a | 寻找达到延误2小时或者更多的航班 |
问题1b | 寻找飞往IAH或HOU机场的航班 |
问题1c | 寻找联合航空、美利坚航空和三角洲航空的航班 |
问题1d | 寻找7、8、9月的航班 |
问题1e | 寻找到达延误2小时但出发时间没有延误的航班 |
问题1f | 寻找延误1小时但飞行弥补30分钟的航班的航班 |
问题2 | 计算每驾飞机在第一次延误超过1小时前的飞行次数 |
问题3 | 找到至少两个航空公司直达的目的地,并且对该目的地根据航班数对航空公司进行排序 |
问题4 | 验证是否每架飞机只属于一个航空公司 |
问题解答
下面跟着笔者的思路一道题一道题的完成问题吧,当然每个题的解不唯一,
数据查看
在进行研究前我们先来加载数据,然后看一看数据逇整体信息,
import os
import pandas as pd
import numpy as np
os.chdir('C:\\Users\\Hsm\\Desktop\\数据\\fixtures')
flights = pd.read_csv("flights.csv")
print("1.查看数据规模")
print(flights.shape) #观察数据规模
print("-"*40)
print("\n2.查看变量名")
print(flights.columns) #观察数据变量名
print("-"*40)
print("\n3.查看数据基本信息")
flights.info() #观察变量数量与类型
print("-"*40)
flights.drop_duplicates() #重复值处理
print("\n4.统计缺失值") #缺失值统计查看
nulls = np.sum(flights.isnull())
nullcols = nulls.loc[(nulls != 0)]
print(nullcols)
print("这里有",len(nullcols),"个变量存在缺失值")
1.查看数据规模
(336776, 19)
----------------------------------------
2.查看变量名
Index(['year', 'month', 'day', 'dep_time', 'sched_dep_time', 'dep_delay',
'arr_time', 'sched_arr_time', 'arr_delay', 'carrier', 'flight',
'tailnum', 'origin', 'dest', 'air_time', 'distance', 'hour', 'minute',
'time_hour'],
dtype='object')
----------------------------------------
3.查看数据基本信息
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 336776 entries, 0 to 336775
Data columns (total 19 columns):
year 336776 non-null int64
month 336776 non-null int64
day 336776 non-null int64
dep_time 328521 non-null float64
sched_dep_time 336776 non-null int64
dep_delay 328521 non-null float64
arr_time 328063 non-null float64
sched_arr_time 336776 non-null int64
arr_delay 327346 non-null float64
carrier 336776 non-null object
flight 336776 non-null int64
tailnum 334264 non-null object
origin 336776 non-null object
dest 336776 non-null object
air_time 327346 non-null float64
distance 336776 non-null float64
hour 336776 non-null float64
minute 336776 non-null float64
time_hour 336776 non-null object
dtypes: float64(8), int64(6), object(5)
memory usage: 48.8+ MB
----------------------------------------
4.统计缺失值
dep_time 8255
dep_delay 8255
arr_time 8713
arr_delay 9430
tailnum 2512
air_time 9430
dtype: int64
这里有 6 个变量存在缺失值
这里需要注意的是缺失值,这意味着我们在后面进行匹配是有必要考虑缺失情况进行补充。
问题1a
寻找达到延误2小时或者更多的航班
"""
要求:到达延误2小时或更多的航班
思路:寻找arr_delay大于120的航班,或者到达时间比预计达到时间多120分钟以上的航班(因为有航班延误数据缺失)
"""
arr2 = flights[flights['arr_delay'] >= 120] #选择延误arr_delay指标大于2小时的
arr2_na = flights[(flights['arr_delay'].isnull())] #指定arr_delay指标为空的数据,在其中进行寻找
arr2_na = arr2_na[arr2_na['arr_time']-arr2_na['sched_arr_time'] >= 200] #通过到达时间减去预计到达时间来判断是否延误两小时以上
#########################
#注意:
#考虑到如果存在00:05到达而预计23:30到达的航班,需要对时间进行咵天处理。反之也是如此
#但是由于缺失arr_delay数据中不存在类似于上述的咵天处理情况,因此直接使用到达与预计到达时间差作为判断指标是可行的
#########################
answer = pd.concat((arr2, arr2_na), axis=0) #将两段数据进行连接
answer.iloc[:5]
问题1b
寻找飞往IAH或HOU机场的航班
"""
要求:寻找到达威廉·佩特斯·霍比机场(HOU)和乔治·布什洲际机场(IAH)的航班
思路:首先去掉停飞的航班(无起飞时间dep_time),然后对dest进行匹配
"""
dest_flights = flights.dropna(axis = 0, subset = ['dep_time']) #删除停飞航班信息
answer = dest_flights[
(dest_flights['dest'] == 'HOU') |
(dest_flights['dest'] == 'IAH')
]
answer.iloc[:5]
问题1c
寻找联合航空(UA)、美利坚航空(AA)和三角洲航空(DL)的航班
"""
要求:寻找来自联合航空(UA)、美利坚航空(AA)、三角洲航空(DL)的航班
思路:首先去掉停飞的航班(无起飞时间dep_time),然后对carrier进行匹配
"""
carrier_flights = flights.dropna(subset = ['dep_time'])
answer = carrier_flights[
(carrier_flights['carrier'] == 'UA') |
(carrier_flights['carrier'] == 'AA') |
(carrier_flights['carrier'] == 'DL')
]
answer.iloc[:5]
问题1d
寻找7、8、9月的航班
"""
要求:寻找7月、8月、9月出发的航班
思路:首先去掉停飞的航班(无起飞时间dep_time),观察到数据最多为9月,于是匹配大于等于7月出发的即可
"""
month_flights = flights.dropna(subset = ['dep_time'])
answer = month_flights[
(7 <= month_flights['month'])