Pandas深入分析泰坦尼克数据集:从数据清洗到洞见发现

目录

一、数据集简介与加载

1.1 数据集背景

1.2 数据加载

二、数据质量审查

2.1 数据概览

2.2 缺失值分析

三、数据清洗与预处理

3.1 处理缺失值

3.2 特征工程

四、探索性数据分析(EDA)

4.1 整体幸存情况

4.2 性别与幸存率分析

4.3 船舱等级影响

4.4 年龄分布分析

五、深入特征分析

5.1 票价与幸存关系

5.2 家庭人数影响

六、关键洞见总结

七、进阶分析方向

结语


一、数据集简介与加载

1.1 数据集背景

泰坦尼克数据集记录了1912年泰坦尼克号沉船事件中部分乘客的信息,包含以下关键特征:

  • Survived:是否幸存(0=否,1=是)

  • Pclass:船舱等级(1/2/3等舱)

  • Sex:性别

  • Age:年龄

  • SibSp:兄弟姐妹/配偶数量

  • Parch:父母/子女数量

  • Fare:船票价格

  • Embarked:登船港口(C=Cherbourg, Q=Queenstown, S=Southampton)

  • Cabin:船舱编号

1.2 数据加载

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 从网络加载数据
url = "https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv"
df = pd.read_csv(url)

# 显示数据前5行
display(df.head())
 

二、数据质量审查

2.1 数据概览

print(f"数据集形状:{df.shape}")
df.info()

2.2 缺失值分析

missing = df.isnull().sum().sort_values(ascending=False)
missing_percent = (missing / len(df)) * 100
pd.DataFrame({'缺失数量': missing, '缺失比例(%)': missing_percent.round(2)})
输出结果
特征缺失数量缺失比例(%)
Cabin68777.10
Age17719.87
Embarked20.22


三、数据清洗与预处理

3.1 处理缺失值

# 删除Cabin列(缺失过多)
df.drop(columns=['Cabin'], inplace=True)

# 用中位数填充Age
df['Age'].fillna(df['Age'].median(), inplace=True)

# 用众数填充Embarked
df['Embarked'].fillna(df['Embarked'].mode()[0], inplace=True)

3.2 特征工程

# 创建家庭人数特征
df['FamilySize'] = df['SibSp'] + df['Parch'] + 1

# 创建是否独自乘船特征
df['IsAlone'] = (df['FamilySize'] == 1).astype(int)

# 创建年龄段分组
bins = [0, 12, 18, 30, 50, 100]
labels = ['儿童', '少年', '青年', '中年', '老年']
df['AgeGroup'] = pd.cut(df['Age'], bins=bins, labels=labels)

# 转换分类变量
df['Sex'] = df['Sex'].map({'male': 0, 'female': 1})
df = pd.get_dummies(df, columns=['Embarked'], prefix='Embarked')
 

四、探索性数据分析(EDA)

4.1 整体幸存情况

plt.figure(figsize=(8,6))
sns.countplot(x='Survived', data=df, palette='Set2')
plt.title('幸存人数分布', fontsize=14)
plt.xlabel('是否幸存', fontsize=12)
plt.ylabel('人数', fontsize=12)
plt.show()

survival_rate = df['Survived'].mean() * 100
print(f"整体幸存率:{survival_rate:.2f}%")

4.2 性别与幸存率分析

gender_survival = df.groupby('Sex')['Survived'].agg(['mean', 'count'])
gender_survival.columns = ['幸存率', '总人数']
gender_survival['幸存率'] = gender_survival['幸存率'].apply(lambda x: f"{x*100:.1f}%")
display(gender_survival)
输出结果
Sex幸存率总人数
018.9%577
174.2%314

4.3 船舱等级影响

plt.figure(figsize=(10,6))
sns.barplot(x='Pclass', y='Survived', data=df, palette='viridis', ci=None)
plt.title('不同船舱等级幸存率对比', fontsize=14)
plt.xlabel('船舱等级', fontsize=12)
plt.ylabel('幸存率', fontsize=12)
plt.ylim(0,1)
plt.show()

4.4 年龄分布分析

plt.figure(figsize=(12,6))
sns.histplot(data=df, x='Age', hue='Survived', bins=30, 
             kde=True, palette='Set1', element='step')
plt.title('年龄分布与幸存情况', fontsize=14)
plt.xlabel('年龄', fontsize=12)
plt.ylabel('人数', fontsize=12)
plt.legend(title='幸存', labels=['否', '是'])
plt.show()
 

五、深入特征分析

5.1 票价与幸存关系

plt.figure(figsize=(12,6))
sns.boxplot(x='Survived', y='Fare', data=df, palette='Set3')
plt.yscale('log')  # 对数变换处理离群值
plt.title('票价分布与幸存关系', fontsize=14)
plt.xlabel('是否幸存', fontsize=12)
plt.ylabel('票价(对数尺度)', fontsize=12)
plt.show()

5.2 家庭人数影响

family_impact = df.groupby('FamilySize')['Survived'].mean().reset_index()
plt.figure(figsize=(10,6))
sns.lineplot(x='FamilySize', y='Survived', data=family_impact, 
             marker='o', color='darkred')
plt.title('家庭人数对幸存率的影响', fontsize=14)
plt.xlabel('家庭人数', fontsize=12)
plt.ylabel('幸存率', fontsize=12)
plt.grid(linestyle='--', alpha=0.7)
plt.show()
 

六、关键洞见总结

  1. 性别差异:女性幸存率(74.2%)显著高于男性(18.9%)

  2. 阶级影响:头等舱幸存率(63%)远高于三等舱(24.7%)

  3. 年龄因素:儿童(尤其5岁以下)幸存率高于其他年龄段

  4. 票价关联:幸存者的平均票价是未幸存者的4倍

  5. 家庭规模:2-4人家庭的幸存率最高,独行者幸存率最低


七、进阶分析方向

特征相关性分析

plt.figure(figsize=(12,8))
corr = df.corr()
sns.heatmap(corr, annot=True, cmap='coolwarm', fmt=".2f")
plt.title('特征相关性热力图', fontsize=14)
plt.show()

机器学习预测准备

# 选择特征与目标变量
features = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'FamilySize', 'IsAlone']
X = df[features]
y = df['Survived']

# 数据集拆分
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
 

结语

通过本分析我们不仅掌握了Pandas的核心操作技巧,更揭示了影响生存的关键因素。建议下一步:

  1. 尝试构建预测模型(如随机森林)

  2. 深入分析文本字段(如姓名中的称谓)

  3. 探索更多特征组合方式

  4. 使用交叉验证评估模型性能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值