本文对Kaggle中的Titanic事故中乘客遇难情况进行了相应的分析和可视化,采用逻辑回归对他们的遇难情况进行了预测。最后得到的预测结果不算很好,但是本文大致是一个较为完整的数据分析和预测流程。
1. 数据集和测试集
本文的数据集和测试集来自:https://www.kaggle.com/c/titanic/data
# 导入相关库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
导入数据集和测试集:
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
2. 数据探索和可视化
2.1 数据的类型
接下来进行数据的探索,首先可以先了解数据的类型:
train.dtypes
训练集总共12列,Survived字段表示乘客是否获救;测试集总共11列,而Survived是我们需要预测的目标。
2.2 数据的可视化探索
首先通过pandas中的describe()得到数值型数据的分布特点:
train.describe()
接着可以分析各个特征对应的人数分布:
# 中文字体设置
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 各属性对应的人数分布
plt.subplot(2,2,1)
sns.countplot(x='Survived', data=train)
plt.title('存活情况')
plt.subplot(2,2,2)
sns.countplot(x='Pclass', data=train)
plt.title('各等级舱人数')
plt.subplot(2,2,3)
sns.countplot(x='Sex', data=train)
plt.title('男女人数')
plt.subplot(2,2,4)
sns.countplot(x='Embarked', data=train)
plt.title('登船港口')
plt.tight_layout()
可以看出,3等舱的人数最多,男性乘客显著多余女性乘客,而登船港口则明显集中于'S',典型的偏态分布。
接着可以分析各个特征与乘客是否获救之间的关系:
船舱等级:
# 舱等级与存活情况之间的关系
Survived_0 = train.Pclass[train.Survived == 0].value_counts()
Survived_1 = train.Pclass[train.Survived == 1].value_counts()
Pclass_df = pd.DataFrame({'未获救': Survived_0, '获救': Survived_1})
Pclass_df.plot(kind='bar', stacked=True)
plt.title('各乘客舱等级的获救情况')
plt.xlabel('乘客舱等级')
plt.ylabel('人数')
plt.show()
可以看出,头等舱获救率明显较高,3等舱获救率则较低。
上船港口:
# 上船港口与存活情况之间的关系
Survived_0 = train.Embarked[train.Survived == 0].value_counts()
Survived_1 = train.Embarked[train.Survived =