【发布时间】:2012-03-26 07:10:44
【问题描述】:
我正在用 Python 编写一个 ETL 脚本,它获取 CSV 文件中的数据、验证和清理数据以及根据一些规则对每一行进行分类或分类,最后将其加载到 postgresql 数据库中。
数据看起来像这样(简化):
ColA, ColB, 时间戳, 时间戳, Journaltext, AmountA, AmountB每一行都是一笔金融交易。 我想做的是根据一些规则对交易进行分类或分类。 规则基本上是与 Journaltext 列中的文本匹配的正则表达式。
所以我想做的是这样的:
交易 = [] 对于行中的行: t = 交易(类别=分类(row.journaltext)) 交易.追加(t)我不确定如何有效地编写classify()函数。
这是分类规则的工作原理:
- 有许多类别(可以添加更多类别,以后还会添加)
- 每个类别都有一组子字符串或正则表达式,如果交易的 Journaltext 匹配此表达式或包含此子字符串,则此交易属于此类别。
- 一笔交易只能属于一个类别
- 如果一个类别 FOO 具有子字符串 'foo' 和 'Foo',而另一个类别 BAR 具有子字符串 'football',则必须将 Journaltext='food' 的交易放入类别 FOO,因为它只匹配 FOO ,但 Journaltext='footballs' 的交易必须放在 BAR 类别中。我认为这意味着我必须优先考虑每个类别或类似的类别。
- 如果事务与任何表达式都不匹配,则它要么在类别中为 None,要么将被放入名为“UNKNOWN”或类似的占位符类别中。这无关紧要。
好的。那么我该如何在Python中表示这些类别和对应的规则呢?
非常感谢您的意见。即使您无法提供完整的解决方案。任何能提示我正确方向的东西都会很棒。谢谢。
【问题讨论】:
-
您的输入有多大(类别数量、每个类别的术语、交易数量和文本的平均大小)?
标签: python regex data-warehouse etl classification