Python group-by归约:从多到少,数据处理过程中常做的一种归约需要先按照某个键值或者指标对数据进行分组。在SQL中,通常称之为SELECT GROUP BY
操作。原始数据按照某一列的值进行分组,然后对其他列的值进行归约(有时是累积)。SQL累积函数包括SUM
、COUNT
、MAX
和MIN
。
统计计算中的众数是对某个独立变量进行分组并计算其出现次数。首先用Python提供的方法对数据进行分组,然后对分组数据进行归约。下面先研究分组数据并计算频率的两种方法,再介绍如何求分组数据的其他特征值。
仍然使用前面的旅行数据,这些数据由一系列包含经纬度的路径点组成。已经将其转换为了一系列包含起点、终点和距离的路径段,如下所示:
(((37.5490162, -76.330295), (37.840832, -76.273834), 17.7246),
((37.840832, -76.273834), (38.331501, -76.459503), 30.7382),
((38.331501, -76.459503), (38.845501, -76.537331), 31.0756), ...
((38.330166, -76.458504), (38.976334, -76.473503), 38.8019))
可以通过有状态映射或者实例化的有序对象来计算一组数据值的众数。旅行数据中的值是连续的,为了计算众数,需要将距离数据量子化,也称分箱:将数据分组,放入不同的箱中。分箱技术在数据可视化应用中也很常用,这里以5海里为单位设置箱子的大小。
可以用下面的生成器表达式计算量子化的距离:
quantized = (5 * (dist // 5) for start, stop, dist in trip)
每个距离值除以5,丢掉余数,商再乘以5,就得到了以5海里取整后的距离值。