【发布时间】:2014-06-28 16:48:42
【问题描述】:
我有一堆(数百万)小型实验的日志。
每个日志都包含一个条目列表(数十到数百个)。每个条目是一个时间戳和一个事件 ID(有数千个事件 ID,每个可能在日志中出现多次):
1403973044 阿尔法 1403973045 测试版 1403973070 伽玛 1403973070 阿尔法 1403973098 三角洲我知道一个事件以后可能会触发其他事件。
我正在研究这个数据集。我正在寻找在实验中经常发生的“稳定”事件序列。
有没有一种方法可以在不编写太多代码且不使用专有软件的情况下做到这一点?该解决方案应该具有足够的可扩展性,并且适用于大型数据集。
我认为这项任务类似于生物信息学的工作——在 DNA 中寻找序列等。只有我的任务在一个字母表中包含四个以上的字母......(更新,感谢@JayInNyc:蛋白质组学处理比我更大的字母表。)
(注意,顺便说一句,我事先不知道我想要我的序列有多稳定和相似,最小序列长度是多少等。我正在研究数据集,并且必须在旅途中弄清楚这一点。)
无论如何,对我可以使用的方法/工具/库有什么建议吗?
更新:对cmets中问题的一些回答:
稳定的序列:在实验中经常发现。 (多久才够?还不知道。看来我需要计算链的顶部,并丢弃最稀有的。)
相似序列: 看起来相似的序列。 “在你看来,序列‘A B C D E’和‘A B C E D’(序列的微小差异)是否相似?在你看来,序列‘A B C D E’和‘A B C 1 D E’(选定事件的发生顺序相同)是否也相似? " ——两个问题都是。更剧烈的突变可能也可以。同样,我希望能够计算一个顶部并丢弃最不相似的......
时间安排: 我现在可以放弃时间安排信息(但不是订单)。但是如果把它放在相似度指数公式中会很酷。
更新 2:预期输出。
最后,我想对最受欢迎的最长稳定链进行评级。所有三个因素的组合都会对评分的计算产生影响。
显然,这种评级中的链条是一组足够相似的链条。
链簇的合成示例:
α 测试版 伽玛 [垃圾] [垃圾] 三角洲另一个:
α 测试版 伽马|zeta|ε 三角洲(或者我现在没有想到的任何变体。)
所以,最终输出会是这样的(在这个例子中数字是完全随机的):
链簇ID |发现时间 |时间刺。因素 |链刺。因素 |长度 |分数 一个 | 12345 | 123 | 3 | 5 | 100000 乙| 54321 | 12 | 30 | 3 | 700000【问题讨论】:
-
我事先不知道我想要的序列有多稳定和相似 - 稳定是什么意思?两个序列是否相似,即使它们不相同?
-
在决定它们是否相似时,只有事件的顺序很重要,还是它们之间的时间也很重要?根据您的说法,序列“A B C D E”和“A B C E D”(序列上的微小差异)是否相似?根据您的说法,序列“A B C D E”和“A B C 1 D E”(所选事件的发生顺序相同)是否也相似?如果您现在不知道,您是否仍然认为您可能想在以后确定这些序列是相似的?
-
许多压缩算法的作用基本相同:寻找重复模式,它们越长,越频繁,越好 - 因为用代表它们的令牌替换它们会产生更好的节省。因此,我将研究常见的开源压缩,并让我从那些构建和检查模式树的代码部分中获得灵感。
-
@Bushmills 压缩算法如果受资源限制,有权丢弃序列信息……我宁愿保留我能做的一切。
-
@AlexanderGladysh 感谢您的更新!我只是想让这个问题更客观地回答。
标签: linux data-analysis sequencing