Python泰坦尼克生还预测
Kaggle Titanic 数据分析案例
- 背景介绍
20世纪初,由英国白星航运公司制造的一艘巨大豪华客轮。是当时世界上最大的豪华客轮,被称为是“永不沉没的”或是“梦幻客轮”。
泰坦尼克号是人类的美好梦想达到顶峰时的产物,反映了人类掌握世界的强大自信心。她的沉没,向人类展示了大自然的神秘力量,以及命运的不可预测。到泰坦尼克号沉没那天为止,西方世界的人们已经享受了100年的安稳和太平。科技稳定地进步,工业迅速地发展,人们对未来信心十足。泰坦尼克号的沉没惊醒了这一切。这艘“永不沉没的轮船”——埃菲尔铁塔之后最大的人工钢铁构造物,工业时代的伟大成就,因为对自然的威力掉以轻心,满不在乎,所以在第一次处女航中就沉没了。泰坦尼克号将永远让人们牢记人类的傲慢自信所付出的代价。人们永远也忘不了这幅画面:泰坦尼克号在海底昂着头,残破和污迹也掩盖不了她的高贵。这就是她的归宿。历史就这样演变成了传奇。
好的,不要被开头这段迷惑,这真的是个不太正经的分析
- 分析目标(别被博主骗了,他就分析了几个简单的)
根据官方给出的数据分析各个属性间的关系
- 数据来源(完全可以百度网盘见)
/c/titanic
或者在我的资源里下载 - 数据说明
- 数据预处理
> import pandas as pd > import numpy as np > import as plt > > train=pd.read_csv('/Users/a/Desktop/Titanic/') > test=pd.read_csv('/Users/a/Desktop/Titanic/')
#1.数据概览
> print(())
> print('--------------------------------------------')
> print(()) print('数据维度为:',,' ',)
> print('--------------------------------------------')
> print('字段名为:',())
> print('字段名为:',())
#2.数据清洗
train_a=[:,[‘PassengerId’,‘Survived’,‘Pclass’,‘Sex’,‘Age’,‘SibSp’,‘Parch’,‘Fare’]]
test_a=[:,[‘PassengerId’,‘Pclass’,‘Sex’,‘Age’,‘SibSp’,‘Parch’,‘Fare’]]
print(’------------------------------------’) print(train_a.head())
print(test_a.head()) print("------------------------------------")
print(test_a.info()) print(train_a.info())
#填补空值,重点,敲黑板,由于实际统计时,部分信息无法采集,会出现"空值",在数据预处理时,我们会用填充空值,例如我们要建立与年龄字段’Age’相关的模型,就对"Age"中的空白字段进行填充
median_age=train_a[‘Age’].median()#这里取中位数,Q1:为什么不取平均值?:平均数反映的是一组数据的平均情况,容易受到个别极端值到影响;与之相比中位数反映了一组数据到一般情况,不受个别极端值影响
print(median_age)#这里计算出到值为28.0
train_a.loc[train_a[‘Age’].isnull(),‘Age’]=median_age#前面行中传入到参数表示空值,后面代表’Age’列,这一步我们将中位数填入空值
median_age2=test_a[‘Age’].median()
test_a.loc[test_a[‘Age’].isnull(),‘Age’]=median_age2Fare=train_a[‘Fare’].mode()#取众数,填充Fare空值,为什么这里又取众数呢?票价缺失只占很小的一部分,个人理解,票价要精确到个人
Fare2=test_a[‘Fare’].mode()
train_a.loc[train_a[‘Fare’].isnull(),‘Fare’]=Fare
test_a.loc[test_a[‘Fare’].isnull(),‘Fare’]=Fare2 print(test_a.info)
print(train_a.info)
#修改数据类型,为了方便统计,我们先查看数据类型,发现Sex为object(字符串),这里我们将其转换成整型
print(train_a.dtypes) print(’--------------------’)
print(test_a.dtypes)
test_a[‘Sex’]=test_a[‘Sex’].map({‘male’:1,‘female’:0}).astype(int)
train_a[‘Sex’]=train_a[‘Sex’].map({‘male’:1,‘female’:0}).astype(int)
print(test_a.head()) print(train_a.head())
#处理完数据后,我们发现,数据中部分列可以合并,这里就需要我们进行数据重构
test_a[‘f_size’]=test_a.loc[:,‘SibSp’]+test_a.loc[:,‘Parch’]+1
train_a[‘f_size’]=train_a.loc[:,‘SibSp’]+train_a.loc[:,‘Parch’]+1
train_a[‘Single’]=0 test_a[‘Single’]=0
train_a.loc[train_a[‘f_size’]==1,‘Single’]=1
test_a.loc[test_a[‘f_size’]==1,‘Single’]=1
train_f=train_a.loc[:,[‘PassengerId’,‘Survived’,‘Pclass’,‘Sex’,‘Age’,‘Parch’,‘Fare’,‘f_size’,‘Single’]]
test_f=test_a.loc[:,[‘PassengerId’,‘Pclass’,‘Sex’,‘Age’,‘SibSp’,‘Parch’,‘Fare’,‘f_size’,‘Single’]]
print(test_f.head) print(train_f.head)
#作为单身狗,我还是比较关心,单身与存活率到关系,所以,先从这里开始分析
d=train_f[[‘Single’,‘Survived’]].groupby([‘Single’]).mean() print(d)
([0,1],
[[0,‘Survived’],[1,‘Survived’]],
0.5,
color=‘green’,
alpha=0.5,
) ([0,1],[‘not_alone’,‘Single’]) ()
结果一目了然,单身存活率高,原因我想看过泰坦尼克号的人都知道,全在船头看Jack和Rose秀恩爱了,忘记要跑了,结论秀恩爱死得快!!!
#性别和生存率
m=train_f[[‘Sex’,‘Survived’]].groupby([‘Sex’]).mean() ([0,1],
[[0,‘Survived’],[1,‘Survived’]],
0.5,
color=‘blue’,
alpha=0.9,
) ([0,1],[‘female’,‘male’]) ()
#下面我们看看船舱等级和生还率的关系
c = train_f[[‘Pclass’, ‘Survived’]].groupby([‘Pclass’]).mean()
(
[0,1,2],
[[1,‘Survived’],[2,‘Survived’],[3,‘Survived’]],
0.5,
color=‘r’,
alpha=0.7 )([0,1,2],[1,2,3]) ()
三等舱存活率最高,所以啊不要被万恶的资本主义腐蚀,人家三等舱还真就生存率高,生命力顽强。
emmmm依然是那个希望被赞然后肯定没人赞的菜?博主,不会唱跳rap篮球,只会没事写篇文章记录自学过程