关于飞机失事的相关因素——大数据分析
一、选题的背景
一般飞机出现事故,都会付出惨痛的代价。所有只有通过分析飞机空中失事的案例,明确飞机失控的主要潜在因素、威胁、和飞行机组差错,结合事故调查统计分析,提出了预防措施和政策建议,这样才能更好的为今后的飞行带去有效的保障。近年来对于民航客机失事的概率在逐渐减少,但对于民用直升飞机的出事率却屡见不鲜。
二、大数据分析方案
数据集来源:kaggle,网址:https://www.kaggle.com/ 数据集的有效值更新到2023年,数据总计88889行
使用第三方库:运用pandas、matplotlib、numpy、seaborn等库对数据进行可视化。
实现思路:对数据集进行分析→进行数据清洗→根据所需内容对数据进行可视化→得到图像并分析结果
三、大数据分析步骤
(1)下载数据集


(2)导入数据库
1 import numpy as np 2 import pandas as pd 3 import seaborn as sns 4 import json 5 import folium 6 import matplotlib.pyplot as plt 7 from matplotlib.ticker import PercentFormatter 8 from pylab import mpl 9 mpl.rcParams["font.sans-serif"] = ["SimHei"]

(3)读取数据
1 #读取数据 2 data = pd.read_csv(r"C:\Users\35060\Pictures\AviationData.csv", encoding = 'ISO-8859-1', low_memory = False) 3 data.head()

四、数据处理
1 data.shape 2 data.dtypes 3 data.isna().sum()/len(data)*100 4 data.info() 5 data.isnull().sum() 6 data.describe().T 7 data.describe()

(1)处理缺失值
1 #处理缺失值 2 rows = len(data) 3 missing = data.isna().sum() 4 percentage_missing = missing / rows 5 # 数据排序 6 percentage_missing_df = pd.DataFrame({'Missing' : percentage_missing}) 7 percentage_missing_df.sort_values('Missing', ascending = False, inplace = True) 8 # 只打印缺失值超过10%的列 9 print(percentage_missing_df[percentage_missing_df['Missing'] > 0.1])

1 # 缺失数据的热图
2 data.sort_values('Event.Date', inplace = True)
3 plt.figure(figsize = (12,4))
4 sns.heatmap(data.isna(),yticklabels = False, cbar = False)

这个热图显示了目前(黑色)和失踪(白色)的数据。它是按事件日期排序的,早期的事故在上面,最近的事故在下面。很明显,某些数据点在很长一段时间内没有被追踪到。
根据数据集的内容我们需要在分析前解决:调查类型应该只涉及 "事故"。地点有城市和州合并在一起。国家应该只涉及 "美国"。机场名称有多种方式表示一个私人机场。伤害严重程度表示伤害的数量。这个数据已经存在于其他列中。注册号对 "无 "有不同的大小写。制造有不同的大写字母。
1 # 检查是否有重复的行 2 print(data.duplicated().sum()) 3 # 计算所有列中所有数值的出现次数 4 cols = ['Investigation.Type', 'Location', 'Country', 'Airport.Code', 'Airport.Name', 'Injury.Severity', 'Registration.Number', 'Make', 'Amateur.Built', 'Publication.Date', 'Weather.Condition', 'Purpose.of.flight'] 5 for col in data[cols].columns: 6 print(data[col].value_counts().nlargest(5)) 7 print('\n---\n') 8 # 删除缺失值超过50%的列 9 cols_to_drop = list(percentage_missing_df[percentage_missing_df['Missing'] > 0.5].index) 10 data.drop(columns = cols_to_drop, axis = 1, inplace = True) 11 print(cols_to_drop) 12 before = len(data) 13 data = data[(data['Investigation.Type'] == 'Accident') & (data['Country'] == 'United States')] 14 dropped = before - len(data) 15 print(str(dropped) + ' rows dropped.')

(2)对数据进行进一步处理、为后续分析做好准备
1 # 将日期转换为数据时间,添加年月栏,并删除1982年之前的数据 2 data['Event.Date'] = pd.to_datetime(data['Event.Date']) 3 #添加日、月、年一栏 4 data['Year'] = data['Event.Date'].dt.year 5 data['Month.Abbr'] = data['Event.Date'].dt.month_name().str[:3] 6 data['Day.Name.Abbr'] = data['Event.Date'].dt.day_name().str[:3] 7 # 增加一个周末专栏 8 data.loc[(data['Day.Name.Abbr'] == 'Sat') | (data['Day.Name.Abbr'] == 'Sun'), 'Weekend'] = True 9 data.loc[(data['Day.Name.Abbr'] != 'Sat') & (data['Day.Name.Abbr'] != 'Sun'), 'Weekend'] = False 10 # 删除1982年以前的数据 11 data = data[data['Year'] >= 1982] 12 print(data['Event.Date'].dtype)
1 # 将相同的机场名称合并在一起 2 data['Airport.Name'].replace(to_replace = '(?i)^.*private.*$', value = 'PRIVATE', inplace = True, regex = True) 3 data['Airport.Name'].replace(to_replace = '(?i)none', value = 'NONE', inplace = True, regex = True) 4 data['Airport.Name'].value_counts().nlargest(5) 5 # 将相同的注册号码合并在一起 6 data['Registration.Number'].replace(to_replace = '(?i)none', value = 'NONE', inplace = True, regex = True) 7 data['Registration.Number'].value_counts().nlargest(5) 8 data['Make'] = data['Make'].str.title() 9 data['Make'].value_counts().nlargest(5) 10 data['Amateur.Built'].replace(to_replace = ['Yes', 'Y'], value = True, inplace = True, regex = False) 11 data['Amateur.Built'].replace(to_replace = ['No', 'N'], value = False, inplace = True, regex = False) 12 data['Amateur.Built'].value_counts() 13 # 所有在城市、州 14 data['City'] = data['Location'].str.split(',').str[0] 15 data['State'] = data['Location'].str.split(',').str[1] 16 data[['City', 'State']].head() 17 # 删除受伤人数因为这已经在另一栏里了。 18 data['Injury.Severity'] = data['Injury.Severity'].str.split('(').str[0] 19 data['Injury.Severity'].value_counts() 20 # 合并天气状况 21 data['Weather.Condition'].replace(to_replace = ['Unk', 'UNK'], value = 'Unknown', inplace = True, regex = False) 22 data['Weather.Condition'].value_counts() 23 # 有已知受伤情况的数据 24 injury_data = data[data['Injury.Severity'] != 'Unavailable']
五、数据可视化
1.分析每年的航空事故总量和死亡事故的数量
# 每年的事故数 accidents_per_year = data.groupby(['Year'], as_index = False)['Event.Id'].count() plot = sns.lineplot(x = 'Year', y = 'Event.Id', data = accidents_per_year, color = '#2990EA') # 每年死亡事故的数量 fatal_accidents_per_year = data[data['Injury.Severity'] == 'Fatal'].groupby(['Year'], as_index = False)['Event.Id'].count() sns.lineplot(x = 'Year', y = 'Event.Id', data = fatal_accidents_per_year, color = '#003366') plot.set(ylabel = None, title = '每年的航空事故数量') plt.legend(labels=["Total","Fatal"]) plt.ylim(0, 3600)

