Python 字典中的累积分布

Python 字典中的累积分布,python,dictionary,histogram,cumulative-sum,cumulative-frequency,Python,Dictionary,Histogram,Cumulative Sum,Cumulative Frequency,我正试图计算字典中的累积分布。分布应该从给定的文本中提取字母,并找出它们在文本中出现的时间的概率,并由此计算累积分布。 我不知道我的方法是否正确,但以下是我的代码: with open('text') as infile: text = infile.read() letters = list(text) letter_freqs = Counter(letters(text)) letter_sum = len(letters) letter_proba = [letter_freqs[l

我正试图计算字典中的累积分布。分布应该从给定的文本中提取字母,并找出它们在文本中出现的时间的概率,并由此计算累积分布。 我不知道我的方法是否正确,但以下是我的代码:

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)]

现在我不想计算累积分布,并将其绘制成直方图,有人能帮我吗?

至少应该运行以下命令(您发布的代码不会运行):


现在,在
cum_d
中有一个字典,它将每个字符(当然不仅仅是字母)映射到该字符及其以下所有字符的累积概率(按字母顺序排列),因为没有排除空格和标点符号。不知道你打算如何“设计”一本字典。但是,嘿,至少这个确实运行了,并且产生了一些可能至少符合您为任务提供的模糊规格的一种解释的东西

退房。”这是指向API引用的链接。@NoobSaibot这是什么?
字母(文本)
的用法已中断(
字母
是一个
列表,不可调用,但您正在尝试调用它)。那么,你想按什么顺序累积呢<代码>字母
本身<代码>已排序(集合(字母))<当然,code>itertools.accumulate可以进行累加,但作为一个序列,“绘制字典”似乎很奇怪,因为字典没有顺序……在我的情况下,最好怎么做@AlexMartelli。你能给我一个代码的例子吗?@py.codan,当然,请看我的答案。如果编辑Q以精确地指定问题,则答案可以相应地更改。至于绘制,请参见,例如——但它不会“绘制字典”(?!),它当然会绘制一个以序列形式显示的直方图(字典没有顺序,所以您将如何绘制它?!)谢谢@Alex,我要试试这个。我不知道我打算怎么编一本字典。。。我是python新手,所以我犯了一些错误。@py.codan您应该看看matplotlib。它是一个用于绘图的python库。它可以生成直方图。
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)