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

目录

  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.mfbz.cn/a/469228.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

讯鹏智能边缘计算网关主机,支持MQTT协议主动上传上位机软件平台

随着科技的不断发展,智能化设备在我们的生活中扮演着越来越重要的角色。而智能边缘计算网关作为连接智能设备与互联网的重要纽带,其远程运维功能为管理者带来了极大的便利。特别是像OkEdge边缘计算网关这样的产品,不仅可以替代传统的Windows系…

Unity中使用AVPro Video播放视频的完全指南

Unity AVPro是一款强大的视频播放解决方案,它支持多种视频格式和编解码器,能够在Unity中实现高质量的视频播放。本教程将指导你如何在Unity项目中使用AVPro播放视频。 目录如下 1、安装AVPro Video2、在UI上显示视频3、在3D物体上显示视频,…

JWT(跨域身份验证解决方案)

Json web token (JWT), 跨域身份验证解决方案,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于…

jQuery 常用API

一、jQuery 选择器 1.1 jQuery 基础选择器 原生 JS 获取元素方式很多,很杂,而且兼容性情况不一致,因此 jQuery 给我们做了封装,使获取元素统一标准。 1.2 jQuery 层级选择器 jQuery 设置样式 1.3 隐式迭代(重要&…

算法打卡day21|回溯法篇01|理论知识,Leetcode 77.组合

回溯法理论知识 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。所以回溯函数也就是递归函数,指的都是一个函数。 回溯法的效率 回溯法并不是什么高效的算法。因为回溯的本质是穷举,…

打靶记录(个人学习笔记)

一、信息收集 1、主机发现 通过nmap对此网段进行扫描,可以确定靶机ip为192.168.189.144 2、端口扫描 确定了靶机ip之后,我们来扫描端口 发现80端口开放,先访问80端口 用插件识别出一些信息 Wappalyzer插件获得信息:Web服务&am…

jquery 列表框可以手动修改(调用接口修改)

类似于这种 直接上代码 列表框 <td>//目的主要是获取属性名的(要更改的属性名) 在下面juqery的这一行(var field $(thisobj).prev(input).attr(name);)有体现<input type"hidden" name"voyage" value"${M_PSI_PERIOD_INFO.port}">…

卓越巨人wzy

解法&#xff1a; 向下取整同理&#xff0c;f(n)20230416-n 当n20230416时&#xff0c;f&#xff08;n&#xff09;0&#xff0c;之后由于向上取整&#xff0c;结果恒为0. #include<iostream> #include<algorithm> #include<vector> using namespace std; …

关系型数据库mysql(1)基础认知和安装

目录 一.数据库的基本概念 1.1数据 1.2表 1.3数据库 1.4 DBMS 数据库管理系统 1.4.1基本功能 1.4.2优点 1.4.3DBMS的工作模式 二.数据库的发展历史 2.1发展的三个阶段 第一代数据库 第二代数据库 第三代数据库 2.2mysql发展历史 三.主流数据库 四.关系型数据库和…

Windows三大认证! NTLM_Relay攻击

Windows有三大认证 NTLM本地认证NTLM网络认证Kerberos域认证 1.Kerberos域认证 对于Kerberos域认证&#xff0c;我之前讲过很多的文章 所以这里就不再赘述了 2.NTLM本地认证 其实就是windows本地登录认证&#xff0c;我之前也讲过&#xff0c;于是也不再赘述了 hhh&#x…

【Lexus】Executive Sedan

文章目录 【基础信息】车漆颜色历年指导价2.5L车型保养 【缺点】混动车型缺点负面 【对比】ES200 vs ES200 龙年限定ES200 vs ES260ES200 vs ES300hES200 vs NX260ES200 vs BMW 325i M 运动曜夜 【Buy】【尺寸】 【基础信息】 丰田&#xff0c;雷克萨斯&#xff0c;1997推出第…

android studio 安装lombok插件

android studio 安装lombok插件 由于 AS 不是基于 IDEA release 版本进行开发的&#xff0c;因此lombok对idea的插件可能再as中无法查看到。因此再as中通过plugins管理无法安装lombok插件。这就导致再gradle引入lombok后&#xff0c;虽然编译可能会通过&#xff0c;但是代码在查…

分布式接口幂等性解析

一、概述 幂等性定义&#xff1a;用户对于同一操作发起的一次请求或者多次请求的结果是一致的&#xff0c;不会因为多次点击而产生了副作用。【同一操作指的是同一个浏览器&#xff0c;发送相同的请求】。 常见场景&#xff1a; 提交订单接口。返回提交结果时网络出现故障&am…

电子元器件行业发展势头强劲,钧崴电子IPO上市抢占市场份额

电子元器件处于电子信息产业链上游&#xff0c;是通信、计算机及网络、数字音视频等系统和终端产品发展的基础&#xff0c;对电子信息产业的发展起着至关重要的作用。近年来中国电子工业持续高速增长&#xff0c;带动电子元器件产业强劲发展。目前&#xff0c;我国许多门类的电…

linux系统------------Mysql数据库

目录 一、数据库基本概念 1.1数据(Data) 1.2表 1.3数据库 1.4数据库管理系统(DBMS) 数据库管理系统DBMS原理 1.5数据库系统&#xff08;DBS) 二、数据库发展史 1、第一代数据库 2、第二代数据库 3、第三代数据库 三、关系型数据库 3.1关系型数据库应用 3.2主流的…

实现:mysql-5.7.42 到 mysql-8.2.0 的升级(rpm方式)

实现&#xff1a;mysql-5.7.42 到 mysql-8.2.0 的升级&#xff08;rpm方式&#xff09; 1、升级准备1、使用mysql-shell 检查工具检查兼容性 2、操作环境3、备份数据库、my.cnf文件&#xff0c;停止mysql服务&#xff08;重要&#xff09;4、上传、解压安装包5、查看已安装的my…

问GPT:将Excel中一行转换为一列的方法

问GPT&#xff1a;将excel中一行转换为一列的方法 函数&#xff1a; TRANSPOSE(A2:E2)

基于SpringBoot+MYSQL的课程作业管理系统

目录 1、前言介绍 2、主要技术 3、系统流程分析 3.1、操作流程 3.2、添加信息流程 3.3、删除信息流程 4、系统设计 5、数据库设计 6、数据表 6、运行截图(部分) 6.1、管理员功能模块 6.2、教师功能模块 7、源码获取 基于springboot的课程作业管理系统 1、前言介绍 …

VBA之Word应用:利用Bookmark属性返回选择区域的开始和结束位置

《VBA之Word应用》&#xff08;版权10178982&#xff09;&#xff0c;是我推出第八套教程&#xff0c;教程是专门讲解VBA在Word中的应用&#xff0c;围绕“面向对象编程”讲解&#xff0c;首先让大家认识Word中VBA的对象&#xff0c;以及对象的属性、方法&#xff0c;然后通过实…

2024年新算法:基于牛顿-拉夫逊优化器NRBO的城市三维无人机路径规划(复杂地形三维航迹路径规划)

摘要&#xff1a;本文提出了一种利用牛顿-拉夫逊优化器&#xff08;Newton-Raphson-based optimizer&#xff0c;NRBO&#xff09;来解决城市环境下无人机三维路径规划问题的方法。这种方法将复杂的无人机航迹规划任务转化为一个优化问题&#xff0c;然后运用牛顿-拉夫逊优化器…