掘金 人工智能 07月18日 17:56
【数据可视化】基于pyecharts的航空安全深度剖析:坠毁航班数据集可视化分析
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文利用Python和Pyecharts库,对航空事故数据集进行了多维度可视化分析。通过时间趋势、机型致命性、运营商事故率、事故严重程度、高死亡地点以及时间分布等图表,深入剖析了航空事故的特征。特别是利用3D柱状图、PictorialBar、环形图、热力图、日历图和桑基图等多种可视化方式,直观展示了事故数据,为理解和预防航空事故提供了有力的数据支持。文章还介绍了数据加载、预处理以及环境准备过程。

✈️ **事故随时间变化趋势**: 通过时间轴动态折线图,展示了每年事故的累计数量变化,揭示了事故发生的时间分布规律,帮助分析事故发生的时间性特征。

✈️ **最致命机型识别**: 利用3D柱状图直观展示了死亡人数最多的前15个机型,清晰地呈现了不同机型在航空安全方面的风险差异,为机型选择和安全评估提供依据。

✈️ **事故频发运营商分析**: 通过PictorialBar图,展示了事故发生次数最多的前15个运营商,并使用飞机图标增强视觉效果,帮助识别高风险运营商。

✈️ **事故损坏程度分布**: 环形图清晰展示了不同损坏程度的事故占比,揭示了事故的严重性分布情况,有助于理解事故造成的损害程度。

✈️ **高风险事故地点分析**: 热力图直观展示了事故死亡人数最多的前20个地点,通过颜色深浅区分风险高低,有助于识别事故多发且后果严重的区域。

✈️ **时间与事故关联分析**: 日历图展示了每日的事故发生情况,直观呈现了事故在一年中不同日期的分布模式,帮助理解时间因素对事故的影响。

✈️ **机型、运营商与死亡人数关联**: 桑基图展示了涉及高死亡人数(大于10人)的机型、运营商与死亡人数之间的关系,揭示了不同因素组合下的风险联动效应。

🧑 博主简介:曾任某智慧城市类企业算法总监,CSDN / 稀土掘金 等平台人工智能领域优质创作者。

目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。


一、引言

在航空领域,安全始终是最重要的议题之一。尽管现代航空技术已经取得了巨大的进步,但航空事故仍然时有发生。今天,我们将通过分析一个从航空安全网络(ASN)抓取的坠毁航班数据集,深入探讨航空事故的多个维度。我们将使用Python和Pyecharts库,以炫酷的黑色背景图表展示分析结果,帮助我们更好地理解航空事故的特征和趋势。

二、数据集介绍

该数据集包含以下字段:

三、分析目标

我们将从以下角度对数据进行分析:

    事故随时间的变化趋势哪些机型最致命哪些运营商的事故最多事故严重程度占比哪些地点最血腥时间对事故的影响机型、运营商与死亡人数的关系

四、环境准备

在开始之前,请确保你已经安装了以下Python库:

pip install pandas pyecharts

五、数据加载与预处理

首先,我们需要加载数据并进行一些基本的预处理。

import pandas as pdimport numpy as npfrom pyecharts import options as optsfrom pyecharts.charts import *from pyecharts.globals import ThemeTypeimport warnings, datetime, rewarnings.filterwarnings("ignore")# 1. 读入数据df = pd.read_csv("flight.csv")# 2. 数据清洗df['acc.date'] = pd.to_datetime(df['acc.date'], errors='coerce')df['fat'] = pd.to_numeric(df['fat'], errors='coerce')df = df.dropna(subset=['acc.date''fat'])# 3. 衍生字段df['year'] = df['acc.date'].dt.yeardf['month'] = df['acc.date'].dt.monthdf['weekday'] = df['acc.date'].dt.day_name()# 通用暗黑主题dark = {    "background_color""#000",    "title_color""#fff",    "legend_color""#fff",    "text_color""#fff",    "axis_line_color""#fff",    "split_line_color""#333"}

六、可视化分析

6.1 事故随时间的变化趋势

我们将绘制一个时间轴的折线图线图,展示每年事故的数量变化。

1️⃣ 时间轴动态折线tl = Timeline(init_opts=opts.InitOpts(width="1000px", height="500px", theme=ThemeType.DARK))for y in sorted(df['year'].unique()):    y_data = df[df['year']==y].groupby('acc.date').size().cumsum().reset_index()    line = (        Line()        .add_xaxis(y_data['acc.date'].dt.strftime("%Y-%m-%d").tolist())        .add_yaxis("累计事故", y_data[0].tolist(), is_smooth=True,                   linestyle_opts=opts.LineStyleOpts(width=3, color="#00ffcc"))        .set_global_opts(title_opts=opts.TitleOpts(title=f"{y} 时间轴"))    )    tl.add(line, str(y))tl.render_notebook()

6.2 哪些机型最致命

我们将绘制一个3D柱状图,展示死亡人数最多的前15个机型。

