【问题标题】:look ahead time analysis in R (data mining algorithm)R中的前瞻时间分析(数据挖掘算法)
【发布时间】: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


【解决方案1】:

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

会是这样的:

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

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

【讨论】:

    【解决方案2】:

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

    至少,这是一个想法。更一般地说,从末尾搜索到 isOpen == 1 的最后一年可能会减少搜索量......

    当然,这一切都假设每条记录都在一行中。如果没有,也许是先融化?

    【讨论】:

      猜你喜欢
      • 2012-05-01
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 2013-01-10
      • 2016-04-04
      • 2019-04-24
      相关资源
      最近更新 更多