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


相关文章
|
4天前
|
数据挖掘 计算机视觉 Python
Python数据分析13
Pillow 是 PIL(Python Imaging Library)的升级版本,适应 Python 3 的更新而诞生,带来了诸多新特性。它采用模块化结构,主要包括:图像功能模块(Image)、图像滤波功能模块(ImageFilter)、图像增强功能模块(ImageEnhance)和图像绘画功能模块(ImageDraw)。Pillow 支持从多种图像格式读取数据,进行处理,并能输出为常见格式,其官网提供了丰富的应用示例供学习参考。
16 4
|
1天前
|
数据采集 存储 数据挖掘
深入探索 Python 爬虫:高级技术与实战应用
本文介绍了Python爬虫的高级技术,涵盖并发处理、反爬虫策略(如验证码识别与模拟登录)及数据存储与处理方法。通过asyncio库实现异步爬虫,提升效率;利用tesseract和requests库应对反爬措施;借助SQLAlchemy和pandas进行数据存储与分析。实战部分展示了如何爬取电商网站的商品信息及新闻网站的文章内容。提醒读者在实际应用中需遵守法律法规。
103 66
|
1天前
|
SQL 数据采集 数据可视化
深入 Python 数据分析:高级技术与实战应用
本文系统地介绍了Python在高级数据分析中的应用,涵盖数据读取、预处理、探索及可视化等关键环节,并详细展示了聚类分析、PCA、时间序列分析等高级技术。通过实际案例,帮助读者掌握解决复杂问题的方法,提升数据分析技能。使用pandas、matplotlib、seaborn及sklearn等库,提供了丰富的代码示例,便于实践操作。
103 64
|
1天前
|
机器学习/深度学习 数据挖掘 开发者
探索Python编程:从基础到实战
【9月更文挑战第34天】在这篇文章中,我们将一起踏上Python编程的旅程。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的信息。我们将从Python的基础语法开始,逐步深入到更复杂的主题,如面向对象编程和网络应用开发。我们还将探讨如何在实际项目中应用这些知识,以及如何通过持续学习和实践来提高你的编程技能。让我们一起探索Python的世界,发现它的无限可能!
|
2天前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
【9月更文挑战第33天】本文旨在为初学者提供一个关于使用Python进行数据分析的全面概述。我们将从基本的安装和设置开始,逐步介绍数据处理、数据可视化以及机器学习的基本概念和应用。文章将通过实际代码示例来展示如何使用Python及其相关库来解决常见的数据分析问题。
|
5天前
|
调度 开发者 UED
探索Python中的异步编程:从基础到实战
【9月更文挑战第30天】在编程的世界里,异步编程是一个强大的概念,它允许程序在等待某些操作完成时继续执行其他任务。本文将深入探讨Python中的异步编程,从理解其基本概念开始,逐步过渡到高级应用。我们将通过具体的代码示例来展示如何在实际项目中实现异步功能,从而提高应用程序的性能和响应性。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
5天前
|
数据挖掘 Serverless 计算机视觉
Python数据分析 11
SciPy是一款专为数学、科学及工程应用设计的开源软件,它基于NumPy的n维数组构建,提供了丰富的数值例程,包括积分、优化、线性代数等,适用于各种操作系统,安装简易且免费。它还包含了如快速傅里叶变换、信号处理、图像处理、特殊函数计算等功能,满足了科学计算与工程需求。相较于NumPy的一般数组,SciPy提供了真正的矩阵及其相关运算支持。
24 7
|
3天前
|
存储 数据处理 开发者
深入浅出:Python编程基础与实战技巧
【9月更文挑战第32天】本文将引导读者从零开始,掌握Python编程语言的核心概念,并通过实际代码示例深入理解。我们将逐步探索变量、数据结构、控制流、函数、类和异常处理等基本知识,并结合实用案例,如数据处理、文件操作和网络请求,提升编程技能。无论您是初学者还是有一定经验的开发者,这篇文章都能帮助您巩固基础,拓展视野。
|
5天前
|
自然语言处理 搜索推荐 数据挖掘
Python 数据分析10
除了常用的Python数据挖掘建模库外,还有许多其他库也非常实用,例如 jieba、SciPy、OpenCV 和 Pillow 等。其中,jieba 是一个广泛使用的中文分词库,支持多种编程语言,包括 Python、R 和 C++,并且提供了三种分词模式:精确模式、全模式和搜索引擎模式。此外,jieba 还具备词性标注、添加自定义词典及关键词提取等功能,在 GitHub 社区中有较高讨论度,并拥有丰富的实例资源。
18 5
|
3天前
|
设计模式 开发者 Python
探索Python中的异步编程:从基础到实战
【9月更文挑战第32天】在Python的世界中,异步编程是一种让程序在等待任务完成时不阻塞的技术。本文将通过浅显易懂的方式,带领读者了解异步编程的核心概念、常用库及其在实际项目中的应用。我们将从异步IO的基础知识出发,逐步深入到asyncio库的使用,最后通过一个简易Web服务器的示例,演示如何将理论应用到实践中。文章旨在为初学者提供一个清晰的学习路径,帮助他们掌握Python异步编程的精髓。
下一篇
无影云桌面