专家们,
作为蟒蛇初学者,我想做的是用以下数据创建一个树状图:
data = pd.DataFrame([['Apple, livingroom, worker', 200], ['Strawberry, bedroom, student', 100],
['Apple, bedroom, child', 150], ['Strawberry, toilet, student', 100]], columns = ['Text', 'Costs'])这只是一个例子(!)-Dataset,我的真实集更长,但结构是相同的。
数据集如下所示:
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将我的文本列转换为数字数字,这样我就可以创建一个树状图。=>还有其他选择吗?
所以我做了以下几件事:
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]第二:现在我想要创建一个Dendrogram并查看标签。我想要的和我所期望的是一个只有200,100和150标签的Dendrogramm (就像这样,或者说是我的目标)。如果有100,也就是在x轴上超过一次,那就没问题了。所以我写到:
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。
有人能帮我展示一下这样的东西吗?
发布于 2022-01-26 16:02:18
如果您希望获得所需的输出,则需要更改:
labels = df.columns使用
labels = df.Costs若要添加颜色的图例,请替换:
plt.show()使用
plt.legend(df.columns)
plt.show()


https://stackoverflow.com/questions/70865220
复制相似问题