我尝试制作了一个频率表,该频率表以百分比形式返回频率。并具有显示表格的功能。所有的值都显示为零,并且百分比计算存在错误
我尝试更改变量名称,还尝试对百分比进行硬编码,但是在制作表/字典时存在一些问题
def freq_table(dataset, index):
table_1 = {}
total = 0
for row in dataset:
total += 1
value = row[index]
if value in table_1:
table_1[value] += 1
else:
table_1[value] = 1
table_percentages = {}
for key in table_1:
percentage = (table_1[key] / total) * 100
table_percentages[key] = percentage
return table_percentages
def display_table(dataset, index):
table_2 = freq_table(dataset, index)
table_display = []
for key in table_2:
key_val_as_tuple = (table_2[key], key)
table_display.append(key_val_as_tuple)
table_sorted = sorted(table_display, reverse = True)
for entry in table_sorted:
print(entry[1], ':', entry[0])
display_table(ios_final, 12)
显示类似
的值('Weather', ':', 0) ('Utilities', ':', 0) ('Travel', ':', 0) ('Sports', ':', 0) ('Social Networking', ':', 0) ('Shopping', ':', 0) ('Reference', ':', 0) ('Productivity', ':', 0) ('Photo & Video', ':', 0) ('News', ':', 0) ('Navigation', ':', 0) ('Music', ':', 0)
答案 0 :(得分:0)
您正在使用Python 2,其中将两个整数相除会得到一个整数:
>>> 1/3, 2/3, 3/3, 4/3, 5/3, 6/3
(0, 0, 1, 1, 1, 2)
这里也发生同样的事情:
percentage = (table_1[key] / total) * 100
如果table_1[key] < total
,则除法结果将为零。
您应将其中之一转换为浮点数:
total = float(calculate total here)
或者执行total = 0.0
,然后在循环中将其递增。
涉及浮点数的除法会导致浮点数:
>>> 1/3., 2/3., 3/3., 4/3., 5/3., 6/3.
(0.3333333333333333, 0.6666666666666666, 1.0, 1.3333333333333333, 1.6666666666666667, 2.0)
答案 1 :(得分:0)
或者使用from __future__ import division
,您的代码应按原样工作。