提取内部元组并计算项目数量?

时间:2018-02-16 20:42:48

标签: python tuples

我正在尝试为项目集列表中的项目数绘制直方图。

项目集列表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+ (实例数)。

如何解决此问题,以便直方图绘制项目集本身的各种长度?

3 个答案:

答案 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]