从数据到洞察:3步完成Titanic数据集可视化分析
你是否曾面对海量数据却无从下手?想快速发现数据规律却被复杂代码劝退?本文将带你用Python和R两种语言,通过3个简单步骤完成Titanic数据集的可视化分析,无需深厚编程基础也能轻松掌握。读完本文你将学会:数据加载与清洗、关键指标可视化、多维度分析图表制作,让公开数据真正为你所用。
准备工作:获取与了解数据集
Awesome Public Datasets项目是高质量公开数据集的集合,按主题分类整理了农业、生物、气候等多个领域的数据资源。项目主页提供了详细的数据集元信息,如Titanic数据集就包含乘客基本信息、舱位等级、票价和生存状态等关键字段。
要开始分析,首先需要获取数据集。通过以下命令克隆项目仓库:
git clone https://gitcode.com/GitHub_Trending/aw/awesome-public-datasets
cd awesome-public-datasets
Titanic数据集位于Datasets/titanic.csv,包含891条记录和12个字段。使用Excel或文本编辑器打开文件,可以看到数据结构如下:
PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked
1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S
2,1,1,"Cumings, Mrs. John Bradley",female,38,1,0,PC 17599,71.2833,C85,C
第一步:数据加载与预处理
Python实现
使用Pandas库加载数据并处理缺失值:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 加载数据
df = pd.read_csv('Datasets/titanic.csv')
# 处理缺失值
df['Age'].fillna(df['Age'].median(), inplace=True)
df['Embarked'].fillna(df['Embarked'].mode()[0], inplace=True)
df.drop('Cabin', axis=1, inplace=True)
# 查看数据基本信息
print(df.info())
print(df.describe())
R实现
使用tidyverse包进行数据处理:
library(tidyverse)
# 加载数据
df <- read_csv("Datasets/titanic.csv")
# 处理缺失值
df <- df %>%
mutate(
Age = replace(Age, is.na(Age), median(Age, na.rm = TRUE)),
Embarked = replace(Embarked, is.na(Embarked), mode(Embarked)[1])
) %>%
select(-Cabin)
# 查看数据基本信息
glimpse(df)
summary(df)
数据预处理是可视化分析的基础,主要包括缺失值填充和无关列删除。对于年龄字段,我们使用中位数填充;登船港口使用众数填充;由于Cabin字段缺失值过多,直接删除该列。
第二步:单变量分析可视化
生存情况分布
Python代码:
plt.figure(figsize=(8, 5))
sns.countplot(x='Survived', data=df)
plt.title('Titanic乘客生存情况分布')
plt.xlabel('生存状态 (0=未存活, 1=存活)')
plt.ylabel('人数')
plt.xticks([0, 1], ['未存活', '存活'])
plt.show()
R代码:
ggplot(df, aes(x = factor(Survived))) +
geom_bar(fill = c("#E74C3C", "#2ECC71")) +
labs(
title = "Titanic乘客生存情况分布",
x = "生存状态 (0=未存活, 1=存活)",
y = "人数"
) +
scale_x_discrete(labels = c("未存活", "存活")) +
theme_minimal()
分析显示,Titanic灾难中约38%的乘客存活,62%的乘客不幸遇难。这一基础分布为后续多维度分析提供了基准。
乘客年龄分布
Python代码:
plt.figure(figsize=(10, 6))
sns.histplot(df['Age'], bins=20, kde=True, color='skyblue')
plt.title('Titanic乘客年龄分布')
plt.xlabel('年龄')
plt.ylabel('人数')
plt.grid(alpha=0.3)
plt.show()
R代码:
ggplot(df, aes(x = Age)) +
geom_histogram(binwidth = 5, fill = "skyblue", color = "white", alpha = 0.7) +
geom_density(alpha = 0.3, fill = "red") +
labs(
title = "Titanic乘客年龄分布",
x = "年龄",
y = "人数"
) +
theme_minimal()
年龄分布呈现右偏态,主要集中在20-40岁区间,这反映了当时船上以青壮年乘客为主的人口结构特征。
第三步:多变量分析可视化
舱位等级与生存率关系
Python代码:
plt.figure(figsize=(8, 6))
sns.barplot(x='Pclass', y='Survived', data=df)
plt.title('不同舱位等级的生存率')
plt.xlabel('舱位等级 (1=头等舱, 2=二等舱, 3=三等舱)')
plt.ylabel('生存率')
plt.ylim(0, 1)
plt.grid(axis='y', alpha=0.3)
plt.show()
R代码:
ggplot(df, aes(x = factor(Pclass), y = Survived)) +
geom_bar(stat = "summary", fun = "mean", fill = "steelblue") +
labs(
title = "不同舱位等级的生存率",
x = "舱位等级 (1=头等舱, 2=二等舱, 3=三等舱)",
y = "生存率"
) +
scale_y_continuous(labels = scales::percent, limits = c(0, 1)) +
theme_minimal()
图表清晰显示舱位等级与生存率呈正相关:头等舱乘客生存率约63%,二等舱约47%,三等舱仅24%。这反映了灾难发生时的救援优先级和舱位位置差异。
性别与生存率关系
Python代码:
plt.figure(figsize=(8, 6))
sns.barplot(x='Sex', y='Survived', data=df)
plt.title('不同性别的生存率')
plt.xlabel('性别')
plt.ylabel('生存率')
plt.ylim(0, 1)
plt.grid(axis='y', alpha=0.3)
plt.show()
R代码:
ggplot(df, aes(x = Sex, y = Survived)) +
geom_bar(stat = "summary", fun = "mean", fill = "pink") +
labs(
title = "不同性别的生存率",
x = "性别",
y = "生存率"
) +
scale_y_continuous(labels = scales::percent, limits = c(0, 1)) +
theme_minimal()
性别差异对生存率影响显著:女性生存率约74%,而男性仅约19%。这一结果印证了"女士优先"的救援原则在灾难中的实际体现。
年龄、性别与生存率的三维分析
Python代码:
plt.figure(figsize=(12, 7))
sns.boxplot(x='Sex', y='Age', hue='Survived', data=df)
plt.title('年龄、性别与生存率的关系')
plt.xlabel('性别')
plt.ylabel('年龄')
plt.legend(title='生存状态', labels=['未存活', '存活'])
plt.grid(axis='y', alpha=0.3)
plt.show()
R代码:
ggplot(df, aes(x = Sex, y = Age, fill = factor(Survived))) +
geom_boxplot() +
labs(
title = "年龄、性别与生存率的关系",
x = "性别",
y = "年龄",
fill = "生存状态"
) +
scale_fill_manual(values = c("#E74C3C", "#2ECC71"), labels = c("未存活", "存活")) +
theme_minimal()
通过箱线图可以观察到:女性各年龄段生存率普遍高于男性;男性低年龄段(0-10岁)的生存率相对较高,可能是因为儿童优先得到救援。
总结与进阶
通过本文介绍的三个步骤,我们完成了从数据获取到多维度可视化分析的全过程。使用Python的Matplotlib/Seaborn库和R的ggplot2库,我们发现了Titanic数据中的关键规律:舱位等级越高、女性、儿童的生存率显著更高。这些发现与历史记录高度吻合,验证了可视化分析的有效性。
Awesome Public Datasets项目还提供了更多领域的高质量数据,如农业领域的全球作物产量数据集、气候领域的全球气候数据集等。你可以用本文学到的方法探索这些数据集,发现更多有价值的 insights。
下一步,你可以尝试更复杂的分析:构建生存预测模型、特征重要性评估或时间序列分析。数据可视化不仅是探索数据的工具,更是传达发现的桥梁,希望本文能帮助你更好地利用公开数据资源。
点赞收藏本文,关注获取更多数据可视化技巧!下期我们将介绍如何用Tableau制作交互式仪表盘,让你的数据分析更具说服力。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



