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()
专家,
作为 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()