首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有Python-4类别的Dendrogram

具有Python-4类别的Dendrogram
EN

Stack Overflow用户
提问于 2022-01-26 14:39:38
回答 1查看 94关注 0票数 1

专家们,

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

代码语言:javascript
复制
data = pd.DataFrame([['Apple, livingroom, worker', 200], ['Strawberry, bedroom, student', 100],
                     ['Apple, bedroom, child', 150], ['Strawberry, toilet, student', 100]], columns = ['Text', 'Costs'])

这只是一个例子(!)-Dataset,我的真实集更长,但结构是相同的。

数据集如下所示:

代码语言:javascript
复制
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将我的文本列转换为数字数字,这样我就可以创建一个树状图。=>还有其他选择吗?

所以我做了以下几件事:

代码语言:javascript
复制
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))

我的产出是:

代码语言:javascript
复制
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]

第二:现在我想要创建一个Dendrogram并查看标签。我想要的和我所期望的是一个只有200,100和150标签的Dendrogramm (就像这样,或者说是我的目标)。如果有100,也就是在x轴上超过一次,那就没问题了。所以我写到:

代码语言:javascript
复制
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 (从上到下,从树到下)。或者:如果我有一个苹果,一个卧室,如果我是一个孩子,我的费用是150。

有人能帮我展示一下这样的东西吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-26 16:02:18

如果您希望获得所需的输出,则需要更改:

代码语言:javascript
复制
labels = df.columns

使用

代码语言:javascript
复制
labels = df.Costs

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

代码语言:javascript
复制
plt.show()

使用

代码语言:javascript
复制
plt.legend(df.columns)
plt.show()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70865220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档