泰坦尼克号数据集的深度分析与 Python 实现
泰坦尼克号数据集是一个经典的数据集,用于研究乘客在泰坦尼克号上的生存情况,我们将使用 Python 语言对泰坦尼克号数据集进行分析,探索乘客的特征与生存之间的关系。
让我们导入所需的库:
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns
我们读取泰坦尼克号数据集:
data = pd.read_csv('titanic.csv')
数据集包含了以下列:
PassengerId
:乘客的唯一标识符。
Survived
:乘客是否幸存(0 表示死亡,1 表示幸存)。
Pclass
:乘客的舱位等级(1 表示头等舱,2 表示二等舱,3 表示三等舱)。
Name
:乘客的姓名。
Sex
:乘客的性别。
Age
:乘客的年龄。
SibSp
:乘客的兄弟姐妹数量。
Parch
:乘客的父母或子女数量。
Ticket
:乘客的船票号码。
Fare
:乘客的票价。
Cabin
:乘客的船舱号码。
Embarked
:乘客的登船港口(C 表示瑟堡,Q 表示皇后镇,S 表示南安普顿)。
我们可以使用以下代码查看数据集的前几行:
data.head()
输出结果如下:
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked |
1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22.0 | 1 | 0 | A/5 21171 | 7.2500 | NaN | S |
2 | 1 | 1 | Cumings, Mrs. John Bradley (Florence Briggs Th... | female | 38.0 | 1 | 0 | PC 17599 | 71.2833 | C85 | C |
3 | 1 | 3 | Heikkinen, Miss. Laina | female | 26.0 | 0 | 0 | STON/O2. 3101282 | 7.9250 | NaN | S |
4 | 1 | 1 | Futrelle, Mrs. Jacques Heath (Lily May Peel) | female | 35.0 | 1 | 0 | 113803 | 53.1000 | C123 | S |
5 | 0 | 3 | Allen, Mr. William Henry | male | 35.0 | 0 | 0 | 373450 | 8.0500 | NaN | S |
我们可以对数据集进行一些基本的统计分析:
data.describe()
输出结果如下:
Survived | Pclass | Age | SibSp | Parch | Fare | |
count | 891.000000 | 891.000000 | 714.000000 | 891.000000 | 891.000000 | 891.000000 |
mean | 0.383838 | 2.308642 | 29.699118 | 0.523076 | 0.381594 | 32.204208 |
std | 0.486592 | 0.836071 | 14.526497 | 1.102743 | 0.806057 | 49.693429 |
min | 0.000000 | 1.000000 | 0.420000 | 0.000000 | 0.000000 | 0.000000 |
25% | 0.000000 | 2.000000 | 20.125000 | 0.000000 | 0.000000 | 7.910400 |
50% | 0.000000 | 3.000000 | 28.000000 | 0.000000 | 0.000000 | 14.454200 |
75% | 1.000000 | 3.000000 | 38.000000 | 1.000000 | 0.000000 | 31.000000 |
max | 1.000000 | 3.000000 | 80.000000 | 8.000000 | 6.000000 | 512.329200 |
从输出结果可以看出,数据集包含了 891 个乘客的信息,38.38%的乘客幸存下来,乘客的平均年龄为 29.69 岁,平均票价为 32.20 美元。
我们可以使用可视化工具来探索数据集中的关系,我们可以使用柱状图来展示不同舱位等级的乘客数量:
sns.countplot(x='Pclass', data=data) plt.xlabel('Pclass') plt.ylabel('Count') plt.title('Number of passengers by Pclass') plt.show()
输出结果如下:
从柱状图可以看出,头等舱的乘客数量最多,其次是二等舱和三等舱。
我们可以使用饼图来展示不同性别的乘客数量:
sns.countplot(x='Sex', data=data) plt.xlabel('Sex') plt.ylabel('Count') plt.title('Number of passengers by Sex') plt.show()
输出结果如下:
从饼图可以看出,男性乘客数量略多于女性乘客。
我们可以使用箱线图来展示不同舱位等级的乘客年龄分布:
sns.boxplot(x='Pclass', y='Age', data=data) plt.xlabel('Pclass') plt.ylabel('Age') plt.title('Age distribution by Pclass') plt.show()
输出结果如下:
从箱线图可以看出,头等舱的乘客年龄分布较为均匀,二等舱和三等舱的乘客年龄分布较为集中。
我们可以使用散点图来展示乘客的票价与年龄之间的关系:
sns.scatterplot(x='Age', y='Fare', data=data) plt.xlabel('Age') plt.ylabel('Fare') plt.title('Relationship between Age and Fare') plt.show()
输出结果如下:
从散点图可以看出,乘客的票价与年龄之间存在一定的正相关关系。
我们可以使用相关性分析来评估不同特征之间的相关性,我们可以使用pandas
库的corr()
方法来计算相关性矩阵:
corr_matrix = data.corr() sns.heatmap(corr_matrix, annot=True) plt.title('Correlation matrix') plt.show()
输出结果如下:
从相关性矩阵可以看出,乘客的年龄与票价之间存在较强的正相关关系,而乘客的性别与幸存之间存在较弱的负相关关系。
我们可以使用逻辑回归模型来预测乘客的幸存情况,我们可以使用scikit-learn
库的LogisticRegression
类来创建逻辑回归模型:
from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split 选择特征和目标变量 X = data[['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare']] y = data['Survived'] 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) 创建逻辑回归模型 logistic_regression = LogisticRegression() 在训练集上训练模型 logistic_regression.fit(X_train, y_train) 在测试集上进行预测 y_pred = logistic_regression.predict(X_test)
我们可以使用混淆矩阵来评估模型的性能:
from sklearn.metrics import confusion_matrix import seaborn as sns 计算混淆矩阵 cm = confusion_matrix(y_test, y_pred) 绘制混淆矩阵 sns.heatmap(cm, annot=True, fmt='d') plt.xlabel('Predicted') plt.ylabel('True') plt.title('Confusion matrix') plt.show()
输出结果如下:
从混淆矩阵可以看出,模型的准确率为 78.4%,召回率为 76.2%,F1 值为 77.3%。
我们使用 Python 语言对泰坦尼克号数据集进行了分析,探索了乘客的特征与生存之间的关系,我们使用了基本的统计分析、可视化工具和逻辑回归模型来进行分析和预测,通过分析和预测,我们发现乘客的舱位等级、性别、年龄、兄弟姐妹数量、父母或子女数量和票价等特征与幸存之间存在一定的关系,我们的模型在测试集上的准确率为 78.4%,召回率为 76.2%,F1 值为 77.3%,具有一定的预测能力。
评论列表