赞
踩
写在开头:这一节的内容是根据家庭作业来的,我们会对家庭作业中的问题展开的进行代码的运行与讲解,然后将代码进行封装直接跑出所有程序,数据的话会放在百度网盘以供下载。
今天要完成的一个小任务就是利用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'])
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。