我正在尝试为项目集列表中的项目数绘制直方图。
项目集列表freq_itemsets
有1500多个元素,看起来有点像这样:
(('Spouse','Min.Edu','United-States'),0.12281563834034581)
(('男',),0.6692054912318418)
(('United-States','Uni.Edu'),0.1463714259390068)
在所有这些项目集中,我只关心内部容器的元素(嵌套的'()'parens中的东西)。后面跟着小数的float
并不重要。
我要做的是将内括号提取为临时列表,将每个内部项目集的 length 存储在列表freq_itemset_lengths
中。
此处的最终目标是能够绘制freq_itemsets
中找到的项目集的长度的直方图。以下是我正在运行的代码:
freq_itemset_lengths = []
for instance in freq_itemsets:
freq_itemset_lengths.append(len(instance))
print "\nHistogram for the lengths of frequent itemsets"
hist_create(freq_itemset_lengths, "Histogram of lengths of frequent itemsets", "Itemset Lengths", "Blue")
方法hist_create
工作正常,如下:
def hist_create(feature, title, label, color):
plt.hist(feature, facecolor=color, edgecolor='black')
plt.title(title)
plt.xlabel(label)
plt.ylabel("Frequency/Amount")
plt.show()
这是一个直方图,只有一个条形在x轴上的2
处绘制(可能是因为项目集将项目保存为元组),并且在y轴上达到1500+ (实例数)。
如何解决此问题,以便直方图绘制项目集本身的各种长度?
答案 0 :(得分:2)
正如@chepner所提到的,你应该测量最里面的列表的长度 - 而不是二级列表的长度:
for instance in freq_itemsets:
freq_itemset_lengths.append(len(instance[0]))
可替换地,
for instance, _ in freq_itemsets:
freq_itemset_lengths.append(len(instance))
,或者
freq_itemset_lengths = [len(instance) for instance, _ in freq_itemsets]
答案 1 :(得分:0)
orig = [((' Spouse', ' Min.Edu', ' United-States'), 0.12281563834034581),
((' Male',), 0.6692054912318418),
((' United-States', ' Uni.Edu'), 0.1463714259390068)]
new_list = [(x[0], len(x[0])) for x in orig ]
print(new_list)
会输出类似的内容:
[((' Spouse', ' Min.Edu', ' United-States'), 3), ((' Male',), 1), ((' United-States', ' Uni.Edu'), 2)]
答案 2 :(得分:0)
这是一种方式。
lst = [((' Spouse', ' Min.Edu', ' United-States'), 0.12281563834034581),
((' Male',), 0.6692054912318418),
((' United-States', ' Uni.Edu'), 0.1463714259390068)]
list(map(len, list(zip(*lst))[0]))
# [3, 1, 2]