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

任务要求

利用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
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值