本文共 3624 字,大约阅读时间需要 12 分钟。
关注头条号,私信回复资料会有意外惊喜呦………………最后一张照片有资料呦。
| 导语 适用于数据分析小白们~ ------ up主也是小白一枚,大加一起交流哈
写在前面的话:
1、项目来源于up主自学udacity中的一个项目实践,up主自身能力不足,因此文章很浅显
2、泰坦尼克数据集是kaggle中一个好的可选数据集,网上有很多基于此数据集的分析&存活预测实践的文章
3、要有点python基础哦~ 没有也没关系,先下载软件跑跑代码也是好的
话不多说,这就开始~
一、前期准备
数据下载:https://d17h27t6h515a5.cloudfront.net/topher/2016/December/584bcec3_titanic-data/titanic-data.csv
软件准备:python 2.7 (安装 pandas 库) 多嘴说一句,懒得装各种库各种包的童鞋,请直接下载anaconda。
另外推荐jupyter,代码+报告结合神器
pandas --- 用过的人都说好用,没用过的小伙伴赶紧开始尝试吧~~
二、分析开始
1、导入数据&查看基本信息
import numpy as npimport pandas as pdimport matplotlib.pyplot as plt data_src='titanic-data.csv'df = pd.read_csv(data_src,header=0) # 导入数据print df.info() # 查看数据集的基本信息,print df.describe() # 查看数据的摘要信息print df.head() # 查看前几行数据,方便了解数据具体情况
以 “ print df.info() ” 为例,运行后输出如下结果:
其中:
从数据集的基本信息可以看出,Age \ Cabin \ Embarked 是存在缺失值的,其中Cabin字段缺失值过多。
对于少量缺失值的情况,常用的方法是去除和补齐,数值型的数据是可以根据统计学的方法或者机器学习的方法将其进行补齐的。
对于存在大量缺失值的字段,应衡量此字段的重要程度与修复代价之间的权重。up主是果断的没有再考虑这个字段了
2、分析 乘客存活率与各单变量之间的关系
先看下全部样本的存活率是多少:
survived_rate = float(df['Survived'].sum()) / df['Survived'].count()print 'survived_rate: ',survived_rate
运行代码输出:survived_rate: 0.383838383838
【舱位】
再看下 舱位和存活率之间的关系:
x=[df[(df.Pclass==1)]['Pclass'].size,df[(df.Pclass==2)]['Pclass'].size,df[(df.Pclass==3)]['Pclass'].size] y=[df[(df.Pclass==1) & (df.Survived == 1)]['Pclass'].size,\ df[(df.Pclass==2) & (df.Survived == 1)]['Pclass'].size, \ df[(df.Pclass == 3) & (df.Survived == 1)]['Pclass'].size] print '1 Pclass number:' + str(x[0]) + ' ' + '1 Pclass survive:' + str(y[0]) + ' ' + '1 Pclass survive rat:', float(y[0]) / x[0] print '2 Pclass number:' + str(x[1]) + ' ' + '2 Pclass survive:' + str(y[1]) + ' ' + '2 Pclass survive rat:', float(y[1]) / x[1] print '3 Pclass number:' + str(x[2]) + ' ' + '3 Pclass survive:' + str(y[2]) + ' ' + '3 Pclass survive rat:', float(y[2]) / x[2] Pclass_survived_rate = (df.groupby(['Pclass']).sum() / df.groupby(['Pclass']).count())['Survived'] Pclass_survived_rate.plot(kind='bar') plt.title('Pclass_survived_rate') plt.show()
输出结果如下:
可以很清楚的看出,舱位与存活率之间的关系。三等舱的乘客们很惨~
【性别】
可以再简单看看性别的影响:
Sex_survived_rate = (df.groupby(['Sex']).sum() / df.groupby(['Sex']).count())['Survived'] Sex_survived_rate.plot(kind='bar') plt.title('Sex_survived_rate') plt.show()
【年龄】
数据集里面的年龄是一个数值型变量,先按照未处理的裸数据来绘图
Age_survived_rate=(df.groupby(['Age']).sum()/df.groupby(['Age']).count())['Survived'] Age_survived_rate.plot() plt.title('Age_survived_rate') plt.show()
得出的结果特别难懂。
对于连续型数值变量,可以先做特征离散化,将年龄分布在各个年龄段中,效果就好多了呢~
这里引出了特征工程中的概念---离散化。
最近up主刚上了一届特征工程的课,等待up主的课后笔记吧~
age_clean_date=df[~np.isnan(df['Age'])] #去除年龄数据中的NaN ages=np.arange(0,81,5) #0~80岁,每5岁一段(年龄最大80岁) age_cut=pd.cut(age_clean_date.Age,ages) age_cut_grouped=age_clean_date.groupby(age_cut) age_Survival_Rate=(age_cut_grouped.sum()/age_cut_grouped.count())['Survived'] #计算每年龄段的幸存率 age_Survival_Rate.plot(kind='bar') plt.title('Age_group_survived_rate') plt.show()
感兴趣的小伙伴可以多尝试几个变量,看看能不能找到更有趣的结论哦~
3、分析 乘客存活率与复合变量之间的关系
一个数据表象,往往是多个因素影响的结果,其中多个因素的影响力各不同(可以稍微联想主成份分析的概念)。因此复合变量的分析也是必不可少的哦~
单变量中舱位和性别对存活率的影响都很大,up主好奇到底是哪一个主要决定了乘客能否登上救生船,因此就对舱位和性别整合为复合变量,做了分析。
Pclass_Sex_survived_rate=(df.groupby(['Sex','Pclass']).sum()/df.groupby(['Sex','Pclass']).count())['Survived'] Pclass_Sex_survived_rate.plot(kind='bar') plt.title('Pclass_Sex_survived_rate') plt.show()
结果发现三等舱的女性存活率 高于 一等舱的男性存活率。可见当时的绅士风度啊!
很多人在问,学习Python读什么书,这其实是一个非常通用的问题,学习分为三种方式:看书、上课,而读书学习是最实惠也是最高效的一种,小编整理了一些Python高分书籍给大家,从0基础到高级适合不同学习阶段,希望大家学习愉快。获取方式:点击小编头像,关注后私信回复“资料”即可下载。
转载地址:http://illix.baihongyu.com/