【数据可视化-67】基于pyecharts的航空安全深度剖析:坠毁航班数据集可视化分析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907
💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

【数据可视化-67】基于pyecharts的航空安全深度剖析:坠毁航班数据集可视化分析


一、引言

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

二、数据集介绍

该数据集包含以下字段:

  • 日期:事故发生的日期
  • 类型:飞机型号
  • 注册:飞机注册码
  • 运营商:运营飞机的航空公司或组织
  • fat:事故中报告的死亡人数(乘客 + 机组人员)
  • 地点:事故发生的地点
  • dmg:损坏严重程度(编码)

三、分析目标

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

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

四、环境准备

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

bash 复制代码
pip install pandas pyecharts

五、数据加载与预处理

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

python 复制代码
import pandas as pd
import numpy as np
from pyecharts import options as opts
from pyecharts.charts import *
from pyecharts.globals import ThemeType
import warnings, datetime, re
warnings.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.year
df['month'] = df['acc.date'].dt.month
df['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 事故随时间的变化趋势

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

python 复制代码
# 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个机型。

python 复制代码
# 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个运营商。

python 复制代码
# 4️⃣ 运营商 PictorialBar
top_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 事故严重程度占比

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

python 复制代码
# 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个地点。

python 复制代码
# 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 时间对事故的影响

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

python 复制代码
# 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 机型 - 运营商 - 死亡人数

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

python 复制代码
links, nodes = [], []
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 Sankey


c = (
    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.5, color="source"),
        label_opts=opts.LabelOpts(position="right"),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="机型-运营商-死亡桑基图"))
    .render("sankey_base.html")
)

七、总结

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

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


相关推荐
宝山哥哥2 小时前
python办自动化--读取邮箱中特定的邮件,并下载特定的附件
python·信息可视化·自动化
王国强20095 小时前
深入解析 Streamlit:为数据科学和机器学习打造的高效 Web 应用框架
数据分析
优秘智能UMI5 小时前
金融系统AIGC能力中心赋能实战指南
大数据·人工智能·深度学习·信息可视化·aigc
pk_xz1234567 小时前
基于强化学习的工业SCR脱硝系统控制算法设计与实现
人工智能·python·深度学习·数据挖掘
pk_xz1234567 小时前
厌氧菌数据挖掘可行性评估报告
人工智能·深度学习·神经网络·数学建模·数据挖掘·超分辨率重建
德育处主任8 小时前
p5.js 圆(circle)的用法
前端·数据可视化·canvas
空脑小白11 小时前
使用Python绘制专业柱状图:Matplotlib完全指南
python·信息可视化·matplotlib
职业规划师12 小时前
统计与大数据分析和数字经济专业有什么区别?
数据挖掘·数据分析