【数据可视化-38】基于Plotly得泰坦尼克号数据集的多维度可视化分析
🧑 博主简介:曾任某智慧城市类企业
算法总监
,目前在美国市场的物流公司从事高级算法工程师
一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907
)
💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。
【数据可视化-38】基于Plotly得泰坦尼克号数据集的多维度可视化分析
- 一、引言
- 二、数据探索
- 2.1 数据集介绍
- 2.2 数据清洗探索
- 三、单维度特征可视化
- 3.1 生存情况饼状图
- 3.2 客舱等级柱状图
- 3.3 年龄分布直方图
- 3.4 票价分布箱线图
- 四、各个特征与生存关系的可视化
- 4.1 性别与生存关系的柱状图
- 4.3 年龄与生存关系的散点图
- 4.4 登船港口与生存关系的饼状图组合
- 4.5 家庭成员数量与生存关系的组合图
- 五、多变量综合分析
- 5.1 性别、客舱等级与生存关系的三维散点图
- 5.2 年龄组、客舱等级与生存关系的热力图
- 5.3 性别、客舱等级与年龄的交互式箱线图
一、引言
泰坦尼克号沉船事件一直以来都是数据分析和机器学习领域的重要研究对象。本文将利用泰坦尼克号数据集,通过 Plotly 库实现多样化的可视化分析,深入探讨影响乘客生存率的各类因素以及变量间的关系。从单维度特征到多维度交叉分析,以下内容包含完整可运行的 Python 代码,助力读者清晰了解数据背后的真相,为相关研究和模型构建奠定基础。
二、数据探索
2.1 数据集介绍
泰坦尼克号数据集包含以下变量:
特征名称 | 描述 |
---|---|
PassengerId | 乘客编号 |
Survived | 0 = 湍亡,1 = 生存 |
Pclass | 客舱等级(1 = 一等舱,2 = 二等舱,3 = 三等舱) |
Name | 乘客姓名 |
Sex | 性别 |
Age | 年龄 |
SibSp | 兄弟姐妹 / 配偶数量 |
Parch | 父母 / 子女数量 |
Ticket | 票号 |
Fare | 票价 |
Cabin | 客舱 |
Embarked | 登船港口(C = 樱堡,Q = 女王镇,S = 南安普顿) |
2.2 数据清洗探索
import pandas as pd
import numpy as np
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots# 加载数据
df = pd.read_csv('titanic.csv') # 请替换为实际文件路径# 查看数据维度
df.shape
# 查看数据基本信息
print(df.info())
# 查看数据维度缺失值
df.isnull().sum()
从数据基本信息可发现:
- 数据共 418 条样本,部分特征存在缺失值,如 Age、Cabin。
- 各特征数据类型各异,包括整数、浮点数和对象类型。
三、单维度特征可视化
3.1 生存情况饼状图
# 生存情况统计
survived_counts = df['Survived'].value_counts()# 绘制饼状图
fig = px.pie(survived_counts, values=survived_counts.values, names=['Dead', 'Alive'], title='Survival Distribution')
fig.show()
从上图可以发现,数据中死亡的人数对生还得人数,死亡的人数占总人数得63.6%;
3.2 客舱等级柱状图
# 客舱等级分布
pclass_counts = df['Pclass'].value_counts().sort_index()# 绘制柱状图
fig = px.bar(x=pclass_counts.index, y=pclass_counts.values, labels={'x': 'Class', 'y': 'Count'}, title='Class Distribution')
fig.show()
从上图可以发现,客舱一共分为3个等级,其中等级为3得客舱人数最多;
3.3 年龄分布直方图
fig = px.histogram(df, x='Age', nbins=40, title='Age Distribution', labels={'Age': 'Age'})
fig.show()
从上图可以发现,年龄得分布近似符合偏左得正态分布,年龄大多数在20-30岁之间,我们还可以发现年龄存在一定得异常值情况;
3.4 票价分布箱线图
fig = px.box(df, y='Fare', title='Fare Distribution')
fig.show()
从上图可以发现,票价中存在一些异常值票价得中位数为14.4542$;
四、各个特征与生存关系的可视化
4.1 性别与生存关系的柱状图
# 按性别分组统计生存情况
sex_survived = df.groupby(['Sex', 'Survived']).size().unstack()# 绘制柱状图
fig = px.bar(sex_survived, x=sex_survived.index, y=[0, 1], labels={'x': 'Sex', 'y': 'Count', 'variable': 'Survived'},title='Survival by Sex')
fig.show()
从上图可以发现,
# 按客舱等级分组统计生存情况
pclass_survived = df.groupby(['Pclass', 'Survived']).size().unstack()# 绘制堆叠柱状图
fig = px.bar(pclass_survived, x=pclass_survived.index, y=[0, 1], labels={'x': 'Class', 'y': 'Count', 'variable': 'Survived'},title='Survival by Class', barmode='stack')
fig.show()
4.3 年龄与生存关系的散点图
fig = px.scatter(df, x='Age', y='Fare', color='Survived', title='Age vs Fare with Survival Status', labels={'Survived': 'Survived'})
fig.show()
4.4 登船港口与生存关系的饼状图组合
# 创建子图
fig = make_subplots(rows=1, cols=2, specs=[[{'type': 'pie'}, {'type': 'pie'}]])# 绘制登船港口分布饼状图
embarked_counts = df['Embarked'].value_counts()
fig.add_trace(go.Pie(labels=embarked_counts.index, values=embarked_counts.values, title='Embarked Distribution'), row=1, col=1)# 绘制登船港口与生存关系饼状图
embarked_survived = df.groupby(['Embarked', 'Survived']).size().unstack()
fig.add_trace(go.Pie(labels=embarked_survived.index, values=embarked_survived[1], title='Survival by Embarked'), row=1, col=2)fig.update_layout(title='Embarked Analysis')
fig.show()
4.5 家庭成员数量与生存关系的组合图
# 创建家庭成员数量特征
df['FamilySize'] = df['SibSp'] + df['Parch']# 创建子图
fig = make_subplots(rows=1, cols=2, subplot_titles=('Family Size Distribution', 'Survival by Family Size'))# 绘制家庭成员数量分布直方图
fig.add_trace(go.Histogram(x=df['FamilySize'], nbinsx=10), row=1, col=1)# 绘制家庭成员数量与生存关系箱线图
fig.add_trace(go.Box(x=df['FamilySize'], y=df['Survived'], marker=dict(color='red')), row=1, col=2)fig.update_layout(title='Family Size Analysis')
fig.show()
五、多变量综合分析
5.1 性别、客舱等级与生存关系的三维散点图
fig = px.scatter_3d(df, x='Age', y='Fare', z='Pclass', color='Survived', symbol='Sex', title='3D Scatter Plot of Survival Factors',labels={'Pclass': 'Class', 'Survived': 'Survived'})
fig.show()
5.2 年龄组、客舱等级与生存关系的热力图
# 创建年龄组特征
df['AgeGroup'] = pd.cut(df['Age'], bins=[0, 10, 20, 30, 40, 50, 60, 70, 80], labels=['0-10', '11-20', '21-30', '31-40', '41-50', '51-60', '61-70', '71-80'])# 构建透视表
pivoted = df.pivot_table(index='AgeGroup', columns='Pclass', values='Survived', aggfunc='mean')# 绘制热力图
fig = px.imshow(pivoted, text_auto=".2f", title='Survival Rate by Age Group and Class',labels={'x': 'Class', 'y': 'Age Group', 'color': 'Survival Rate'})
fig.show()
5.3 性别、客舱等级与年龄的交互式箱线图
fig = px.box(df, x='Sex', y='Age', color='Pclass', title='Age Distribution by Sex and Class',labels={'Pclass': 'Class', 'Age': 'Age'})
fig.show()
从以上可视化分析可以看出:
- 性别与生存率:女性生存率显著高于男性,反映出 “女士优先” 的救援原则。
- 客舱等级与生存率:一等舱乘客生存率最高,三等舱最低,表明社会阶层对生存机会的影响。
- 年龄与生存率:儿童和年轻人生存率相对较高,老年人生存率较低。
- 家庭成员数量:有一定家庭成员陪伴的乘客生存率较高,可能因相互帮助而增加生存机会。
- 登船港口:不同港口乘客的生存率存在差异,可能与乘客的社会经济背景及舱位分配有关。
以上分析揭示了泰坦尼克号事件中影响乘客生存的多方面因素,为后续深入研究和模型构建提供了直观且全面的数据洞察。
如果您对数据分析、可视化或机器学习有进一步的问题,欢迎随时交流探讨!