做统计相关系统的朋友一定都会学习过什么正态分布、方差、标准差之类的概念,在 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. VueApp监听手机物理返回键的事件

    代码 第一步创建js文件夹子 在main里面引用   JS文本内容如下 //监听手机物理返回键的事件 document.addEventListener('plusready', function() ...

  2. SpringBoot开发十二-账号设置

    需求介绍-账号设置 账号设置里面的上传头像(文件) 首先请求必须是一个 POST 请求,其次表单的属性 enctype = "multipart/form-data" 然后就是利用 ...

  3. SIM900A—基础指令

    文章目录 1.ATE指令设置回显 2.ATQ指令设置返回 3.ATV指令设置返回格式 4.AT+CFUN设置模块功能 5.AT+IPR设置波特率 6.AT+CMEE设置上报错误格式 7.各种码(IME ...

  4. Spring全家桶--单数据源的配置

    前言 spring数据源的配置网络上有很多例子,这里我也来介绍一下单数据源配置的例子,基于SpringBoot的方式和原生的Spring的方式. 一.生成项目骨架(SpringBoot),运行一个简单 ...

  5. 谈谈 Nginx 那点事【一】

    为什么突然决定总结Nginx ? 不知不觉8月份又要过完了,时间真是个无情的崽种. 写Nginx 首先,主要源于最近项目部署工作中和公司技术中心的人对接部署相关事宜流程太繁琐了.每个部门有各自的工作安 ...

  6. kvm虚拟化的qcow2磁盘格式的扩容方法

    第一种:增加一块磁盘而另磁盘空间增大 1).先进入kvm环境,创建一块硬盘:qemu-img create -f qcow2 /home/tianke/test.qcow2 40G 2).再给增加的硬 ...

  7. taro小程序地址选择组件

    效果图: address_picker.tsx: import Taro, { Component } from '@tarojs/taro' import { View, PickerView, P ...

  8. Spring Boot Mybatis注解:@Mapper和@MapperScan

    使用@Mapper注解 添加了@Mapper注解之后这个接口在编译时会生成相应的实现类,让其他的类进行引用 @Mapper public interface EmpMapper { public Li ...

  9. CentOS 6.x 系统中安装原生 Hadoop 2

    2020年整理博客发现原文地址已经失效,推荐学习地址厦门大学数据库实验室 本教程适合于在 CentOS 6.x 系统中安装原生 Hadoop 2,适用于Hadoop 2.7.1, Hadoop 2.6 ...

  10. 痞子衡嵌入式:简析i.MXRT1170 XECC功能特点及其保护串行NOR Flash和SDRAM之道

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170 XECC功能特点及其保护串行NOR Flash和SDRAM之道. ECC 是 "Error Correc ...