本案例基于Socrata上的开放数据,数据集Airplane_Crashes_and_Fatalities_Since_1908.csv记录了全球自1908年以来的部分空难情况。我们对数据做探索分析:哪些年份的空难较多?哪些航空公司的空难较多? 哪些机型的空难较多? 生还和遇难人数如何?空难原因是什么?

飞机作为目前世上最快的交通工具,这一伟大的发明给人们带来了更为快捷的交通出行,但是也必然存在由于一些不可抗拒的原因(如飞鸟撞击)或人为因素(如劫机)造成的空难。全世界每年死于空难的大约1000人,而死于道路交通空难的达70万人,从这个意义讲,乘飞机也许是最安全的交通方式。但是一旦发生飞机失事,幸存者却寥寥无几。

目录

1.数据说明和读取

列名 类型 含义说明
Date object 日期
Time object 时间
Location object 空难发生地点
Operator object 航空公司,以Military开头代表军用,其余为民用航空公司
Flight # object 航班编号
Route object 飞行航线
Type object 飞机型号
Registration object 注册编号
cn/In object 结构或序列号/线路或机身编号
Aboard float64 登机人数
Fatalities float64 乘客遇难人数
Ground float64 地面遇难人数
Summary object 空难总结

导入需要使用的Python库。

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

data = pd.read_csv("Airplane_Crashes_and_Fatalities_Since_1908.csv")
print(data.shape)
(5268, 13)

首先导入数据,数据总共5268行13列,接着我们随机查看两行数据。

data.sample(2)
Date Time Location Operator Flight # Route Type Registration cn/In Aboard Fatalities Ground Summary
1371 03/26/1955 11:12 Off the Oregon coast Pan American World Airways 845/26 Portland - Honolulu Boeing 377 Stratocruiser 10-26 N1032V 15932 23.0 4.0 0.0 The plane ditched 35 miles off the Oregon coas...
681 11/29/1944 NaN Kenya BOAC NaN NaN Lockheed 18 LodeStar G-AGBW NaN 15.0 15.0 0.0 NaN

可以看到,每一行数据记录了空难航班的机型、航空公司、航班编号、飞行航线、伤亡人数等重要信息。在导入数据后,我们接下来进行初步的探索。

2.空难数据的初步探索

首先我们查看一下数据中每列的缺失情况。

data.isnull().sum()
Date               0
Time            2219
Location          20
Operator          18
Flight #        4199
Route           1706
Type              27
Registration     335
cn/In           1228
Aboard            22
Fatalities        12
Ground            22
Summary          390
dtype: int64

可以看到,日期、空难发生地点、航空公司、飞机型号、登机人数、乘客遇难人数等重要列缺失较少,我们将空难发生地点、航空公司、飞机型号等列的缺失值填充为Unknown(未知),其余列不影响我们后续的分析,在这里我们先不进行更改。

columns = ['Location','Operator','Type']
for column in columns:
    data[column].fillna('Unknown',inplace = True)

接下来使用统计性描述的方法,查看空难数据中的数字型特征(登机人数、乘客遇难人数和地面遇难人数)的各个统计值。

data.describe()
Aboard Fatalities Ground
count 5246.000000 5256.000000 5246.000000
mean 27.554518 20.068303 1.608845
std 43.076711 33.199952 53.987827
min 0.000000 0.000000 0.000000
25% 5.000000 3.000000 0.000000
50% 13.000000 9.000000 0.000000
75% 30.000000 23.000000 0.000000
max 644.000000 583.000000 2750.000000

可以看到单次空难中,乘客遇难人数的最大值达到了583人,地面遇难人数的最大值达到了2750人,接下来我们查看一下这些”最严重”的空难。

根据乘客遇难人数将数据进行降序排序,我们查看乘客遇难人数最多的5次空难。