结论:航空事故总量和死亡事故的数量在逐年减少
2.飞机失事的致死率
1 #计算平均致死率 2 averagefatal = len(injury_data[injury_data['Injury.Severity'] == 'Fatal'].index) / len(injury_data.index) 3 print("平均致死率: " + str(round(averagefatal * 100, 2)) + '%') 4 # 每年的致死率 5 fatality_rate_per_year = pd.DataFrame() 6 fatality_rate_per_year['Rate'] = fatal_accidents_per_year['Event.Id'] / accidents_per_year['Event.Id'] 7 fatality_rate_per_year['Year'] = accidents_per_year['Year'] 8 # 趋势线 9 z = np.polyfit(fatality_rate_per_year['Year'], fatality_rate_per_year['Rate'], 1) 10 print('每年的死亡率下降: ' + str(-round(z[0]*100, 2)) + '%') 11 p = np.poly1d(z) 12 plt.plot(fatality_rate_per_year['Year'], p(fatality_rate_per_year['Year']), "--", color = 'y') 13 14 # 与平均死亡人数一致 15 plt.axhline(y = averagefatal, color = 'r', linestyle = '-') 16 sns.lineplot(x = 'Year', y = 'Rate', data = fatality_rate_per_year, color = 'b') 17 plt.gca().yaxis.set_major_formatter(PercentFormatter(1))

结论:与平均致死率相比,致死率从2000年开始趋势是下降的。
3.发生事故最多的月份
1 plot = sns.countplot(x = 'Month.Abbr', color = 'b', data = data) 2 plot.set(xlabel = 'Month', ylabel = None, title = '每月航空事故的数量')

结论:夏季发生事故的数量比冬季发生事故的数量更多
4.一周发生事故数最多的是哪一天
plot = sns.countplot(x = 'Day.Name.Abbr', order = ['Mon','Tue','Wed','Thu','Fri','Sat', 'Sun'], color = 'g', data = data) plot.set(xlabel = 'day', ylabel = None, title = '一周内每天发生的航空事故数量')

结论:可以看见周末发生事故的概率更高,可能周末出行的人更多。
5.周末哪一些目的造成事故数更多
1 #删除目的不明的数据 2 purpose_data = data[data['Purpose.of.flight'] != 'Unknown'] 4 # 根据周末的情况,计算目的的相对重要性 5 weekday_accidents = len(purpose_data[purpose_data['Weekend'] == False]) 6 weekday_data = purpose_data[purpose_data['Weekend'] == False]['Purpose.of.flight'].value_counts() / weekday_accidents 7 weekend_accidents = len(purpose_data[purpose_data['Weekend'] == True]) 8 weekend_data = purpose_data[purpose_data['Weekend'] == True]['Purpose.of.flight'].value_counts() / weekend_accidents 9 # 将数据合并在一起 10 purpose_day_data = pd.merge(weekday_data, weekend_data, left_index=True, right_index=True) 11 # 重新命名栏目,只保留前5个目的 12 purpose_day_data.reset_index(inplace = True) 13 purpose_day_data.rename(columns={'index': 'Purpose', 'Purpose.of.flight_x': 'Weekday', 'Purpose.of.flight_y': 'Weekend'}, inplace=True) 14 purpose_day_data = purpose_day_data.iloc[:5] 15 # 在Seaborn图中使用 16 melted_pdd = purpose_day_data.melt('Purpose', var_name='day', value_name='percentage') 17 ax = sns.barplot(x='Purpose', y='percentage', hue='day', data = melted_pdd, palette = ['#003366','#2990EA']) 18 ax.set(ylabel = None, title = '飞行的目的取决于当天的情况') 19 plt.legend(title = "Day") 20 plt.gca().yaxis.set_major_formatter(PercentFormatter(1))

结论:在周末,涉及事故的航班更多的是出于个人目的,而从周一到周五,空中应用和业务的重要性就会增加。
6.在什么阶段会发生事故(造成事故的前5个阶段性航班:降落 起飞 巡航 机动性 进场)
1 stage_of_flight_data = data[(data['Broad.phase.of.flight'] != 'Unknown') & (data['Broad.phase.of.flight'] != 'Other')] 2 plot = sns.countplot(x = 'Broad.phase.of.flight', order = stage_of_flight_data['Broad.phase.of.flight'].value_counts().index, color = 'green', data = stage_of_flight_data) 3 plot.set(xlabel = '飞行阶段', ylabel = None, title = '每个飞行阶段的航空事故数量') 4 plot.set_xticklabels(plot.get_xticklabels(),rotation = 30, ha = 'right')

结论:着陆的时候事故数量更多
7.在VMC飞行下还是IMC飞行下更容易出事故。(VMC=目视飞行,在晴朗的天气下;IMC=仪表飞行,通常在恶劣天气下)
# 删除没有天气状况和伤害严重程度的数据 weather = injury_data[injury_data['Weather.Condition'] != 'Unknown'] # 在某些天气条件下发生事故 weather.groupby('Weather.Condition')['Injury.Severity'].value_counts(normalize = True).unstack('Injury.Severity').plot.bar(stacked = True, color = ['#003366','#2990EA']) plt.axhline(y = averagefatal, color = 'r', linestyle = '-') plt.xticks(rotation = 0) plt.title('目视飞行或仪表飞行期间的死亡率') plt.xlabel('') plt.legend(title = "伤害的严重程度", loc='upper right') plt.gca().yaxis.set_major_formatter(PercentFormatter(1))

结论:在比较死亡和非死亡事故时,更多的死亡事故发生在恶劣天气下。
8.飞机的质量
1 injury_data.groupby('Amateur.Built')['Injury.Severity'].value_counts(normalize = True).unstack('Injury.Severity').plot.bar(stacked = True, color = ['g','b']) 2 plt.axhline(y = averagefatal, color = 'r', linestyle = '-') 3 plt.xticks(rotation = 0) 4 plt.title('业余人员死亡率') 5 plt.xlabel('') 6 plt.legend(title = "受伤的严重程度", loc='upper right') 7 plt.gca().yaxis.set_major_formatter(PercentFormatter(1))

