预测泰坦尼克获救人数

本文通过参加kaggle的泰坦尼克数据集比赛,运用Python和sklearn进行数据预处理、特征工程及模型训练,包括逻辑回归、随机森林、SVM、Adaboost和KNN等,最终通过模型堆叠实现性能提升。
摘要由CSDN通过智能技术生成

kaggle上的一个经典的比赛,试试手,权当了解比赛的过程和了解sklearn的建模过程


导库

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot')

读取数据

train_data = pd.read_csv(r'C:\Users\Administrator\Desktop\titanic_train.csv')

先看下数据EDA看看什么情况

train_data.head()

Survived=1、生,0为死;SibSp:兄弟姐妹的数量;Parch:父母子女的数量;Cabin:客舱信息;Embarked:登船地点;Pclass:座位等级

看下数据信息

train_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId    891 non-null int64
Survived       891 non-null int64
Pclass         891 non-null int64
Name           891 non-null object
Sex            891 non-null object
Age            714 non-null float64
SibSp          891 non-null int64
Parch          891 non-null int64
Ticket         891 non-null object
Fare           891 non-null float64
Cabin          204 non-null object
Embarked       889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.6+ KB


Age、Cabin、Embarked有缺失值


观察下train_data里获救比例

fig = plt.figure()
train_data.Survived.value_counts().plot(kind = 'bar')
plt.ylabel('人数')
plt.title('获救情况')
plt.show()

生少亡多

不同等级座位的人数

train_data.Pclass.value_counts().plot(kind = 'bar')
plt.ylabel('人数')
plt.title('座位等级')
plt.show()

3等舱的人最多,穷人还是占多数

各等级船舱的年龄分布

train_data.Age[train_data.Pclass == 1].plot(kind = 'kde')
train_data.Age[train_data.Pclass == 2].plot(kind = 'kde')
train_data.Age[train_data.Pclass == 3].plot(kind = 'kde')
plt.xlabel('年龄')
plt.ylabel('人群密度')
plt.title('各等级船舱年龄分布')
plt.legend(('1等舱','2等舱','3等舱'),loc = 'best')
plt.show()


穷的大部分是年轻人,20岁出头挤在3等舱,40多岁的中年人有了一定的财富积累,在1等舱谈笑风声

登船的情况

train_data.Embarked.value_counts().plot(kind = 'bar')
plt.ylabel('人数')
plt.title('登船情况')
plt.show()


S是southampton(南安普顿,英国南部港口城市),C是Cherbourg(法国 瑟堡),Q是Queenstown(爱尔兰 昆士敦),S点等舱的人最多


分析下各feature和survived的关系

年龄

plt.scatter(train_data.Survived,train_data.Age)
plt.ylabel('年龄')
plt.title('按年龄与获救关系')
plt.show()

貌似65岁以上的老人都没有获救,但是有个80岁的大爷活下了。。。大爷牛逼

座位等级

survived_0 = train_data.Pclass[train_data.Survived == 0].value_counts()
survived_1 = train_data.Pclass[train_data.Survived == 1].value_counts()
df = pd.DataFrame({'获救': survived_1,'未获救': survived_0})
df.plot(kind = 'bar',stacked = True)
plt.xlabel('座位等级')
plt.ylabel('人数')
plt.title('座位等级与获救关系')
plt.show()

获救情况和座位等级有明显的关系,1等舱获救比例远远高于3等舱

性别

survived_m = train_data.Survived[train_data.Sex == 'male'].value_counts()
survived_f = train_data.Survived[train_data.Sex == 'female'].value_counts()
df=pd.DataFrame({'男性':survived_m, '女性':survived_f})
df.plot(kind='bar', stacked=True)
plt.xlabel('性别')
plt.ylabel('人数')
plt.title('性别与获救的关系')
plt.show()

女性貌似更容易获救

登船点

survived_0 = train_data.Embarked[train_data.Survived == 0].value_counts()
survived_1 = train_data.Embarked[train_data.Survived == 1].value_counts()
df=pd.DataFrame({'获救':survived_1, '未获救':survived_0})
df.plot(kind=&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值