data.sort_values(axis = 0, by = 'Fatalities', ascending = False).head()
Date Time Location Operator Flight # Route Type Registration cn/In Aboard Fatalities Ground Summary
2963 03/27/1977 17:07 Tenerife, Canary Islands Pan American World Airways / KLM 1736/4805 Tenerife - Las Palmas / Tenerife - Las Palmas Boeing B-747-121 / Boeing B-747-206B N736PA/PH-BUF 19643/11 / 20400/157 644.0 583.0 0.0 Both aircraft were diverted to Tenerife becaus...
3568 08/12/1985 18:56 Mt. Osutaka, near Ueno Village, Japan Japan Air Lines 123 Tokyo - Osaka Boeing B-747-SR46 JA8119 20783/230 524.0 520.0 0.0 The aircraft suffered an aft pressure bulkhead...
4455 11/12/1996 18:40 Near Charkhidadri, India Saudi Arabian Airlines / Kazastan Airlines 763/1907 New Delhi - Dhahran / Chimkent - New Delhi Boeing B-747-168B / Ilyushin IL-76TD HZAIH/UN-76435 22748/555/1023413428 349.0 349.0 0.0 Midair collision 17 km W of New Delhi. The Sa...
2726 03/03/1974 11:41 Near Ermenonville, France Turkish Airlines (THY) 981 Paris - London McDonnell Douglas DC-10-10 TC-JAV 46704/29 346.0 346.0 0.0 The aircraft crashed shortly after takeoff fro...
3562 06/23/1985 07:15 AtlantiOcean, 110 miles West of Ireland Air India 182 Montreal - London Boeing B-747-237B VT-EFO 21473/330 329.0 329.0 0.0 The aircraft broke up in flight and crashed in...

结合数据和历史,乘客遇难人数最多的五次空难分别为:

  • 1.特内里费空难,两架波音747客机在洛司罗迪欧机场的跑道上高速相撞爆炸;
  • 2.日本航空123号班机空难,波音747SR-146型客机在距离东京约100公里的高天原山山脊坠毁;
  • 3.恰尔基达德里撞机事件,沙特阿拉伯航空763号班机与哈萨克斯坦航空1907号班机在新德里附近上空相撞;
  • 4.土耳其航空981号班机空难,麦道DC-10客机坠毁于埃尔芒翁维尔一处森林内;
  • 5.印度航空182号空难,波音747-237B客机在爱尔兰领空爆炸,坠入该国西南部的大西洋

我们发现某一些空难造成的地面人员伤亡非常巨大,最大伤亡达到了2750人,很明显飞机坠入或撞击了城市建筑,我们把地面伤亡人数进行排序分析。

data.sort_values(by = 'Ground',ascending = False).head()
Date Time Location Operator Flight # Route Type Registration cn/In Aboard Fatalities Ground Summary
4803 09/11/2001 08:47 New York City, New York American Airlines 11 Boston - Los Angeles Boeing 767-223ER N334AA 22332/169 92.0 92.0 2750.0 The aircraft was hijacked shortly after it lef...
4804 09/11/2001 09:03 New York City, New York United Air Lines 175 Boston - Los Angeles Boeing B-767-222 N612UA 21873/41 65.0 65.0 2750.0 The aircraft was hijacked shortly after it lef...
4390 01/08/1996 12:43 Kinshasa, Zaire African Air NaN Kinshasa - Kahemba Antonov AN-32B RA-26222 2301 6.0 2.0 225.0 The aircraft failed to gain altitude after tak...
4802 09/11/2001 09:45 Arlington, Virginia. American Airlines 77 Washington D.C. - Los Angeles Boeing B-757-223 N644AA 24602/365 64.0 64.0 125.0 The aircraft was hijacked after taking off fro...
2933 10/13/1976 NaN Santa Cruz, Bolivia Lloyd Aéreo Boliviano NaN Santa Cruz - Viru Boeing B-707-31 N730JP 17671/48 3.0 3.0 113.0 The aircraft failed to climb and crashed into ...

我们看到了911,地面遇难人数最多!2001年9月11日是很多美国人的噩梦,美国航空11号班机、联合航空175号班机遭到恐怖分子劫持,相隔17分钟分别撞向位于纽约的世界贸易中心双塔,造成飞机上的所有人和在建筑物中许多人遇难,这也印证了我们刚才的推论。

接下来我们查看一下生还人数最多的空难,首先我们使用登机人数-乘客遇难人数来计算生还人数。

data['Survivor'] = data['Aboard'] - data['Fatalities']

对生还人数进行降序排序。

data.sort_values(by = 'Survivor',ascending = False).head()
Date Time Location Operator Flight # Route Type Registration cn/In Aboard Fatalities Ground Summary Survivor
4645 07/23/1999 11:25 Tokyo, Japan All Nippon Airways 61 Tokyo, Japan - Chitose, Japan Boeing B-747 NaN NaN 517.0 1.0 0.0 Two minutes after taking off from Haneda Airpo... 516.0
4536 12/28/1997 23:10 Over the PacifiOcean United Air Lines 826 Tokyo - Honolulu Boeing B-747-122 N4723U 19882/175 393.0 1.0 0.0 Two hours into the flight, at FL 310, the plan... 392.0
3640 09/05/1986 06:00 Karachi, Pakistan Pan American World Airways 73 Bombay-Karachi-Frankfurt-New York Boeing B-747-121 N656PA 20351/127 384.0 16.0 1.0 While on the ground, four hijackers opened fir... 368.0
3829 02/24/1989 02:09 Honolulu, Hawaii United Air Lines 811 Los Angeles - Honolulu - Auckland - Sidney Boeing B-747-122 N4713U 19875/89 356.0 9.0 0.0 After leaving Honolulu, on a flight from Los A... 347.0
3378 09/13/1982 12:00 Near Malaga, Spain Spantax 995 Malaga - New York City McDonnell Douglas DC-10-30CF EC-DEG 46962/238 394.0 50.0 0.0 The aircraft crashed during takeoff after inte... 344.0

