我正在计算属于特定百分位数的数字。但是,我的等式的问题是,如果数组中的多个元素具有相同的值,则此代码将为每个元素分配不同的百分位数。
5-1
10-1
15-1
20-1
25-2
30-2
35-3
40-4
45-4
50-5
55-6
60-7
65-9
70-11
75-14
80-17
85-23
90-32
95-53
例如,第一列是百分位数,第二列是分数。你可以看到同一秒获得不同的百分位数,但事实上它应该是相同的。
我该如何避免这种情况?
source = NewsSource.objects.get(name=name)
html,screenshot = get_url(source.url)
save_screenshot(source,screenshot)
source.save()
答案 0 :(得分:0)
要计算第k百分位数,您应该:
(来自here)
转换为PHP:
$sData = sort($data);
$percentile = 50/100;
$index = ceil($percentile * count($sData));
$value = $sData[$index-1];
或更短:
$sData = sort($data);
$value = $sData[ceil((50/100) * count($sData)) - 1]
然而,在一个小数据集中,有时百分位数最终会相同。例如,以下代码生成以下输出。
<强>代码强>
$data = array(74, 15, 25, 62, 45, 9, 16, 63, 60, 76, 7, 20, 67, 30, 12);
sort($data);
for($i=5;$i<100;$i+=5){
echo $i . " - " . $data[ceil(($i/100) * count($data)) - 1];
echo PHP_EOL;
}
<强>输出强>
5 - 7
10 - 9
15 - 12
20 - 12 //same as aboce
25 - 15
30 - 16
35 - 20
40 - 20 //same as above
45 - 25
50 - 30
55 - 45
60 - 45 //same as above
65 - 60
70 - 62
75 - 63
80 - 63 //same as above
85 - 67
90 - 74
95 - 76