# 3️⃣ 机型死亡 Top15 3D 柱状top_type = df.groupby('type')['fat'].sum().nlargest(15).reset_index()bar3d = (    Bar3D(init_opts=opts.InitOpts(width="900px", height="600px", theme=ThemeType.DARK))    .add(        "",        [[i, j, top_type.iloc[i]['fat']] for i, j in enumerate(top_type['type'])],        xaxis3d_opts=opts.Axis3DOpts(type_="category"),        yaxis3d_opts=opts.Axis3DOpts(type_="category"),        zaxis3d_opts=opts.Axis3DOpts(type_="value"),    )    .set_global_opts(title_opts=opts.TitleOpts(title="最致命机型 Top15")))bar3d.render_notebook()

6.3 哪些运营商的事故最多

我们将绘制一个柱状图,展示事故数量最多的前15个运营商。

4️⃣ 运营商 PictorialBartop_op = df['operator'].value_counts().head(15).reset_index()pic = (    PictorialBar(init_opts=opts.InitOpts(width="1000px"height="800px", theme=ThemeType.DARK))    .add_xaxis(top_op['index'].tolist())    .add_yaxis(        "",        top_op['operator'].tolist(),        symbol="image://https://img.icons8.com/color/48/000000/airplane-take-off.png",        # symbol_size=30,    )    .reversal_axis()    .set_global_opts(title_opts=opts.TitleOpts(title="事故最多运营商 Top15")))pic.render_notebook()

6.4 事故严重程度占比

我们将绘制一个环形图,展示不同严重程度的事故占比。

# 5️⃣ 损坏分级环形图dmg = df['dmg'].value_counts().reset_index()pie = (    Pie(init_opts=opts.InitOpts(width="800px", height="600px", theme=ThemeType.DARK))    .add(        "",        [list(z) for z in zip(dmg['index'], dmg['dmg'])],        radius=["40%""75%"],        rosetype="radius",        label_opts=opts.LabelOpts(formatter="{b}: {c} ({d}%)", color="#fff"),    )    .set_global_opts(title_opts=opts.TitleOpts(title="事故损坏分级")))pie.render_notebook()

6.5 哪些地点最血腥

我们将绘制一个热力图,展示死亡人数最多的前10个地点。

# 3. 绘制热力图heatmap = (    HeatMap(init_opts=opts.InitOpts(width="1200px", height="600px", theme=ThemeType.DARK))    .add_xaxis(x_axis)    .add_yaxis(        "Fatalities",        y_axis,        data,        label_opts=opts.LabelOpts(is_show=True, position="inside", color="#fff"),    )    .set_global_opts(        title_opts=opts.TitleOpts(title="最血腥地点 Top20"),        visualmap_opts=opts.VisualMapOpts(            max_=int(loc['fat'].max()),            min_=0,            orient="vertical",            pos_right="5%",            is_show=True,            textstyle_opts=opts.TextStyleOpts(color="#fff")        ),        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(is_show=False)),        yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(color="#fff")),    ))heatmap.render("最血腥地点 Top20.html")

6.6 时间对事故的影响

我们将绘制一个日历图,展示不同时间段的事故数量。

7️⃣ 月份事故日历图cal = (    Calendar(init_opts=opts.InitOpts(width="1200px"height="260px", theme=ThemeType.DARK))    .add(        "",        [[row['acc.date'].strftime("%Y-%m-%d"), 1] for _, row in df.iterrows()],        calendar_opts=opts.CalendarOpts(range_=["2018""2022"], daylabel_opts=opts.CalendarDayLabelOpts(name_map="en"),                                        monthlabel_opts=opts.CalendarMonthLabelOpts(name_map="en"))    )    .set_global_opts(title_opts=opts.TitleOpts(title="每日事故日历 2018-2022")))cal.render_notebook()

6.7 机型 - 运营商 - 死亡人数

我们将绘制一个桑基图,展示机型、运营商与死亡人数的关系。

linksnodes = [][]for _row in df[df['fat'] > 10].iterrows():    links.append({"source": row['type'], "target": row['operator'], "value": row['fat']})    nodes.extend([{"name": row['type']}, {"name": row['operator']}])from pyecharts.charts import Sankeyc = (    Sankey(init_opts=opts.InitOpts(width="1000px"height="600px", theme=ThemeType.DARK))    .add(        "sankey",        nodes,        links,        linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5color="source"),        label_opts=opts.LabelOpts(position="right"),    )    .set_global_opts(title_opts=opts.TitleOpts(title="机型-运营商-死亡桑基图"))    .render("sankey_base.html"))

七、总结

通过以上分析,我们从多个角度对航空事故数据进行了可视化展示。从时间趋势到机型、运营商、地点等多个维度,我们能够更全面地了解航空事故的特征。这些图表不仅具有视觉冲击力,还能帮助我们快速提取关键信息,为航空安全研究提供有力支持。

如果你对航空安全感兴趣,或者想了解更多数据可视化技巧,欢迎关注我的博客!🎉


如果您在人工智能领域遇到技术难题,或是需要专业支持,无论是技术咨询、项目开发还是个性化解决方案,我都可以为您提供专业服务,如有需要可站内私信或添加下方VX名片(ID:xf982831907)

期待与您一起交流,共同探索AI的更多可能!

<--微信名片-->

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

航空事故 数据可视化 Python Pyecharts 人工智能
相关文章