如果您用 R 语言工作,并且对使用 Python 感到好奇,但您却不太了解如何开始,这篇博文就很适合你.我遇到了很多想要尝试 Python 的 R 用户,但是他们却没有时间来确定他们需要了解哪些软件包以及使用哪种编码环境.
在本文中,我将介绍在 Python 中建立统计计算所需的所有基本软件包,并尽可能直接与 R 语言进行比较.
在本文的末尾,您应该已经具备了一个编程环境.为此,我将跳过许多 Python 语言特性和包,您稍后可能会发现这些特性和包很有用,不过在相关的地方,我将链接到更广泛的文档.我希望这篇文章能提供足够的基础,让您知道如何在这个基础上构建更高级的用例.
我假设您熟悉 R 语言,熟悉命令行,但不熟悉 Python.
安装 Python(通过 Anaconda)
安装 Python 最简单的方法是安装 Anaconda.就我们的目的而言,您可以将 Anaconda 视为 Python 的容器.特别是,它包括 numpy,scipy,jupyter,以及许多其他有用的软件包,其中一些将在稍后使用介绍.
要安装 anaconda,请访问其下载页面并按照操作系统的说明进行操作.它们的安装包下载需要一段时间才能完成,运行也需要一段时间(因为它会下载所有相关的软件包).在最后时刻,它会询问您:
一定要选择 yes.这将会给您打开一个新的终端窗口,当您在命令行中引用 python,jupyter 或任何其他包含 python 的安装包时,都会被发送到 Anaconda 中去安装这些包.
在 Jupyter 编辑器中编写 Python 代码
Jupyter 编辑器提供了一个令人难以置信的交互式环境来编写 Python 代码.无需知道太多的细节,您就可以使用 jupyter 编辑器运行和编辑您的 python 代码.它允许您对你的代码排版,并按照您的排版显示.浏览器将它们呈现为漂亮的文档,并且可以将它们导出为 PDF 或 html 文件.R 语言中不太注意排版,这点差异还是很明显的.
开始时,请为您的 Python 代码创建一个新的目录.在终端中导航到该目录,然后键入 jupyter notebook.这将启动一个新的 jupyter 编辑服务器,您可以用 localhost:8888 在你的机器上访问.然后,您可以在该服务器上创建一个新的文本文件.这将在您的文件系统中创建一个 *.ipynb 文件,它将映射到您的浏览器中显示.
要关闭 jupyter 服务器,请返回到您的终端并点击 Ctr-c Ctr-c.
下面是我经历所有这些步骤的 GIF,并显示已创建的. ipynb 文件.
最后您会注意到在浏览器中弹出连接失败的提示.那是因为我们关闭了 jupyter 服务器,所以没有什么可以连接的了.
现在您知道如何让一个 jupyter 编辑的程序运行起来.当我们看更多的帖子时,我们将学习更多 jupyter 编辑器的功能.
List
最基本的一种 python 数据结构被称为 list.就像在 R 中一样,Python 列表可以由不同类型的元素组成,只是表示一个有序的集合.
我听 R 族人说,您不能用 Python 来矢量化操作,他们可能已经从列表中尝试这样的想法得到了这个结论:
这里所做的事情是,python 只是重复您的列表两次,这是对列表的乘法运算相当合理的解释.顺便提一句,R 中试图将列表乘以数字的结果是:
好吧,好吧.但是我们真正关心的是将一个 R 中的向量乘以一个数字:
为了在 Python 中矢量化操作,我们必须引入 numpy 包.Numpy 包中的 "数组" 大致等于 R 向量.
加载包
首先,快速放下.Python 是一种通用的编程语言.由于这个原因,它不会自动加载很多 Python 用户不需要的统计库(同样,它不会加载大量的 web 开发库,您可能不会每天都使用它).这意味着我们将不得不加载软件包以获取 R 中默认提供的许多功能.
要在 Python 中加载一个包,我们使用一个 import 语句:
这大致相当于在 R 中加载一个包:
在这种情况下,有两点值得指出.首先,当您在 R 中加载一个包的时候,它将加载所有包到您的全局函数中.换句话说,如果您加载,例如,MASS 库,然后您想调用该 glm.nb 函数,您可以指定该函数来自 MASS 空间 MASS::glm.nb(...).但是您不需要; 您也可以直接调用该函数的 glm.nb(...).
Python 的处理有所不同.为了尽量减少命名冲突,您必须引用特定包中的函数和包的名字.例如,如果我们用 import numpy 语句加载 numpy,为了获得这个 array 函数,我们必须输入 numpy.array(...).
因为输入长包名称会很繁琐,所以可以用更简短的名称将包名称化.在这种情况下,通过使用 import numpy as np,我们告诉 Python,每当我们键入 np,我们其实是指 numpy,所以我们可以调用 numpy 的数组函数 np.array(...).
我将在这篇文章中引用的所有软件包的别名,这些别名是社区长期以来已经公认了的别名,我将在这篇文章中使用它们.
Numpy 数组(就像 R 向量)
现在我们已经加载了这个 numpy 包,我们可以创建 numpy 数组.在大多数情况下,这些行为与 R 向量很相似.
为了构建一个简单的 numpy 数组,我们可以传递一个列表给 numpy 的数组函数:
让我们来看看 numpy 数组像 R 矢量一样的情况:
所以,一般来说,当您认为您需要一个 R 向量时,就用 numpy 的数组.
R 中的许多数值函数都可以在 numpy 中找到.所以要取一个 numpy 数组的平均数,我们可以使用 numpy 的 mean 函数.
样本方差,标准偏差,计算协方差等也是如此.如果您需要做任何事情来计算数组中的值,只需在谷歌搜索中输入 "用 numpy 怎么做 X".
另外,这个指导 R 用户手册的 numpy 似乎涵盖了更多的内容.
抛开 Jupyter
回到您的 jupyter 编辑器尝试一下.像以前一样启动 jupyter 编辑服务器 jupyter notebook,并开始运行代码.
您可以将上面的 Python 代码复制到编辑器的第一个单元格中,然后点击 Shift+Enter 运行该代码段.我将在下面用 GIF 进行演示.
矩阵
python 中的矩阵只是 2 维的 numpy 数组.我们可以通过传递 numpy 数组函数列表来创建一个矩阵.每个内部列表将被视为矩阵的一行.
您可以用 @符号让矩阵乘以矩阵.
生成序列
生成序列的两个非常有用的 numpy 函数是 np.linspace 和 np.arange.
这些都对应于 R 的 seq 函数.
linspace 接受开始和结束参数,并且有一个可选参数,可以设置返回数组的长度.默认情况下,它会返回的阵列长度为 50,linspace 功能类似于使用 seq 函数,并设置参数 length.
arange 对应于仅使用起始点和停止点的 seq,当然也可以增加一个参数 by.
绘制
Python 中的核心绘图库是 matplotlib,我们用它来绘制一些东西,因为我们还没有读取数据,所以让我们回到 numpy 来生成一些数据.
我们将使用 numpy 的 sin 函数和上面的序列生成函数来绘制正弦波.几乎所有(如果不是全部的话)在基础 R(sin,exp,log 等)中可用的向量化函数也可以在 numpy 中使用.
首先,我们必须导入 matplotlib.接下来,为了让图形在 jupyter 编辑器内联显示,我们需要输入一个特殊的符号,如下所示:
接下来,我们生成 0 到 2π的 x 值,并将这些 x 值和 x 的正弦函数值绘制成我们自己的图形.
您也可以通过使用 plt.scatter 和直方图来轻松绘制散点图 plt.hist.
如果您正在寻找一种更高级的绘图包,您可能需要去看看 R 的 seaborn 软件包.
Dataframes
Python Dataframes 是在 pandas 包中实现的 ,它提供了将数据读入 python 的最简单的方法.
pandas 文档提供了 pandas Dataframes 和 R Dataframes 之间大量的比较,以及如何用 pandas 完成与普通 R 包相同的事情.
为此,我们需要读取一些数据. 如您所料,pandas 的 read_csv 函数将把一个 csv 文件读取到 pandas Dataframes 中.上述情况,我们是从 URL 中读取一个 csv 文件,当然也可以直接读取一个本地的 csv 文件.
我们使用来自 github 的数据:https://raw.githubusercontent.com/fivethirtyeight/data/master/most-common-name/new-top-firstNames.csv
我们可以用如下方法读取数据:
我们使用 index_col 参数是因为我们加载的数据已经在第一列有一个索引列,所以我们不希望 pandas 默认添加另外一个索引.
我们使用 0 来表示第一列而不是 1 的原因是,python 与 R 不同,但与几乎所有其他编程语言一样,python 是零索引的,这将会适用所有你要使用索引选择数据的时候.
很好,现在我们有数据了.假设我们只想要超过 0.5% 的人口的名字.对数据进行子集化的一种方法是创建掩码,就像在 R 中的做法那样.
这里,data['newPerct2013'] > .005 表达式是创建一个 True 和 False 值的数组,然后我们使用它来只选择该数组中 True 值的那些行.
然而,在 pandas 中查询的方法越来越多,这只是其中的一种方法:
现在我们来说说假如我们想知道一百个最受欢迎的婴儿名字占总人口数的百分比.
当然,我们可能还想对 DataFrames 做其它的操作,除了上面提到的以 R 文档外, pandas 文档也相当地不错.
统计功能
Python 的统计功能和 R 中的 dnorm 很相似,qnorm 是 scipy.stats 包中的函数.
对于许多已经发行的版本,这个软件包提供了随机生成变量的方法,计算分布,任意点的 pdf 和 log pdf,计算 quatiles 等等的函数.就像在 R 中一样,这些函数是矢量化的.
这几乎适用于任何分布,而不仅仅是正态分布.scipy 中的大多数发行版本也提供了更多的方法.请参阅有关正态分布的文档.
统计模型
最后,许多内置于 R 中的统计模型可以在 python statsmodels 包中找到.我们来看一下泊松分布的线性模型.
首先,我们生成数据.
其次,我们可以看看我们生成数据的 plt.plot(x, y).
之后,我们加载 statsmodels.有一点需要注意的是,与 R 的 glm 不同,statsmodels 不会自动使用截距的模型.幸运的是,它提供了一个用于向设计矩阵中添加常量的实用函数,我们可以使用该矩阵来拟合具有截距的模型.
最后我们可以看看它是否合适 fit.summary().拟合对象具有许多与 R 的拟合对象相同的性质,包括偏差,残差,模型对设计矩阵的估计等等.它还具有 predict 预测新观察结果的方法.
对于来自 R 的人来说,statsmodels 公式 api 提供了非常类似 R 的体验(包括默认拟合截距).我建议看看这个操作指南,如何从 R 转换到 statsmodels.
获得帮助
Jupyter 编辑器提供了查看函数的文档,如果在一个函数名称后面写一个问号,然后运行.
例如:
将会弹出 numpy 的 linspace 函数的文档.
Jupyter 编辑器也有补全名称的功能,所以在输入软件包名称之后,按 Tab 键就给出所有你可以使用的函数名称的概览.
如果不想在浏览器使用,更喜欢在命令行使用,你可以使用 ipython,ipython 是一个很好的 python 编辑工具.在这篇文章中提到的一切都可以用在它上面.
更一般地说,有大量的资源可以用来深入了解这些主题.
结论
对于那些对统计计算感兴趣的人来说,Python 和 R 都有很多工具可供使用.我希望这篇文章有助于降低 R 开发者的 Python 入门障碍.我的目标是提供一个总体概述,哪些工具可能使 R 开发人员感觉更容易使用,并为探索 Python 系统进行统计计算提供基础.如果您有任何更好的建议,或者发现任何错误,请联系我们!
来源: http://www.92to.com/bangong/2018/01-17/33073528.html