如何从词袋数据集创建高效的术语文档矩阵



我正在试验UCI Bag of Words Dataset。我将文档id、单词(word id)和单词计数读取到三个单独的列表中。这些列表的前10项类似于下面的内容:

['1', '1', '1', '1', '1', '2', '2', '2', '3', '3'] #docIDs
['118', '285', '129', '168', '20', '529', '6941', '7', '890', '285'] #wordIDs
['1', '1', '1', '1', '2', '1', '1', '5', '1', '1'] #count

我不知道如何从这些列表中制作术语文档矩阵,没有任何冗余。我想将行转换为docid,将列转换为wordid,并将相应的单元格值转换为单词计数。用python (pandas)做这个的有效方法是什么?

我想这回答了你的问题:

列表:

docid = ['1', '1', '1', '1', '1', '2', '2', '2', '3', '3'] #docIDs
wordid = ['118', '285', '129', '168', '20', '529', '6941', '7', '890', '285'] #wordIDs
counted = ['1', '1', '1', '1', '2', '1', '1', '5', '1', '1'] #count

DataFrame,每个列表在一个单独的列中:

df = pd.DataFrame([docid, wordid, counted],
index = ["docIDs", "wordIDs", "count"]).T

Pivot this for index为" docid "列为"wordIDs"值为"count"

df = df.pivot(index="docIDs", columns="wordIDs", values="count")

输出:

#wordIDs  118  129  168   20  285  529 6941    7  890
#docIDs                                              
#1          1    1    1    2    1  NaN  NaN  NaN  NaN
#2        NaN  NaN  NaN  NaN  NaN    1    1    5  NaN
#3        NaN  NaN  NaN  NaN    1  NaN  NaN  NaN    1

或者,您可以通过设置所需的索引和列作为索引来使用unstack(),然后解除这些列的堆叠:

df.set_index(["docIDs", "wordIDs"])["count"].unstack("wordIDs")

产生相同的结果。这会使用更少的内存。

相关内容

  • 没有找到相关文章

最新更新