这是SO Two-dimensional aggregation in Histogrammar的后续问题(Jim从一个私人电子邮件问题中创建了这个条目):
发自:
data = [{"item": 'ball', "qty": 3.0},
{"item": 'whistle', "qty": 2.0},
{"item": 'ball', "qty": 5.0}]我希望使用组织语法获得和聚合,即
ball: 8.0
whistle: 20按照http://histogrammar.org/docs/tutorials/python-numpy/#histogrammar-in-numpy和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'发布于 2016-11-29 16:11:40
这只是Python的一个问题:因为示例中的每个数据都有以下形式
{"item": X, "qty": Y}访问它的方法是使用d["item"]和d["qty"],而不是使用d.item和d.qty。
所以
h = hg.Categorize(quantity=lambda d: d["item"], value=hg.Sum(lambda d: d["qty"]))
for datum in data:
h.fill(datum)
print h.toJsonString()结果:
{"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"}如果您更改了表示数据的方式,则必须更改从每个datum中提取数据的方式。
顺便提一句,组织语法-Python有一个基于字符串的快捷方式,它将字段提取为属性(正如您试图做的那样)或作为项(正如我前面所做的)。以下两种数据都适用于这两种数据:
h = hg.Categorize("item", hg.Sum("qty"))如果data是一维Numpy数组的字典(或者相当于Numpy记录数组;我不记得那里是否也有Pandas钩子),这个基于字符串的方法也能工作。在这种情况下,您将声明直方图完全如上,但填写如下:
h.fill.numpy(data)不同的填充方法对字符串的解释不同。
https://stackoverflow.com/questions/40870369
复制相似问题