【问题标题】:Probability of consecutive occurrences of characters字符连续出现的概率
【发布时间】:2014-09-29 00:32:52
【问题描述】:

我有一个如下文本文件。

A,B,C,D,E
A,B,C
A,B,C,E
C,D,E
C,D,E,B,A

我需要找出字符连续出现的概率。在这种情况下,B 发生在 A 之后的概率

B occurring after A(A->B) = (No of time B occurring after A)/(No of times A occurs)

所以概率是

3/4 = 0.75

同样,我需要计算所有成对概率。

A->B
B->A
A->C
C->A
A->D ...etc.

我不知道如何开始实施这个东西?使用 pandas DataFrmae 也可以。有什么帮助吗?

【问题讨论】:

  • 你有没有尝试过?您知道如何计算它,因此请显示您尝试过的代码并具体说明哪里出错了
  • @EdChum :你能建议如何找到这个连续出现的地方吗?所以我可以实现其余的。
  • 你怎么解释这里的连续?这是按行还是按列,在您的示例中,您说 A 概率为 3/4,但我看不到 B 之后的连续 A,除非您的意思是按列,但这意味着 2 而不是 3。您的意思是在特定字母(在本例中为 B)之后的特定 A 实例之后的 A 计数,这是有道理的,如果是这样,请更新您的帖子
  • @EdChum:我已经更新,B 出现在 A 之后,按行排列?

标签: python string pandas


【解决方案1】:

蛮力:

from collections import defaultdict

data = [['A','B','C','D','E'],
        ['A','B','C'],
        ['A','B','C','E'],
        ['C','D','E'],
        ['C','D','E','B','A']]
characters = [i for j in data for i in j]
counts = {}
combinations = defaultdict(int)
for character in set(characters):
    counts[character] = characters.count(character)
    for character2 in set(characters):
        for entry in data:
            combination = [character, character2]
            if "".join(combination) in "".join(entry):
                combinations[tuple(combination)] += 1
probability = {i: combinations[i]/float(counts[i[0]]) for i in combinations}
probability

{('A', 'B'): 0.75,
  ('B', 'A'): 0.25,
  ('B', 'C'): 0.75,
  ('C', 'D'): 0.6,
  ('C', 'E'): 0.2,
  ('D', 'E'): 1.0,
  ('E', 'B'): 0.25}

【讨论】:

  • 非常感谢Serbitar!这很有意义。
猜你喜欢
  • 2021-03-10
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
  • 1970-01-01
  • 2015-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多