爱数课实验 | 飞机失事事故探索_数据



领域:交通


简介:对1906年到2015年期间飞机失事事故数据进行可视化分析。




数据:

./dataset/Airplane_Crashes_and_Fatalities_Since_1908_.csv


虽然飞机失事的概率跟其他的交通事故相比要低得多,但是一旦出现飞机失事,其死亡率却是非常高的。这个数据横跨1906年到2015年,记录期间发生每一个坠机事故。其中不仅包含民航失事事件,还包含早期军队用机的飞机坠毁事故。表1展示了该数据集的每一个字段及其含义。

表 1 飞机失事事故数据集变量

变量

含义

Date

日期

Location

事故发生地址

Operator

航空公司

Type

失事飞机型号

Aboard

机上人员

Fatalities

死亡人数

Summary

事故简述


爱数课实验 | 飞机失事事故探索_数据_02

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()


爱数课实验 | 飞机失事事故探索_数据_03


#查看数据集的基本统计信息
content.info()

爱数课实验 | 飞机失事事故探索_数据_04

根据基本统计信息,可以看到整个数据集共有5268条数据,除了日期字段外,其他的字段都存在一定的缺失值。

2、每年发生事故的次数

取出时间列,再将其分割取出年份并作为新的一列,统计每个年份出现的频率作为每年发生事故的次数,最后用柱状图进行可视化。

#取出时间列
content["Date"]


爱数课实验 | 飞机失事事故探索_数据_05


#将日期列中的年份取出并将其作为一个新的字段,命名为"year"
content["year"] = [item[2] for item in content['Date'].str.split('/')]
content.head()

爱数课实验 | 飞机失事事故探索_数据集_06

#统计每个年份出现的频率并将其作为作为每年发生事故的次数
frequence = content['year'].groupby(content['year']).count()
df = frequence.sort_values()
df

爱数课实验 | 飞机失事事故探索_柱状图_07


#用柱状图展示飞机失事事故最多的二十个年份
import matplotlib.pyplot as plt
plt.figure(figsize=(18,10))
df[-20:].plot.bar()

爱数课实验 | 飞机失事事故探索_柱状图_08

3、飞机失事死亡率

该部分计算飞机失事的死亡率情况,统计每个航空公司的平均死亡率,找出零死亡率的航空公司。

#查看数据集的缺失情况
missing_values_count = content.isnull().sum()
missing_values_count[:]

爱数课实验 | 飞机失事事故探索_柱状图_09


#处理空缺值
content["Aboard"][content["Aboard"]==""]=np.nan
content["Fatalities"][content["Fatalities"]==""]=np.nan
#死亡率=死亡人员/机上人员
content["death_rate"] = content["Fatalities"] / content["Aboard"]
content

爱数课实验 | 飞机失事事故探索_数据_10

爱数课实验 | 飞机失事事故探索_数据集_11


#计算每个航空公司的平均死亡率
death_rate_average = content.groupby(content["Operator"]).death_rate.agg(np.mean)
death_rate_average.sort_values().head(20)

爱数课实验 | 飞机失事事故探索_数据_12


#用柱状图展示死亡率最小的前十五个航空公司的死亡率(不包含零死亡率)
plt.figure(figsize=(15,10))
death_rate_average.sort_values()[14:29].plot.bar()

爱数课实验 | 飞机失事事故探索_数据_13

#计算不同飞机型号的平均死亡率
death_rate_average2 = content.groupby(content["Type"]).death_rate.agg(np.mean)
death_rate_average2.sort_values().head(50)

爱数课实验 | 飞机失事事故探索_数据集_14

爱数课实验 | 飞机失事事故探索_柱状图_15

爱数课实验 | 飞机失事事故探索_柱状图_16

可以看前32个机型的死亡率均为零。

#用柱状图展示死亡率最小的前三十个飞机型号的死亡率
plt.figure(figsize=(15,10))
death_rate_average2.sort_values()[32:62].plot.bar()

爱数课实验 | 飞机失事事故探索_柱状图_17

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]

爱数课实验 | 飞机失事事故探索_数据_18


df1=pd.DataFrame.from_dict(stat_operator, orient='index')
df2=df1.sort_values(by=0 , ascending=False)
df2

爱数课实验 | 飞机失事事故探索_柱状图_19


#用柱状图展示死亡率最小的前三十个飞机型号的死亡率
plt.figure(figsize=(30,30))
df2[0:30].plot.bar()

爱数课实验 | 飞机失事事故探索_数据_20

5、统计发生最多事故航空每年事故次数

根据上一节我们可以知道历史累计发生事故最多的航空公司时​​Aeroflot​​,现在查看该公司每年发生事故的次数。

#筛选出航空公司为Aeroflot的所有数据
df= content[content["Operator"] == "Aeroflot"]
df

爱数课实验 | 飞机失事事故探索_数据集_21

#统计该公司每年发生事故的频率并以柱状图展示
frequence=df['year'].groupby(content['year']).count().sort_values()
plt.figure(figsize=(15,10))
frequence.plot.bar()

爱数课实验 | 飞机失事事故探索_柱状图_22