码农老张Zy 发表于 2021-9-1 08:39:52

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

做统计相关系统的朋友肯定都会学习过什么正态分布、方差、标准差之类的概念,在 PHP 中,也有相应的扩展函数是专门为这些统计相关的功能所开辟的。我们本日要学习的 stats 扩展函数库就是这类操纵函数。当然,本身我并没有做过什么类似的系统,对这些概念也是一知半解,以是本日学习的内容也执偾基于个人的明白以及原来轻微接触过的一些内容。不过听说 Python 在这方面就相对来说会更加强盛一些,毕竟是万能胶水语言,而且也是在统计领域获得成功之后才慢慢被大众接受的一门语言,有爱好的同学可以自己研究一下。
stats 扩展的安装也非常地简单,直接使用正常的扩展安装方式就可以了。而且它不需要额外的其他系统中组件的支持,非常方便。
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()); // float(19.6875)// 方差公式:(1-6.25)^2+(3-6.25)^2+(9-6.25)^2+(12-6.25)^2)/4var_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() 函数就是用于盘算一组数据的方差。它吸取的是一个数组参数,盘算的内容也就是数据里面数据的值。关于方差的公式实在就是每一个数据减去均匀数以后平方,然后全部加起来之后再除以数据的数目。
可以看到盘算的结果和我们直接调用 stats_variance() 函数的结果是一样的。
// 标准差var_dump(stats_standard_deviation()); // float(4.4370598373247)var_dump(stats_standard_deviation(, 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() ,而且指定它的第二个参数就可以方便地切换这两种标准差的盘算结果。而且比自己手写的盘算也方便许多。
均匀偏差、调和均匀数、阶乘

均匀偏差一般指的是数列中各项数值与其算术均匀数的离差绝对值的算术均匀数。我的天啊,这概念都读得好绕口,学统计的小同伴们你们过得还好吗?当然,在 stats 扩展中一个函数就搞定了。
// 均匀偏差var_dump(stats_absolute_deviation()); // 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.25stats_absolute_deviation() 函数用于盘算均匀偏差,实在上面的概念就是我在解释中写的公式。每个数据减均匀数之后的绝对值再除以数据数目就可以了,直接看公式是不是比上面的概念要清晰许多。同样,我们再看下调和均匀数。
// 调和均匀数var_dump(stats_harmonic_mean()); // float(2.6181818181818)// 4/(1/1+1/3+1/9+1/12) = 2.6181818181818stats_harmonic_mean() 用于盘算一组数据的调和均匀数。从下面解释的盘算公式中可以看出来吗?调和均匀数就是每个数据倒数相加之后再使用数据数目除以倒数和得到的结果。
最后就来个轻松一点的,一个可以直接盘算阶乘结果的函数。
var_dump(stats_stat_factorial(6)); // float(720)// 1*2*3*4*5*6 = 720这个函数相信不用多解释了吧。
峰度、偏度、累积正态分布函数、概率密度

这些概念实在我也没有接触过了。不过就是测试了一下函数代码可以使用而已。相关的函数还有许多,比如我们这里只是与正态分布相关的一些函数,还有 F分布 、t分布 、柯西分布、卡方分布 等等相关的盘算函数。我承认我只听说过一两个的名字,还有许多甚至连名字都没听说过。
// 峰度var_dump(stats_kurtosis()); // float(-1.6960846560847)// 偏度var_dump(stats_skew()); // 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
参考文档:
https://www.php.net/manual/zh/book.stats.php
页: [1]
查看完整版本: 学习PHP中统计扩展函数的使用