数据挖掘算法中的前瞻时间分析

2024-04-29 16:29:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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以外的任何语言编写代码。你知道吗

谢谢


Tags: 文件数据date标志记录账户快照两件事
2条回答

我建议使用Linux“date”命令将日期转换为unix时间戳。 Unix时间戳是自1970年1月1日以来经过的秒数。所以基本上一年是60秒,60米,24小时,256秒。所以,如果时间戳之间的差异大于这个数字,那么它就长于一年。你知道吗

它将是这样的:

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

因此,如果您使用perl,这是一种非常酷的文件处理语言,您将用几行代码解析整个文件,并使用eval“you date command”。你知道吗

如果给定记录的所有快照都显示在一行中,并且在同一时间段内打开的记录具有相同的长度(即,快照是以固定的间隔拍摄的),则一种可能是基于行长度进行过滤。如果最长的开放行是长度N,一年的记录是M,那么你知道一个N-M行是开放的,最长的,比最长的少一年。。。这种方法不能处理快照不断添加的情况,尽管open flags设置为0,但是它可能允许您通过至少减少每行需要进行的搜索的数量来减少搜索的数量?你知道吗

至少,这是个主意。更一般地说,从最后一年搜索isOpen==1的位置可能会减少搜索量。。。你知道吗

当然,这都假设每条记录在一行中。如果不是的话,也许应该先融化一下?你知道吗

相关问题 更多 >