博主信息
Sky
博文
291
粉丝
0
评论
0
访问量
6831
积分:0
P豆:617

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

2021年10月19日 18:19:49阅读数:18博客 / Sky

做统计相关系统的朋友一定都会学习过什么正态分布、方差、标准差之类的概念,在 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([1,3,9,12])); // 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([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() ,并且指定它的第二个参数就可以方便地切换这两种标准差的计算结果。并且比自己手写的计算也方便很多。

平均偏差、调和平均数、阶乘

平均偏差一般指的是数列中各项数值与其算术平均数的离差绝对值的算术平均数。我的天啊,这概念都读得好绕口,学统计的小伙伴们你们过得还好吗?当然,在 stats 扩展中一个函数就搞定了。

// 平均偏差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 中也有不少好用的框架可以供我们使用而不需要再到系统中单独安装扩展。

版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
  • 从这篇文章开始,我们MySQLi。可以说MySQL(原始)是我们很多人刚开始PHP时连接据库入门导师。现在如果想要使过程式代码来操作据库,只能使mysqli了。
    python于人工智能方法:1、掌握基础Python程序语言知识;2、了解基础和机器基础知识;3、使Python科式库和套件;4、使【scikit-learn】Python
    在之前文章《PHP之:利组来输出文件名》,我们介绍了两种利组来获取文件方法。
    php去掉文件方法:1、使pathinfo返回完整文件名一部分;2、使basename从文件名删除该名;3、使substr和strrpos返回没有完整路径和文件名
    在之前文章我们介绍了使PHP实现给定年月日算总天方法,感兴趣可以点击链接进行查阅→《怎么通过PHP实现给定年月日算总天》。
    在之前文章我们介绍了利PHP检查给定值是不是有限值、无限值或非方法。这次我们继续PHP,介绍一下算两个日期相差几天方法,有需要可以了解一下~
    PHPsubstr文乱码,其原因“substr”分割文字符,会按照长度为3进行分隔,所以会导致会乱码,解决方法使“mbstring”“mb_substr”,该会将一个文字符当作长度
    在之前文章我们介绍了在插入新元素4种方法,感兴趣可以点击链接查看→《PHP之巧插入元素(一)》、《PHP之巧插入元素(二)》。
    在之前文章《PHP之怎么去除任意元素》,我们介绍了使array_splice()删除一个或多个元素方法。
    上篇文章给大家介绍了《PHP什么是pdo?访问据库有什么优点?是什么?​》,本文继续给大家介绍PHP什么是类和对象?为什么面向对象?如何使
    在编译并完成 php.ini 配置之后,我们就成功安装了一个 PHP 。不过, PHP 也为我们提供了两个在动态运行期间可以查看状态以及加载未在 php.ini 进行配置
    PHPcurl设置header方法:在PHP库curl可以通过“curl_setopt()”设置选项常量“CURLOPT_HTTPHEADER”,来设置header,使时将header据传入第
    php可以通过Mcrypt系列来实现des加解密,但该陆续被废弃,所以我们可以使OPENSSL方式来实现DES加解密。
    PHP要怎么操作JSON?本篇文章带大家深入一下PHP与JSON相关,介绍一下使这些需要注意一些地方,希望对大家有所帮助!
    在之前文章《PHP使冒泡算法对元素进行升序排序!》,我们介绍了使冒泡算法对组元素进行升序排序方法。
    做为一门在世界范围内广泛使编程语言,国际化能力往往是衡量一个编程语言是否能够大范围流行重要内容。特别是对于PHP这种以Web页面编程为主战场语言来说,国际化能力更是重之重。
    从这篇文章开始,我们将一系列 PHP 文件系相关。其实这些,有很多都是我们经常,大家并不需要刻意地去记住它们,只要知道有这么个东西,在使时候记得来查文档就可以了。
    从这篇文章开始,我们将一系列PHP文件系相关。其实这些,有很多都是我们经常,大家并不需要刻意地去记住它们,只要知道有这么个东西,在使时候记得来查文档就可以了。
    在之前文章我们介绍了使PHP检测变量据类型方法,有需要可以点击链接查看→《教你使PHP来检测变量类型》。这次我们来聊聊变量赋值,介绍一下在PHP怎么给变量传值,一起来下。
    上篇文章给大家介绍了《什么是引传参?引传参法?引赋值?(附代码)》,本文继续给大家介绍PHP什么是变量?如何使变量?(分享),一起来吧!!!