【问题标题】:how to save Sklearn lda model output to csv?如何将 Sklearn lda 模型输出保存到 csv?
【发布时间】:2019-08-04 02:09:08
【问题描述】:

如何将 Sklearn LDA 模型输出保存到 csv ? 它没有 show_topics 命令作为 genism lDA 模型。

def selected_topics(model, vectorizer, top_n=10):
for idx, topic in enumerate(model.components_):
    print("Topic %d:" % (idx))
    print([(vectorizer.get_feature_names()[i], topic[i])
                    for i in topic.argsort()[:-top_n - 1:-1]])

这很适合打印,但如何将这些结果保存到 csv?

【问题讨论】:

    标签: python csv scikit-learn lda topic-modeling


    【解决方案1】:
    def selected_topics(model, vectorizer, top_n=10):
        results={}
        for idx, topic in enumerate(model.components_):
            topicId='Topic'+str(idx)
            print("Topic %d:" % (idx))
            topic_name = " ".join([(vectorizer.get_feature_names()[i]
                        for i in topic.argsort()[:-top_n - 1:-1]])
            results[topicId]=topic_name
        return results
    

    您可以将结果写入 Json,然后写入 CSV 文件

    到 Json

    import json,csv
    results = selected_topics(model, vectorizer, top_n=10)
    res_file = open(outputFile,'w')
    res_file.write(json.dumps(results))
    res_file.close()
    

    json 到 csv

    input = open(res_file)
    data = json.load(input)
    input.close()
    
    output = csv.writer("output_csv.csv")
    
    output.writerow(data[0].keys())  # header row
    
    for item in data:
        output.writerow(item.values())
    

    如果这对您没有帮助,请告诉我

    【讨论】:

    • TypeError Traceback(最近一次调用最后一次) in () ----> 1 selected_topics(lda, vectorizer) in selected_topics(model, vectorizer, top_n) 6 print("Topic %d:" % (idx)) 7 topic_name = " ".join([(vectorizer.get_feature_names()[i], topic[i]) - ---> 8 for i in topic.argsort()[:-top_n - 1:-1]]) 9 10 TypeError: sequence item 0: expected str instance, tuple found.It throw me an error.
    • 有没有一种可能的方式来通过创建一个循环来生成 csv,就像我们在 genism 中创建的那样?。
    • 是的,您可以创建,将 " ".join([(vectorizer.get_feature_names()[i], topic[i]) 替换为 " ".join([(vectorizer.get_feature_names()[i ]
    • 先写json的目的是什么?
    • 20 input.close() 21 ---> 22 output = csv.writer("output_csv.csv") 23 24 output.writerow(data[0].keys()) # 标题行TypeError:参数 1 必须有一个“写”方法
    【解决方案2】:

    我自己找到了解决方案。运行循环对我有用。

     def show_topics(vectorizer=vectorizer, lda_model=lda, n_words=20):
        keywords = np.array(vectorizer.get_feature_names())
        topic_keywords = []
        for topic_weights in lda_model.components_:
            top_keyword_locs = (-topic_weights).argsort()[:n_words]
            topic_keywords.append(keywords.take(top_keyword_locs))
        return topic_keywords
    
    topic_keywords = show_topics(vectorizer=vectorizer, lda_model=lda, n_words=15)        
    
    # Topic - Keywords Dataframe
    df_topic_keywords = pd.DataFrame(topic_keywords)
    df_topic_keywords.columns = ['Word '+str(i) for i in range(df_topic_keywords.shape[1])]
    df_topic_keywords.index = ['Topic '+str(i) for i in range(df_topic_keywords.shape[0])]
    df_topic_keywords
    

    【讨论】:

      【解决方案3】:

      您可以通过首先创建一个 pandas 数据框并将 LDA 模型结果保存到该数据框(通过循环)来导出结果。稍后将其导出到 csv 文件。

      import pandas as pd
      import csv
      pd.DataFrame(savedresults).to_csv("all_model_ouput.csv") 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-19
        • 2022-01-13
        • 2013-06-25
        • 2015-08-07
        • 2020-04-30
        • 2020-12-15
        • 2018-09-16
        相关资源
        最近更新 更多