Code前端首页关于Code前端联系我们

学习和使用PHP中的统计扩展函数

terry 2年前 (2023-09-25) 阅读数 55 #后端开发

从事统计相关系统工作的朋友一定都学过正态分布、方差、标准差等概念。 PHP中也有专门针对这些统计相关系统的相应扩展函数。开发的功能。今天我们要学习的高级统计函数库就是这类运算函数。当然,我自己从来没有搭建过这样的系统,对这些概念的理解也很有限,所以今天学到的内容只是基于我个人的理解和以前遇到过的内容。不过据说Python在这方面相对更强大一些。毕竟,它是一种通用的粘合语言,也是一种在统计领域取得成功后逐渐被公众接受的语言。有兴趣的可以自己研究一下。

统计 安装扩展也非常简单,只需使用正常的扩展安装方法即可。而且不需要系统中其他组件的额外支持,非常方便。

0-1之间的随机数

首先我们来看一个与统计关系不大的函数。

var_dump(stats_rand_ranf()); // float(0.32371053099632)

普通函数 rand() 和 mt_rand() 返回从 0 到 getrandmax() 的整数。而这个 stats_rand_ranf() 返回 0 到 1 之间的小数位。除了这个函数之外,还有其他以 stats_rand_ 开头的函数,用于返回像正态分布一样的随机值。如果懂统计的话可以自己查文档。

方差和标准差

方差和标准差这两个概念应该是比较简单和通用的。例如,我的实际专业是心理学。在心理统计学中,方差和标准差的计算也是考试的必修部分。不过,这一段的内容也很简单。使用该函数后,我们还将使用自己的计算代码来显示方差和标准差的计算公式。

// 1,3,9,12
// 平均数:(1+3+9+12)/4 = 6.25

// 方差
var_dump(stats_variance([1,3,9,12])); // float(19.6875)
// 方差公式:(1-6.25)^2+(3-6.25)^2+(9-6.25)^2+(12-6.25)^2)/4
var_dump((pow(1-6.25, 2)+pow(3-6.25, 2)+pow(9-6.25,2)+pow(12-6.25,2))/4); // float(19.6875)

平均值对于许多统计计算很有用,是许多算法的基础数据之一。所以首先我们准备平均值,主要是为了我们后面的手动计算。事实上,方差和标准差也是许多其他计算的基础数据。函数

stats_variance() 用于计算数据集的方差。它接受一个数组参数,计算出的内容就是data中的数据值。方差的公式实际上是每个数据的平方减去均值,然后将它们全部相加并除以数据的数量。

可以看到计算结果和直接调用stats_variance()的结果是一样的。

// 标准差
var_dump(stats_standard_deviation([1,3,9,12])); // float(4.4370598373247)
var_dump(stats_standard_deviation([1,3,9,12], true)); // float(5.1234753829798)
// 标准差:开方((1-6.25)^2+(3-6.25)^2+(9-6.25)^2+(12-6.25)^2)/4)
// 样本标准差:开方((1-6.25)^2+(3-6.25)^2+(9-6.25)^2+(12-6.25)^2)/(4-1))

var_dump(sqrt((pow(1-6.25, 2)+pow(3-6.25, 2)+pow(9-6.25,2)+pow(12-6.25,2))/4)); // float(4.4370598373247)
var_dump(sqrt((pow(1-6.25, 2)+pow(3-6.25, 2)+pow(9-6.25,2)+pow(12-6.25,2))/3)); // float(5.1234753829798)

计算标准差实际上是对方差结果求平方根,然后除以数据个数。它有两种形式,一种是直接除以金额,另一种是除以金额减一,称为标准差和样本标准差。可以看到,通过使用 stats_standard_deviation() 并指定其第二个参数,您可以轻松地直接切换这两个标准差的计算结果。而且比手工计算方便多了。

标准差、调和平均、阶乘

标准差一般是指序列中每个值与其算术平均值的偏差的绝对值的算术平均值。天哪,这个概念太复杂了。各位统计学家怎么样?当然,一切都是由统计扩展中的函数完成的。函数

// 平均偏差
var_dump(stats_absolute_deviation([1,3, 9, 12])); // 4.25

// ((6.25-1)+(6.25-3)+(9-6.25)+(12-6.25))/4
//(5.25+3.25+2.75+5.75)/4 = 4.25

stats_absolute_deviation() 用于计算平均偏差。其实上面的概念就是我在评论中写的公式。只需将每个数据减去平均值后的绝对值除以数据数量即可。看看这个公式是不是比上面的概念清晰很多。让我们再次看看修正和向下的平均值。

// 调和平均数
var_dump(stats_harmonic_mean([1, 3, 9, 12])); // float(2.6181818181818)
// 4/(1/1+1/3+1/9+1/12) = 2.6181818181818

stats_harmonic_mean() 用于计算数据集的调和平均值。从下面注释的计算公式你能看出吗?调和平均值是将每个数据的倒数值相加,然后将倒数值之和除以数据个数得到的结果。

总之,我们采用一个更简单的方法,一个可以直接计算阶乘结果的函数。

var_dump(stats_stat_factorial(6)); // float(720)
// 1*2*3*4*5*6 = 720

这个功能我相信不需要进一步解释。

峰态、佝偻病、累积正态分布函数、概率密度

我从来没有真正接触过这些概念。但我刚刚测试了一下功能代码可以使用。相关功能还有很多。例如,这里我们只有一些与正态分布相关的函数,以及F分布、t分布、柯西分布、卡方分布等相关计算函数。我承认我只听说过一两个名字,还有很多我什至从未听说过。

// 峰度
var_dump(stats_kurtosis([1, 3, 9, 12])); // float(-1.6960846560847)

// 偏度
var_dump(stats_skew([1, 3, 9, 12])); // float(0.091222998923078)


// 返回正态分布的累积分布函数、其逆函数或其参数之一
var_dump(stats_cdf_normal(14,5,10, 1));
// 返回第一个参数的概率密度
var_dump(stats_dens_normal(14, 5, 10));

其他与分布相关的各种计算功能,如果需要,可以查看相关文档。我不会让你在这里上车。如果你上公共汽车,你可能得挖一条沟。

总结

直到我阅读了官方文档,我才知道我们在 PHP 中已经有了这样的扩展。我仍然认为如果我们真的想建立一个类似的统计系统,使用PHP会很有问题,所以每个人都会选择不同的语言。事实上,这些扩展已经存在。我不会说它是否容易,但是使用 PHP 创建这种统计系统的例子并不多。如果你需要什么,你还是要自己多做研究。而且,这种计算实际上是不同公式的混合。我相信 Composer 中有很多有用的框架,我们可以使用它们,而无需在系统上单独安装扩展。

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202012/source/10。了解如何在 PHP.php 中使用统计扩展函数

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门