python数据分析实战之泰坦尼克号统计

简介:

    源数据文件下载地址:https://www.kaggle.com/c/titanic/data

注意下载的时候可能需要创建用户什么的或者直接使用Google账号


也可以在这篇文章的附件中下载

 

源文章参考:

http://nbviewer.ipython.org/github/jmportilla/Udemy-notes/blob/master/Intro%20to%20Data%20Projects%20-%20Titanic.ipynb

 

首先当然是各种库导入了;

笔者用的是windowsAnaconda,所以pandasscipynumpymatplotlib都是直接封装好的,只需要装seaborn了,注意seaborn不支持python2.6.

安装seaborn通过以下命令

1
C:\Users\Ye>conda  install  seaborn

或者在下面的路径执行下面的命令

1
C:\Anaconda\Scripts>pip instakk seaborn


启动ipython notebook

wKioL1ZBc8GQGyjiAAA-M7Y7Wic785.png

wKiom1ZBc3vg9jzsAAB46iFvFF4778.png

wKioL1ZBc8LxGqafAAC3N3uVbIE504.png


Anaconda下载地址:https://www.continuum.io/downloads


在linux上也可以装Anaconda,或者直接以及pip安装,pip安装可以参考我的http://youerning.blog.51cto.com/10513771/1711008


下面是笔者所用的各种库以及其版本了

1
2
3
4
5
6
7
8
9
10
import  matplotlib.pyplot as plt
import  pandas as pd 
import  sys 
import  seaborn as sns
import  matplotlib 
  
print  'Python version '  +  sys.version
print  'Pandas version '  +  pd.__version__
print  'Seaborn version'  +  sns.__version__
print  'Matplotlib version'  +  matplotlib.__version__

Python version 2.7.9 |Anaconda 2.2.0 (64-bit)| (default, Dec 18 2014, 16:57:52) [MSC v.1500 64 bit (AMD64)]

Pandas version 0.15.2

Seaborn version0.6.0

Matplotlib version1.4.3

 

好吧show Time

1
2
3
4
5
6
7
8
9
10
###首先导入各种模块
import  pandas as pd
from  pandas  import  Series,DataFrame
  
import  numpy as  np
import  matplotlib.pyplot as plt
import  seaborn as sns
 
###让图片在ipython notebook上直接显示
% matplotlib inline

读入准备好的数据文件:

1
titanic_df  =  pd.read_csv( "C:\\train.csv" )

简单的预览一下数据结构及信息,head默认查看前5条,如果需要更多可以在括号里填入相应的数字:

1
titanic_df.head()

wKioL1ZBZrfBC3ULAAA7Rc4th_o945.png

 

也可以通过info查看每个字段的一些统计信息

1
titanic_df.info()

<class 'pandas.core.frame.DataFrame'>

Int64Index: 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: 90.5+ KB

#简单统计男女比例,我们data数据选择titanic_df,然后选择其中的Sex字段作为X轴,其中kind : {point, bar, count, box, violin, strip}一共六种方式,我们选count,有的版本似乎不需要选择kind=count

1
sns.factorplot( 'Sex' ,data = titanic_df,kind = "count" )

wKioL1ZBaO2TNUcdAAAiFImmKDg182.png 

#为了更细化,我们显示以Pclass作为X轴,统计每个等级中的男女比例:

1
sns.factorplot( 'Pclass' ,data = titanic_df,kind = "count" ,hue = "Sex" )

wKiom1ZBaLbxa7gHAAA7V4YVmUs149.png 

 

我们也可以将男女分为男,女,小孩,为原有数据库新增一个字段

定义一个函数,判断男,女,小孩

1
2
3
4
5
6
7
def  male_famle_child(passenger):
     age,sex  =  passenger
     
     if  age <  16 :
         return  "Child"
     else :
         return  sex

 

###新增一字段“Person