结合数据和历史,生还人数最多的五次空难分别为:

  • 1.全日空61号班机劫机事件,1999年7月23日,一架波音747-481D被劫持,机长被劫机者刺杀,但飞机最后最终安全返航羽田机场。
  • 2.联合航空826号班机空难,一架波音747-122飞行中遇到晴空湍流,致使103人受伤,一人更因伤势过重不幸身亡。
  • 3.泛美航空73号班机劫机事件,1986年9月5日,一架波音747-121被劫持,劫机目的是袭击以色列国防部,飞机上16人被杀害。
  • 4.联合航空811号班机空难,1989年2月24日,一架波音747-122型客机攀升至22,000~23,000英尺(6,700~7,000米)上空时突然出现爆炸,造成9人遇难。
  • 5.斯班达斯航空995号班机空难,造成50人遇难。

3.空难发生年份的分析

在对空难数据的进行初步探索之后,接下来我们分析一下空难发生的年份。首先我们将发生日期Date转换为Pandas中的时间格式。

data['Date'] = pd.to_datetime(data['Date'])

现在Date已经转成了datetime时间格式,下边我们分析一下每年的空难次数,通过折线图的方法进行展示。

3.1 每年的空难次数

提取空难发生时间中的,对进行分组,计算每年的空难次数,通过折线图的方法进行展示。

plt.figure(figsize=(12,6))

data.groupby(data.Date.dt.year).size().plot(color = 'blue', marker = ".", linewidth = 1)

plt.xlabel('年份')
plt.ylabel('次数')
plt.title('每年的空难次数')
plt.show()

png

可以看到:

  • 从全球范围来看,空难数量是一直呈增加趋势的,在70年代达到顶点,之后总体呈下降趋势。
  • 在40年代中期,60年代末和80年代末都出现了空难的高峰。

3.2 每年的空难乘客遇难人数

将数据按照进行分组后,对每组中乘客遇难人数进行求和,计算每年的乘客遇难人数。

plt.figure(figsize=(12,6))

data.groupby(data.Date.dt.year)['Fatalities'].sum().plot(color = 'red', marker = ".", linewidth = 1)

plt.xlabel('年份')
plt.ylabel('人数')
plt.title('每年的乘客遇难人数')
plt.show()

png

可以看到:

  • 空难的乘客遇难人数也在上世纪60年代末和80年代末达到顶峰,之后总体呈现下降趋势。

3.3 每年的空难遇难率

随着飞机性能的提升和更先进的应急措施,飞机的安全系数逐渐变高,即使遇到空难也能更好的减少人员伤亡。接下来我们通过计算乘客遇难人数与登机人数的比值,分析一下每年空难的死亡率。

plt.figure(figsize=(12,6))

death_ratio = data.groupby(data.Date.dt.year)['Fatalities'].sum()/data.groupby(data.Date.dt.year)['Aboard'].sum()


death_ratio.plot(color = 'olive', marker = ".", linewidth = 1)

plt.xlabel('年份')
plt.ylabel('人数')
plt.title('每年的空难死亡率')
plt.show()

png

从100年的整体来看,空难死亡率逐步下降,从侧面反应了人类飞行技术的进步以及更好的应急措施。

4.空难与航空公司的分析

接下来我们分析一下哪些航空公司的空难数较多。我们将数据按照航空公司进行分组,求出空难最多的前10个航空公司,通过柱状图的方式展现不同航空公司的空难次数。

plt.figure(figsize=(12,6))

data['Operator'].value_counts().head(10).plot(kind='bar')

# 在柱形上方显示计数
counts = data['Operator'].value_counts().values
for index, item in zip(np.arange(10), counts): 
    plt.text(index, item, item, ha="center", va= "bottom", fontsize=12) 
    
plt.xlabel('航空公司')
plt.ylabel('次数')
plt.title('空难次数最多的航空公司')
plt.show()

png

