59006


以下のようなデータフレームのデータに対し、Pythonのgensimを用いてLDAを行いたいのですが参考にできるサイト・書籍がなく困っています。  
ぐぐるとインプットするデータは本文のみのtxtファイルばかりです。

[code]

    id,q1,q2,txt1,txt2,txt3
    1,2,2,hogehoge,fugafuga,piyopiyo
    2,3,1,hogafuge,fugehoga,puyo
    ...
    
[/code]

アウトプットイメージは以下のような感じです。  
今回はtxt1を3トピック、txt2を2トピック、txt3を5トピックにしました。（可変です）

[code]

    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
    ...
    
[/code]

右側にそれぞれのトピックの確率が付く感じです。

参考になるページやコードでも構いません。  
Rのtopicmodelsを使って分析、でも構わないです。

お手数ですが、お詳しい方よろしくお願いいたします。

**追記**  
[【Python】トピックモデル（LDA） -
Qiita](https://qiita.com/kenta1984/items/b08d5caeed6ed9c8abf1)

上記ページのコードではtxtファイルを`with open`で開き、`for line in
f`で一行ずつ回しているようですが、これをデータフレームで書くとどのようになりますでしょうか？

一度データフレームをtxtファイルで出力して再度読み込み、というのは避けたいと思っております。

**追記2**  
最後の各トピックの確率をデータフレームにするところで詰まっています…

[code]

        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)
    
[/code]

というコードで一行ずつ下からくっつけようとしていますが、

[code]

    ValueError: Plan shapes are not aligned
    
[/code]

というエラーが出てしまいます。

appendの1行をコメントアウトすると通ります。

詳しい方、ご助言をよろしくお願いいたします。


CC BY-SA 4.0
2019-08-27T15:57:30.973
57641
2019-09-12T03:10:20.090
2019-09-11T16:36:30.453
12457
12457
question
python python3 r 自然言語処理
Pythonでデータフレームをトピックモデル（LDA）で分析したい


リストで作成して最後にデータフレームに変換するのが簡単では？

[code]

    datas = []
    for unseen_doc, raw_train_text in zip(test_corpus, raw_test_texts):
        # print(raw_train_text, end='\t')
        for topic, score in lda[unseen_doc]:
            score_by_topic[int(topic)] = float(score)
        entry = [raw_train_text]
        for i in range(NUM_TOPICS):
            # print('{:.2f}'.format(score_by_topic[i]), end='\t')
            entry.append(str(score_by_topic[i]))
        # print()
        datas.append(entry)
    
    df = pd.DataFrame(datas,columns=['title','a1','a2','a3'])
    df = df.astype({'a1': float, 'a2': float, 'a3': float})
    
    print(df)
    
[/code]

結果表示はこうなりました。

[code]

                 title        a1        a2        a3
    0  爆発 現場で缶100本ガス抜き  0.333333  0.333333  0.333333
    1    爆発の瞬間 デマ動画が拡散  0.333333  0.333333  0.333333
    2  バニラエア 来年10月運航終了  0.333333  0.333333  0.333333
    3   コンビニごみ 店舗負担の矛盾  0.333333  0.333333  0.333333
    4   謎めいたカエル 南米で再発見  0.333333  0.333333  0.333333
    5   イニエスタ うつ報道の難しさ  0.333333  0.333333  0.333333
    6    ムネリン笑顔「少し元気に」  0.333333  0.333333  0.333333
    7  G菅野 ゴジラ超え6.5億円に  0.333333  0.333333  0.333333
    
[/code]


CC BY-SA 4.0
2019-09-12T03:10:20.090
59006
2019-09-12T03:10:20.090
26370
57641
answer