趁着周末比较闲,做一个几乎所有人都会做的入坑项目——大名鼎鼎的Kaggle泰坦尼克。
数据地址我就不放了,Kaggle上自己翻吧。数据包括:
- PassengerId => 乘客ID
- Survive => 乘客是否生还(仅在训练集中有,测试集中没有)
- Pclass => 乘客等级(1/2/3等舱位)
- Name => 乘客姓名
- Sex => 性别
- Age => 年龄
- SibSp => 堂兄弟/妹个数
- Parch => 父母与小孩个数
- Ticket => 船票信息
- Fare => 票价
- Cabin => 客舱
- Embarked => 登船港口
而我们需要根据以上乘客的个人信息,做出分类模型,对测试集中乘客的生还情况做出预测。因为生还只涉及到生/死两种情况,故此问题是个二分类问题,在这里我们使用逻辑回归进行分类。
1.数据认知
首先来看一下数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data_train = pd.read_csv('train.csv')
data_train.info()
先从训练集开始看,结果如下:
可以看到Cabin,Age和Embarked这三项在训练集中皆有缺失。
首先,让我们直观的认识一下各类信息与生还的相关情况。
1.1 舱位与生还的对比
fig = plt.figure()
fig.set(alpha=0.2)
no_survived = data_train.Pclass[data_train.Survived == 0].value_counts()
survived = data_train.Pclass[data_train.Survived == 1].value_counts()
df = pd.DataFrame({'Survived':survived,'Died':no_survived})
df.plot(kind='bar',stacked = True)
plt.title('Class vs Survive')
plt.xlabel('People')
plt.ylabel('Class')
plt.show()
我们可以看到,就生还率而言,一等舱明显最高,而三等舱显然最低。因此可以推测舱位的高低与生还情况成正相关。
这告诉了我们出门一定要多花钱买船/机票,做个有钱人。
1.2 性别与生还对比
fig = plt.figure()
fig.set(alpha = 0.2)
no_survived_g = data_train.Sex[data_train.Survived == 0].value_counts()
survived_g = data_train.Sex[data_train.Survived == 1].value_counts()
df_g = pd.DataFrame({'Survived':survived_g,'Died':no_survived_g})
df_g.plot(kind='bar',stacked = True)
plt.title('Gender vs Survive')
plt.xlabel('People')
plt.ylabel('Survive')
plt.show()
女性的生还状况要好于男性,看来在泰坦尼克号事故中,船员们还是普遍绅士的。
说明了如果是个女土豪,生还机会更好。
1.3 港口与生还情况
fig = plt.figure()
fig.set(alpha = 0.2)
no_survived_e =