结论:由业余爱好者制造的飞机,比如直升机,出现死亡率更高。
9.航空公司的出事率
1 # 摘录最常发生事故的50个品牌名单 2 make_top50 = data['Make'].value_counts().nlargest(50).index.tolist() 3 #只保留顶部列表中具有品牌的数据 4 make_data = injury_data[injury_data['Make'].isin(make_top50)] 5 # 按品牌划分的死亡率百分比 6 makefatal = make_data.groupby('Make')['Injury.Severity'].value_counts(normalize = True).unstack('Injury.Severity').reindex(make_top50) 7 makefatal.plot.bar(stacked = True, figsize=(18,5), width = 0.8, color = ['#5F9EA0','#2F4F4F']) 8 #与平均死亡人数一致 9 plt.axhline(y = averagefatal, color = '#FFF0F5', linestyle = '-') 10 plt.gca().yaxis.set_major_formatter(PercentFormatter(1)) 11 plt.title('不同飞机品牌的死亡率') 12 plt.legend(title = "伤害的严重程度", loc='upper right') 13 plt.show()

结论:当比较涉及致命事故的飞机品牌时,我们看到Mitsubishi、Cirrus和North American 的飞机发生致命事故的比例更高。
data['Make'].value_counts().head(10)
# 10大最差的公司 plt.figure(figsize=(20,15)) data['Make'].str.upper().value_counts().sort_values(ascending=False)[:10].plot(kind='bar', color='Green') plt.xticks(rotation=90) plt.xlabel("Make", size=15) plt.ylabel("Count of Accidents", size=15) plt.title("美国十大很差的公司", size=20) y=data['Make'].str.upper().value_counts().sort_values(ascending=False)[:10] for i, v in enumerate(y): plt.text(i, v, str(v), fontsize=15, style='oblique', horizontalalignment='center') plt.show()

10.美国各州的事故发生率
1 accidents = data['Country'].groupby(data['Country']).count() 2 accidents 3 plt.figure(figsize=(20,15)) 4 aviation_US = data[data['Country'] == 'United States'] 5 sns.countplot(x='State', data=aviation_US, order = aviation_US['State'].value_counts().index) 6 plt.xticks(rotation=90) 7 plt.xlabel("各州", size=20) 8 plt.ylabel("事故数", size=15) 9 plt.title("美国各州的事故分布", size=20) 10 y=aviation_US['State'].value_counts() 11 for i, v in enumerate(y): 12 plt.text(i,v,str(v), horizontalalignment='center', verticalalignment='bottom', fontsize=12, rotation=90) 13 plt.show()

结论:在阿拉斯加州的发生事故率最高
以阿拉斯加州为例,进行具体研究
data['Survival Rate'] = (data['Total.Serious.Injuries'] + data['Total.Minor.Injuries'] + data["Total.Uninjured"])/(data['Total.Fatal.Injuries'] + data['Total.Serious.Injuries'] + data['Total.Minor.Injuries'] + data["Total.Uninjured"]) data['Survival Rate'].dropna() data.head() data.info()

11.机场数统计
1 ## 移除机场数<100 2 # 得到典型数据 3 data1 = pd.DataFrame(data) 4 # 获取每个值的计数 5 value_counts = data['Location'].value_counts() 6 # 选择计数小于50的值 7 to_remove = value_counts[value_counts <= 100].index 8 # 保留城市列不在to_remove中的行。 9 data = data1[~data1.Location.isin(to_remove)] 10 pd.DataFrame(data["Location"].value_counts()) 11 f = plt.figure(figsize=(14, 22)) 12 sns.catplot(y ='Location',data=data , kind= "count",palette="mako", 13 order = data["Location"].value_counts().index, height = 8)

12.安克雷奇的出事率很高
ak= data[data["Location"].str.contains("ANCHORAGE, AK") == True] ak.head(10) f=plt.figure(figsize=(6,6)) sns.heatmap(data.corr(), vmin=-1, vmax=1, annot= True, fmt=".3f", cmap="mako" )

13.飞机引擎数量对安全的影响
factor_numEngine= ak.groupby("Number.of.Engines").sum().reset_index() factor_numEngine f, axes=plt.subplots(3,1 , figsize= (12,20)) sns.barplot(x = 'Number.of.Engines',y='Total.Fatal.Injuries' , data = factor_numEngine.reset_index() , color = '#B0E0E6',ax= axes[0]) sns.barplot(x = 'Number.of.Engines',y='Total.Uninjured' , data = factor_numEngine.reset_index() , color = '#B0C4DE',ax= axes[1]) sns.barplot(x = 'Number.of.Engines',y='Survival Rate' , data = factor_numEngine.reset_index() , color = '#FFC0CB',ax= axes[2])

结论:1台引擎的存活率较高,拥有4台引擎的未受伤人数更多。
14.飞机遭到破坏时
factor_damage= ak.groupby("Aircraft.damage").sum().reset_index() factor_damage f, axes=plt.subplots(1,3 , figsize= (15,8)) sns.barplot(x = 'Aircraft.damage',y='Total.Fatal.Injuries' , data = factor_damage.reset_index() , color = 'r', ax= axes[0])#致命伤害总数 sns.barplot(x = 'Aircraft.damage',y='Total.Uninjured' , data = factor_damage.reset_index() , color = 'g',ax= axes[1])#共计:未受伤 sns.barplot(x = 'Aircraft.damage',y='Survival Rate' , data = factor_damage.reset_index() , color = 'b', ax= axes[2])#幸存率

结论:当飞机破坏时,致命的伤害较高
15.怎样着陆存活率最高
phase = ak[ak['Broad.phase.of.flight'] != 'Unknown'] factor= phase.groupby("Broad.phase.of.flight").sum().reset_index() factor f, axes=plt.subplots(3,1 , figsize= (12,12)) sns.barplot(x = 'Broad.phase.of.flight',y='Survival Rate' , data = factor.reset_index() , color = '#708090',ax= axes[0]) sns.barplot(x = 'Broad.phase.of.flight',y='Total.Fatal.Injuries' , data = factor.reset_index() , color = '#EE82EE',ax= axes[1]) sns.barplot(x = 'Broad.phase.of.flight',y='Total.Uninjured' , data = factor.reset_index() , color = '#FFC0CB',ax= axes[2])



