我正在分析某种产品的评级,我想创建一个直方图,其中包括每个评级在5星中的出现频率。例如,我知道有2000个人说该产品是5星,有400个人说该产品是4星,等等,我想在直方图上显示它。
我有五个名为“五个”,“四个”,“三个”等的int值。
如何将它们放入直方图中,以显示5个评分评论与其他评分评论相比的数量?您可能已经猜到了,Python是超级新手。
编辑:我从.tsv文件中获取了此数据,该文件有五列。 “评级”是五列之一。我知道numpy和matplotlib,我只需要一点帮助就可以对直方图上的多个整数进行编码。
编辑:这是我的完整代码
import numpy as np
from numpy import arange,array,ones
from scipy import stats
import matplotlib.pyplot as plt
data = np.genfromtxt("amazon_alexa 2.tsv", delimiter = '\t',
skip_header = 1, dtype=str, encoding = 'UTF-8')
rating = data[0:,0] #first column
date = data[:,1] #second column
alexa_type = data[:,2] #third column
comment = data[:,3] #fourth column
rating_ = []
for r in rating:
r = int(r)
rating_.append(r)
five = 0
four = 0
three = 0
two = 0
one = 0
for r in rating_:
if (r == 5):
five = five + 1
if (r == 4):
four = four + 1
if (r == 3):
three = three + 1
if (r == 2):
two = two + 1
if (r == 1):
one = one + 1
并返回以下内容:
Five Counter: 2286
Four Counter: 455
Three Counter: 152
Two Counter: 96
One Counter: 161
我想做成直方图
答案 0 :(得分:1)
使用matplotlib
库可直接从数据中进行绘图。一个简单而肮脏的例子:
import random
from matplotlib import pyplot as plot
numbers = [random.randint(1, 5) for i in range(0, 100)]
plot.hist(numbers)
plot.show()
得出的直方图如下:
可以通过修改plot
变量来进行轴修改和类似的操作。
答案 1 :(得分:0)
您可以将其存储到字典中,然后:
ratings = {5: 2286, 4: 455, 3: 152, 2: 96, 1: 161}
tot = sum([ x for k, x in ratings.items()])
limit = 50
normalized = []
for x in ratings:
normalized.append( ( x, int(limit*(ratings[x]/tot)) ) )
for k, v in normalized:
print(str(k) + ': ' + '*'*v)
normalized
看起来像这样,您可以直接从代码中构建它,而无需任何字典:
[(5, 36), (4, 7), (3, 2), (2, 1), (1, 2)]