做统计相关系统的朋友一定都会学习过什么正态分布、方差、标准差之类的概念,在 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)/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() 函数就是用于计算一组数据的方差。它接收的是一个数组参数,计算的内容也就是数据里面数据的值。关于方差的公式其实就是每一个数据减去平均数以后平方,然后全部加起来之后再除以数据的数量。

可以看到计算的结果和我们直接调用 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 中也有不少好用的框架可以供我们使用而不需要再到系统中单独安装扩展。

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202012/source/10.学习PHP中统计扩展函数的使用.php

参考文档:

https://www.php.net/manual/zh/book.stats.php

关注公众号:【硬核项目经理】获取最新文章

添加微信/QQ好友:【xiaoyuezigonggong/149844827】免费得PHP、项目管理学习资料

知乎、公众号、抖音、头条搜索【硬核项目经理】

B站ID:482780532

学习PHP中统计扩展函数的使用的更多相关文章

  1. 学习PHP中的任意精度扩展函数

    今天来学习的是关于数学方面的第一个扩展.对于数学操作来说,无非就是那些各种各样的数学运算,当然,整个程序软件的开发过程中,数学运算也是最基础最根本的东西之一.不管你是学得什么专业,到最后基本上都会要学 ...

  2. java学习,从一个字符串中统计同一类型出现的次数

    1.从字符串“AS345asdzf*())sddsWE”中统计大写字母.小写字母.其他类型的出现的次数 String s="AS345asdzf*())sddsWE"; int l ...

  3. 【未解决】对于使用Windows的IDEA进行编译的文件,但无法在Linux系统中统计代码行数的疑问

    在我学习使用Windows的IDEA的过程中,将代码文件转移到Linux虚拟机当中,但无法在Linux系统中统计代码行数. 注意:拷贝进虚拟机的文件均能编译运行. 具体过程如下: root@yogil ...

  4. pandas学习(常用数学统计方法总结、读取或保存数据、缺省值和异常值处理)

    pandas学习(常用数学统计方法总结.读取或保存数据.缺省值和异常值处理) 目录 常用数学统计方法总结 读取或保存数据 缺省值和异常值处理 常用数学统计方法总结 count 计算非NA值的数量 de ...

  5. Flink 从0到1学习 —— Flink 中如何管理配置?

    前言 如果你了解 Apache Flink 的话,那么你应该熟悉该如何像 Flink 发送数据或者如何从 Flink 获取数据.但是在某些情况下,我们需要将配置数据发送到 Flink 集群并从中接收一 ...

  6. Zookeeper学习笔记(中)

    Zookeeper学习笔记(中) Zookeeper的基本原理和基本实现 深入了解ZK的基本原理 ZK的一致性: ZAB 协议: Zookeeper 原子消息广播协议 ZK通过选举保证 leader ...

  7. 学习sql中的排列组合,在园子里搜着看于是。。。

    学习sql中的排列组合,在园子里搜着看,看到篇文章,于是自己(新手)用了最最原始的sql去写出来: --需求----B, C, F, M and S住在一座房子的不同楼层.--B 不住顶层.C 不住底 ...

  8. [转]学习Nop中Routes的使用

    本文转自:http://www.cnblogs.com/miku/archive/2012/09/27/2706276.html 1. 映射路由 大型MVC项目为了扩展性,可维护性不能像一般项目在Gl ...

  9. SQL Server 中统计信息直方图中对于没有覆盖到谓词预估以及预估策略的变化(SQL2012-->SQL2014-->SQL2016)

    本位出处:http://www.cnblogs.com/wy123/p/6770258.html 统计信息写过几篇了相关的文章了,感觉还是不过瘾,关于统计信息的问题,最近又踩坑了,该问题虽然不算很常见 ...

随机推荐

  1. SpringCloud升级之路2020.0.x版-13.UnderTow 核心配置

    本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford Undertow ...

  2. repeatedly function in Clojure

    user=> (doc repeatedly) clojure.core/repeatedly ([f] [n f]) Takes a function of no args, presumab ...

  3. DVWA-全等级文件包含

    DVWA简介 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法 ...

  4. 009 FPGA实现网口通信的几种方式【转载】

    从硬件上来说,一般PHY芯片为模数混合电路,负责接收电.光这类模拟信号,经过解调和A/D转换后通过MII接口将信号交给MAC芯片进行处理.一般MAC芯片为纯数字电路. 物理层定义了数据传送与接收所需要 ...

  5. spring-boot 2.5.4,nacos 作为配置、服务发现中心,Cloud Native Buildpacks 打包镜像,GitLab CI/CD

    spring-boot 2.5.4,nacos 作为配置.服务发现中心,Cloud Native Buildpacks 打包镜像,GitLab CI/CD 本文主要介绍 Java 通过 Cloud N ...

  6. noip36

    开场先看一遍题面,凭着错误的感觉t3叫naive是一个原因,312开局.然后就死的很惨. T1 朴素暴力40pts,细想就有80pts,然而我只写了十分钟左右就爬回T3了,所以... 其实都是借口 正 ...

  7. noip模拟12[简单的区间·简单的玄学·简单的填数]

    noip模拟12 solutions 这次考试靠的还是比较好的,但是还是有不好的地方, 为啥嘞??因为我觉得我排列组合好像白学了诶,文化课都忘记了 正难则反!!!!!!!! 害没关系啦,一共拿到了\( ...

  8. C#基础知识---Lambda表达式

    一.Lambda表达式简介 Lambda表达式可以理解为匿名函数,可以包含表达式和语句.它提供了一种便利的形式来创建委托. Lambda表达式使用这个运算符--- "=>", ...

  9. C++类构造函数、拷贝构造函数、复制构造函数、复制构造函数、构造函数显示调用和隐式调用

    一. 构造函数是干什么的   class Counter   {   public:            // 类Counter的构造函数            // 特点:以类名作为函数名,无返回 ...

  10. Mac Ideal 常用快捷键

    智能提示 ⌘ -> command ⇧ -> shift ⌥ -> option -> 上箭头 -> 下箭头 ⌃ -> Control mac的option键  = ...