结论:碰撞着陆的存活率最高
16.各个品牌在阿拉斯加州的存活率
factor= ak.groupby("Survival Rate").sum().reset_index()#存活率 factor # 各个品牌在AK的存活率 cessna =pd.DataFrame(ak[ak['Make'].str.contains("Cessna")==True]) piper =pd.DataFrame(ak[ak['Make'].str.contains("Piper")==True]) beech =pd.DataFrame(ak[ak['Make'].str.contains("Beech")==True]) boeing =pd.DataFrame(ak[ak['Make'].str.contains("Boeing")==True]) bell =pd.DataFrame(ak[ak['Make'].str.contains("Bell")==True]) print("Cessna Survival Rate: " , round((cessna["Survival Rate"].sum()/cessna["Survival Rate"].count())*100),2,"%") print("Piper Survival Rate: " , round((piper["Survival Rate"].sum()/piper["Survival Rate"].count())*100),2,"%") print("Beech Survival Rate: " , round((beech["Survival Rate"].sum()/beech["Survival Rate"].count())*100),2,"%") print("Bell Survival Rate: " , round((bell["Survival Rate"].sum()/bell["Survival Rate"].count())*100),2,"%") print("Boeing Survival Rate: " , round((boeing["Survival Rate"].sum()/boeing["Survival Rate"].count())*100),2,"%")


17.发动机类型导致的伤害
engine = ak[ak['Engine.Type'] != 'Unknown'] factor= engine.groupby("Engine.Type").sum().reset_index() factor f, axes=plt.subplots(3,1 , figsize= (12,16)) sns.barplot(x = 'Engine.Type',y='Survival Rate' , data = factor.reset_index() , color = '#DB7093',ax= axes[0]) sns.barplot(x = 'Engine.Type',y='Total.Fatal.Injuries' , data = factor.reset_index() , color = '#AFEEEE',ax= axes[1])#致命伤害总数 sns.barplot(x = 'Engine.Type',y='Total.Uninjured' , data = factor.reset_index() , color = '#708090',ax= axes[2])#共计:未受伤


结论:涡轮风扇类型的发动机有很高的非伤亡率,复式发动机类型有更高的致命伤害。
18.以个人为目的的飞行发生的事故数是最高的。
print(data['Purpose.of.flight'].nunique()) print('') print(data['Purpose.of.flight'].unique()) total_fatal = data[['Purpose.of.flight','Total.Fatal.Injuries']].groupby('Purpose.of.flight').agg(['sum','count']) total_fatal = total_fatal['Total.Fatal.Injuries'].reset_index() total_fatal['fatal_percentage'] = total_fatal['sum']/total_fatal['count'] total_fatal.columns = ['Purpose.of.flight','Total.Fatal.Injuries','Total_Accidents','Fatal_Percentage'] total_uninjured = data[['Purpose.of.flight','Total.Uninjured']].groupby('Purpose.of.flight').agg(['sum','count']) total_uninjured = total_uninjured['Total.Uninjured'].reset_index() total_uninjured['Uninjured_percentage'] = total_uninjured['sum']/total_uninjured['count'] total_uninjured.columns = ['Purpose.of.flight','Total.Uninjured','Total_Accidents','Uninjured_Percentage'] import plotly.express as px import plotly.graph_objects as go minacc = 10 propstoplot = total_fatal[total_fatal['Total_Accidents']>minacc] propstoplot = propstoplot.sort_values('Fatal_Percentage').tail(50) fig = go.Figure() fig.add_trace(go.Bar( x=propstoplot['Purpose.of.flight'], y=propstoplot['Total_Accidents'], text=propstoplot['Total_Accidents'], name='Purpose Of Flight Accident > 10 Accidents', marker_color='grey' )) fig.add_trace(go.Bar( x=propstoplot['Purpose.of.flight'], y=propstoplot['Total.Fatal.Injuries'], text=propstoplot['Total.Fatal.Injuries'], name='Fatal Injury Count', marker_color = 'silver' )) fig.update_traces(textposition='outside', texttemplate='%{text:.2s}') fig.update_layout(barmode='group', xaxis_tickangle=-45, height=600, width=1300,uniformtext_minsize=7, uniformtext_mode='show', title='飞行目的 总事故数 总致命伤数 ') fig.show()

19.飞行目的不同,死亡率不同
fig = px.bar(x=propstoplot['Purpose.of.flight'], y=propstoplot['Fatal_Percentage'], text=propstoplot['Fatal_Percentage'], title='飞行的目的 死亡的百分比') fig.update_traces(textposition='outside', texttemplate='%{text:.4s}', marker = dict(color='antiquewhite', line=dict(color='peru', width=3))) fig.update_layout( height=600, width=1100,uniformtext_minsize=8, uniformtext_mode='show') fig.show()

