Histogrammar 组织语法中的范畴聚合

Histogrammar 组织语法中的范畴聚合,histogrammar,Histogrammar,这是SO的后续问题(Jim Pivarski根据私人电子邮件问题创建了此条目): 发件人: data = [{"item": 'ball', "qty": 3.0}, {"item": 'whistle', "qty": 2.0}, {"item": 'ball', "qty": 5.0}] 我想使用历史语法获得总和聚合,即: 下面是Jim在文章中提到的建议,我尝试: import histogrammar as hg data = [{"item": 'b

这是SO的后续问题(Jim Pivarski根据私人电子邮件问题创建了此条目):

发件人:

data = [{"item": 'ball', "qty": 3.0}, 
        {"item": 'whistle', "qty": 2.0}, 
        {"item": 'ball', "qty": 5.0}]
我想使用历史语法获得总和聚合,即:

下面是Jim在文章中提到的建议,我尝试:

import histogrammar as hg
data = [{"item": 'ball', "qty": 3.0}, {"item": 'whistle', "qty": 2.0}, {"item": 'ball', "qty": 5.0}]

h = hg.Categorize(quantity=lambda d: d.item, value=hg.Sum(lambda d: d.qty))
for datum in data:
   h.fill(datum)

 print h.toJson()
我得到:

AttributeError: 'dict' object has no attribute 'item'

这只是Python的一个问题:因为示例中的每个数据都有

{"item": X, "qty": Y}
访问它的方法是使用
d[“item”]
d[“qty”]
,而不是
d.item
d.qty

所以

导致

{"data": {"bins:type": "Sum", "bins": {"whistle": {"sum": 2.0, "entries": 1.0},
 "ball": {"sum": 8.0, "entries": 2.0}}, "entries": 3.0}, "version": "1.0",
 "type": "Categorize"}
如果更改数据的表示方式,则必须更改从每个
数据中提取数据的方式

顺便说一句,HistorogramPython有一个基于字符串的快捷方式,可以将字段提取为属性(正如您所尝试的)或项目(正如我前面所做的)。以下内容适用于任何一种数据:

h = hg.Categorize("item", hg.Sum("qty"))
如果
data
是一个包含1D Numpy数组的字典(或者相当于一个Numpy记录数组;我不记得里面是否也有Pandas钩子),那么这种基于字符串的方法也会起作用。在这种情况下,您可以完全按照上面的方式声明直方图,但要按如下方式填充:

h.fill.numpy(data)

不同的fill方法对字符串的解释不同。

但是SO似乎没有给我发电子邮件,告诉我这个标签,即使我设置了一个过滤器。我得调查一下。同时,如果我的回答不准确,我很抱歉!哦,我刚拿到。所以我应该通过电子邮件了解你是否用这个标签写了任何其他问题,尽管有延迟。
h = hg.Categorize("item", hg.Sum("qty"))
h.fill.numpy(data)