爱数课实验 | 飞机失事事故探索
转载
领域:交通
简介:对1906年到2015年期间飞机失事事故数据进行可视化分析。
数据:
./dataset/Airplane_Crashes_and_Fatalities_Since_1908_.csv
虽然飞机失事的概率跟其他的交通事故相比要低得多,但是一旦出现飞机失事,其死亡率却是非常高的。这个数据横跨1906年到2015年,记录期间发生每一个坠机事故。其中不仅包含民航失事事件,还包含早期军队用机的飞机坠毁事故。表1展示了该数据集的每一个字段及其含义。
表 1 飞机失事事故数据集变量
变量 | 含义 |
Date | 日期 |
Location | 事故发生地址 |
Operator | 航空公司 |
Type | 失事飞机型号 |
Aboard | 机上人员 |
Fatalities | 死亡人数 |
Summary | 事故简述 |
1、读入数据
#忽略警告信息
import warnings
warnings.filterwarnings("ignore")
#导包
import pandas as pd
import numpy as np
#读入数据,并查看前五行
content = pd.read_csv('./dataset/Airplane_Crashes_and_Fatalities_Since_1908_.csv')
content.head()
#查看数据集的基本统计信息
content.info()
根据基本统计信息,可以看到整个数据集共有5268条数据,除了日期字段外,其他的字段都存在一定的缺失值。
2、每年发生事故的次数
取出时间列,再将其分割取出年份并作为新的一列,统计每个年份出现的频率作为每年发生事故的次数,最后用柱状图进行可视化。
#将日期列中的年份取出并将其作为一个新的字段,命名为"year"
content["year"] = [item[2] for item in content['Date'].str.split('/')]
#统计每个年份出现的频率并将其作为作为每年发生事故的次数
frequence = content['year'].groupby(content['year']).count()
df = frequence.sort_values()
df
#用柱状图展示飞机失事事故最多的二十个年份
import matplotlib.pyplot as plt
plt.figure(figsize=(18,10))
df[-20:].plot.bar()
3、飞机失事死亡率
该部分计算飞机失事的死亡率情况,统计每个航空公司的平均死亡率,找出零死亡率的航空公司。
#查看数据集的缺失情况
missing_values_count = content.isnull().sum()
missing_values_count[:]
#处理空缺值
content["Aboard"][content["Aboard"]==""]=np.nan
content["Fatalities"][content["Fatalities"]==""]=np.nan
#死亡率=死亡人员/机上人员
content["death_rate"] = content["Fatalities"] / content["Aboard"]
content
#计算每个航空公司的平均死亡率
death_rate_average = content.groupby(content["Operator"]).death_rate.agg(np.mean)
death_rate_average.sort_values().head(20)
#用柱状图展示死亡率最小的前十五个航空公司的死亡率(不包含零死亡率)
plt.figure(figsize=(15,10))
death_rate_average.sort_values()[14:29].plot.bar()
#计算不同飞机型号的平均死亡率
death_rate_average2 = content.groupby(content["Type"]).death_rate.agg(np.mean)
death_rate_average2.sort_values().head(50)
可以看前32个机型的死亡率均为零。
#用柱状图展示死亡率最小的前三十个飞机型号的死亡率
plt.figure(figsize=(15,10))
death_rate_average2.sort_values()[32:62].plot.bar()
4、各航空历史累计飞机失事的次数
统计各航空历史累计飞机失事次数
# 统计最大发生事故航空
stat_operator = {}
for i in content["Operator"]:
if i not in stat_operator.keys():
stat_operator[i] = 1
else:
stat_operator[i] += 1
sorted_stat_operator = sorted(stat_operator.items(), key=lambda x:x[1], reverse=True)
sorted_stat_operator[0:20]
df1=pd.DataFrame.from_dict(stat_operator, orient='index')
df2=df1.sort_values(by=0 , ascending=False)
df2
#用柱状图展示死亡率最小的前三十个飞机型号的死亡率
plt.figure(figsize=(30,30))
df2[0:30].plot.bar()
5、统计发生最多事故航空每年事故次数
根据上一节我们可以知道历史累计发生事故最多的航空公司时Aeroflot
,现在查看该公司每年发生事故的次数。
#筛选出航空公司为Aeroflot的所有数据
df= content[content["Operator"] == "Aeroflot"]
df
#统计该公司每年发生事故的频率并以柱状图展示
frequence=df['year'].groupby(content['year']).count().sort_values()
plt.figure(figsize=(15,10))
frequence.plot.bar()