这是我想要完成的事情的主旨。我有一个包含大量单词的.txt文件(dict.txt)。我的任务是计算.txt文件中每个字母的频率并将其放入列表中,将每个元素转换为百分比(将ea元素除以100),然后将该列表用作我的条形图的y_axis。
到目前为止,我已经创建了一个字典,其中包含每个字母表作为键,值等于该字母出现在.txt文件中的总次数。我被困住的地方是将每个值除以100,然后将该新数字放入一个列表,我可以将其用作我的情节的y轴。 x轴是字母本身。
这是我已写的代码:
letter_dict = {}
word_list = []
filename = raw_input('Enter filename: ')
new_file = open(filename).readlines()
for i in new_file:
word = i.strip().lower()
word_list += list(word)
for letter in word_list:
if letter in letter_dict:
letter_dict[letter] += 1
else:
letter_dict[letter] = 1
x_axis = []
y_axis = []
summ= 0
for i in letter_dict.values(): #sum of all values in list
summ += i
value_list = list(letter_dict.values())
for k in letter_dict:
x_axis += [k]
print summ
y_axis = []
num_avg = []
for i in value_list:
y_axis += [int(i) / summ]
create_plot(x_axis, y_axis, filename) #this is for my "plot" function
每当我循环(i在value_list中)然后将ea元素除以总和,打印列表返回为[0,0,0,0,0,0,0,0,0,0,0,0, 0,0]。我很难过。
答案 0 :(得分:2)
它们返回0的原因是因为Python使用整数除法。使用float可以获得更直观的结果。
In [1]: 1/5
Out[1]: 0
In [2]: float(1)/5
Out[2]: 0.2
答案 1 :(得分:2)
问题可以在这里:
y_axis += [int(i) / summ]
除以两个整数重新生成整数,在这里你可以得到实际结果。
只要其中一个数字是例如浮动,你会得到漂浮的结果。
y_axis += [int(i) / float(summ)]
答案 2 :(得分:0)
这是一个重写版本:
# Assumes Python 2.7
from collections import Counter
import matplotlib.pyplot as plt
from string import ascii_lowercase
def get_file():
fname = raw_input("Enter the file name: ")
with open(fname) as inf:
return inf.read()
def count_letters(s):
chars = Counter(s.lower())
return {ch:chars[ch] for ch in ascii_lowercase}
def plot_letters(count):
total = sum(count.values())
xs = range(len(ascii_lowercase))
ys = [count[ch] * 100. / total for ch in ascii_lowercase]
plt.bar(xs, ys)
plt.xticks([x+0.5 for x in xs], ascii_lowercase)
plt.show()
def main():
letters = get_file()
count = count_letters(letters)
plot_letters(count)
main()
产生类似的东西: