首页
学习
活动
专区
工具
TVP
发布

如何用 Python 编写你最喜欢的 R 函数?人生苦短

是用R语言还是用Python语言?这是一个旷日持久的争论。在此,我们可以尝试采用折中路线:创建一个Python脚本,用该脚本模仿R风格的函数,来方便地进行统计!

简介

用R语言还是用Python语言?这是数据科学和机器学习的一场大的争论。毫无疑问,这两种语言在最近几年都取得了巨大的进展,成为数据科学、预测分析和机器学习的首选编程语言。事实上,在IEEE新近的一篇文章中,Python取代C++成为2018年的顶级编程语言,R已经牢牢地保住了它在前10名中的位置。

然而,这两种编程语言之间存在着一些本质的差异。R主要是为数据分析问题的统计分析和快速原型化而开发的工具。另一方面,Python作为一种通用的现代面向对象语言,与C或Java相似,它具有更简单的学习曲线和更为灵活的行为方式。因此,R在统计学家、定量生物学家、物理学家和经济学家中仍然非常受欢迎,而Python逐渐成为日常脚本、自动化、后端web开发、分析和通用机器学习框架的首选语言,Python语言的技术支持基础比较广泛,同时还有许多开源社区。

如何在Python环境中模仿函数式编程?

R语言的函数编程特性为用户提供了非常简单有效地界面,用于快速计算概率,并为数据分析问题提供必要的描述性/推理统计。例如,仅仅使用一个紧致函数调用就能回答下面的问题,这是不是很神奇?

如何计算数据向量的平均/中值/模型?

如何计算服从正态分布的某一事件的累积概率?如果该分布是泊松分布,则如何计算?

如何计算一系列数据点的四分位数间距?

如何根据学生的t分布生成少量随机数?

在R语言编程环境中,这些您都能实现。

另一方面,Python脚本编写能使分析人员在各种分析管线中创造性地使用这些统计数据。

为了结合这两种语言的优势,需要设计一个简单的基于Python的包装类库,它包含最常用的函数,这些函数涉及以R风格定义的概率分布和描述性统计信息,用户可以快速地调用这些函数,而无需调用Python统计库,并弄明白所有方法和参数。

最为便捷的R-函数的Python包装类脚本

我用Python编写了一个脚本,用来定义在简单统计分析中最为便捷和最被广泛使用的R函数。导入这个脚本之后,您将能够像在R编程环境中一样自然地使用那些R-函数。

这个脚本的目标是利用简单的Python子程序,来模仿R风格的统计函数,从而快速计算密度/点估计、累积分布、分位数,并为各种重要的概率分布生成随机变量。为了保持R的风格,没有使用类分层结构,只在该文件中定义了一些原始函数,这样用户便可以方便地导入这个Python脚本,并在需要时使用所有函数,而仅仅只需做一个名称的调用。

注意,在此使用了“模仿”这个词。我并没有声称要模仿R真正的功能编程范式:那些由深层次的环境设置和这些环境与对象之间组成的复杂的相互关系。这个脚本只允许我(同时也希望有无数其他Python用户)能够快速启动Python程序或Jupyter笔记本(一种交互式笔记本,支持运行 40 多种编程语言)导入脚本,并在短时间内开始进行简单的描述性统计。这就是目标,仅此而已。

或者,你可能已经会用R语言编码,刚开始学习和使用Python进行数据分析。你可以高兴地看到和使用Jupyter笔记本里的一些众所周知的函数,这些都和你使用的R语言环境中的方法类似。

简单实例

例如,如果需要计算数据点向量的TuKEY五数综合。你只需调用一个简单函数FiVunm并传递给向量,它便在一个Numpy数组中返回五数综合(最小值;第1四分位数(Q1);中位数(Q2);第3四分位数(Q3);最大值。)。

lst=[20,12,16,32,27,65,44,45,22,18]fivenum(lst)> array([12. , 18.5, 24.5, 41. , 65. ])

或者,你想知道以下问题的答案:

假设一台机器平均每小时输出10件成品,标准差为2,输出模式服从近似正态分布。在接下来的一小时内,机器输出至少7台但不超过12台的概率是多少?

答案基本上是这样,

利用pNorm…,只需要一行代码就可以得到答案。

pnorm(12,10,2)-pnorm(7,10,2)> 0.7745375447996848

或者,对于如下问题:

假设你有一枚硬币,每次抛硬币的时候,都有60%的转动概率,玩的是10次抛掷的游戏。如何用这枚硬币计算出所有可能的赢球数(从0到10)?

只需使用一个dbinom…函数和几行代码就可以获得一个很好的条形图。

probs=[]import matplotlib.pyplot as pltfor i in range(11): probs.append(dbinom(i,10,0.6))plt.bar(range(11),height=probs)plt.grid(True)plt.show()

目前已经实现的函数

目前,已经实现了的、可以用于快速调用的R风格函数在以下脚本中实现。

均值、中值、方差、标准差

TuKEY五数综合、矩阵的IQR

矩阵的协方差或两个向量之间的协方差

密度、累积概率、分位函数和随机变量生成,用于下列分布:正态分布,均匀分布,二项分布,泊松分布,F分布,Student’s-t分布,卡方分布,Beta分布,和Gamma分布

后续工作

这项工作还正在进行之中,我计划在脚本中添加一些更为便捷的R-函数。例如,在R单行命令中,lm可以得到一个最小二乘拟合模型,该模型具有所有必要的推断统计量(P值、标准误差等)。这将是多么的简短和紧凑!另一方面,Python中的标准线性回归问题通常是使用Scikit-Learning来解决,需要用到更多的脚本来实现它。我计划使用Python的statsmodel后端结合这个单一函数线性模型来实现。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181012A23QSJ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券