前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用 PHP 实现 Excel 的 stdevp 函数

用 PHP 实现 Excel 的 stdevp 函数

作者头像
jwj
发布2022-05-18 12:04:10
8280
发布2022-05-18 12:04:10
举报
文章被收录于专栏:用户1069690的专栏

在 Excel 中,stdevp 是计算样本总体标准偏差的函数,它反映了相对于平均值的离散程度。但在 PHP 里是没有该函数的,要计算标准偏差时,只能自己进行写算法,十分不便。于是查询相关资料和公式,总结出了以下代码。

公式

首先,查阅维基百科,得到了完整公式和详细的计算步骤,下图截取至维基百科

2022-01-28T05:37:57.png
2022-01-28T05:37:57.png

参考资料:维基百科-标准差

封装成函数

然后根据公式和步骤拆分,写出以下函数

代码语言:javascript
复制
/**
 * 样本总体的标准偏差
 * @param array $list 样本
 * @return float
 */
function stdevp($list)
{
    // 样本数量
    $count = count($list);

    // 平均值
    $avg = array_sum($list) / $count;

    // 所有样本和平均值之间的差的平方和
    $sum = 0.0;
    foreach($list as $item) $sum += ($item - $avg) ** 2;

    // 根号(平方和 / 样本数)
    return sqrt($sum / $count);
}

测试运行

代码语言:javascript
复制
$list = [5,6,8,9];
var_dump(stdevp($list));

结果

代码语言:javascript
复制
float(1.5811388300842)

可以看出结果与维基百科中的示例相同,在Excel中测试stdevp函数也是相同的结果。

其实也不完全相同,因为小数长度不一致,但我相信结果是相对准确的。 如果想得到指定的小数长度,可以使用round()对结果四舍五入

MySQL

当然,实际开发中,我们大多数据都来自数据库,数据库有自带计算样本总体标准偏差的函数,顺便记录下 MySQL 的使用示例。 根据 uid 对数据进行分组,然后再根据 标准差 对经过进行从大到小排序。

代码语言:javascript
复制
SELECT `uid`, STDDEV_POP(score) `标准差`, AVG(score) `平均值` FROM `test` GROUP BY `uid` ORDER BY `标准差` DESC
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 公式
  • 封装成函数
  • 测试运行
  • MySQL
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档