【问题标题】:Column averages not calculating correctly from Python Panda to crossfilter从 Python Panda 到交叉过滤器的列平均值计算不正确
【发布时间】:2014-09-06 10:34:30
【问题描述】:

我希望你能原谅我……我的标题可能有点误导。列计算正确...但不是我希望的方式。

我所拥有的是 10 年前一个城市的每小时天气测量值(温度、降水等)。然后,我创建了一个数据框,将每个指标的平均值添加为每个小时的自己的列。

然后将该数据集输入到 dc.js 中,我根据需要汇总不同图表。

除了precipitation(以英寸为单位)之外,一切都很好。简单地取每小时平均值是没有意义的……我需要总和,然后是平均值……但是我每次汇总时都需要处理这种情况吗? (月、年等)

我有点不知道该怎么做。下面是我的 ipython 笔记本的链接,其中包含我的简短代码和注释代码。非常感谢任何帮助

http://nbviewer.ipython.org/gist/Luiz-N/96477b1e327169d010c6

【问题讨论】:

  • 你是什么意思“我需要总和,然后是平均值”。例如,我很困惑 2009 年的平均值是什么意思。是 2009 年“每天”的平均降雨量吗?
  • 对,这就是问题所在......(参考我的图表的链接)我希望它们分别是每年、每月、每月和每小时的平均总降水量。问题是您无法像使用其他天气指标那样计算降水水平...我认为这些图表目前显示的是每个维度(年、月、小时)的平均每小时.. 对不起,如果我不够清楚,这样更有意义吗?
  • @DJMartin 这是我的 mapReduce 平均函数:(我传入维度和我想要平均的列的名称)编辑:(那个 coffescript 渲染得不好......这是一个link到函数
  • 我想我的困惑是如何才能获得一年的平均年降水量。如果 2009 年的总降水量为 20 英寸,那么“2009 年平均年降水量”将为 20 英寸。这是一年的“每年”计算。
  • 啊,是的,谢谢@DJMartin,这是一个很好的观点。因此,如果我想显示一年、一个月或一小时的实际沉淀,它只是相应维度的 reduceSum。但我需要的是能够在每个维度的平均值旁边显示这些数字......(6 月的实际降水水平仅次于 6 月的平均值......等)对于我的其他指标,我只能在每小时平均值的盘中添加一列并根据需要汇总...

标签: python pandas ipython dc.js crossfilter


【解决方案1】:

啊,你的 cmets 的最新图片现在有意义了。

如果此图表是独立的(意味着它不需要反映其他过滤器),您可以尝试预处理每月平均值,然后将该平均值添加到您的组总和中。

    function reduceAdd(p, v) {
      p.average = monthlyPrecip(v.month);
      p.actual += v.precip;
      return p;
    }

    function reduceRemove(p, v) {
      p.actual -= v.precip;
      return p;

    }

    function reduceInitial() {
      return {actual: 0, average: 0};  
    }

从那里,您可以用两个数据点构建一个复合图表。

这听起来像你要找的吗?

【讨论】:

  • 是的,我们在这里取得了进展......我已经有一个列,其中包含整个 precip 数据集的每个小时的平均值......所以我刚刚做的是:firstChartGroup = monthStamp.group().reduceSum (d) -> d.Precip <br/> secondChartGroup = monthStamp.group().reduceSum (d) -> d.Precip_avg其中monthstamp 是在第一次数据加载时计算的d3.time.month(d.date)。
  • 抱歉,我没有完成最后一条评论...monthstamp 是通过在第一次数据加载时添加列 d3.time.month(d.date) 创建的时间维度。然后我使用这两个不同的chartGroups来构建复合图表并得到more reasonable looking numbers....如果图表不是独立的,我的方法会不起作用吗..?
  • 不确定您是如何获得 precip_avg 的。似乎这可能是一个静态数字(或在开始时计算一次)。 precip_avg 似乎不是从交叉过滤器当前选择的行中计算出来的。这意味着如果您应用过滤器(可能查看过去 5 年),您的 precip_avg 不会改变(与历史平均值相比)。
  • 所以每一行都是一小时记录的天气数据...在将数据加载到交叉过滤器之前,我计算了每个小时的每个指标的平均值...例如 2009 年 1 月 1 日的原始记录at 2pm 有一列用于表示该小时的降水水平,而 previp_avg 列是我的数据集中所有年份的所有 1 月 1 日下午 2 点降水水平的平均降水水平......但你是对的......如果过滤器是仅适用于过去 5 年,那么用于比较的平均计算将仅使用过去 5 年而不是整个数据集...
  • 听起来你在正确的轨道上。创建两个组是一个好方法。由于您的 precip_avg 以“所有年份中所有 1 月 1 日下午 2 点的平均降水水平”开始,因此当您应用其他过滤器时,该平均值不会改变。如果您查看过去 50 年或过去 5 年,平均值将是相同的。这可能是可取的,也可能不是。
猜你喜欢
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 2018-10-02
  • 1970-01-01
相关资源
最近更新 更多