专栏首页腾讯NEXT学位干货 | python数据分析超简单入门 -- 项目实践篇

干货 | python数据分析超简单入门 -- 项目实践篇

| 导语 适用于数据分析小白们~ ------ up主也是小白一枚,大家一起交流哈

写在前面的话:

PS:文末有上期留言活动开奖结果哦!

①.项目来源于up主自学udacity中的一个项目实践,up主自身能力不足,因此文章很浅显

②.泰坦尼克数据集是kaggle中一个好的可选数据集,网上有很多基于此数据集的分析&存活预测实践的文章

③.要有点python基础哦~ 没有也没关系,先下载软件跑跑代码也是好的

话不多说,这就开始~

1、前期准备

数据下载:https://d17h27t6h515a5.cloudfront.net/topher/2016/December/584bcec3_titanic-data/titanic-data.csv

软件准备:python 2.7  (安装 pandas 库)                     

多嘴说一句,懒得装各种库各种包的童鞋,请直接下载anaconda。

另外推荐jupyter,代码+报告结合神器

pandas --- 用过的人都说好用,没用过的小伙伴赶紧开始尝试吧~~   

2、分析开始

①.导入数据&查看基本信息

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

其中:

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

从数据集的基本信息可以看出,Age \ Cabin \ Embarked 是存在缺失值的,其中Cabin字段缺失值过多。

对于少量缺失值的情况,常用的方法是去除和补齐,数值型的数据是可以根据统计学的方法或者机器学习的方法将其进行补齐的。

对于存在大量缺失值的字段,应衡量此字段的重要程度与修复代价之间的权重。up主是果断的没有再考虑这个字段了

②.分析 乘客存活率与各单变量之间的关系

 先看下全部样本的存活率是多少:

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()

感兴趣的小伙伴可以多尝试几个变量,看看能不能找到更有趣的结论哦~

③.分析 乘客存活率与复合变量之间的关系

一个数据表象,往往是多个因素影响的结果,其中多个因素的影响力各不同(可以稍微联想主成份分析的概念)。因此复合变量的分析也是必不可少的哦~ 

单变量中舱位和性别对存活率的影响都很大,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()

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

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

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

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

各位小伙伴学到了嘛

快点在看和大家分享吧!

也欢迎在评论区讨论哦!

活动回顾

上周的留言活动已经出结果啦

恭喜Jerry同学获得企鹅公仔一只

我们已经联系Jerry同学寄送奖品

羡慕的同学

记得关注我们后续的活动哦!

原文作者:Ellen

原文链接:

https://mp.weixin.qq.com/s?__biz=MzI5OTY0MTMyMg==&mid=2247488914&idx=1&sn=043cce6bbc727b5a034308f19abe151a&chksm=ec922517dbe5ac019fa8e3ba1ab9a8d14cb9430302aa70bf0c58ac45a4ac88ff398e8d27b59c&token=1769793551&lang=zh_CN#rd

腾讯NEXT学院

求职干货 | 前辈blog  | 前端课程

↓↓↓点击阅读原文,体验精彩课程

你点的每个赞,我都认真当成了喜欢

本文分享自微信公众号 - 腾讯NEXT学院(Next_Academy),作者:Ellen

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 干货 | 认识数据库

    以前对数据库的了解,大概就是一个存放数据的地方,可进行增删查改,更多的就…慢慢学吧。

    腾讯NEXT学位
  • Mobx 核心概念简单入门:以股票为例

    腾讯NEXT学位
  • 微信小程序开发注意指南和优化实践

    “ 转眼间已经参与过好几个小程序的开发了,下面我将开发中的那些注意点和各位小伙伴们分享下,妥妥的干货一枚。 ” WXML 1 不要换行写 微信开发者工具不会对...

    腾讯NEXT学位
  • python 数据分析超简单入门 : 项目实践篇

    适用于数据分析小白们, up 主也是小白一枚,项目来源于 up 主自学 udacity 中的一个项目实践,up 主自身能力不足,因此文章很浅显, 期待和大神们一...

    刘妍
  • Cookie、LocalStorage 与 SessionStorage的区别

    Cookie 是小甜饼的意思。顾名思义,cookie 确实非常小,它的大小限制为4KB左右。它的主要用途有保存登录信息,比如你登录某个网站市场可以看到“记住密码...

    跟着阿笨一起玩NET
  • 如何编写一个 jQuery 插件

    https://github.com/zcfan/sket... 重写了本文的初步功能实现,支持一个页面多个画图板。但为简单起见,本文保持不变。

    Alan Zhang
  • 做好中台就行?你可能对银行数字化有点误解!

    离钱最近的地方是怎么做数字化转型的?这是很多人都在关注的问题。今天,以大数据、云计算、人工智能、区块链为代表的新兴技术逐渐普及,开始与传统行业深度结合迸发出新势...

    TVP官方团队
  • 一张图看懂信息化和数字化的本质区别

    什么是信息化,什么是数字化,信息化和数字化的区别,联系,一直是业界同行们争论,纠结的一个话题。

    凯哥
  • Java每日一题3_关于Java

    ArrayList:有序,可重复;底层使用数组,查询快,增删慢;线程不安全,效率高;容量不足时扩增为当前容量*1.5 + 1;

    Java学习
  • 外链建设:SEO最重要最难部分

    外链建设是SEO营销中最重要最难部分,如果网站SEO没有做外链建设这部分内容,那么你可能会错失很多潜在网络业务。外链建设将帮助你创建高质量的SEO营销活动,这将...

    林雍岷

扫码关注云+社区

领取腾讯云代金券