Javascript:使用reduce()将频率转换为百分比?

时间:2017-04-24 22:27:35

标签: javascript reduce

我的代码中的一个函数接受一个数字数组,并将这些数字的第一个数字和它们出现在数组中的次数放入映射中。例如,对于

的数组
[1539, 1390, 1023, 2642, 3912, 7419, 7129, 9520, 2239]

生成的地图将是

{"1" => 3, "2" => 2, "3" => 1, "7" => 2, "9" => 1}

对于我现在正在处理的功能,我必须获取生成的地图并将其转换为具有百分比的地图。但问题是,我必须使用 reduce()和map()函数。

到目前为止,我只知道如何实际计算物理频率,就像我之前所做的那样,但我不知道如何使用reduce()将它们全部转换为百分比。到目前为止,这是我的代码:

function toPercentages(benfordMap) {
    let keys = [ ...benfordMap.keys()];
    let values = [ ...benfordMap.values()];

values.reduce(
    (acc, currVal) => {
    // do something
  })

    return values;
}

我有一个一般想法,我觉得我可以使用我用来计算频率的代码,但我不知道如何合并语法。我的频率代码如下:

function freqs(items) {
var Frequencies = new Map();
items.reduce(
    (acc, currVal) => (
        acc[currVal] = ++acc[currVal] || 1, acc
    ),
    {}
  );

for (var x in items){
    Frequencies.set(x, items[x]);
}

return Frequencies;
}

我对Javascript过于陌生,所以我不确切知道reduce()函数的确切位置,我会添加百分比计算代码。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:3)

我不确定,我理解正确,但无论如何检查下面的代码:

import pandas as pd
import matplotlib.pyplot as plt

s = pd.Series(
    [8, 24, 21, 23, 24],
    index = ["Your Plan", "Benchmark", "Region", "Industry", "Size"]
)

#Set descriptions:
plt.title("INSERT TITLE HERE, PLEASE")
plt.ylabel('Percentage of EEs Waiving')

#Set tick colors:
ax = plt.gca()
ax.tick_params(axis='x', colors='black')
ax.tick_params(axis='y', colors='black')

#Plot the data:
my_colors = ['#ffc000','#305496', '#8ea9db', '#b4c6e7', '#D9E1F2']  #red, green, blue, black, etc.

s.plot(
    kind="bar",
    color=my_colors,
)

# Rotate the desired axis (or undo the rotation)
ax.set_xticklabels(ax.xaxis.get_majorticklabels(), rotation=0)

# Set the Y Axis Limits
ax.set_ylim([0,100])

#Adds data labels to top of bars
for p in ax.patches[1:]:
    h = p.get_height()
    x = p.get_x()+p.get_width()/2.
    if h != 0:
        ax.annotate("%g" % p.get_height()+'%', xy=(x,h), xytext=(0,8), rotation=0,
                    textcoords="offset points", ha="center", va="bottom")

plt.show()
plt.savefig("PlanOffered.png")