0

我试图计算词典中的累积分布。分布应该采用给定文本中的字母,并根据它们在文本中出现的时间找出概率,并从中计算累积分布。 我不知道如果我做正确的方式,但这里是我的代码:词典中的累积分布

with open('text') as infile: 
text = infile.read() 

letters = list(text) 
letter_freqs = Counter(letters(text)) 
letter_sum = len(letters) 
letter_proba = [letter_freqs[letter]/letter_sum for letter in letters(text)] 

现在我wan't计算累积分布,并绘制它像一个柱状图,可以有人帮我?

+0

退房[SciPy的(HTTP:// EN。 wikipedia.org/wiki/SciPy)。 [Here](http://docs.scipy.org/doc/scipy-0.14.0/reference/index.html)是API参考的链接。 –

+0

@NoobSaibot这是什么? –

+0

'字母(文本)'的用法被破坏('字母'是一个'列表',**不可**,但你试图调用它)。而且,**你想要累积什么**序列? '信'本身? '排序(集(字母))'? 'itertools.accumulate'可以做积累,当然 - 但作为一个序列,并且“绘制词典”似乎很奇怪,因为字典没有秩序... –

回答

1

至少应该运行以下(张贴你的代码不会):

import collections, itertools 

with open('text') as infile: 
    letters = list(infile.read()) # not just letters: whitespace & punct, too 
    letter_freqs = collections.Counter(letters) 
    letter_sum = len(letters) 
    letters_set = sorted(set(letters)) 
    d = {l: letter_freqs[letter]/letter_sum for l in letters_set} 
    cum = itertools.accumulate(d[l] for l in letters_set) 
    cum_d = dict(zip(letters_set, cum) 

现在你在cum_d有一个字典映射每个字符,而不是当然的字母,因为你做了什么排除空格和标点符号,以及字符顺序中该字符及其下方所有字符的累积概率。你打算如何“绘制”字典,不知道。但是,嘿,至少这确实运行,并产生东西可能适合你给任务的模糊规范的至少一种解释 - )

+0

谢谢@亚马逊我会尝试这个。我不知道我打算如何绘制一本字典......我在python上是新手,所以我做了一些失败。 –

+0

@ py.codan你应该看看matplotlib。这是一个绘图的python库。它可以生成直方图。 –