做统计相关系统的朋友一定都会学习过什么正态分布、方差、标准差之类的概念,在 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. Create Virtual Network with VirtualBox on Mint 14

    VirtualBox version: VirtualBox-4.2.18-88780-Linux_x86.run Host OS: Linux Mint 14 Xfce Setup Network ...

  2. 用SamInside破解Windows登录密码

    用小马PE的USB-HDD+格式制作启动优盘: 笔记本启动时按ESC键,选择USB启动: 进入WinPE后,将%SystemRoot%/system32/config全部拷贝出来(WinXP这个文件夹 ...

  3. 题解 [SDOI2010]所驼门王的宝藏

    传送门 保分题再度爆零,自闭ing×2 tarjan没写vis数组,点权算的也有点问题 这题情况3的连边有点麻烦,考场上想了暴力想了二分就是没想到可以直接拿map水过去 不过map果然贼慢,所以这也是 ...

  4. uwp 之语音识别

    xml code ---------------------------------------------- <Page x:Class="MyApp.MainPage" ...

  5. 六:使用Cookie进行会话管理

    1.存储客户端的状态 因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话技术是帮助服务器 记住客户端状态 2.会话技术 ...

  6. 交互式查询⼯具Impala

    Impala是什么: Impala是Cloudera提供的⼀款开源的针对HDFS和HBASE中的PB级别数据进⾏交互式实时查询(Impala 速度快),Impala是参照⾕歌的新三篇论⽂当中的Drem ...

  7. 【C语言】第1章 程序设计与C语言

    第1章 程序设计与C语言 程序:一组计算机能识别和执行的 指令. 计算机语言:人和计算机交流信息的.计算机和人都能识别的语言 C语言允许用两种注释方式: //:单行注释 可单独占一行 可出现在一行中其 ...

  8. jdbc操作mysql(四):利用反射封装

    前言 有了前面利用注解拼接sql语句,下面来看一下利用反射获取类的属性和方法 不过好像有一个问题,数据库中的表名和字段中带有下划线该如何解决呢 实践操作 工具类:获取connection对象 publ ...

  9. ES6中class的继承

    extends 子类的继承 super(); 调用父类的构造方法,只能在子类中执行 继承可以让子类获得父类的方法 属性,可以扩充 增加新的方法 属性等 父类(基类)--被继承的类 子类--继承后的类 ...

  10. 云原生数据库 TDSQL-C 产品概述、产品优势、应用场景

    云原生数据库 TDSQL-C(Cloud Native Database TDSQL-C,TDSQL-C)是腾讯云自研的新一代高性能高可用的企业级分布式云数据库.融合了传统数据库.云计算与新硬件技术的 ...