Python 的树状图 - 4 个类别

Dendrogram with Python - 4 categories

专家,

作为 python 初学者,我想做的是用以下数据创建树状图:

data = pd.DataFrame([['Apple, livingroom, worker', 200], ['Strawberry, bedroom, student', 100],
                     ['Apple, bedroom, child', 150], ['Strawberry, toilet, student', 100]], columns = ['Text', 'Costs'])

这只是一个例子(!)-数据集,我的真实集要长得多但结构是一样的。

数据集如下所示:

Out[89]: 
                           Text  Costs
0     Apple, livingroom, worker    200
1  Strawberry, bedroom, student    100
2         Apple, bedroom, child    150
3   Strawberry, toilet, student    100

我的步骤如下: 一:我使用 Tfidfvectorizer 将我的 text-column 转换为数字,这样我就可以创建一个树状图。 => 还有其他选择吗?

所以我做了以下事情:

tfidf = TfidfVectorizer()
tfidf_matrix = tfidf.fit_transform(data['Text']).todense()
vocab = tfidf.vocabulary_
new_cols = tfidf.get_feature_names()

df = data.drop('Text',axis=1)
df = df.join(pd.DataFrame(tfidf_matrix, columns=new_cols))

我的输出是:

Out[92]: 
   Costs     apple   bedroom  ...   student    toilet    worker
0    200  0.486934  0.000000  ...  0.000000  0.000000  0.617614
1    100  0.000000  0.577350  ...  0.577350  0.000000  0.000000
2    150  0.526405  0.526405  ...  0.000000  0.000000  0.000000
3    100  0.000000  0.000000  ...  0.526405  0.667679  0.000000

[4 rows x 9 columns]

两个: 现在我想创建一个树状图并查看标签。我想要的和我期望的是只有标签 200、100 和 150 的 Dendrogramm(就像这是我的目标)。如果出现 100,即 x-axis 不止一次,那也没关系。 所以我写道:

linked = linkage(df, 'ward')

# Dendrogramm und Label erstellen
labels = df.columns
p = len(labels)

plt.figure(figsize=(8,4))
plt.title('Hierarchical Clustering Dendrogram (truncated)', fontsize=20)
plt.xlabel('Look at my fancy labels!', fontsize=16)
plt.ylabel('distance', fontsize=16)

# Rufe das Dendrogramm auf, um das Dict zu bekommen
R = dendrogram(
                linked,
                truncate_mode='lastp',  # show only the last p merged clusters
                p=p,  # show only the last p merged clusters
                no_plot=True,
                )

# Label-Dict 
temp = {R["leaves"][ii]: labels[ii] for ii in range(len(R["leaves"]))}
def llf(xx):
    return "{}".format(temp[xx])

dendrogram(
            linked,
            truncate_mode='lastp',  # show only the last p merged clusters
            p=p,  # show only the last p merged clusters
            leaf_label_func=llf,
            leaf_rotation=60.,
            leaf_font_size=12.,
            show_contracted=True,  # to get a distribution impression in truncated branches
            )
plt.show()

我的树状图如下所示:

我期望的不是“成本”等,而是“200”、“100”、“150”、“100”。 它应该像一棵决策树,所以即 如果我有一个苹果,一间客厅,如果我是一名工人,我的成本是 200(通过树状图从上到下)。 或者: 如果我有一个苹果,一间卧室,如果我是child,我的成本是150

谁能帮忙显示这样的东西?

如果你想得到想要的输出,你需要改变:

labels = df.columns

labels = df.Costs

要添加颜色图例,请替换:

plt.show()

plt.legend(df.columns)
plt.show()