20.未知的飞行目的还是占大多数
uninjured = total_uninjured[total_uninjured['Total_Accidents']>minacc] uninjured = uninjured.sort_values('Uninjured_Percentage').tail(50) fig = go.Figure() fig.add_trace(go.Bar( x=uninjured['Purpose.of.flight'], y=uninjured['Total_Accidents'], text=uninjured['Total_Accidents'], name='Purpose Of Flight Accident > 10 Accidents', marker_color='yellowgreen' )) fig.add_trace(go.Bar( x=uninjured['Purpose.of.flight'], y=uninjured['Total.Uninjured'], text=uninjured['Total.Uninjured'], name='Uninjured Count', marker_color = 'olive' )) fig.update_traces(textposition='outside', texttemplate='%{text:.2s}') fig.update_layout(barmode='group', xaxis_tickangle=-45, height=600, width=1300,uniformtext_minsize=7, uniformtext_mode='show', title='飞行目的 事故总数 未受伤总数') fig.show() fig = px.bar(x=uninjured['Purpose.of.flight'],#飞行的目的 y=uninjured['Uninjured_Percentage'], text=uninjured['Uninjured_Percentage'], title='飞行目的 未受伤的百分比') fig.update_traces(textposition='outside', texttemplate='%{text:.3s}', marker = dict(color='mintcream', line=dict(color='teal', width=3))) fig.update_layout( height=600, width=1100,uniformtext_minsize=8, uniformtext_mode='show') fig.show()

21.大多数飞行器是由专业人士建造的
aircraft_built = data.groupby('Aircraft.damage')['Amateur.Built'].value_counts().reset_index(name='count') aircraft_built = aircraft_built[aircraft_built['Amateur.Built']!='Unknown'] aircraft_built.style.background_gradient(cmap='BuGn') fig= px.bar(x=aircraft_built['Aircraft.damage'], y=aircraft_built['count'], color=aircraft_built['Amateur.Built'], text=aircraft_built['count'], barmode='relative', height=500, width=600, color_discrete_sequence=['darkmagenta','plum'], title='飞机损坏和业余建造') fig.show()

22.非专业制造的死亡人数与存活人数之比
severity = data[(data['Injury.Severity']=='Fatal') | (data['Injury.Severity']=='Non-Fatal') | (data['Injury.Severity']=='Minor') | (data['Injury.Severity']=='Serious')] severity = severity.groupby('Amateur.Built')['Injury.Severity'].value_counts().reset_index(name='count') severity.style.background_gradient(cmap='Blues') fig = px.bar(x=severity['Amateur.Built'], y=severity['count'], color=severity['Injury.Severity'], barmode='group', height=500, width=700, title='非专业制造和损害严重程度') fig.update_traces(marker=dict(color= ['beige','bisque'], line=dict(color='black', width=3))) fig.show()

结论:非专业制造的飞行器受伤程度也很高
六、完整代码
1 import numpy as np 2 import pandas as pd 3 import seaborn as sns 4 import json 5 import folium 6 import matplotlib.pyplot as plt 7 from matplotlib.ticker import PercentFormatter 8 from pylab import mpl 9 mpl.rcParams["font.sans-serif"] = ["SimHei"] 10 #读取数据 11 data = pd.read_csv(r"C:\Users\35060\Pictures\AviationData.csv", encoding = 'ISO-8859-1', low_memory = False) 12 data.head() 13 data.shape 14 data.dtypes 15 data.isna().sum()/len(data)*100 16 data.info() 17 data.isnull().sum() 18 data.describe().T 19 data.describe() 20 #处理缺失值 21 rows = len(data) 22 missing = data.isna().sum() 23 percentage_missing = missing / rows 24 # 数据排序 25 percentage_missing_df = pd.DataFrame({'Missing' : percentage_missing}) 26 percentage_missing_df.sort_values('Missing', ascending = False, inplace = True) 27 # 只打印缺失值超过10%的列 28 print(percentage_missing_df[percentage_missing_df['Missing'] > 0.1]) 29 # 缺失数据的热图 30 data.sort_values('Event.Date', inplace = True) 31 plt.figure(figsize = (12,4)) 32 sns.heatmap(data.isna(),yticklabels = False, cbar = False) 33 print(data.duplicated().sum()) 34 # 计算所有列中所有数值的出现次数 35 cols = ['Investigation.Type', 'Location', 'Country', 'Airport.Code', 'Airport.Name', 'Injury.Severity', 'Registration.Number', 'Make', 'Amateur.Built', 'Publication.Date', 'Weather.Condition', 'Purpose.of.flight'] 36 for col in data[cols].columns: 37 print(data[col].value_counts().nlargest(5)) 38 print('\n---\n') 39 # 删除缺失值超过50%的列 40 cols_to_drop = list(percentage_missing_df[percentage_missing_df['Missing'] > 0.5].index) 41 data.drop(columns = cols_to_drop, axis = 1, inplace = True) 42 print(cols_to_drop) 43 before = len(data) 44 data = data[(data['Investigation.Type'] == 'Accident') & (data['Country'] == 'United States')] 45 dropped = before - len(data) 46 print(str(dropped) + ' rows dropped.') 47 # 将日期转换为数据时间,添加年月栏,并删除1982年之前的数据 48 data['Event.Date'] = pd.to_datetime(data['Event.Date']) 49 #添加日、月、年一栏 50 data['Year'] = data['Event.Date'].dt.year 51 data['Month.Abbr'] = data['Event.Date'].dt.month_name().str[:3] 52 data['Day.Name.Abbr'] = data['Event.Date'].dt.day_name().str[:3] 53 # 增加一个周末专栏 54 data.loc[(data['Day.Name.Abbr'] == 'Sat') | (data['Day.Name.Abbr'] == 'Sun'), 'Weekend'] = True 55 data.loc[(data['Day.Name.Abbr'] != 'Sat') & (data['Day.Name.Abbr'] != 'Sun'), 'Weekend'] = False 56 # 删除1982年以前的数据 57 data = data[data['Year'] >= 1982] 58 print(data['Event.Date'].dtype) 59 # 将相同的机场名称合并在一起 60 data['Airport.Name'].replace(to_replace = '(?i)^.*private.*$', value = 'PRIVATE', inplace = True, regex = True) 61 data['Airport.Name'].replace(to_replace = '(?i)none', value = 'NONE', inplace = True, regex = True) 62 data['Airport.Name'].value_counts().nlargest(5) 63 data['Registration.Number'].replace(to_replace = '(?i)none', value = 'NONE', inplace = True, regex = True) 64 data['Registration.Number'].value_counts().nlargest(5) 65 data['Make'] = data['Make'].str.title() 66 data['Make'].value_counts().nlargest(5) 67 data['Amateur.Built'].replace(to_replace = ['Yes', 'Y'], value = True, inplace = True, regex = False) 68 data['Amateur.Built'].replace(to_replace = ['No', 'N'], value = False, inplace = True, regex = False) 69 data['Amateur.Built'].value_counts() 70 data['City'] = data['Location'].str.split(',').str[0] 71 data['State'] = data['Location'].str.split(',').str[1] 72 data[['City', 'State']].head() 73 data['Injury.Severity'] = data['Injury.Severity'].str.split('(').str[0] 74 data['Injury.Severity'].value_counts() 75 # 合并天气状况的未知数 76 data['Weather.Condition'].replace(to_replace = ['Unk', 'UNK'], value = 'Unknown', inplace = True, regex = False) 77 data['Weather.Condition'].value_counts() 78 injury_data = data[data['Injury.Severity'] != 'Unavailable'] 79 # 每年的事故数 80 accidents_per_year = data.groupby(['Year'], as_index = False)['Event.Id'].count() 81 plot = sns.lineplot(x = 'Year', y = 'Event.Id', data = accidents_per_year, color = 'g') 82 # 每年死亡事故的数量 83 fatal_accidents_per_year = data[data['Injury.Severity'] == 'Fatal'].groupby(['Year'], as_index = False)['Event.Id'].count() 84 sns.lineplot(x = 'Year', y = 'Event.Id', data = fatal_accidents_per_year, color = 'r') 85 plot.set(ylabel = None, title = '每年的航空事故数量') 86 plt.legend(labels=["Total","Fatal"]) 87 plt.ylim(0, 3600) 88 #计算平均致死率 89 averagefatal = len(injury_data[injury_data['Injury.Severity'] == 'Fatal'].index) / len(injury_data.index) 90 print("平均致死率: " + str(round(averagefatal * 100, 2)) + '%') 91 # 每年的致死率 92 fatality_rate_per_year = pd.DataFrame() 93 fatality_rate_per_year['Rate'] = fatal_accidents_per_year['Event.Id'] / accidents_per_year['Event.Id'] 94 fatality_rate_per_year['Year'] = accidents_per_year['Year'] 95 z = np.polyfit(fatality_rate_per_year['Year'], fatality_rate_per_year['Rate'], 1) 96 print('每年的死亡率下降: ' + str(-round(z[0]*100, 2)) + '%') 97 p = np.poly1d(z) 98 plt.plot(fatality_rate_per_year['Year'], p(fatality_rate_per_year['Year']), "--", color = 'y') 99 # 与平均死亡人数一致 100 plt.axhline(y = averagefatal, color = 'r', linestyle = '-') 101 sns.lineplot(x = 'Year', y = 'Rate', data = fatality_rate_per_year, color = 'b') 102 plt.gca().yaxis.set_major_formatter(PercentFormatter(1)) 103 # 发生事故最多的月份 104 plot = sns.countplot(x = 'Month.Abbr', color = 'b', data = data) 105 plot.set(xlabel = 'Month', ylabel = None, title = '每月航空事故的数量') 106 # 发生事故最多的日子 107 plot = sns.countplot(x = 'Day.Name.Abbr', order = ['Mon','Tue','Wed','Thu','Fri','Sat', 'Sun'], color = 'g', data = data) 108 plot.set(xlabel = 'day', ylabel = None, title = '一周内每天发生的航空事故数量') 109 #删除目的不明的数据 110 purpose_data = data[data['Purpose.of.flight'] != 'Unknown'] 111 # 根据周末的情况,计算目的的相对重要性 112 weekday_accidents = len(purpose_data[purpose_data['Weekend'] == False]) 113 weekday_data = purpose_data[purpose_data['Weekend'] == False]['Purpose.of.flight'].value_counts() / weekday_accidents 114 weekend_accidents = len(purpose_data[purpose_data['Weekend'] == True]) 115 weekend_data = purpose_data[purpose_data['Weekend'] == True]['Purpose.of.flight'].value_counts() / weekend_accidents 116 # 将数据合并在一起 117 purpose_day_data = pd.merge(weekday_data, weekend_data, left_index=True, right_index=True) 118 # 重新命名栏目,只保留前5个目的 119 purpose_day_data.reset_index(inplace = True) 120 purpose_day_data.rename(columns={'index': 'Purpose', 'Purpose.of.flight_x': 'Weekday', 'Purpose.of.flight_y': 'Weekend'}, inplace=True) 121 purpose_day_data = purpose_day_data.iloc[:5] 122 # 在Seaborn图中使用 123 melted_pdd = purpose_day_data.melt('Purpose', var_name='day', value_name='percentage') 124 ax = sns.barplot(x='Purpose', y='percentage', hue='day', data = melted_pdd, palette = ['#003366','#2990EA']) 125 ax.set(ylabel = None, title = '飞行的目的取决于当天的情况') 126 plt.legend(title = "Day") 127 plt.gca().yaxis.set_major_formatter(PercentFormatter(1)) 128 # 在什么阶段会发生事故 129 stage_of_flight_data = data[(data['Broad.phase.of.flight'] != 'Unknown') & (data['Broad.phase.of.flight'] != 'Other')] 130 plot = sns.countplot(x = 'Broad.phase.of.flight', order = stage_of_flight_data['Broad.phase.of.flight'].value_counts().index, color = 'green', data = stage_of_flight_data) 131 plot.set(xlabel = '飞行阶段', ylabel = None, title = '每个飞行阶段的航空事故数量') 132 plot.set_xticklabels(plot.get_xticklabels(),rotation = 30, ha = 'right') 133 # 删除没有天气状况和伤害严重程度的数据 134 weather = injury_data[injury_data['Weather.Condition'] != 'Unknown'] 135 weather.groupby('Weather.Condition')['Injury.Severity'].value_counts(normalize = True).unstack('Injury.Severity').plot.bar(stacked = True, color = ['#003366','#2990EA']) 136 plt.axhline(y = averagefatal, color = 'r', linestyle = '-') 137 plt.xticks(rotation = 0) 138 plt.title('目视飞行或仪表飞行期间的死亡率') 139 plt.xlabel('') 140 plt.legend(title = "伤害的严重程度", loc='upper right') 141 plt.gca().yaxis.set_major_formatter(PercentFormatter(1)) 142 injury_data.groupby('Amateur.Built')['Injury.Severity'].value_counts(normalize = True).unstack('Injury.Severity').plot.bar(stacked = True, color = ['g','b']) 143 plt.axhline(y = averagefatal, color = 'r', linestyle = '-') 144 plt.xticks(rotation = 0) 145 plt.title('业余人员死亡率') 146 plt.xlabel('') 147 plt.legend(title = "受伤的严重程度", loc='upper right') 148 plt.gca().yaxis.set_major_formatter(PercentFormatter(1)) 149 # 摘录最常发生事故的50个品牌名单 150 make_top50 = data['Make'].value_counts().nlargest(50).index.tolist() 151 #只保留顶部列表中具有品牌的数据 152 make_data = injury_data[injury_data['Make'].isin(make_top50)] 153 # 按品牌划分的死亡率百分比 154 makefatal = make_data.groupby('Make')['Injury.Severity'].value_counts(normalize = True).unstack('Injury.Severity').reindex(make_top50) 155 makefatal.plot.bar(stacked = True, figsize=(18,5), width = 0.8, color = ['#5F9EA0','#2F4F4F']) 156 #与平均死亡人数一致 157 plt.axhline(y = averagefatal, color = '#FFF0F5', linestyle = '-') 158 plt.gca().yaxis.set_major_formatter(PercentFormatter(1)) 159 plt.title('不同飞机品牌的死亡率') 160 plt.legend(title = "伤害的严重程度", loc='upper right') 161 plt.show() 162 data['Make'].value_counts().head(10) 163 # 10大最差的公司 164 plt.figure(figsize=(20,15)) 165 data['Make'].str.upper().value_counts().sort_values(ascending=False)[:10].plot(kind='bar', color='Green') 166 plt.xticks(rotation=90) 167 plt.xlabel("Make", size=15) 168 plt.ylabel("Count of Accidents", size=15) 169 plt.title("美国十大很差的公司", size=20) 170 y=data['Make'].str.upper().value_counts().sort_values(ascending=False)[:10] 171 for i, v in enumerate(y): 172 plt.text(i, v, str(v), fontsize=15, style='oblique', horizontalalignment='center') 173 plt.show() 174 accidents = data['Country'].groupby(data['Country']).count() 175 accidents 176 plt.figure(figsize=(20,15)) 177 aviation_US = data[data['Country'] == 'United States'] 178 sns.countplot(x='State', data=aviation_US, order = aviation_US['State'].value_counts().index) 179 plt.xticks(rotation=90) 180 plt.xlabel("各州", size=20) 181 plt.ylabel("事故数", size=15) 182 plt.title("美国各州的事故分布", size=20) 183 y=aviation_US['State'].value_counts() 184 for i, v in enumerate(y): 185 plt.text(i,v,str(v), horizontalalignment='center', verticalalignment='bottom', fontsize=12, rotation=90) 186 plt.show() 187 data['Survival Rate'] = (data['Total.Serious.Injuries'] + data['Total.Minor.Injuries'] + data["Total.Uninjured"])/(data['Total.Fatal.Injuries'] + data['Total.Serious.Injuries'] + data['Total.Minor.Injuries'] + data["Total.Uninjured"]) 188 data['Survival Rate'].dropna() 189 data.head() 190 data.info() 191 ## 移除机场数<100 192 data1 = pd.DataFrame(data) 193 # 获取每个值的计数 194 value_counts = data['Location'].value_counts() 195 # 选择计数小于50的值 196 to_remove = value_counts[value_counts <= 100].index 197 data = data1[~data1.Location.isin(to_remove)] 198 pd.DataFrame(data["Location"].value_counts()) 199 f = plt.figure(figsize=(14, 22)) 200 sns.catplot(y ='Location',data=data , kind= "count",palette="mako", 201 order = data["Location"].value_counts().index, height = 8) 202 ak= data[data["Location"].str.contains("ANCHORAGE, AK") == True] 203 ak.head(10) 204 f=plt.figure(figsize=(6,6)) 205 sns.heatmap(data.corr(), vmin=-1, vmax=1, annot= True, fmt=".3f", cmap="mako" ) 206 factor_numEngine= ak.groupby("Number.of.Engines").sum().reset_index() 207 factor_numEngine 208 f, axes=plt.subplots(3,1 , figsize= (12,20)) 209 sns.barplot(x = 'Number.of.Engines',y='Total.Fatal.Injuries' , data = factor_numEngine.reset_index() , color = '#B0E0E6',ax= axes[0]) 210 sns.barplot(x = 'Number.of.Engines',y='Total.Uninjured' , data = factor_numEngine.reset_index() , color = '#B0C4DE',ax= axes[1]) 211 sns.barplot(x = 'Number.of.Engines',y='Survival Rate' , data = factor_numEngine.reset_index() , color = '#FFC0CB',ax= axes[2]) 212 factor_damage= ak.groupby("Aircraft.damage").sum().reset_index() 213 factor_damage 214 f, axes=plt.subplots(1,3 , figsize= (15,8)) 215 sns.barplot(x = 'Aircraft.damage',y='Total.Fatal.Injuries' , data = factor_damage.reset_index() , color = 'r', ax= axes[0])#致命伤害总数 216 sns.barplot(x = 'Aircraft.damage',y='Total.Uninjured' , data = factor_damage.reset_index() , color = 'g',ax= axes[1])#共计:未受伤 217 sns.barplot(x = 'Aircraft.damage',y='Survival Rate' , data = factor_damage.reset_index() , color = 'b', ax= axes[2])#幸存率 218 phase = ak[ak['Broad.phase.of.flight'] != 'Unknown'] 219 factor= phase.groupby("Broad.phase.of.flight").sum().reset_index() 220 factor 221 f, axes=plt.subplots(3,1 , figsize= (12,12)) 222 sns.barplot(x = 'Broad.phase.of.flight',y='Survival Rate' , data = factor.reset_index() , color = '#708090',ax= axes[0]) 223 sns.barplot(x = 'Broad.phase.of.flight',y='Total.Fatal.Injuries' , data = factor.reset_index() , color = '#EE82EE',ax= axes[1]) 224 sns.barplot(x = 'Broad.phase.of.flight',y='Total.Uninjured' , data = factor.reset_index() , color = '#FFC0CB',ax= axes[2]) 225 factor= ak.groupby("Survival Rate").sum().reset_index()#存活率 226 factor 227 cessna =pd.DataFrame(ak[ak['Make'].str.contains("Cessna")==True]) 228 piper =pd.DataFrame(ak[ak['Make'].str.contains("Piper")==True]) 229 beech =pd.DataFrame(ak[ak['Make'].str.contains("Beech")==True]) 230 boeing =pd.DataFrame(ak[ak['Make'].str.contains("Boeing")==True]) 231 bell =pd.DataFrame(ak[ak['Make'].str.contains("Bell")==True]) 232 233 print("Cessna Survival Rate: " , round((cessna["Survival Rate"].sum()/cessna["Survival Rate"].count())*100),2,"%") 234 print("Piper Survival Rate: " , round((piper["Survival Rate"].sum()/piper["Survival Rate"].count())*100),2,"%") 235 print("Beech Survival Rate: " , round((beech["Survival Rate"].sum()/beech["Survival Rate"].count())*100),2,"%") 236 print("Bell Survival Rate: " , round((bell["Survival Rate"].sum()/bell["Survival Rate"].count())*100),2,"%") 237 print("Boeing Survival Rate: " , round((boeing["Survival Rate"].sum()/boeing["Survival Rate"].count())*100),2,"%") 238 engine = ak[ak['Engine.Type'] != 'Unknown'] 239 factor= engine.groupby("Engine.Type").sum().reset_index() 240 factor 241 f, axes=plt.subplots(3,1 , figsize= (12,16)) 242 sns.barplot(x = 'Engine.Type',y='Survival Rate' , data = factor.reset_index() , color = '#DB7093',ax= axes[0]) 243 sns.barplot(x = 'Engine.Type',y='Total.Fatal.Injuries' , data = factor.reset_index() , color = '#AFEEEE',ax= axes[1])#致命伤害总数 244 sns.barplot(x = 'Engine.Type',y='Total.Uninjured' , data = factor.reset_index() , color = '#708090',ax= axes[2])#共计:未受伤 245 print(data['Purpose.of.flight'].nunique()) 246 print('') 247 print(data['Purpose.of.flight'].unique()) 248 total_fatal = data[['Purpose.of.flight','Total.Fatal.Injuries']].groupby('Purpose.of.flight').agg(['sum','count']) 249 total_fatal = total_fatal['Total.Fatal.Injuries'].reset_index() 250 total_fatal['fatal_percentage'] = total_fatal['sum']/total_fatal['count'] 251 total_fatal.columns = ['Purpose.of.flight','Total.Fatal.Injuries','Total_Accidents','Fatal_Percentage'] 252 total_uninjured = data[['Purpose.of.flight','Total.Uninjured']].groupby('Purpose.of.flight').agg(['sum','count']) 253 total_uninjured = total_uninjured['Total.Uninjured'].reset_index() 254 total_uninjured['Uninjured_percentage'] = total_uninjured['sum']/total_uninjured['count'] 255 total_uninjured.columns = ['Purpose.of.flight','Total.Uninjured','Total_Accidents','Uninjured_Percentage'] 256 import plotly.express as px 257 import plotly.graph_objects as go 258 minacc = 10 259 propstoplot = total_fatal[total_fatal['Total_Accidents']>minacc] 260 propstoplot = propstoplot.sort_values('Fatal_Percentage').tail(50) 261 fig = go.Figure() 262 fig.add_trace(go.Bar( 263 x=propstoplot['Purpose.of.flight'], 264 y=propstoplot['Total_Accidents'], 265 text=propstoplot['Total_Accidents'], 266 name='Purpose Of Flight Accident > 10 Accidents', 267 marker_color='grey' 268 )) 269 fig.add_trace(go.Bar( 270 x=propstoplot['Purpose.of.flight'], 271 y=propstoplot['Total.Fatal.Injuries'], 272 text=propstoplot['Total.Fatal.Injuries'], 273 name='Fatal Injury Count', 274 marker_color = 'silver' 275 )) 276 fig.update_traces(textposition='outside', texttemplate='%{text:.2s}') 277 fig.update_layout(barmode='group', xaxis_tickangle=-45, height=600, width=1300,uniformtext_minsize=7, uniformtext_mode='show', 278 title='飞行目的 总事故数 总致命伤数 ') 279 fig.show() 280 fig = px.bar(x=propstoplot['Purpose.of.flight'], 281 y=propstoplot['Fatal_Percentage'], 282 text=propstoplot['Fatal_Percentage'], 283 title='飞行的目的 死亡的百分比') 284 fig.update_traces(textposition='outside', texttemplate='%{text:.4s}', marker = dict(color='antiquewhite', line=dict(color='peru', width=3))) 285 fig.update_layout( height=600, width=1100,uniformtext_minsize=8, uniformtext_mode='show') 286 fig.show() 287 uninjured = total_uninjured[total_uninjured['Total_Accidents']>minacc] 288 uninjured = uninjured.sort_values('Uninjured_Percentage').tail(50) 289 fig = go.Figure() 290 fig.add_trace(go.Bar( 291 x=uninjured['Purpose.of.flight'], 292 y=uninjured['Total_Accidents'], 293 text=uninjured['Total_Accidents'], 294 name='Purpose Of Flight Accident > 10 Accidents', 295 marker_color='yellowgreen' 296 )) 297 fig.add_trace(go.Bar( 298 x=uninjured['Purpose.of.flight'], 299 y=uninjured['Total.Uninjured'], 300 text=uninjured['Total.Uninjured'], 301 name='Uninjured Count', 302 marker_color = 'olive' 303 )) 304 fig.update_traces(textposition='outside', texttemplate='%{text:.2s}') 305 fig.update_layout(barmode='group', xaxis_tickangle=-45, height=600, width=1300,uniformtext_minsize=7, uniformtext_mode='show', 306 title='飞行目的 事故总数 未受伤总数') 307 fig.show() 308 fig = px.bar(x=uninjured['Purpose.of.flight'],#飞行的目的 309 y=uninjured['Uninjured_Percentage'], 310 text=uninjured['Uninjured_Percentage'], 311 title='飞行目的 未受伤的百分比') 312 fig.update_traces(textposition='outside', texttemplate='%{text:.3s}', marker = dict(color='mintcream', line=dict(color='teal', width=3))) 313 fig.update_layout( height=600, width=1100,uniformtext_minsize=8, uniformtext_mode='show') 314 fig.show() 315 aircraft_built = data.groupby('Aircraft.damage')['Amateur.Built'].value_counts().reset_index(name='count') 316 aircraft_built = aircraft_built[aircraft_built['Amateur.Built']!='Unknown'] 317 aircraft_built.style.background_gradient(cmap='BuGn') 318 fig= px.bar(x=aircraft_built['Aircraft.damage'], 319 y=aircraft_built['count'], 320 color=aircraft_built['Amateur.Built'], 321 text=aircraft_built['count'], 322 barmode='relative', 323 height=500, 324 width=600, 325 color_discrete_sequence=['darkmagenta','plum'], 326 title='飞机损坏和业余建造') 327 fig.show() 328 severity = data[(data['Injury.Severity']=='Fatal') | (data['Injury.Severity']=='Non-Fatal') | (data['Injury.Severity']=='Minor') | (data['Injury.Severity']=='Serious')] 329 severity = severity.groupby('Amateur.Built')['Injury.Severity'].value_counts().reset_index(name='count') 330 severity.style.background_gradient(cmap='Blues') 331 fig = px.bar(x=severity['Amateur.Built'], 332 y=severity['count'], 333 color=severity['Injury.Severity'], 334 barmode='group', 335 height=500, 336 width=700, 337 title='非专业制造和损害严重程度') 338 fig.update_traces(marker=dict(color= ['beige','bisque'], line=dict(color='black', width=3))) 339 fig.show()
七、总结
虽然数据集大部分分析的是美国的飞行问题,但对于我们来说仍具有借鉴意义。飞行安全任重而道远,只有进一步的提高对飞机各方面安全隐患的注意,才能更好的为将来的飞行做好保障,对于飞行器来说我们要尽量选择有保障的公司,在天气等情况不好的时候尽量减少出行,飞行开始时也要注意对飞行器各项性能的检查。
在完成次设计时,我熟练的掌握了可视化中各种图形的分析,但是对数据分析的算法运用较少,若能运用其他模型来处理数据可能会有更好的效果。
浙公网安备 33010602011771号