使用Python实现数据处理与可视化:探索泰坦尼克号幸存者数据

03-01 9阅读

数据分析是当今技术领域中一个至关重要的技能。它不仅可以帮助我们从大量数据中提取有价值的信息,还能为决策提供依据。本文将通过分析泰坦尼克号幸存者数据集来展示如何使用Python进行数据处理和可视化。我们将探讨如何加载、清理、分析数据,并最终生成一些有意义的图表来揭示数据中的模式。

数据集介绍

泰坦尼克号沉没事件是历史上最著名的海难之一。1912年4月15日,这艘豪华客轮在首次航行时撞上冰山并沉没,导致超过1500人丧生。为了纪念这一事件并从中学习,Kaggle提供了泰坦尼克号乘客数据集(Titanic: Machine Learning from Disaster),该数据集包含了乘客的基本信息以及他们是否幸存。

数据字段说明

PassengerId:乘客IDSurvived:是否幸存(0 = No, 1 = Yes)Pclass:船票等级(1 = 一等舱, 2 = 二等舱, 3 = 三等舱)Name:姓名Sex:性别Age:年龄SibSp:兄弟姐妹/配偶数量Parch:父母/子女数量Ticket:船票编号Fare:票价Cabin:客舱编号Embarked:登船港口(C = Cherbourg, Q = Queenstown, S = Southampton)

环境搭建

在开始分析之前,我们需要确保安装了必要的Python库。可以通过以下命令安装这些库:

pip install pandas numpy matplotlib seaborn scikit-learn

接下来,导入所需的库:

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as snsfrom sklearn.model_selection import train_test_splitfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.metrics import accuracy_score

数据加载与初步查看

首先,我们需要加载数据集。假设你已经下载了数据集并将其保存为titanic.csv文件。

# 加载数据集df = pd.read_csv('titanic.csv')# 查看前几行数据print(df.head())

输出结果如下:

   PassengerId  Survived  Pclass     Name     Sex   Age  SibSp  Parch     Ticket    Fare Cabin Embarked0            1         0       3  Braund, Mr. Owen Harris    male  22.0      1      0     A/5 21171   7.2500   NaN        S1            2         1       1  Cumings, Mrs. John Bradley  female  38.0      1      0     PC 17599  71.2833   C85        C2            3         1       3  Heikkinen, Miss. Laina     female  26.0      0      0     STON/O2. 3101282  7.9250   NaN        S3            4         1       1  Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1      0     113803  53.1000  C123        S4            5         0       3  Allen, Mr. William Henry    male  35.0      0      0     373450   8.0500   NaN        S

从上面的结果可以看出,数据集中包含了许多字段。接下来,我们可以查看数据的基本统计信息:

# 查看数据的基本统计信息print(df.describe())

输出结果如下:

       PassengerId    Survived      Pclass         Age       SibSp       Parch        Farecount   891.000000  891.000000  891.000000  714.000000  891.000000  891.000000  891.000000mean    446.000000    0.383838    2.308642   29.699118    0.523008    0.381594   32.204208std     257.353842    0.486592    0.836071   14.526497    1.102743    0.806057   49.693429min       1.000000    0.000000    1.000000    0.420000    0.000000    0.000000    0.00000025%     223.500000    0.000000    2.000000   20.125000    0.000000    0.000000    7.91040050%     446.000000    0.000000    3.000000   28.000000    0.000000    0.000000   14.45420075%     668.500000    1.000000    3.000000   38.000000    1.000000    0.000000   31.000000max     891.000000    1.000000    3.000000   80.000000    8.000000    6.000000  512.329200

数据清洗

在进行进一步分析之前,我们需要对数据进行清洗。主要包括处理缺失值、异常值和重复值。

处理缺失值

检查每个字段的缺失值情况:

# 检查缺失值print(df.isnull().sum())

输出结果如下:

PassengerId      0Survived         0Pclass           0Name             0Sex              0Age            177SibSp            0Parch            0Ticket           0Fare             0Cabin          687Embarked         2dtype: int64

可以看到,AgeCabinEmbarked字段存在较多的缺失值。对于Age字段,我们可以用中位数填充;对于Cabin字段,由于缺失值太多,可以考虑删除或用特殊标记替换;对于Embarked字段,可以用众数填充。

# 填充缺失值df['Age'].fillna(df['Age'].median(), inplace=True)df['Cabin'].fillna('Unknown', inplace=True)df['Embarked'].fillna(df['Embarked'].mode()[0], inplace=True)# 再次检查缺失值print(df.isnull().sum())

处理异常值

检查是否有异常值,特别是票价和年龄字段。可以通过箱线图来直观地查看异常值。

# 绘制箱线图plt.figure(figsize=(10, 6))sns.boxplot(x='Pclass', y='Fare', data=df)plt.title('Fare Distribution by Pclass')plt.show()

根据箱线图,我们可以发现票价中存在一些极端值。可以考虑将这些极端值处理掉,或者直接忽略它们的影响。

删除重复值

检查是否存在重复值:

# 检查重复值print(df.duplicated().sum())

如果没有重复值,则不需要进一步处理。

数据分析

探索性数据分析(EDA)

通过可视化手段探索数据中的模式和关系。以下是几个常见的可视化方法:

幸存者比例

# 幸存者比例survival_counts = df['Survived'].value_counts()plt.figure(figsize=(6, 6))plt.pie(survival_counts, labels=['Not Survived', 'Survived'], autopct='%1.1f%%', startangle=90)plt.title('Survival Rate')plt.show()

性别与幸存的关系

# 性别与幸存的关系sns.countplot(x='Sex', hue='Survived', data=df)plt.title('Survival by Gender')plt.show()

船票等级与幸存的关系

# 船票等级与幸存的关系sns.countplot(x='Pclass', hue='Survived', data=df)plt.title('Survival by Pclass')plt.show()

年龄分布

# 年龄分布plt.figure(figsize=(10, 6))sns.histplot(df['Age'], bins=30, kde=True)plt.title('Age Distribution')plt.show()

特征工程

为了更好地进行预测建模,我们可以创建一些新的特征,例如家庭成员总数、是否有亲属等。

# 创建新特征df['FamilySize'] = df['SibSp'] + df['Parch'] + 1df['IsAlone'] = 1df.loc[df['FamilySize'] > 1, 'IsAlone'] = 0

模型训练与评估

使用随机森林分类器进行预测建模,并评估模型的准确性。

# 准备训练数据X = df[['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'FamilySize', 'IsAlone']]y = df['Survived']# 将类别变量转换为数值X = pd.get_dummies(X, drop_first=True)# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练模型model = RandomForestClassifier(n_estimators=100, random_state=42)model.fit(X_train, y_train)# 预测并评估模型y_pred = model.predict(X_test)accuracy = accuracy_score(y_test, y_pred)print(f'Accuracy: {accuracy:.4f}')

通过对泰坦尼克号幸存者数据集的分析,我们不仅掌握了如何使用Python进行数据处理和可视化,还学会了如何构建和评估机器学习模型。数据分析不仅仅是简单的数据操作,更是一种探索和发现的过程。通过不断地实践和学习,我们可以从数据中挖掘出更多的价值。

希望这篇文章对你有所帮助!如果你有任何问题或建议,请随时留言交流。

免责声明:本文来自网站作者,不代表CIUIC的观点和立场,本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。客服邮箱:ciuic@ciuic.com

目录[+]

您是本站第355名访客 今日有1篇新文章

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!