您好,登录后才能下订单哦!
泰坦尼克号沉船事件是历史上最著名的海难之一,造成了大量人员伤亡。通过对泰坦尼克号幸存者数据的分析,我们可以了解哪些因素影响了乘客的幸存概率。本文将使用Python对泰坦尼克号幸存者数据进行详细的分析与预测。
首先,我们需要获取泰坦尼克号幸存者数据集。该数据集通常包含乘客的性别、年龄、舱位等级、登船港口等信息。我们可以从Kaggle或UCI Machine Learning Repository等平台下载该数据集。
import pandas as pd
# 加载数据集
train_data = pd.read_csv('train.csv')
test_data = pd.read_csv('test.csv')
# 查看数据集的前几行
print(train_data.head())
在数据预处理阶段,我们需要处理缺失值、异常值等问题。
# 检查缺失值
print(train_data.isnull().sum())
# 处理缺失值
train_data['Age'].fillna(train_data['Age'].median(), inplace=True)
train_data['Embarked'].fillna(train_data['Embarked'].mode()[0], inplace=True)
train_data['Cabin'].fillna('Unknown', inplace=True)
# 删除不必要的列
train_data.drop(['PassengerId', 'Name', 'Ticket', 'Cabin'], axis=1, inplace=True)
特征工程是数据预处理的重要步骤,我们可以通过创建新特征或转换现有特征来提高模型的性能。
# 创建新特征:家庭大小
train_data['FamilySize'] = train_data['SibSp'] + train_data['Parch'] + 1
# 创建新特征:是否独自一人
train_data['IsAlone'] = 1
train_data.loc[train_data['FamilySize'] > 1, 'IsAlone'] = 0
# 将性别转换为数值
train_data['Sex'] = train_data['Sex'].map({'male': 0, 'female': 1})
# 将登船港口转换为数值
train_data['Embarked'] = train_data['Embarked'].map({'S': 0, 'C': 1, 'Q': 2})
首先,我们来看一下幸存者的分布情况。
import matplotlib.pyplot as plt
import seaborn as sns
# 幸存者分布
sns.countplot(x='Survived', data=train_data)
plt.title('Survivor Distribution')
plt.show()
性别是影响幸存率的重要因素之一。
# 性别与幸存率
sns.barplot(x='Sex', y='Survived', data=train_data)
plt.title('Survival Rate by Gender')
plt.show()
年龄也是一个重要的影响因素。
# 年龄与幸存率
sns.histplot(x='Age', hue='Survived', data=train_data, kde=True)
plt.title('Survival Rate by Age')
plt.show()
舱位等级反映了乘客的社会经济地位,对幸存率有显著影响。
# 舱位等级与幸存率
sns.barplot(x='Pclass', y='Survived', data=train_data)
plt.title('Survival Rate by Passenger Class')
plt.show()
登船港口也可能影响幸存率。
# 登船港口与幸存率
sns.barplot(x='Embarked', y='Survived', data=train_data)
plt.title('Survival Rate by Embarked Port')
plt.show()
在构建模型之前,我们需要将数据集分为训练集和测试集。
from sklearn.model_selection import train_test_split
# 特征与标签
X = train_data.drop('Survived', axis=1)
y = train_data['Survived']
# 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
我们可以选择多种机器学习模型进行预测,如逻辑回归、随机森林、支持向量机等。
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
# 初始化模型
models = {
'Logistic Regression': LogisticRegression(),
'Random Forest': RandomForestClassifier(),
'Support Vector Machine': SVC()
}
接下来,我们训练这些模型并评估它们的性能。
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
# 模型训练与评估
for name, model in models.items():
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(f'{name} Accuracy: {accuracy_score(y_test, y_pred)}')
print(f'{name} Confusion Matrix:\n{confusion_matrix(y_test, y_pred)}')
print(f'{name} Classification Report:\n{classification_report(y_test, y_pred)}')
通过比较不同模型的准确率、混淆矩阵和分类报告,我们可以选择性能最好的模型。
通过特征选择,我们可以去除不重要的特征,提高模型的性能。
from sklearn.feature_selection import SelectKBest, chi2
# 特征选择
selector = SelectKBest(chi2, k=5)
X_new = selector.fit_transform(X, y)
# 查看选择的特征
selected_features = X.columns[selector.get_support()]
print(selected_features)
通过超参数调优,我们可以进一步提高模型的性能。
from sklearn.model_selection import GridSearchCV
# 超参数调优
param_grid = {
'n_estimators': [100, 200, 300],
'max_depth': [None, 10, 20, 30],
'min_samples_split': [2, 5, 10]
}
grid_search = GridSearchCV(RandomForestClassifier(), param_grid, cv=5)
grid_search.fit(X_train, y_train)
# 最佳参数
print(grid_search.best_params_)
通过对泰坦尼克号幸存者数据的分析与预测,我们了解了哪些因素影响了乘客的幸存概率。通过数据预处理、特征工程、模型构建与优化,我们能够构建一个性能较好的预测模型。未来,我们可以进一步探索其他机器学习算法或深度学习模型,以提高预测的准确性。
以上是关于如何使用Python对泰坦尼克号幸存者进行数据分析与预测的详细步骤。通过本文的学习,读者可以掌握数据预处理、特征工程、模型构建与评估的基本方法,并能够应用于其他类似的数据分析任务中。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。