在 Python3.x 中绘制列表字典(主题词嵌入)

Posted

技术标签:

【中文标题】在 Python3.x 中绘制列表字典(主题词嵌入)【英文标题】:Plotting Dictionary of list (topic-word embeddings) in Python3.x 【发布时间】:2021-01-28 17:13:08 【问题描述】:

我有一本名为“topic_word”的字典

topic_word = 0: [[-0.669712, 0.6868, 0.9821409999999999], [-0.925967, 0.6138399999999999, 1.247525], [-1.09941, 1.0252620000006001, 1.328], 1.328], 1: [[-0.862131, 0.890915, 1.07759], [-0.437658, 0.279271, 0.627497], [-0.437658, 0.279271, 0.627497]], 2: [[-0.671647, 0.670583, 0.937155], [-0.675347, 0.466983, 0.8505440000000001], [-0.706244, 0.612532, 0.762877]], 3: [[-0.8414590000000001, 0.797826, 1.124295], [-0.567535, 0.40820300000000004, 0.811368], [-0.800963, 0.699767, 0.9239]9],9]9 4: [[-0.8560549999999999, 1.0617020000000001, 1.579302], [-0.576105, 0.5029239999999999, 0.9392], [-0.743683, 0.69884, 0.97914]9300000

其中每个键代表主题(这里是 0 到 4;5 个主题),值代表每个主题下的词嵌入(这里每个主题有 3 个词)。 我想使用二维散点图可视化数据如果需要规范化我如何规范化我可以在 python 3.x 中正确表示的“topic_word”数据

如何使用散点图将其可视化,该散点图将在其主题下显示一组单词(点)。 如下:

import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()

for key, value in topic_word.items():
   ax.scatter(value[0],value[1],label=key)
plt.legend()

【问题讨论】:

这里的问题是什么?标准化过程或散点图的生成?无论如何,两者都是任务,而不是问题。请描述您的代码尝试、预期输出以及实际输出有何不同。 谢谢你的重播,其实我很新。您提到的两个方面都是我要完成的问题/任务,因为如果我无法将值标准化为 x,y 坐标,我将无法生成绘图。如果我直接将“plt.scatter(value[0],value[1],label=key)”应用于每个主题的“topic_word”,它将仅在位置 0 和 1 处取值,并将离开 3rd list , 0: [ [-0.669712,0.6868,0.9821409999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999] . 由于我们可以在使用数据帧时使用standardScaler.fit_transform(value),我该如何规范化以便我可以使用“plt.scatter(value[0],value[1],label=key) ” 以正确地可视化“topic_word”。如果它不需要标准化,那么直接可视化它的过程是什么。如果我让你感到困惑,请随时要求澄清。非常感谢您宝贵的时间。 这能回答你的问题吗? Visualise word2vec generated from gensim 类似,但除了本文档之外,我还需要主题聚类 【参考方案1】:

我从您的帖子中了解到,您希望为每个列表对应一个键设置标准化值。并且,这些标准化列表中的每一个都表示为分散数据点。这是一种方法:

import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
topic_word = 0: [[-0.669712, 0.6868, 0.9821409999999999], [-0.925967, 0.6138399999999999, 1.247525], [-1.09941, 1.0252620000000001, 1.327866]], 
1: [[-0.862131, 0.890915, 1.07759], [-0.437658, 0.279271, 0.627497], [-0.437658, 0.279271, 0.627497]], 
2: [[-0.671647, 0.670583, 0.937155], [-0.675347, 0.466983, 0.8505440000000001], [-0.706244, 0.612532, 0.762877]], 
3: [[-0.8414590000000001, 0.797826, 1.124295], [-0.567535, 0.40820300000000004, 0.811368], [-0.800963, 0.699767, 0.9237989999999999]], 
4: [[-0.8560549999999999, 1.0617020000000001, 1.579302], [-0.576105, 0.5029239999999999, 0.9392], [-0.743683, 0.69884, 0.9794930000000001]]

colorkey=0:'red',1:'blue',2:'green',3:'black',4:'magenta' # creating a color map for keys
for key, value in topic_word.items():
    valno=0 # keeping a count of number of lists under each topic_word (key)
    for val in value:
        meanval=np.mean(val) 
        stdval=np.std(val)
        val = (val-meanval)/(stdval) # normalized list
        ax.scatter(key*np.ones(len(val)),val,color=colorkey[key],label="Topic "+str(key) if valno == 0 else "") # label is done such that duplication of legend elements is avoided
        handles, labels = ax.get_legend_handles_labels()
        valno=valno+1
fig.legend(handles, labels, loc='best')  

  

【讨论】:

非常感谢您的努力和宝贵的时间。我有一个关于情节的问题要明确,那就是 - 在每个键(主题 0 到 4)下我们有三个单词(每个键 0 到 4 的三个值列表)所以,为什么它代表每个类别的 6 个点三个点? 我们可以像这样表示它,但表示集群(主题词)***.com/questions/43776572/…

以上是关于在 Python3.x 中绘制列表字典(主题词嵌入)的主要内容,如果未能解决你的问题,请参考以下文章

python3.x学习笔记2018-02-02更新

Python 数字字符串列表元祖字典集合

Spotify iframe 嵌入带有黑色主题播放器和白色主题播放列表的白色主题加载

Python3.x和Python2.x的区别

如何使用 pandas DataFrame 计算列表的字典?

Python3.x:基础学习