Excelの関数PercentileをJavaScriptで
多分、そのうち忘れてしまうと思うから今のうちに。
ExcelにPercentileという集合関数がある。
なにかっていうと、「100分率の順位を閾値に変換する」というもので、例えば「中間テストの結果で上位成績者5%は何点以上か?」ってな感じで割とよく使われるものらしい。
Percentile
ただ、Wikipediaの公式のままだとExcelのPercentileとはちょっと結果が異なるっぽい。
今の上司(自分より賢い人)が解決したのだが、0始まりの順位で考えないとうまくいかないようだ。
で、もってJavaScriptで表現するとこうなる。
[javascript]
function percentile(list, r) {
list.sort(function(a,b){return (parseInt(a) > parseInt(b)) ? 1 : -1;});
var len = list.length;
if (len == 1) {
return list[0];
}
var n = Math.floor(r * (len - 1)) + 1
var r1 = (n - 1) / (len - 1);
var v = (r - r1) * (list[n] - list[n - 1]) * (len - 1) + list[n - 1];
return v;
}
[/javascript]
なお、
CodeGen_MySQL_UDFでh-indexな集計関数
で試したみたいに、MySQLの集合関数も作ってみようと思ったのだけど、めんどくさくなったのでパス。