赞
踩
Python - Toolz - 流式分析(Streaming Analytics)工具
21 August 2014
Toolz 可以用于编写分析大型数据流脚本,它支持通用的分析模式,如通过纯函数来对数据进行筛选(Selection),分组(Grouping),化简(Reduction)以及连表(Joining)。这些函数通常可以模拟类似其他数据分析平台(如 SQL 和 Panda)的类似操作行为。
我将使用下面简单的数据集作为演示数据,贯穿全文
>>> # id, name, balance, gender
>>> accounts = [(1, 'Alice', 100, 'F'),
... (2, 'Bob', 200, 'M'),
... (3, 'Charlie', 150, 'M'),
... (4, 'Dennis', 50, 'M'),
... (5, 'Edith', 300, 'F')]
使用 Map 和 Filter 来筛选数据
通过标准函数 map 和 filter 能够完成对列表简单的映射和筛选
SELECT name, balance
FROM accounts
WHERE balance > 150;
下面的函数能够满足 SQL 的 SELECT 和 WHERE 需求
>>> from toolz.curried import pipe, map, filter, get
>>> pipe(accounts, filter(lambda (id, name, balance, gender): balance > 150),
... map(get([1, 2])),
... list)
它使用了 map 和 reduce 的加里化(curried)版本。
当然,这些操作也能很好的支持标准的列表(List)和生成器(Generator)的组合语法。这个语法会经常被使用,并通常被认为非常的 Pythonic
>>> [(name, balance) for (id, name, balance, gender) in accounts
... if balance > 150]
使用 groupby 和 reduceby 完成 Split-apply-combine
我们把 Split-apply-combine 拆分成下面两个概念:
根据一些特征将数据拆分到不同组中
使用聚合函数对每一个分组进行化简
Toolz 支持这种工作流:
简单的内存计算方案
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。