数据挖掘案例实战:利用LDA主题模型提取京东评论数据(一)

2023-10-30

泰迪智能科技(数据挖掘平台:TipDM数据挖掘平台)最新推出的数据挖掘实战专栏

专栏将数据挖掘理论与项目案例实践相结合,可以让大家获得真实的数据挖掘学习与实践环境,更快、更好的学习数据挖掘知识与积累职业经验

专栏中每四篇文章为一个完整的数据挖掘案例。案例介绍顺序为:先由数据案例背景提出挖掘目标,再阐述分析方法与过程,最后完成模型构建,在介绍建模过程中同时穿插操作训练,把相关的知识点嵌入相应的操作过程中。

为方便读者轻松地获取一个真实的实验环境,本专栏使用大家熟知的Python语言对样本数据进行处理以进行挖掘建模。
————————————————

本篇主要针对用户在电商平台上留下的评论数据,对其进行分词、词性标注和去除停用词等文本预处理。基于预处理后的数据进行情感分析,并使用LDA主题模型提取评论关键信息,了解用户的需求、意见、购买原因,以及产品的优缺点,最终提出改善产品的建议。

网上购物已经成为大众生活的重要组成部分。人们在电商平台上浏览商品和购物,产生了海量的用户行为数据,其中用户对商品的评论数据对商家具有重要的意义。利用好这些碎片化、非结构化的数据,将有利于企业在电商平台上的持续发展,对这部分数据进行分析,依据评论数据来优化现有产品也是大数据在企业经营中的实际应用。

 背景与挖掘目标

随着电子商务的迅速发展和网络购物的流行,人们对于网络购物的需求变得越来越高,也给电商企业带来巨大的发展机遇,与此同时,这种需求也推动了更多电商企业的崛起,引发了激烈的竞争。而在这种激烈竞争的大背景下,除了提高商品质量、压低价格外,了解更多消费者的心声对电商企业来说也变得越来越有必要。其中非常重要的方式就是对消费者的评论文本数据进行内在信息的分析。

评论信息中蕴含着消费者对特定产品和服务的主观感受,反应了人们的态度、立场和意见,具有非常宝贵的研究价值。一方面,对企业来说,企业需要根据海量的评论文本数据去更好的了解用户的个人喜好,从而提高产品质量,改善服务,获取市场上的竞争优势。另一方面,消费者需要在没有看到真正的产品实体、做出购买决策之前,根据其他购物者的评论了解产品的质量、性价比等信息,为购物抉择提供参考依据。

请根据提供的数据实现以下目标。

(1) 对京东商城中美的电热水器的评论进行情感分析。

(2) 从评论文本中挖掘出用户的需求、意见,购买原因以及产品的优缺点。

(3) 根据模型结果给出改善产品的建议。

分析方法与过程

图1为电商产品评论数据情感分析流程,主要步骤如下。

(1) 利用Python对京东商城中美的电热水器的评论进行爬取。

(2) 利用Python爬取到的京东商城中美的电热水器的评论数据,对评论文本数据进行数据清洗、分词、停用词过滤等操作。

(3) 对预处理后的数据进行情感分析,将评论文本数据按照情感倾向分为正面评论数据(好评)和负面评论数据(差评)。

(4) 分别对正、负面评价数据进行LDA主题分析,从对应的结果分析文本评论数据中有价值的内容。

图1  电商产品评论数据情感分析流程

1.评论预处理

对京东商城中美的热水器评论数据进行预处理前,需要先对评论数据进行采集。本案例利用Python网络爬虫技术对京东商城中美的热水器评论数据进行采集。由于本案例的重点是对电商产品评论数据情感分析,且网络数据的爬取具有时效性,因此,本案例不再详细介绍数据的采集过程。以下分析所使用的数据与分析结果,仅作为范例参考。

(1)评论去重

一些电商平台往往为了避免一些客户长时间不进行评论,会设置一道程序,如果用户超过规定的时间仍然没有做出评论,系统会自动替客户做出评论,这类数据显然没有任何分析价值。

由语言的特点可知,在大多数情况下,不同购买者之间的有价值的评论都不会出现完全重复,如果出现了不同购物者的评论完全重复,这些评论一般都是毫无意义的。这种评论显然只有最早的评论才有意义(即只有第一条有作用)。

