python 数据分析超简单入门 : 项目实践篇

写在前面的话:

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 np
import pandas as pd
import 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() ” 为例,运行后输出如下结果:

其中:

  • PassengerId => 乘客ID
  • Survived => 是否生还
  • Pclass => 乘客等级(1/2/3等舱位)
  • Name => 乘客姓名
  • Sex => 性别
  • Age => 年龄
  • SibSp => 堂兄弟/妹个数
  • Parch => 父母与小孩个数
  • Ticket => 船票信息
  • Fare => 票价
  • Cabin => 客舱
  • Embarked => 登船港口

从数据集的基本信息可以看出,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()

结果发现三等舱的女性存活率 高于 一等舱的男性存活率。可见当时的绅士风度啊!

再想想当时的帅哥,美男们~~ 对不起我歪楼了。。。。。

4、挑选更有意思的分析角度,得出让人信服的数据结论

对的,你没看错,up主自认得出的结论很浅显,就不在这边现眼了,大家各自表演吧~~

写在后面的话:

1、KM小白第一篇文章,有细节问题的话请大佬指导

2、虽然自己很多时候是用sql + excel 搞定数据分析的,但是python大腿不能放

喜欢你就收藏下吧~ 数据分析同道中人赶紧私戳 up主RTX一起携手走上人生巅峰

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

刘妍的专栏

1 篇文章3 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏移动开发面面观

OpenGL ES——打光

1005
来自专栏UAI人工智能

Google AI dopamine 多巴胺强化学习框架

值得试试。下图是在 Seaquest 游戏上的算法比对,可以看到 Rainbow 最厉害了。

602
来自专栏HT

纯Shading Language绘制飞机火焰效果

上篇《纯Shading Language绘制HTML5时钟》体现了GLSL可编程性特点,但没有体现GLSL可编程出各种酷炫效果的特点,今天我们将用纯Shadin...

1866
来自专栏大数据架构

机器学习(二) 如何做到Kaggle排名前2%

2763
来自专栏大数据智能实战

基于seq2seq的中国对联自动配对技术实践

Sequence to Sequence模型这种基于编码--解码的模型已经被谷歌成功应用于机器翻译上。而理论上任意的序列到序列的有监督问题都可以用这种模型。如...

2498
来自专栏简书专栏

房价数据转换和清洗2

下载链接:https://pan.baidu.com/s/16D5hw-XBEQnwtsf4fDJ8xw 密码:e1fg

731
来自专栏算法+

半径无关快速高斯模糊实现(附完整C代码)

之前,俺也发过不少快速高斯模糊算法. 俺一般认为,只要处理一千六百万像素彩色图片,在2.2GHz的CPU上单核单线程超过1秒的算法,都是不快的. 之前发的几个算...

5047
来自专栏算法channel

案例实战|泰坦尼克号船员获救预测(数据预处理部分)

01 — 背景介绍 已经推送了一些经典的机器学习和深度学习相关的算法,明白了这些算法的原理,对我们之后解决实际问题会打下很好的基础,如何将这些零散的知识综合起来...

3947
来自专栏xingoo, 一个梦想做发明家的程序员

MSRA-TD5000数据集使用详解

详情参考MSRA的官方地址:http://www.iapr-tc11.org/mediawiki/index.php/MSRA_Text_Detection_5...

1343
来自专栏hightopo

纯Shading Language绘制飞机火焰效果

1766

扫码关注云+社区