php 获取数组四分位,如何在JavaScript(或PHP)中获得数组的中位数和四分位数/百分位数?...

This question is turned into a Q&A, because I had struggle finding the answer, and think it can be useful for others

我有一个JavaScript数组值,需要在JavaScript中计算它的Q2(第50百分位数,即MEDIAN),Q1(第25百分位数)和第3百分位数(第75百分位数).

L4GEM.png

解决方法:

在搜索了很长时间后,找到了不同的版本,给出了不同的结果,我在Bastian Pöttner’s web blog上找到了这个不错的代码段,但对于PHP.对于相同的价格,我们得到数据的平均值和标准差(对于正态分布)……

PHP版本

//from https://blog.poettner.de/2011/06/09/simple-statistics-with-php/

function Median($Array) {

return Quartile_50($Array);

}

function Quartile_25($Array) {

return Quartile($Array, 0.25);

}

function Quartile_50($Array) {

return Quartile($Array, 0.5);

}

function Quartile_75($Array) {

return Quartile($Array, 0.75);

}

function Quartile($Array, $Quartile) {

sort($Array);

$pos = (count($Array) - 1) * $Quartile;

$base = floor($pos);

$rest = $pos - $base;

if( isset($Array[$base+1]) ) {

return $Array[$base] + $rest * ($Array[$base+1] - $Array[$base]);

} else {

return $Array[$base];

}

}

function Average($Array) {

return array_sum($Array) / count($Array);

}

function StdDev($Array) {

if( count($Array) < 2 ) {

return;

}

$avg = Average($Array);

$sum = 0;

foreach($Array as $value) {

$sum += pow($value - $avg, 2);

}

return sqrt((1 / (count($Array) - 1)) * $sum);

}

基于作者的评论,我只是写了一个肯定会有用的JavaScript翻译,因为令人惊讶的是,几乎不可能在网上找到一个等价的JavaScript,否则需要像Math.js这样的其他库.

JavaScript版本

//adapted from https://blog.poettner.de/2011/06/09/simple-statistics-with-php/

function Median(data) {

return Quartile_50(data);

}

function Quartile_25(data) {

return Quartile(data, 0.25);

}

function Quartile_50(data) {

return Quartile(data, 0.5);

}

function Quartile_75(data) {

return Quartile(data, 0.75);

}

function Quartile(data, q) {

data=Array_Sort_Numbers(data);

var pos = ((data.length) - 1) * q;

var base = Math.floor(pos);

var rest = pos - base;

if( (data[base+1]!==undefined) ) {

return data[base] + rest * (data[base+1] - data[base]);

} else {

return data[base];

}

}

function Array_Sort_Numbers(inputarray){

return inputarray.sort(function(a, b) {

return a - b;

});

}

function Array_Sum(t){

return t.reduce(function(a, b) { return a + b; }, 0);

}

function Array_Average(data) {

return Array_Sum(data) / data.length;

}

function Array_Stdev(tab){

var i,j,total = 0, mean = 0, diffSqredArr = [];

for(i=0;i

total+=tab[i];

}

mean = total/tab.length;

for(j=0;j

diffSqredArr.push(Math.pow((tab[j]-mean),2));

}

return (Math.sqrt(diffSqredArr.reduce(function(firstEl, nextEl){

return firstEl + nextEl;

})/tab.length));

}

标签:php,javascript,statistics,median,percentile

来源: https://codeday.me/bug/20190622/1263040.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值