Python数据分析入门

原文:http://python.jobbole.com/81133/

本文由 伯乐在线 - Den 翻译,toolate 校稿。未经许可,禁止转载!
英文出处:alstatr.blogspot.ca。欢迎加入翻译组

最近,Analysis with Programming加入了Planet Python。作为该网站的首批特约博客,我这里来分享一下如何通过Python来开始数据分析。具体内容如下:

  1. 数据导入
    • 导入本地的或者web端的CSV文件;
  2. 数据变换;
  3. 数据统计描述;
  4. 假设检验
    • 单样本t检验;
  5. 可视化;
  6. 创建自定义函数。

数据导入

这是很关键的一步,为了后续的分析我们首先需要导入数据。通常来说,数据是CSV格式,就算不是,至少也可以转换成CSV格式。在Python中,我们的操作如下:

为了读取本地CSV文件,我们需要pandas这个数据分析库中的相应模块。其中的read_csv函数能够读取本地和web数据。

数据变换

既然在工作空间有了数据,接下来就是数据变换。统计学家和科学家们通常会在这一步移除分析中的非必要数据。我们先看看数据:

对R语言程序员来说,上述操作等价于通过print(head(df))来打印数据的前6行,以及通过print(tail(df))来打印数据的后6行。当然Python中,默认打印是5行,而R则是6行。因此R的代码head(df, n = 10),在Python中就是df.head(n = 10),打印数据尾部也是同样道理。

在R语言中,数据列和行的名字通过colnames和rownames来分别进行提取。在Python中,我们则使用columns和index属性来提取,如下:

数据转置使用T方法,

其他变换,例如排序就是用sort属性。现在我们提取特定的某列数据。Python中,可以使用iloc或者ix属性。但是我更喜欢用ix,因为它更稳定一些。假设我们需数据第一列的前5行,我们有:

顺便提一下,Python的索引是从0开始而非1。为了取出从11到20行的前3列数据,我们有:

上述命令相当于df.ix[10:20, ['Abra', 'Apayao', 'Benguet']]

为了舍弃数据中的列,这里是列1(Apayao)和列2(Benguet),我们使用drop属性,如下:

axis 参数告诉函数到底舍弃列还是行。如果axis等于0,那么就舍弃行。

统计描述

下一步就是通过describe属性,对数据的统计特性进行描述:

 

假设检验

Python有一个很好的统计推断包。那就是scipy里面的stats。ttest_1samp实现了单样本t检验。因此,如果我们想检验数据Abra列的稻谷产量均值,通过零假设,这里我们假定总体稻谷产量均值为15000,我们有:

返回下述值组成的元祖:

  • t : 浮点或数组类型
    t统计量
  • prob : 浮点或数组类型
    two-tailed p-value 双侧概率值

通过上面的输出,看到p值是0.267远大于α等于0.05,因此没有充分的证据说平均稻谷产量不是150000。将这个检验应用到所有的变量,同样假设均值为15000,我们有:

第一个数组是t统计量,第二个数组则是相应的p值。

可视化

Python中有许多可视化模块,最流行的当属matpalotlib库。稍加提及,我们也可选择bokeh和seaborn模块。之前的博文中,我已经说明了matplotlib库中的盒须图模块功能。

现在,我们可以用pandas模块中集成R的ggplot主题来美化图表。要使用ggplot,我们只需要在上述代码中多加一行,

这样我们就得到如下图表:

比matplotlib.pyplot主题简洁太多。但是在本博文中,我更愿意引入seaborn模块,该模块是一个统计数据可视化库。因此我们有:

 

多性感的盒式图,继续往下看。

 

创建自定义函数

在Python中,我们使用def函数来实现一个自定义函数。例如,如果我们要定义一个两数相加的函数,如下即可:

顺便说一下,Python中的缩进是很重要的。通过缩进来定义函数作用域,就像在R语言中使用大括号{…}一样。这有一个我们之前博文的例子:

  1. 产生10个正态分布样本,其中u=3o.
  2. 基于95%的置信度,计算x_barx_bar2 ;
  3. 重复100次; 然后
  4. 计算出置信区间包含真实均值的百分比

Python中,程序如下:

上述代码读起来很简单,但是循环的时候就很慢了。下面针对上述代码进行了改进,这多亏了 Python专家,看我上篇博文的15条意见吧。

 

更新

那些对于本文ipython notebook版本感兴趣的,请点击这里。这篇文章由Nuttens Claude负责转换成 ipython notebook 。

posted @ 2016-05-31 17:16  止战  阅读(28962)  评论(0编辑  收藏  举报