电商评论数据聚类实验报告

目录

  1. 实验目的
  2. 整体思路
  3. 数据介绍
  4. 代码与实验步骤
    4.1 爬虫代码
    4.2 数据清洗
    4.3 分词
    4.4 去停用词
    4.5 计算TF-IDF词频与聚类算法应用
    4.6 生成词云图
  5. 实验结果
    5.1 词云图
    5.2 聚类结果分析
  6. 不足与反思
  7. 参考资料

1. 实验目的

掌握无监督学习问题的一般解决思路和具体解决办法;
熟悉 python sklearn 库的使用方法

2. 整体思路

首先,通过 python 爬虫下载电商网站上关于某产品的用户评论数据;
其次,清洗数据(移除表情符号等)、分词、去停用词;
再次,计算每条评论的 TF-IDF 词频,使用 KMeans 算法进行聚类;
最后,通过词云工具,生成每个分类的词云图。

3. 数据介绍

电商评论数据选自京东 kindle 产品的全部用户评论,排序顺序为“推荐”。

4. 代码与实验步骤

4.1 爬虫代码

每页输出10条评论,遍历100页

# !/usr/bin/python
# -*- coding: utf-8 -*-

import urllib.request
import time

if __name__ == "__main__":
    # JD的数据是以GBK编码的
    f = open("jd-comments-json.txt", mode="w", encoding="gbk")
    for i in range(100):
        # 每页数据量为 50 条
        url = "https://sclub.jd.com/comment/productPageComments.action?productId=2002883&score=0&sortType=5&page=" + str(i) + "&pageSize=10"
        ret = urllib.request.urlopen(url).read().decode("gbk")
        f.write("%s\n" % ret)
        print("%d %s" % (i, ret))
        time.sleep(i % 2) # 爬虫的节操:不能拖垮人家的数据库

4.2 数据清洗

主要是去除表情符号,因为表情符号存在的情况不多,所以这部分工作是手动进行的。
评论数据是以 JSON 格式从京东上面下载的,所以需要对JSON进行解析。

# !/usr/bin/python
# -*- coding: utf-8 -*-

import json

if __name__ == "__main__":
    f_comment = open("comments.txt", encoding="gbk", mode="w")
    with open("jd-comments-json.txt", encoding="gbk") as f:
        for line in f:
            s = json.loads(line.strip())
            comments = s["comments"]
            for comment in comments:
                content = comment['content'].replace("\n", "")
                f_comment.write("%s\n" % content)

4.3 分词

分词工具使用的是哈工大开发的语言技术平台云,通过 REST 调用的方式对每一条评论都分好了词

# !/usr/bin/python
# -*- coding: utf-8 -*-

import urllib.request
import urllib.parse
import time

def word_seg(sentence):
    url = "http://api.ltp-cloud.com/analysis/"
    args = {
        "api_key" : "your-api-key",
        'text' : sentence,
        'format' : 'plain',
        'pattern' : 'ws'
    }
    ret = urllib.request.urlopen(url, urllib.parse.urlencode(args).encode(encoding="utf-8"))
    return ret.read().decode(encoding="utf-8")

if __name__ == "__main__":
    f_in = open("comments-utf8.txt", encoding="utf8")
    f_out = open("comments-ws.txt", encoding="utf-8", mode="w")
    for line in f_in:
        ret = word_seg(line.strip()).replace("\n", "  ")
        print(ret)
        f_out.write("%s\n" % ret)
        time.sleep(0.5)

4.4 去停用词

去掉分词结果中:的、了,以及各种标点符号。

# !/usr/bin/python
# -*- coding: utf-8 -*-

stop_word = ("的", "了",",", "、", "。", ";", "!", "*", ":", "~")

f_out = open("comments-processed.txt", encoding="utf-8", mode="w")
with open("comments-ws.txt", encoding="utf-8") as f:
    for line in f:
        line = line.strip()
        sen = ""
        for c in line:
            if c not in stop_word:
                sen = sen + c
        for word in sen.split(" "):
            if len(word) != 0:
                f_out.write("%s  " % word)
        f_out.write("\n")

4.5 计算TF-IDF词频与聚类算法应用

本部分代码参考了CSDN博客[2]

# !/usr/bin/python
# -*- coding: utf-8 -*-

from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.cluster import KMeans

if __name__ == "__main__":
    corpus = list()
    with open("comments-processed.txt", encoding="utf-8") as f:
        for line in f:
            corpus.append(line.strip())

    vectorizer = CountVectorizer()
    transformer = TfidfTransformer()
    tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))

    word = vectorizer.get_feature_names()
    weight = tfidf.toarray()

    clf = KMeans(n_clusters=5)  # 假设数据内在地分为 5 组
    resul = clf.fit(weight)

    with open("comments-processed.txt", encoding="utf-8") as f:
        for i, line in enumerate(f):
            group = clf.labels_[i]
            f = open("group-" + str(group) + ".txt", encoding="utf-8", mode="a")
            f.write("%s" % line)
            f.close()

该代码将生成 5 份对评论聚类后的文件,分别是 group-0.txt,group-1.txt,......,group-4.txt。
其中,每个文件的内容都将是改组别下的评论数据。

4.6 生成词云图

采用了一款工具[3][3],而没有使用代码实现。

5 实验结果

5.1 词云图

5.1.1 第 0 组词云图5.1.2 第 1 组词云图

5.1.3 第 2 组词云图

5.1.5 第 4 组词云图

5.2 聚类结果分析

5.2.1 第 1 组

共 89 条记录,举例如下:
确实 不错 比 手机 看 书 好 多 了 不 刺眼 可以 总 邮箱 把 TXT 传 到 这 上面 自动 就 转换 了 挺 方便
很 不错 东东 主要 是 比 实体 书 带 着 方便 很多
很 好 用 跟 纸张 看 书 效果 很 像 携带 也 很 方便

