python小练习之航空公司数据练习题(二)

写在开头:这一节的内容是根据家庭作业来的,我们会对家庭作业中的问题展开的进行代码的运行与讲解,然后将代码进行封装直接跑出所有程序,数据的话会放在百度网盘以供下载。

航空公司数据匹配

今天要完成的一个小任务就是利用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'])
  • 15
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值