我试图用 Python 中的 Zipf 分布 PDF F~x^(-a)拟合以下图(红点)。我只是选择a=0.56并绘制了y = x^(-0.56),我得到了如下所示的曲线。
曲线显然是错误的。我不知道如何进行曲线拟合。

如何测量或找到 Zipf 分布?例如,我有一个英语单词语料库。我如何找到 Zipf 分布?我需要找到 Zipf 分布,然后绘制它的图形。但我陷入了第一步,即找到 Zipf 分布。
编辑:从每个单词的频率计数来看,很明显它遵守 Zipf 定律。但我的目标是绘制一个 zipf 分布图。我不知道如何计算分布图的数据
我正在 Python 上编写一个函数,它将文本文件的名称(作为字符串)作为输入。该函数应首先确定每个单词在文件中出现的次数。稍后,我将制作一个条形图,显示文件中十个最常见单词的频率,每个条形旁边是第二个条形,其高度是 Zipf 定律预测的频率。我已经有一些图形代码,但我需要帮助来查找文本文件中最常见的单词。
def zipf_graph(text_file):
import string
file = open(text_file, encoding = 'utf8')
text = file.read()
file.close()
#the following strips and removes punctuation and makes the words lowercase
punc = string.punctuation + '’”—??“?'
new_text = text
for char in punc:
new_text = new_text.replace(char,'')
new_text = new_text.lower()
text_split = new_text.split()
Run Code Online (Sandbox Code Playgroud)
我被困在这里,我试图在列表中找到最常见的字符串,但我不知道从哪里开始,以下是我尝试过的:
words = text_split
most_common = max(words, key = words.count)
# print(most_common)
Run Code Online (Sandbox Code Playgroud)
我还想添加以下代码,因为它被建议提供帮助
# Sorting a list by frequency
# Assumes you have your elements as (word, frequency) tuples …Run Code Online (Sandbox Code Playgroud)