计算记录中的百分比

我试图在我的一个直方图中计算并绘制百分比(%)。

我已经阅读了关于reduce函数的API和多个示例(添加,删除和初始化等),我将其称为1st和2nd代码。

我想计算衰减百分比(sum(decay_data)/ sum(all_data); decay_data在数据中由“decay_ind == 1”定义)

由于某些问题,我仍然没有收到图中的任何内容,但也使用了值存取器,但可能存在一些问题。

在代码中,请仅查看“percentgroup”和“datedimension”,其他则用于单独的图表。

我的代码到目前为止:

 var chart = dc.pieChart("#test");
var chart2 = dc.barChart("#test2");
var chart3 = dc.barChart("#test3");

  console.log(data[0]);
  //Filtering only target population
  data = data.filter(function (d) { return d.target_ind == "1"; });

  var ndx  = crossfilter(data);


  bucketDimension  = ndx.dimension(function(d) {return "Bucket : " +d.decay_bucket;});
  speedSumGroup = bucketDimension.group().reduceSum( function(d) { return d.Count ;});

  dateDimension  = ndx.dimension(function(d) {return d.duration ;});
  rechGroup = dateDimension.group().reduceSum ( function(d) { return d.recharge_revenue ;});

    var percentGroup = dateDimension.group().reduce(
        //add
        function(p, v) {
            ++p.count;
            p.decay += (v.decay_ind === '1' ? p.recharge_revenue : 0);
            p.total += p.recharge_revenue;
            p.percent = p.count ? p.decay/p.total : 0;
            return p;
        },
        function(p, v) {
            --p.count;
            p.decay -= (v.decay_ind === '1' ? p.recharge_revenue : 0);
            p.total -= p.recharge_revenue;
            p.percent = p.count ? p.decay/p.total : 0;
            return p;
        },
        function() {
            return {
                count: 0,
                decay : 0,
                total : 0,
                percent : 0

            };
        }
        );


        chart3
        .width(768)
        .height(480)
        .x(d3.scale.ordinal())
        .xUnits(dc.units.ordinal)
        //.brushOn(false)
        .yAxisLabel("Decay %")
        .dimension(dateDimension)
        //.group(decayGroup)

        .on('renderlet', function(chart) {
            chart.selectAll('rect').on("click", function(d) {
                console.log("click!", d);
            });
        });


      chart3.valueAccessor(function (p) {
        return p.value.percent;
        })
        .group(percentGroup);

我在这里错过了什么? 任何方法/建议都会非常有帮助。

UPDATE

好吧,我已经纠正了一些错误,现在只是试图让总和更好地理解这些功能,并在控制台中看到它们。 还在持续时间维度中添加了所有值。

我正在总结一个名为“Recharge revenue”的变量,在控制台中 - add函数给了我,随机/垃圾值。 删除功能给我无限。

我的新代码:

var percentGroup = dateDimension.group().reduce(
    //add
    function(p, v) {
        ++p.count;
        p.total += v.recharge_revenue;
        //p.percent = p.count ? p.decay/p.total : 0;
        console.log(p.total);
        return p;
    },
    //remove
    function(p, v) {
        --p.count;
        p.total -= v.recharge_revenue;
        return p;
    },
    //init
    function() {
        return {
            count: 0,
            total : 0,

        };
    }
    );

chart3
    .width(768)
    .height(480)
    .x(d3.scale.ordinal())
    .xUnits(dc.units.ordinal)
    //.brushOn(false)
    .yAxisLabel("Decay %")
    .dimension(dateDimension)
    .valueAccessor(function (p) {
    return p.value.total;
     })
    .group(percentGroup)
    .on('renderlet', function(chart) {
        chart.selectAll('rect').on("click", function(d) {
            console.log("click!", d);
        });
    });

由于显而易见的原因,图表仍为空(控制台显示)

请帮我解决这个问题,我在这里找不到问题。 一旦完成,我想要计算百分比。

另一个警告:我在我的数据集(csv)中有一列“计数”,是否有任何可能导致问题? (改成另一个名字,仍然不工作)

基本上,唯一的工作是图表,如果我使用任何总和,平均,我得到随机值和图形图。

任何建议/反馈将是最受欢迎的。

更新2:

这是小提琴

数据集有两个桶和两个持续时间

它显示了总数和平均值的垃圾/随机值。 请帮我解决这个问题。


这些数字是字符串格式,必须被解析为整数才能读取它们的函数,这些值是连接它们的垃圾。

解答代码:

function(p, v) {
        ++p.count;
        p.total += parseInt(v.recharge_revenue);
        //p.percent = p.count ? p.decay/p.total : 0;
        console.log(p.total);
        return p;
    },
    //remove
    function(p, v) {
        --p.count;
        p.total -= parseInt(v.recharge_revenue);
        return p;
    }
链接地址: http://www.djcxy.com/p/32755.html

上一篇: calculating percentage within records

下一篇: Double Dimensions (second value linked to daily max)