从飞机的归属来看,空难数最多的是俄罗斯国际航空公司(Aeroflot),空难数达到了179起,不愧是战斗民族;其次是美国空军(U.S. Air Force)176起;排在第三的是法国航空(Air France),空难数为70起。

5.军用航班与民用航班的空难分析

我们先从数据中提取军用航班和民用航班的的空难数据,分别保存在Military_flightsCivil_flights中,同时打印各自的空难数。

Military_flights = data[data['Operator'].str.contains('Military')]
Civil_flights = data[~data['Operator'].str.contains('Military')]
print('军用航班空难数:',len(Military_flights),'\n民用航班空难数:',len(Civil_flights))

军用航班空难数: 781 
民用航班空难数: 4487

接下来我们根据空难数进行排序,分析哪些军事机构空难数最多。

print('\n军用航班空难机构排名top10:\n',Military_flights['Operator'].value_counts()[:10])
军用航班空难机构排名top10:
 Military - U.S. Air Force                 176
Military - U.S. Army Air Forces            43
Military - Royal Air Force                 36
Military - U.S. Navy                       36
Military - U.S. Army                       23
Military -Royal Air Force                  22
Military - Indian Air Force                16
Military - German Navy                     15
Military - Afghan Republican Air Force     15
Military - Russian Air Force               14
Name: Operator, dtype: int64

可以看到:美国空军、美国陆军航空兵、美国海军、英国皇家空军、美国陆军位于军用航班空难榜的前五名。从国家军队发生空难的次数来看,在美国发生的空难数远超其他国家,说明了美国在试飞、训练、军演、特殊任务、局部战争中经常出现飞机失事的情况,也从侧面说明了美国在20世纪的军事霸主地位。

接下来,我们通过可视化的方法分析一下军用航班和民用航班的占比,以及将两者每年的空难次数进行对比。

fig,[ax1,ax2] = plt.subplots(1,2,figsize=(16,6))

pd.Series([len(Military_flights),len(Civil_flights)],index = ['军用航班','民用航班']).plot(kind = 'pie',autopct='%1.1f%%',ax = ax1)

Military_flights.groupby(Military_flights.Date.dt.year).size().plot(color = 'darkblue', marker = ".", linewidth = 1,ax = ax2)
Civil_flights.groupby(Civil_flights.Date.dt.year).size().plot(color = 'orange', marker = ".", linewidth = 1,ax = ax2)

ax1.legend(['军用航班','民用航班'])
ax2.legend(['军用航班','民用航班'])
ax2.set_xlabel('年份')
ax2.set_ylabel('次数')
ax2.set_title('军用航班与民用航班每年的空难次数')

plt.show()

png

6.空难与飞机型号的分析

接下来我们分析一下哪些飞机型号的空难数较多。我们将数据按照飞机型号进行分组,求出空难最多的前10个飞机型号,通过柱状图的方式展现不同飞机型号的空难次数。

plt.figure(figsize=(12,6))

data['Type'].value_counts().head(10).plot(kind='bar')

# 在柱形上方显示计数
counts = data['Type'].value_counts().values
for index, item in zip(np.arange(10), counts): 
    plt.text(index, item, item, ha="center", va= "bottom", fontsize=12) 
    
plt.xlabel('飞机型号')
plt.ylabel('次数')
plt.title('空难次数最多的飞机型号')
plt.show()

png

  • 从机型来看,空难数第一的是“道格拉斯DC-3型飞机”,其次是”德哈维兰加拿大DHC-6”,再之后是”道格拉斯DC-47A”,和“DC-47”。
  • 需要说明的是,DC-47实际上就是DC-3的军用型,二战结束之后,大量的DC-47转为民用,这时它们就又用回了DC-3这个型号。
  • DC-3及其军用型的总空难数,在空难数前十的机型的空难之和中,占到了62.5%。

7.空难发生地点和航线的分析

接下来我们分析一下哪些地点的空难数较多。我们将数据按照空难发生地点进行分组,求出空难发生最多的前10个地点,通过柱状图的方式展现不同地点的空难次数。

plt.figure(figsize=(12,6))

data['Location'].value_counts().head(10).plot(kind='bar')

# 在柱形上方显示计数
counts = data['Location'].value_counts().values
for index, item in zip(np.arange(10), counts): 
    plt.text(index, item, item, ha="center", va= "bottom", fontsize=12) 
    
plt.xlabel('飞机型号')
plt.ylabel('次数')
plt.title('空难次数最多的发生地点')
plt.show()

png

可以看到:莫斯科、圣保罗、里约热内卢、马尼拉等城市发生空难的次数较多。接下来我们选取空难次数最多的前10个飞行航线。

plt.figure(figsize=(12,6))

