R中的预测时间分析(数据挖掘算法)

时间:2015-06-19 13:44:46

标签: python r perl machine-learning data-analysis

我有一个文件(数十列和数百万行),基本上是这样的:

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,否则会填充该字段它有效,但性能不可接受,我们有很多这类文件需要处理。

关于如何实现这一点的任何想法?我使用R,但我愿意用Perl,Python或几乎任何东西编写代码,除了COBOL或VB。

由于

2 个答案:

答案 0 :(得分:0)

我建议使用Linux" date"命令将日期转换为unix时间戳。 Unix时间戳是自1970年1月1日以来经过的秒数。所以基本上一年是60s * 60m * 24h * 256d秒。因此,如果时间戳之间的差异超过这个数字,则它超过一年。

会是这样的:

>date --date='201106' "+%s"
1604642400

因此,如果您使用perl,这是一种非常酷的文件处理语言,您将在几行中解析整个文件并使用 eval"您的日期命令"

答案 1 :(得分:0)

如果给定记录的所有快照都出现在一行中,并且在相同时间段内打开的记录具有相同的长度(即,定期拍摄快照),那么一种可能性可能是基于过滤的在行长度。如果最长的开放行是N长度并且一年的记录是M,那么您知道NM行是开放的,最长,比最长的一年......这种方法不能处理快照不断添加的情况虽然打开标志设置为0,但它可能允许您通过至少减少每行需要进行的搜索次数来减少搜索次数?

至少,这是一个想法。更一般地说,从最后搜索到找到isOpen == 1的最后一年可能会缩小搜索范围......

当然,这一切都假设每条记录都在一行中。如果没有,可能首先是熔化?