博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python编写函数_如何用Python编写自己喜欢的R函数
阅读量:2528 次
发布时间:2019-05-11

本文共 4030 字,大约阅读时间需要 13 分钟。

python编写函数

数据科学和机器学习的伟大现代斗争之一是“ Python vs. R”。 毫无疑问,近年来两者都已经取得了巨大的发展,成为数据科学,预测分析和机器学习的顶级编程语言。 实际上,根据IEEE最近的一篇文章,Python取代了C ++,成为 ,R牢牢地稳居前10名。

但是,这两者之间存在一些根本差异。 作为用于统计分析和数据分析问题的快速原型制作的工具 。 另一方面,Python是作为通用的现代面向对象语言开发的,与C ++或Java一样,但学习曲线更简单,行为方式更灵活。 因此,R在统计学家,定量生物学家,物理学家和经济学家中仍然非常流行,而Python逐渐成为日常脚本编写,自动化,后端Web开发,分析和通用机器学习框架以及具有广泛的支持基础和开源开发社区的工作。

模仿Python环境中的函数式编程

用户提供了一个非常简单而紧凑的界面,可以快速计算概率以及数据分析问题的基本描述性/推论性统计信息。 例如,仅用一个紧凑的函数调用就能解决以下问题不是很好吗?

  • 如何计算数据向量的均值/中位数/众数。
  • 如何计算服从正态分布的某些事件的累积概率。 如果分布是泊松怎么办?
  • 如何计算一系列数据点的四分位数间距。
  • 如何根据学生的t分布生成一些随机数。

R编程环境可以完成所有这些工作。

为了结合两个方面的优势,您只需要一个简单的基于Python的包装器库,其中包含与R样式中定义的概率分布和描述统计有关的最常用函数。 这使您能够真正快速地调用那些函数,而不必进入适当的Python统计库并弄清楚方法和参数的整个列表。

Python包装脚本,可实现最便捷的R函数

,用于在简单的统计分析中使用Python定义最方便且使用最广泛的R函数。 导入此脚本后,您将可以自然地使用这些R函数,就像在R编程环境中一样。

该脚本的目标是提供模仿R样式统计函数的简单Python子例程,以快速计算密度/点估计,累积分布和分位数,并为重要的概率分布生成随机变量。

为了保持R样式的精神,该脚本不使用类层次结构,并且仅在文件中定义了原始函数。 因此,用户可以通过一个名称调用导入该一个Python脚本并在需要时使用所有功能。

请注意,我使用了mimic这个词。 在任何情况下,我都不会声称要模仿R的真正的函数式编程范例,该范例由深度的环境设置以及这些环境和对象之间的复杂关系组成。 这个脚本使我(我希望无数其他Python用户)能够快速启动Python程序或Jupyter笔记本,导入脚本,并立即开始进行简单的描述性统计。 这就是目标,仅此而已。

如果您已经使用R编写了代码(可能是在研究生院学习),并且刚刚开始学习和使用Python进行数据分析,那么您将很高兴以类似的方式在Jupyter笔记本中看到并使用一些相同的知名函数如何在R环境中使用它们。

无论出于何种原因,使用此脚本都很有趣。

简单的例子

首先,只需导入脚本并开始使用数字列表,就好像它们是R中的数据矢量一样。

from R_functions      
import *
lst
=
[
20
,
12
,
16
,
32
,
27
,
65
,
44
,
45
,
22
,
18
]
< more
code
, more statistics...
>

假设您要根据数据点向量计算摘要。 您只需调用一个简单的函数Fivenum ,然后传递向量。 它将在NumPy数组中返回五位数的摘要。

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个单位的概率是多少?

答案本质上是这样的:

Answer to machine output question

您可以使用pnorm仅用一行代码来获得答案:

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

或者,您可能需要回答以下问题:

假设您有一枚装满硬币的硬币,每次抛硬币时都有可能将头抬高60%。 您正在玩10投掷游戏。 您如何绘制和绘制该硬币所有可能获胜次数(从0到10)的机会?

只需使用一个函数dbinom ,只需几行代码即可获得一个不错的条形图:

probs      
=
[
]
import matplotlib.
pyplot
as plt
for i
in
range
(
11
) :
    probs.
append
( dbinom
( i
,
10
,
0.6
)
)
plt.
bar
(
range
(
11
)
, height
= probs
)
plt.
grid
(
True
)
plt.
show
(
)
Answer to coin toss question

简单的界面进行概率计算

R提供了非常简单直观的界面,可以根据基本概率分布进行快速计算。 界面如下:

  • d {distribution}给出点x处的密度函数值
  • p {distribution}给出点x处的累积值
  • q {分布}以概率p给出分位数函数值
  • r {distribution}生成一个或多个随机变量

在我们的实现中,我们坚持使用此接口及其关联的参数列表,因此您可以像在R环境中一样执行这些函数。

当前执行的功能

脚本中实现了以下R样式函数以进行快速调用。

  • 均值,中位数,方差,标准差
  • Tuckey五位数摘要,IQR
  • 矩阵或两个向量之间的协方差
  • 下列分布的密度,累积概率,分位数函数和随机变量生成:正态分布,均匀分布,二项式分布,泊松,F,学生t,卡方,β和伽马。

工作正在进行中

显然,这是一个正在进行的工作,我计划在此脚本中添加其他一些便捷的R函数。 例如,在R中,单行lm可以为您提供具有所有必要推论统计信息(P值,标准误差等)的普通最小二乘拟合模型到数值数据集。 这是非常简短而紧凑的! 另一方面,通常使用解决Python中的标准线性回归问题, 需要更多的脚本编写,因此我计划使用Python的后端合并此单函数线性模型拟合功能。

如果您喜欢并在工作中使用此脚本,请通过加星标或分叉其帮助其他人找到它。 另外,您可以在Python,R或MATLAB以及其他机器学习资源中查看我的其他以获取有趣的代码段。

如果您有任何问题或想法要分享,请通过与我联系。 如果您像我一样对机器学习和数据科学充满热情,请或


最初发表于《 。 根据 。

翻译自:

python编写函数

转载地址:http://cqdzd.baihongyu.com/

你可能感兴趣的文章
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_6_字符输出流写数据的其他方法...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_2_BufferedOutputStream_字节缓冲...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_8_使用try_catch_finally处理流中的异常...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_3_BufferedInputStream_字节缓冲...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_06 Properties集合_1_使用Properties集合存储数据,遍历取出集合中的数据...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_4_缓冲流的效率测试_复制文件...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_06 Properties集合_3_Properties集合中的方法load...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_5_BufferedWriter_字符缓冲输出流...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_6_BufferedReader_字符缓冲输入流...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_7_练习_对文本的内容进行排序...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_1_字符编码和字符集...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_2_编码引出的问题_FileReader读取GBK格式文件...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_3_转换流的原理...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_4_OutputStreamWriter介绍&代码实现...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_5_InputStreamReader介绍&代码实现...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_6_练习_转换文件编码...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_1_序列化和反序列化的概述...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_5_InvalidClassException异常_原理...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_2_对象的序列化流_ObjectOutputStream...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_10 打印流_1_打印流_概述和使用...
查看>>