data['Route'].value_counts().head(10).plot(kind='bar')

# 在柱形上方显示计数
counts = data['Route'].value_counts().values
for index, item in zip(np.arange(10), counts): 
    plt.text(index, item, item, ha="center", va= "bottom", fontsize=12) 
    
plt.xlabel('飞行航线')
plt.ylabel('次数')
plt.title('空难次数最多的飞行航线')
plt.show()

png

可以看到:

  • 在日常训练、观光、测试飞行航线造成的空难次数较多。
  • 正式飞行航线中,圣保罗 - 里约热内卢,比亚维森西奥 - 米图,西贡 - 巴黎,波哥大 - 巴兰基亚,圣保罗 - 阿雷格里港等航线空难次数较多。

8.中国飞机的空难分析

接下来,我们单独分析一下中国航班的空难情况。我们首先选取出中国航班,通过在航空公司中匹配关键词ChinaTaiwan,筛选出中国空难的航班数据,保存在变量china_flights中。

china_flights = data[data['Operator'].str.contains('China|Taiwan')]
print('中国飞机的空难记录数为:',len(china_flights),'\n')
print('航空公司分别为:\n',china_flights['Operator'].value_counts())
中国飞机的空难记录数为: 84 

航空公司分别为:
 China National Aviation Corporation                44
China Airlines (Taiwan)                            14
Taiwan Airlines                                     4
Military - Republiof China Air Force                4
China Eastern Airlines                              4
China Southern Airlines                             2
China Northwest Airlines                            2
China Northern Airlines                             2
China Southwest Airlines                            2
China Air Lines                                     1
Air China                                           1
China General Aviation Corporation                  1
Taiwan Aviation                                     1
China Flying Dragon Aviation (Feilong Airlines)     1
China Southwest Airlines / Xiamen Airlines          1
Name: Operator, dtype: int64

可以看到,我们选取出84条中国空难记录,其中国航和中华航空(台湾)空难数最多,其次是台湾航空、中国东航和中国空军。接下来,我们将中国飞机的空难情况按进行分组,分析每年的空难次数。

fig,[ax1,ax2] = plt.subplots(2,1,figsize=(16,20))

china_flights.groupby(china_flights.Date.dt.year).size().plot(color = 'blue', marker = ".", linewidth = 1,ax = ax1)
china_flights.groupby(china_flights.Date.dt.year).size().plot(kind = 'pie',autopct='%1.1f%%',ax = ax2)

ax1.set_xlabel('年份')
ax1.set_ylabel('次数')
ax1.set_title('中国每年的空难次数')
ax2.set_title('中国每年的空难占比')

plt.show()

png

我们可以很明显的看到,中国空难数量在1940年代出现了巨幅的上升,而后又迅速下降。接下来我们单独把1940-1950年的空难发生数据进行分析。

war_flights = china_flights[(china_flights['Date'] >= pd.Timestamp(1940,1,1)) & (china_flights['Date'] <= pd.Timestamp(1950,1,1))]
print('中国在1940-1950年空难次数:',len(war_flights),'\n乘客遇难人数:',war_flights['Fatalities'].sum())
print('中国在1940-1950年空难机型:\n',war_flights['Type'].value_counts())
中国在1940-1950年空难次数: 34 
乘客遇难人数: 374.0
中国在1940-1950年空难机型:
 Douglas C-47                15
Douglas C-53                 4
Douglas DC-3                 4
Unknown                      2
Douglas DC-2                 2
Curtiss C-46                 2
Ford 5-AT Tri-Motor          1
Curtiss C-46, C-47, DC-3     1
Douglas DC-4                 1
Douglas C-54B-5-DO           1
Douglas DC-2-221             1
Name: Type, dtype: int64

可以看到

  • 1940-1950,时间正值二战和解放战争期间。这期间发生空难的机型主要是C-47和C-53两种,这两型飞机是二战中,中国使用的最主要的两种军用运输机。这说明1940年代剧增的空难数的确是战争造成的。
  • 在此期间共发生了34起空难,占到了中国总空难数的40.4%,共有374人遇难。

9.总结

首先我们对部分缺失值进行了填充,分析了几个伤亡最大的空难和对应的历史事件; 接着我们按照时间进行分组,分析了每年的空难发生情况和遇难情况;接着我们按照航空公司进行分组,展示了空难数最多的航空公司和对应的空难次数; 然后我们分别对比了军用航班和民用航班的空难情况;接着分析了不同的飞机型号、不同的航线与不同的失事地点的空难情况;最后选取了中国航班数据,按照时间段分析了中国航空的空难情况。