数据分析|WordCloud PCA K-means - 「某电商平台」电脑评论分析

该博客介绍了如何使用Python进行文本分析,包括读取和分词评论数据,去除停用词,统计词频,生成高频词特征集。接着通过one-hot编码和频数方法为评论生成向量表示,计算评论间距离,找出重心评论。进一步,应用PCA降维和K-Means聚类进行评论分组,最后展示了词云可视化效果。
摘要由CSDN通过智能技术生成

任务要求

利用python数据结构(list, dict, set等)完成简单的文本分析任务

1. 提供了「某电商平台」商品评论数据集,见资源/data/jd_comments.rar
2. 一行一条评论
3. 一行可以视为一个文档(document)
4. 读入所有文档并分词(需要jieba)
5. 过滤停用词,统计词频(停用词表自行检索并构建,如提供的 示例stopwords_list.txt)
6. 根据词频进行特征词筛选,如只保留高频词,删除低频词,并得到特征词组成的特征集
7. 利用特征集为每一条评论生成向量表示,可以是0,1表示 (one-hot)也可以是出现次数的表示
8. 计算一下不同评论之间的距离(自定义,如欧氏或余弦),找 到所有评论的“重心”或者所有文档中的代表性文档并输出原文。
9.(附加)能不能实现关键词的词云可视化

注意:通过函数进行封装,并在main函数中调用

任务划分

  • 【读取数据】读取评论数据集;读取停用词

  • 【文档分词】对每个文档进行分词,过滤停用词

  • 【分词处理】统计词频,保留高频词,删除低频词,形成特征集

  • 【数据处理】每条评论生成向量表示,计算评论距离,输出重心评论原文

  • 【聚类分析】对特征集进行聚类分析

  • 【词云可视】关键词词云可视化

STEP1 读取数据

最初编写代码为:

def get_comments(path):
    """
    读取评论数据集,返回评论列表, 列表项为单条评论
    
    :param path:
    :return:
    """
    comments_l = []
    with open(path, 'r', encoding='utf-8') as comments_f:
        for line in comments_f.readlines():
            line = line.strip('\n')
            comments_l.append(line)
    return comments_l


def get_stopwords(path):
    """
    读取停用词文档,返回停用词集合
    
    :param path:
    :return set(stopwords_l):
    """
    stopwords_l = []
    with open(path, 'r', encoding='utf-8') as stopwords_f:
        for line in stopwords_f.readlines():
            line = line.strip('\n')
            stopwords_l.append(line)
    return set(stopwords_l)

后发现二者高度一致,更改为:

def document_to_list(path):
    """
    读取文档,按行划分,返回列表

    :param path: 目标文档路径
    :return doc_l: 文档内容列表
    """
    print("正在将%s转换为文本列表, 请稍等..." % path)
    doc_l = []
    with open(path, 'r', encoding='utf-8') as doc_f:
        for line in doc_f.readlines():
            line = line.strip('\n')
            doc_l.append(line)
    return doc_l

Ref.

https://blog.csdn.net/qq_38161040/article/details/88388123

https://blog.csdn.net/qq_37828488/article/details/100024924

STEP2 文档分词

def cut_words(docs, stopwords):
    """
    给出语句列表和停用词集合,使用 jieba 分词,返回分词列表

    :param docs: 语句列表, 即分词操作的目标列表
    :param stopwords: 停用词集合
    :return wordlist: 分词后列表
    """
    print("即将开始分词...")
    wordlist = []
    for doc in docs:
        for word in jieba.lcut(doc):
            if word not in stopwords:
                wordlist.append(word)
    return wordlist

Ref.

https://github.com/fxsjy/jieba

https://www.cnblogs.com/python-xkj/p/9247265.html

STEP3 分词处理

对分词结果进行处理,包括:统计词频,保留高频词,删除低频词,形成特征集

STEP3.1 统计词频并提取高频词

def word_freq(wordlist, topn):
    """
    统计 wordlist 分词列表中前 topn 项目高频词,并返回特征集列表

    :param wordlist: 分词列表
    :param topn: 高频词数目限制
    :return freq_word_list: 词频列表
    :return freq_word_top: 高频词列表
    """
    print("即将统计词频...")
    freq_word_list = collections.Counter(wordlist)
    freq_word_topn = freq_word_list.most_common(topn)
    print("得到的特征集是:", freq_word_topn)
    return freq_word_list, freq_word_topn

STEP3.2停用词的调整

设置topn = 80运行后,发现高频词结果如下:

[(' ', 1516), ('很', 1073), ('好', 635), ('不错', 451), ('还', 379), ('买', 366), ('电脑', 332), ('不', 323), ('都', 307), ('非常', 297), ('没有', 236), ('速度', 234), ('客服', 187), ('问题', 186), ('没', 185), ('开机', 183), ('京东', 180), ('满意', 176), ('感觉', 166), ('快', 164), ('说', 156), ('很快', 149), ('收到', 147), ('上', 137), ('东西', 135), ('系统', 133), ('看', 129), ('真的', 128), ('使用', 126), ('键盘', 118), ('喜欢', 115), ('包装', 113), ('送', 113), ('高', 112), ('有点', 111), ('挺', 106), ('后', 105), ('比较', 105), ('hellip', 105), ('外观', 104), ('会', 103), ('再', 103), ('游戏', 101), ('效果', 101), ('硬盘', 100), ('物流', 98), ('价格', 97), ('快递', 97), ('屏幕', 97), ('大', 94), ('性能', 93
<项目介绍> 基于python的电商买家评论数据情感分析源码+模型+数据集+代码注释(课程大作业).zip 该资源内项目源码是个人的课设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到94.5分,放心下载使用! 该资源适合计算机相关专业(如人工智能、通信工程、自动化、软件工程等)的在校学生、老师或者企业员工下载,适合小白学习或者实际项目借鉴参考! 当然也可作为毕业设计、课程设计、课程作业、项目初期立项演示等。如果基础还行,可以在此代码基础之上做改动以实现更多功能。 运行: `streamlit run ./Comment_analysis/Streamlit/streamlitEXP.py` 分工:<br> ## 必须考虑的点: 挑选合适的商品(好差评都多,并且评论多) GitHub class 参数(类型啥的,命名方式) 统一规范(代码格式,数据库,完善注释,log) 结合到谁的电脑上谁演示,何种形式ppt/代码 文件夹框架 数据测试集训练集划分 不同的产品(不同特点的卖点,特有的关键词),不同品牌的产品(用来比较售后服务优劣等卖点) 评论分数和评论内容的不吻合问题 评论的具体关键词(外形外观等) 开发文档开发文档: 需求文档 明确产品功能 分析某一功能点的流程 整合各个功能点--明确分工 接口文档 变更文件 流程图(可以单独作为一份文件可以作为附件附在文档中) 情感分数(情感倾向分析,结合score) 装饰器(计时、log)@注解 可视化结果,图形化界面(见4) config decorator ## 可以考虑的点: 同一个热水器的评论内容随时间变化 算法优化与提升(比如用不同的包,还可以用多种方法来处理,进行比较分析) 判断优劣coherence/主观判断/通过数据可视化来大致判断,参数优化(主题数/) 找到一个网站据说可以 wordcloud可视化词云 bert情感分类 ## 扩展提升的点: texthero可视化 pyLDAvis可视化,通过网页来展示 streamlit+heroku 不用snownlp 机器学习/深度学习 eda 注释掉的代码最后删掉,或者说写明什么时候开启调用
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值