5.2.2 第 2 组

共 167 条记录,举例如下:
确实 不错 感觉 比 平板省 眼睛 而且 这个 续航 比较 牛 确实 不错
送货 速度 快 价廉物美 有 了 这个 看 书 眼睛 就 不 会 很 累 真 不错

5.2.3 第 3 组

共 117 条记录,举例如下:
宝贝 很 好 看 书 很 舒服 不 似 手机 一样 会 眼睛 疲劳 干涩 这 是 我 第一 部 阅读器 很 喜欢 也 经常 在 京东 买 东西 一直 很 满意
喜欢 小巧 轻便 可以 尽情 看看看 了 再 也 不 担心 眼睛 痛 问题 了 看 一 下午 眼睛 疲惫感 还 好

5.2.4 第 4 组

共 77 条记录,举例如下:
东西 很 好 也 没有 出现 亮点 很 完美 物流 也 很快
东西 还 不错 就是 就是 反应 有 点 慢

5.2.5 第 5 组

共 548 条记录,举例如下:
kindl 读书 装 B 一条龙 服务
一直 没 买 kendle 这 次 买 回来

6.不足与反思

  1. 写爬虫时我没有考虑到“中评”、“差评”的情况,所以该实验的数据集是有偏见的;
  2. 由于时间仓促,没有使用对评论数据分类效果最好的 惩罚GMM聚类算法[1]惩罚���聚类算法[1];
  3. 即便是对评论进行了聚类,但是聚类的结果从实际的角度来考虑,并没有发现其用处;
  4. 考察聚类结果发现,各个类别下面的数据量分布不均匀,第4组数据量达 500+ 条,但第 0、1、2 组仅90+ 条。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/549261.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

22款Visual Studio Code实用插件推荐

前言 Visual Studio Code是一个轻量级但功能强大的源代码编辑器,轻量级指的是下载下来的Visual Studio Code其实就是一个简单的编辑器,强大指的是支持多种语言的环境插件拓展,也正是因为这种支持插件式安装环境开发让Visual Studio Code成为…

工控机的无限可能2--智慧城市

一、智能柜 随着网络技术的发展,网购因方便快捷、价格优惠、不受时空限制等优势已成为用户重要的消费方式。快递员因满柜,或柜型单一不能投递,只能将快件堆放在车上或公共过道处苦等,快递、资产管理也随之出现。 如下&#xff0…

如何将OpenCV Java 与Eclipse结合使用

返回目录:OpenCV系列文章目录 上一篇:OpenCV-Java 开发简介 下一篇: 正文: 警告:本教程可以包含过时的信息。 从 2.4.4 版本开始,OpenCV 支持 Java。在本教程中,我将解释如何设置开发环境&a…

杂记8---多线激光雷达与相机外参标定

背景:本人开源的标定程序,提供大家参考学习 基于棋盘格的多线激光雷达和鱼眼/针孔模型相机外参标定的程序 前言 标定数据,只需要一个棋盘格标定板。把标定板放置lidar 与camera 共视区域,拜拍几个pose进行采集。 基于简谐原则…

2023 PWNHUB 3月赛-【tt】

文章目录 setcbuf泄露栈地址转换scanf栈地址思路exp setcbuf 代码 setvbuf(stdin, 0LL, 2, 0LL); setvbuf(stdout, 0LL, 2, 0LL); setvbuf(stderr, 0LL, 2, 0LL); 是用来设置标准输入、标准输出和标准错误流的缓冲模式的。 setvbuf 函数的原型如下: int setvbuf(…

超越标签的探索:K-means与DBSCAN在数据分析中的新视角

最近在苦恼为我的数据决定分组问题,在查找资料时,恰好看到机器学习中的无监督学习的聚类分析,正好适用于我的问题,但是我之前学机器学习时。正好没有学习无监督部分,因为我认为绝大多数问题都是有标签的监督学习&#…

Linux课程四课---Linux第一个小程序(进度条)

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

快速搭建一个一元二次方程flask应用

新建flask_service目录、templates子目录 flask_service —— app.py —— templates —— —— index.html app.py from flask import Flask, request, jsonify, render_template import random import matplotlib.pyplot as plt from io import BytesIO import base64app F…

【全开源】零点城市社交电商系统源码-最新版|博纳软云

零点城市社交电商系统源码——引领未来社交电商新潮流 在当今数字化时代,社交电商已经成为商业领域的一股新势力。零点城市社交电商系统源码,正是这一新潮流的引领者,以其独特的创新理念和强大的技术实力,助力企业快速搭建高效、…

每周编辑精选|微软开源 Orca-Math 高质量数学数据集、清华大学研究团队发布条件去噪扩散模型 SPDiff...

Orca-Math 是微软研究院发布的数学推理模型,该模型展示了较小的专业模型在特定领域的价值,它们可以匹配甚至超越更大模型的性能。微软近期开源了用于训练 Orca-Math 的 Orca-Math-200K 数学单词问题数据集,现已在 hyper.ai 官网提供下载&…

熵权法计算权重

文章目录 1. 多属性决策问题2. 熵(entropy)3. 信息熵4. 熵权法5. 熵权法的实现 基于信息论的熵值法是根据各指标所含信息有序程度的差异性来确定指标权重的客观赋权方法,仅依赖于数据本身的离散程度。 熵用于度量不确定性,指标的离…

机器学习-04-分类算法-04-支持向量机SVM

总结 本系列是机器学习课程的系列课程,主要介绍机器学习中分类算法,本篇为分类算法与SVM算法部分。 本门课程的目标 完成一个特定行业的算法应用全过程: 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程化…