scoreTable = {
const scores = [...new Set(allData.map((d) => d.分数))].sort().reverse(),
table = scores.map((score) => {
return {
score,
num: d3.sum(
allData.filter((d) => d.分数 === score),
(d) => d.本段人数
)
};
}),
variance = d3.variance(allData, (d) => d.ratioInCity),
degreeOfFreedom = cities.length - 1;
table.map((d, i) => {
const select = allData.filter((e) => e.分数 === d.score);
Object.assign(d, {
accumulate: d3.sum(table.slice(0, i + 1), (e) => e.num),
accumulateRatio:
d3.sum(table.slice(0, i + 1), (e) => e.num) /
d3.sum(table, (d) => d.num),
std: Math.sqrt(d3.variance(select, (e) => e.本段人数)),
stdRatio: Math.sqrt(d3.variance(select, (e) => e.ratioInCity)),
x2Factor:
(d3.variance(select, (e) => e.ratioInCity) / variance) *
degreeOfFreedom,
haidianRatio:
allData.find((e) => (e.city === "海淀区") & (e.分数 === d.score))
.本段人数 / d.num,
top4Ratio:
d3.sum(
allData.filter(
(e) =>
(["东城区", "海淀区", "朝阳区", "西城区"].indexOf(e.city) > -1) &
(e.分数 === d.score)
),
(d) => d.本段人数
) / d.num
});
});
return table;
}