Невозможно построить график распределения Ципфа

Я новичок в Python и машинном обучении. Я хочу построить график распределения Zipf для текстового файла. Но мой код дает ошибку. Ниже мой код Python

import re
from itertools import islice
#Get our corpus of medical words
frequency = {}
list(frequency)
open_file = open("abp.csv", 'r')
file_to_string = open_file.read()
words = re.findall(r'(\b[A-Za-z][a-z]{2,9}\b)', file_to_string)

#build dict of words based on frequency
for word in words:
    count = frequency.get(word,0)
    frequency[word] = count + 1


#limit words to 1000
n = 1000
frequency = {key:value for key,value in islice(frequency.items(), 0, n)}
#convert value of frequency to numpy array
s = frequency.values()
s = np.array(s)

#Calculate zipf and plot the data
a = 2. #  distribution parameter
count, bins, ignored = plt.hist(s[s<50], 50, normed=True)
x = np.arange(1., 50.)
y = x**(-a) / special.zetac(a)
plt.plot(x, y/max(y), linewidth=2, color='r')
plt.show()

И приведенный выше код дает следующую ошибку: count, bins, ignored = plt.hist (s [s<50], 50, normed = True)

TypeError: '<' не поддерживается между экземплярами 'dict_values' и 'int'

1 ответ

Решение

Массив numpy s фактически состоит из dict_valuesобъект. Чтобы преобразовать значения в массив numpy, содержащий числаdict_values, используйте

import numpy as np

frequency = {key:value for key,value in islice(frequency.items(), 0, n)}
s = np.fromiter(frequency.values(), dtype=float)

Предполагая, что вы хотите, чтобы ваш массив состоял из floatс.

Для получения дополнительной информации прочтите документы.

Другие вопросы по тегам