【发布时间】:2015-09-05 12:45:53
【问题描述】:
我有一个文件(数十列和数百万行),基本上看起来像这样:
customerID VARCHAR(11)
accountID VARCHAR(11)
snapshotDate Date
isOpen Boolean
...
文件中的一条记录可能如下所示:
1,100,200901,1,...
1,100,200902,1,...
1,100,200903,1,...
1,100,200904,1,...
1,100,200905,1,...
1,100,200906,1,...
...
1,100,201504,1,...
1,100,201505,1,...
1,100,201506,1,...
关闭帐户后,可能会发生两件事。通常,数据中不会存在该记录的更多快照。有时,会继续添加更多记录,但 isOpen 标志将设置为 0。
我想添加一个名为“closedInYr”的额外布尔列,其值为 0,除非帐户在快照日期后一年内关闭。
我的解决方案缓慢而粗暴。它获取每条记录,按时间向前计数 12 个月,如果找到具有相同 customerID、accountID 和 isOpen 设置为 1 的记录,则在“closedInYr”字段中使用 0 填充该记录,否则填充该字段带有 1。它可以工作,但性能无法接受,而且我们有许多此类文件要处理。
关于如何实现这一点的任何想法?我使用 R,但我愿意用 Perl、Python 或几乎任何东西(除了 COBOL 或 VB)编写代码。
谢谢
【问题讨论】:
-
一个可重复的例子将提高找到解决方案的机会。
-
Python 可能是你最好的选择,因为我觉得它更有效,尤其是在数据挖掘方面。此外,可重复的数据是一个优势。
-
比您建议的更简单的解决方案是添加一个包含帐户关闭年份的列。然后你可以做一个简单的逐行操作来确定 ClosedInYr
-
“比您建议的更简单的解决方案是添加一个包含帐户关闭年份的列。”是的,问题是我不知道帐户关闭的年份,我只知道该帐户不再出现在文件中。你如何寻找不存在的东西?此外,要求还提供了添加布尔季度和月份列以及年份列,因此我需要一个适用于任意时间段的通用解决方案。
-
:一个可重复的示例将提高找到解决方案的机会。“我明白了。我不是在寻找解决方案,而是在寻找算法。我的文件不适合内存,所以我想要一种方法,一次最多只需要加载 12 条记录。
标签: python r perl machine-learning data-analysis