1
titanic_df[ "Person" =  titanic_df[[ "Age" , "Sex" ]]. apply (male_famle_child,axis = 1 )


wKiom1ZBaO_gsbZLAABTjNsVscA578.png 

 

再次在Pclass分类中体现男女小孩的比例

1
sns.factorplot( "Pclass" ,data = titanic_df,hue = "Person" ,kind = "count" )


wKioL1ZBaVaC4kRYAAAkpUF1NY4753.png 

 

简要查看各年龄段的发布,将年龄段的间距分为70段,默认10段,你当然可以分得更细或者更系数


1
titanic_df[ 'Age' ].hist(bins = 70 )

wKiom1ZBamXykhLIAAAsCPgLtwk913.png

查看平均年龄:

1
titanic_df[ "Age" ].mean()

29.69911764705882


查看“Person”字段的数量统计

1
titanic_df[ "Person" ].value_counts()

male      537

female    271

Child      83

dtype: int64


统计不同年龄段,个类别的分布趋势,核密度统计方式

    注:核密度估计,参考:http://www.lifelaf.com/blog/?p=723

注:hue代表除rowcol之外的第三维度,等级,不同的类型不同的颜色

    Palette代表调色板

    ###使用Facet函数创建plot,以“Sex”字段区分等级,aspect=4代表宽度为之前的4

    

1
2
3
4
5
6
7
8
9
10
11
12
fig  =  sns.FacetGrid(titanic_df,hue = "Sex" ,aspect = 4 )   
###使用map函数映射kde,以Age作为X轴
fig. map (sns.kdeplot, "Age" ,shade = True )
  
###取最大年龄
oldest  =  titanic_df[ "Age" ]. max ()
  
###设置x轴的取值范围为0到oldest
fig. set (xlim = ( 0 ,oldest))
  
###添加图标,印记
fig.add_legend()


wKiom1ZBbn3AK-dJAAArDKUMsXs435.png 

 

1
2
3
4
5
6
7
8
9
fig  =  sns.FacetGrid(titanic_df,hue = "Person" ,aspect = 4 )
  
fig. map (sns.kdeplot, "Age" ,shade = True )
  
oldest  =  titanic_df[ "Age" ]. max ()
  
fig. set (xlim = ( 0 ,oldest))
  
fig.add_legend()


wKioL1ZBbtageaRjAAAph9w6apA487.png 

1
2
3
4
5
6
7
8
9
fig  =  sns.FacetGrid(titanic_df,hue = "Pclass" ,aspect = 4 )
  
fig. map (sns.kdeplot, "Age" ,shade = True )
  
oldest  =  titanic_df[ "Age" ]. max ()
  
fig. set (xlim = ( 0 ,oldest))
  
fig.add_legend()


wKiom1ZBbqDBmSN4AAA3lIX47xY318.png 


上面画出的图片很美腻有木有!!!


统计不同船舱的人数分布

1
2
3
首先取得不同船舱的等级
deck  =  titanic_df[ "Cabin" ].dropna()    ##去掉NaN的值
deck.head()

1      C85

3     C123

6      E46

10      G6

11    C103

Name: Cabin, dtype: object

由上可发现船舱的类别由第一个字符可以加以区分可以得到各船舱人数的数量

1
2
3
4
5
6
7
levels  =  []
  
for  level  in  deck:
     levels.append(level[ 0 ])
     
cabin_df  =  DataFrame(levels)
cabin_df.columns  =  [ "Cabin" ]     ###为序列加上字段名

##cabin_df数据集的Cabin字段,颜色用winter_d,方法调用count

    palette的颜色有很多种,选择可以参考matplotlib 官方网站:http://matplotlib.org/users/colormaps.html   

1
sns.factorplot( "Cabin" ,data = cabin_df,palette = "winter_d" ,kind = "count" )


wKiom1ZBby6CVANrAABHkMYf0w4582.png 

 

因为上面T船舱的数量实在太小,酌情删除

1
cabin_df  =  cabin_df[cabin_df.Cabin ! =  "T" ]

然后生成图片

1
sns.factorplot( "Cabin" ,data = cabin_df,palette = "summer" ,kind = "count" )


wKiom1ZBb1aT-uyIAABL1CJvIic353.png 

 


统计进站港口的数量分布

1
2
3
sns.factorplot( "Embarked" ,data = titanic_df,hue = "Pclass" ,
x_order = [ "C" , "Q" , "S" ]
,kind = "count" )

wKioL1ZBb7HjYsyKAAA7IVe_AKQ919.png 

统计单身及有家庭的人数分布

1
2
3
###创建Alone字段
titanic_df[ "Alone" =  titanic_df.SibSp  +  titanic_df.Parch
titanic_df[ "Alone" ]

0     1

1     1

...

876    0

877    0

 

###由上可知,大于1的都是有兄弟姐妹或者父母孩子的

1
2
3
4
5
6
7
###所以修改Alone字段的数字为Alone或者with family
  
titanic_df[ "Alone" ].loc[titanic_df[ "Alone" ] >  0 = "With Family"
  
titanic_df[ "Alone" ].loc[titanic_df[ "Alone" = =  0 =  "Alone"
 
titanic_df.head()


wKioL1ZBb-bBWl7PAAA6TD4s6JM766.png 


统计Alone的发布人数

1
sns.factorplot( "Alone" ,data = titanic_df,hue = "Pclass" ,palette = "Blues" ,kind = "count" )

wKiom1ZBb9mipGZnAABFxdobyuY870.png 

 

统计存活的以及没存活的分布

1
2
3
4
##简单将Survivor字段的0,1映射成no与yes,及没有存活及存活
titanic_df[ "Survivor" =  titanic_df.Survived. map ({ 0 : "no" , 1 : "yes" })
  
sns.factorplot( "Survivor" ,data = titanic_df,palette = "Set1" ,kind = "count" )


wKiom1ZBb-6RPbiCAABLKE6qOHw188.png 

下面的没太看懂,所以不深入了

1
2
注意:factoryplot函数第一个值取X轴,第二个值为Y轴
sns.factorplot( "Pclass" , "Survived" ,data = titanic_df,x_order = [ 1 , 2 , 3 ])

wKiom1ZBcA_TuR1JAAAlKYfY-g8759.png

 

  后记:这篇文章主要是摘自Python for data Analysis的视频内容翻译过来的,也填了一些坑,统计了一些现存数据的统计结果,统计什么倒不是很重要,主要是这么统计,怎么画图美腻的统计图~~~我也是一名菜鸟,大家共勉,希望有个菜鸟之数据分析进阶的系列跟大家一起分享,后面应该还会有一篇关于股票的,敬请期待^_^

 



本文转自 youerning 51CTO博客,原文链接:http://blog.51cto.com/youerning/1711371


相关文章
|
7天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
12天前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
本文将引导读者了解如何使用Python进行数据分析,从安装必要的库到执行基础的数据操作和可视化。通过本文的学习,你将能够开始自己的数据分析之旅,并掌握如何利用Python来揭示数据背后的故事。
|
16天前
|
机器学习/深度学习 算法 数据挖掘
数据分析的 10 个最佳 Python 库
数据分析的 10 个最佳 Python 库
51 4
数据分析的 10 个最佳 Python 库
|
7天前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
31 10
|
19天前
|
存储 数据可视化 数据挖掘
使用Python进行数据分析和可视化
本文将引导你理解如何使用Python进行数据分析和可视化。我们将从基础的数据结构开始,逐步深入到数据处理和分析的方法,最后通过实际的代码示例来展示如何创建直观的数据可视化。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。让我们一起探索数据的世界,发现隐藏在数字背后的故事!
|
19天前
|
算法 Unix 数据库
Python编程入门:从基础到实战
本篇文章将带你进入Python编程的奇妙世界。我们将从最基础的概念开始,逐步深入,最后通过一个实际的项目案例,让你真正体验到Python编程的乐趣和实用性。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你提供有价值的信息和知识。让我们一起探索Python的世界吧!
|
17天前
|
存储 数据可视化 数据挖掘
Python数据分析项目:抖音短视频达人粉丝增长趋势
Python数据分析项目:抖音短视频达人粉丝增长趋势
|
21天前
|
并行计算 调度 开发者
探索Python中的异步编程:从基础到实战
在Python的世界里,异步编程是一种让程序运行更加高效、响应更快的技术。本文不仅会介绍异步编程的基本概念和原理,还将通过具体代码示例展示如何在Python中实现异步操作。无论你是初学者还是有经验的开发者,都能从中获益,了解如何运用这一技术优化你的项目。
|
21天前
|
数据处理 Python
探索Python中的异步编程:从基础到实战
在Python的世界中,“速度”不仅是赛车手的追求。本文将带你领略Python异步编程的魅力,从原理到实践,我们不单单是看代码,更通过实例感受它的威力。你将学会如何用更少的服务器资源做更多的事,就像是在厨房里同时烹饪多道菜而不让任何一道烧焦。准备好了吗?让我们开始这场技术烹饪之旅。
|
21天前
|
数据采集 存储 数据可视化
Python数据分析:揭秘"黑神话:悟空"Steam用户评论趋势
Python数据分析:揭秘"黑神话:悟空"Steam用户评论趋势