部分评论相似程度极高,可是在某些词语的运用上存在差异。此类评论可归为重复评论,若是删除文字相近评论,则会出现误删的情况。由于相近的评论也存在不少有用的信息,去除这类评论显然不合适。因此,为了存留更多的有用语料,本节针对完全重复的语料下手,仅删除完全重复部分,以确保尽可能保留有用的文本评论信息。评论去重的代码如代码清单1所示。

代码清单1  评论去重的代码

  • pandas as pdimport reimport jieba.posseg as psgimport numpy as np # 去重,去除完全重复的数据reviews = pd.read_csv("../tmp/reviews.csv")reviews = reviews[['content', 'content_type']].drop_duplicates()content = reviews['content']

运行代码清单1可知,美的热水器的评论共2000条,经过文本去重,共删除重复评论26条,剩余评论1974条。

(2)数据清洗

通过人工观察数据发现,评论中夹杂许多数字与字母,对于本案例挖掘目标而言,这类数据本身没有实质性帮助。另外,由于该评论文本数据主要围绕京东商城中美的电热水器进行评价,其中“京东”“京东商城”“美的”“热水器”“电热水器”等词出现的频数很大,但是对分析目标并没有什么作用,因此可以在分词之前将这些词去除,对数据进行清洗,如代码清单2所示。

代码清单2 数据清洗

# 去除英文、数字等# 由于评论主要为京东美的电热水器的评论,因此去除这些词语strinfo = re.compile('[0-9a-zA-Z]|京东|美的|电热水器|热水器|')content = content.apply(lambda x: strinfo.sub('', x))

 下一篇将发布:利用LDA主题模型提取京东评论数据(二)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据挖掘案例实战:利用LDA主题模型提取京东评论数据(一) 的相关文章

  • 尽管极其懒惰,但如何在 Python 中模拟 IMAP 服务器?

    我很好奇是否有一种简单的方法来模拟 IMAP 服务器 例如imaplib模块 在Python中 without做很多工作 是否有预先存在的解决方案 理想情况下 我可以连接到现有的 IMAP 服务器 进行转储 并让模拟服务器在真实的邮箱 电子
  • Python BigQuery 存储。并行读取多个流

    我有以下玩具代码 import pandas as pd from google cloud import bigquery storage v1beta1 import os import google auth os environ G
  • Django REST序列化器:创建对象而不保存

    我已经开始使用 Django REST 框架 我想做的是使用一些 JSON 发布请求 从中创建一个 Django 模型对象 然后使用该对象而不保存它 我的 Django 模型称为 SearchRequest 我所拥有的是 api view
  • 将字符串转换为带有毫秒和时区的日期时间 - Python

    我有以下 python 片段 from datetime import datetime timestamp 05 Jan 2015 17 47 59 000 0800 datetime object datetime strptime t
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • 在循环中每次迭代开始时将变量重新分配给原始值(在循环之前定义)

    在Python中 你使用 在每次迭代开始时将变量重新分配给原始值 在循环之前定义 时 也就是说 original 1D o o o for i in range 0 3 new original 1D revert back to orig
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • 在pyyaml中表示具有相同基类的不同类的实例

    我有一些单元测试集 希望将每个测试运行的结果存储为 YAML 文件以供进一步分析 YAML 格式的转储数据在几个方面满足我的需求 但测试属于不同的套装 结果有不同的父类 这是我所拥有的示例 gt gt gt rz shorthand for
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方
  • 使用基于正则表达式的部分匹配来选择 Pandas 数据帧的子数据帧

    我有一个 Pandas 数据框 它有两列 一列 进程参数 列 包含字符串 另一列 值 列 包含相应的浮点值 我需要过滤出部分匹配列 过程参数 中的一组键的子数据帧 并提取与这些键匹配的数据帧的两列 df pd DataFrame Proce
  • Spark.read 在 Databricks 中给出 KrbException

    我正在尝试从 databricks 笔记本连接到 SQL 数据库 以下是我的代码 jdbcDF spark read format com microsoft sqlserver jdbc spark option url jdbc sql

随机推荐