Pythonでデータフレームをトピックモデル(LDA)で分析したい
以下のようなデータフレームのデータに対し、Pythonのgensimを用いてLDAを行いたいのですが参考にできるサイト・書籍がなく困っています。
ぐぐるとインプットするデータは本文のみのtxtファイルばかりです。
id,q1,q2,txt1,txt2,txt3
1,2,2,hogehoge,fugafuga,piyopiyo
2,3,1,hogafuge,fugehoga,puyo
...
アウトプットイメージは以下のような感じです。
今回はtxt1を3トピック、txt2を2トピック、txt3を5トピックにしました。(可変です)
id,q1,q2,txt1,txt2,txt3,ptxt1_1,ptxt1_2,ptxt1_3,ptxt2_1,ptxt2_2,ptxt3_1,ptxt3_2,ptxt3_3,ptxt3_4,ptxt3_5
1,2,2,hogehoge,fugafuga,piyopiyo,0.2,0.5,0.3,0.6,0.4,0.2,0.2,0.2,0.2,0.2
2,3,1,hogafuge,fugehoga,puyo,0.2,0.5,0.3,0.6,0.4,0.2,0.2,0.2,0.2,0.2
...
右側にそれぞれのトピックの確率が付く感じです。
参考になるページやコードでも構いません。
Rのtopicmodelsを使って分析、でも構わないです。
お手数ですが、お詳しい方よろしくお願いいたします。
追記
【Python】トピックモデル(LDA) - Qiita
上記ページのコードではtxtファイルをwith open
で開き、for line in f
で一行ずつ回しているようですが、これをデータフレームで書くとどのようになりますでしょうか?
一度データフレームをtxtファイルで出力して再度読み込み、というのは避けたいと思っております。
追記2
最後の各トピックの確率をデータフレームにするところで詰まっています…
df = pd.DataFrame(index=[],columns=['title','a1','a2','a3'])
for unseen_doc, raw_train_text in zip(test_corpus, raw_test_texts):
print(raw_train_text, end='\t')
title = pd.DataFrame([raw_train_text])
for topic, score in lda[unseen_doc]:
score_by_topic[int(topic)] = float(score)
scr = pd.DataFrame.from_dict(score_by_topic,orient='index').T
plus = pd.concat([title,scr],axis=1)
for i in range(NUM_TOPICS):
print('{:.2f}'.format(score_by_topic[i]), end='\t')
df = df.append(plus)
というコードで一行ずつ下からくっつけようとしていますが、
ValueError: Plan shapes are not aligned
というエラーが出てしまいます。
appendの1行をコメントアウトすると通ります。
詳しい方、ご助言をよろしくお願いいたします。