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

🧑 博主简介:曾任某智慧城市类企业算法总监,CSDN / 稀土掘金 等平台人工智能领域优质创作者。
目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。


一、引言

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

二、数据集介绍

该数据集包含以下字段:

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

三、分析目标

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

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

四、环境准备

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

复制代码
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 事故随时间的变化趋势

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

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

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

less 复制代码
# 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 事故严重程度占比

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

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

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

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

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

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

less 复制代码
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")
)

七、总结

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

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


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

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

<--微信名片-->

相关推荐
用户414292960723915 小时前
淘宝实时商品API接口:采集竞品商品详情页的价格、SKU 规格、库存数量、卖点文案、图文内容、售后政策(运费、退换货规则)、评价核心标签
数据挖掘·数据分析·数据可视化
杨超越luckly1 天前
基于 Overpass API 的城市电网基础设施与 POI 提取与可视化
python·数据可视化·openstreetmap·电力数据·overpass api
用户5962585736062 天前
【征文计划】当AI Glasses成为你的“植物百科全书”
数据可视化
HsuHeinrich4 天前
利用面积图探索历史温度的变化趋势
python·数据可视化
CodeCraft Studio7 天前
空间天气监测,TeeChart助力实现太阳活动数据的可视化分析
信息可视化·数据挖掘·数据分析·数据可视化·teechart·科研图表·图表库
FIT2CLOUD飞致云7 天前
安全漏洞修复,API数据源支持添加时间戳参数,DataEase开源BI工具v2.10.17 LTS版本发布
开源·数据可视化·dataease·bi·数据大屏
图扑可视化9 天前
图扑 HT 智慧汽车展示平台全自研技术方案
汽车·数据可视化·组态监控·汽车展示
Highcharts.js10 天前
Highcharts开发解析:从数据可视化到用户体验的全面指南
信息可视化·前端框架·数据可视化·ux·highcharts·交互图表
数字冰雹10 天前
为城市治理装上“数字引擎”
中间件·数据可视化
Highcharts.js10 天前
学习 Highcharts 可视化开发的有效途径
学习·数据可视化·highcharts·图表开发·可视化开发