一、背景和目标

本文对电商平台上的热水器评论进行文本挖掘分析,本次数据挖掘的建模目标如下:

  1. 分析某一品牌热水器的用户情感倾向。
  2. 从评论文本中挖掘出该品牌热水器的优点和不足。
  3. 提炼不同品牌热水器的卖点。

二、方法步骤

  1. 利用爬虫工具——八爪鱼采集器,对京东商城进行热水器评论的数据采集。
  2. 对获取的数据进行基本的处理操作,包括数据预处理、中文分词、停用词过滤等。
  3. 文本评论数据经过处理后,运用多种手段对评论数据进行多方面的分析。
  4. 从对应结果的分析中获取文本评论数据中有价值的内容。

三、过程

3.1 评论数据采集

要分析电商平台热水器的评论数据,需要先对评论数据进行采集,对比多种网络爬虫工具后,发现八爪鱼采集器属于“易用型”,它主要通过模仿用户的网页操作进行数据采集,只需指定数据采集逻辑和可视化采集的数据,即可完成采集规则的制定。因此在此,选择八爪鱼采集器作为网页数据的抓取工具。

3.2 评论预处理

3.21 对象评论抽取

将评论为“美的”的“评论一列抽取”,编码每UTF-8格式。

#-*- coding: utf-8 -*-
import pandas as pdinputfile = '.../data/huizong.csv' #评论汇总文件
outputfile = '.../data/meidi_jd.txt' #评论提取后保存路径
data = pd.read_csv(inputfile, encoding = 'utf-8')
data = data[[u'评论']][data[u'品牌'] == u'美的']
data.to_csv(outputfile, index = False, header = False, encoding = 'utf-8')

3.22 文本去重

#-*- coding: utf-8 -*-
import pandas as pdinputfile = '.../data/meidi_jd.txt' #评论文件
outputfile = '.../data/meidi_jd_process_1.txt' #评论处理后保存路径
data = pd.read_csv(inputfile, encoding = 'utf-8', header = None)
l1 = len(data)
data = pd.DataFrame(data[0].unique())
l2 = len(data)
data.to_csv(outputfile, index = False, header = False, encoding = 'utf-8')
print(u'删除了%s条评论。' %(l1 - l2))

3.23 机械压缩去词语

例如:

好用,好用,好用,好用!

变为:好用!

3.24 短句删除

字数越少,表达的意思越少,要表达相关的意思就必须有相应量的字数,过少字数的评论是没有什么意义的,如“很不错”等,为此将过短的评论文本数据删除,以除去没有意义的评论。

显然,短句删除最重要的环节是保留评论的字数下限的确定,这个没有精确的标准,一般4~8个国际字符都是比较合理的,这里设置下限度为4,即语料小于4个国际字符的则删去。

3.3 文本评论的分词

分词结果的准确性对后续文本挖掘算法有着不可忽视的影响。本文采用python中的中文分词包“jieba”(结巴分词),对TXT文档进行分词。“结巴分词”提供分词、词性标注、未登录词识别,支持用户词典等功能。经相关测试,此系统的分词精度高达97%以上。

3.4 模型构建

3.41 情感倾向性模型介绍

  1. 训练生成词向量
  2. 评论集子集的仍标注与映射
  3. 训练栈式自编码网络

3.42 基于语义网络的评论分析

步骤:

  1. 数据预处理,分词以及对停用词的过滤。
  2. 进行情感倾向性分析,并将评论数据分割成正面(好评)、负面(差评)、中性(中评)3大组。(可用武汉大学开发的免费系统:ROSTCM6 来完成)
  3. 抽取正面(好评)、负面(差评)两组,以进行语义网格的构建与分析。(可用武汉大学开发的免费系统:ROSTCM6 来完成)

3.43 基于LDA模型的主题分析

由于COSTCM6 得到的结果还有评分前缀,所以对开头的评分前缀和空格进行删除。

删除前缀评分代码:

#-*- coding: utf-8 -*-
import pandas as pd#参数初始化
inputfile1 = '.../data/meidi_jd_process_end_负面情感结果.txt'
inputfile2 = '.../data/meidi_jd_process_end_正面情感结果.txt'
outputfile1 = '.../data/meidi_jd_neg.txt'
outputfile2 = '.../data/meidi_jd_pos.txt'data1 = pd.read_csv(inputfile1, encoding = 'utf-8', header = None) #读入数据
data2 = pd.read_csv(inputfile2, encoding = 'utf-8', header = None)data1 = pd.DataFrame(data1[0].str.replace('.*?\d+?\\t ', '')) #用正则表达式修改数据
data2 = pd.DataFrame(data2[0].str.replace('.*?\d+?\\t ', ''))data1.to_csv(outputfile1, index = False, header = False, encoding = 'utf-8') #保存结果
data2.to_csv(outputfile2, index = False, header = False, encoding = 'utf-8')

分词代码:

#-*- coding: utf-8 -*-
import pandas as pd
import jieba #导入结巴分词,需要自行下载安装#参数初始化
inputfile1 = '.../data/meidi_jd_neg.txt'
inputfile2 = '.../data/meidi_jd_pos.txt'
outputfile1 = '.../data/meidi_jd_neg_cut.txt'
outputfile2 = '.../data/meidi_jd_pos_cut.txt'data1 = pd.read_csv(inputfile1, encoding = 'utf-8', header = None) #读入数据
data2 = pd.read_csv(inputfile2, encoding = 'utf-8', header = None)mycut = lambda s: ' '.join(jieba.cut(s)) #自定义简单分词函数
data1 = data1[0].apply(mycut) #通过“广播”形式分词,加快速度。
data2 = data2[0].apply(mycut)data1.to_csv(outputfile1, index = False, header = False, encoding = 'utf-8') #保存结果
data2.to_csv(outputfile2, index = False, header = False, encoding = 'utf-8')

LDA代码:

#-*- coding: utf-8 -*-
import pandas as pd# 修改当前工作路径
import os
print(os.getcwd())  # 查看当前工作路径
os.chdir('D:/demo')  # 修改路径
print(os.getcwd())  # 查看当前工作路径# 修改默认编码
import sys
sys.getdefaultencoding()  # 查看当前编码格式
# 报错时(AttributeError: 'module' object has no attribute 'setdefaultencoding')
reload(sys)  # 报上面的错时,执行此命令
sys.setdefaultencoding('utf8')  # 修改编码格式#参数初始化
negfile = '.../data/meidi_jd_neg_cut.txt'
posfile = '.../data/meidi_jd_pos_cut.txt'
stoplist = '.../data/stoplist.txt'neg = pd.read_csv(negfile, encoding = 'utf-8', header = None) #读入数据
pos = pd.read_csv(posfile, encoding = 'utf-8', header = None)
stop = pd.read_csv(stoplist, encoding = 'utf-8', header = None, sep = 'tipdm')
#sep设置分割词,由于csv默认以半角逗号为分割词,而该词恰好在停用词表中,因此会导致读取出错
#所以解决办法是手动设置一个不存在的分割词,如tipdm。
stop = [' ', ''] + list(stop[0]) #Pandas自动过滤了空格符,这里手动添加neg[1] = neg[0].apply(lambda s: s.split(' ')) #定义一个分割函数,然后用apply广播
neg[2] = neg[1].apply(lambda x: [i for i in x if i not in stop]) #逐词判断是否停用词,思路同上
pos[1] = pos[0].apply(lambda s: s.split(' '))
pos[2] = pos[1].apply(lambda x: [i for i in x if i not in stop])from gensim import corpora, models#负面主题分析
neg_dict = corpora.Dictionary(neg[2]) #建立词典
neg_corpus = [neg_dict.doc2bow(i) for i in neg[2]] #建立语料库
neg_lda = models.LdaModel(neg_corpus, num_topics = 3, id2word = neg_dict) #LDA模型训练
for i in range(3):neg_lda.show_topics()#展示主题#正面主题分析
pos_dict = corpora.Dictionary(pos[2])
pos_corpus = [pos_dict.doc2bow(i) for i in pos[2]]
pos_lda = models.LdaModel(pos_corpus, num_topics = 3, id2word = pos_dict)
for i in range(3):pos_lda.show_topics()#展示主题

结果展示:

neg_lda.show_topics()#展示正面主题
Out[48]:
[(0,'0.029*"加热" + 0.029*"不错" + 0.021*"热水器" + 0.013*"速度" + 0.011*"京东" + 0.010*"好" + 0.010*"买" + 0.007*"慢" + 0.006*"安装" + 0.006*"有点"'),(1,'0.057*"安装" + 0.020*"热水器" + 0.016*"师傅" + 0.015*"不错" + 0.015*"美的" + 0.013*"好" + 0.011*"买" + 0.011*"问题" + 0.010*"东西" + 0.008*"京东"'),(2,'0.040*"安装" + 0.028*"买" + 0.022*"知道" + 0.015*"好" + 0.010*"师傅" + 0.009*"有点" + 0.008*"热水器" + 0.008*"安装费" + 0.008*"一个" + 0.008*"n"')]pos_lda.show_topics()#展示负面主题
Out[49]:
[(0,'0.038*"好" + 0.035*"加热" + 0.020*"方便" + 0.017*"很快" + 0.017*"不错" + 0.016*"有点" + 0.016*"好用" + 0.014*"保温" + 0.011*"热水" + 0.011*"使用"'),(1,'0.057*"安装" + 0.022*"买" + 0.017*"师傅" + 0.016*"美的" + 0.014*"热水器" + 0.014*"一个" + 0.011*"安装费" + 0.008*"n" + 0.008*"材料" + 0.008*"售后"'),(2,'0.098*"不错" + 0.090*"好" + 0.042*"安装" + 0.023*"送货" + 0.022*"东西" + 0.021*"买" + 0.018*"热水器" + 0.017*"挺" + 0.017*"京东" + 0.015*"服务"')]

经过LDA主题分析后,评论文本被聚成3个主题,每个主题下生成10个最有可能出现的词语及相应的概率。

心得体会:

1、爬取数据的工具还有其他,经检验,“后裔采集器”个人完全免费,且速度相对较快(据说八爪鱼1分钟10条),且还比较好用,建议使用。

2、ROSTCM6 中,以下文件均需要(不能删除,都是软件的一部分):

3、jieba 分词的3种:

1) 精确模式:试图将语句最精确的切分,不存在冗余数据,适合做文本分析

seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("【精确模式】: " + "/ ".join(seg_list))
或者:
seg_list = jieba.cut("我来到北京清华大学") # 默认是精确模式
print("【精确模式】: " + "/ ".join(seg_list))输出:【精确模式】: 我/ 来到/ 北京/ 清华大学

2) 全模式:将语句中所有可能是词的词语都切分出来,速度很快,但是存在冗余数据

seg_list = jieba.cut("我来到北京清华大学", cut_all=True)  # 全模式输出:【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学

3) 搜索引擎模式:在精确模式的基础上,对长词再次进行切分

seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所")  # 搜索引擎模式输出:【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所

Chapter 15 电商产品评论数据情感分析相关推荐

  1. 《Python数据分析与挖掘实战》第15章 ——电商产品评论数据情感分析(LED)

    文章目录 1.挖掘背景与目标 2.2 数据探索与预处理 2.1 数据筛选 2.2 数据去重 2.3 删除前缀评分 2.4 jieba分词 3 基于LDA 模型的主题分析 4.权重 5.如何在主题空间比 ...

  2. 基于电商产品评论数据情感分析

    #!/usr/bin/env python # coding: utf-8# # -- 基于电商产品评论数据情感分析 --# ### 1.案例简介 # # 1.利用文本挖掘技术,对碎片化.非结构化的电 ...

  3. 数据分析与挖掘:电商产品评论数据情感分析

    电商产品评论数据情感分析 1. 背景与挖掘目标 2. 分析方法与过程 2.1 数据抽取 2.2 评论预处理 2.3 LDA 主题分析 1. 背景与挖掘目标 项目为<Python 数据分析与挖掘实 ...

  4. 数据挖掘实战—电商产品评论数据情感分析

    文章目录 引言 一.评论预处理 1.评论去重 2.数据清洗 二.评论分词 1.分词.词性标注.去除停用词 2.提取含名词的评论 3.绘制词云查看分词效果 三.构建模型 1.评论数据情感倾向分析 1.1 ...

  5. 数据分析与挖掘实战-电商产品评论数据情感分析

    电商产品评论数据情感分析 背景 随着网上购物越来越流行,人们对于网上购物的需求越来越高,这让京东.淘宝等电商平台得到了很大的发展机遇.但是,这种需求也推动了更多的电商平台的崛起,引发了激烈的竞争.在这 ...

  6. 毕业设计之 - 大数据分析:电商产品评论数据情感分析

    文章目录 1 简介 数据分析目的 数据预处理 评论去重 数据清洗 分词.词性标注.去除停用词 提取含名词的评论 绘制词云¶ 词典匹配 评论数据情感倾向分析 修正情感倾向 LinearSVC模型预测情感 ...

  7. 数据挖掘作业学习学习笔记-电商产品评论数据情感分析

    使用的教材:<电商产品评论数据情感分析> 作业&学习笔记:数据挖掘第14周 说明:书本内容详实.此篇用于自己期末回顾知识的重点内容,故做出的学习笔记缺省了书本原本的其他精粹. 随着 ...

  8. 【项目实战】Python实现基于LDA主题模型进行电商产品评论数据情感分析

    说明:这是一个机器学习.数据挖掘实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 视频: Python实现基于LDA模型进行电商产品评论数据情感分析 ...

  9. Python文本挖掘练习(五)// 电商产品评论数据情感分析

    第一部分 案例简介 本案例首先利用Python文本挖掘技术,对碎片化.非结构化的电商网站评论数据进行清洗与处理,转化为结构化数据.然后对文本数据进一步挖掘与分析,采用决策树算法构建情感分类模型,探索用 ...

  10. R语言实验---电商产品评论数据情感分析

    文章目录 前言 一.案例背景 二.代码 1.数据爬取 2.数据预处理 3.数据分析(情感倾向) 4.使用LDA模型进行主题分析 总结 前言 开篇碎碎念:R语言老师出的实验题,在原本代码的基础上进行修改 ...

最新文章

  1. deepin开通ssh
  2. C# 手动/自动保存图片
  3. 一站式Web开发套件BeetleX.WebFamily
  4. Linux Select
  5. java byte 图片浏览器直接显示_在imge控件中直接显示图片(图片是byte[]格式)
  6. 全球首款5G手机出炉?其实只是一个笑话
  7. PHP学习随笔(3):数组
  8. linux openssh 升级最新版本
  9. PHP程序员求职的一点思考
  10. php 不通过表单post,php – 简单表单不通过_POST发送数据
  11. windbg+vm双机调试 waiting to reconnect 无法连接问题,解决办法
  12. tcpdump抓包分析
  13. 这是我转载的一篇,真的是不错《把SWF变回FLA》大家可以试试
  14. java加token实现单点登录
  15. Python-字符串
  16. MYSQL中如何创建存储过程和存储函数(上篇)
  17. HTML外边框塌陷什么意思,html-margin塌陷 :
  18. Matlab/Simulink代码生成到dsp系列(一)基础配置
  19. windows 防止屏保锁屏脚本工具
  20. cf 985E Pencils and Boxes

热门文章

  1. qt的信号和槽通信机制(当多个窗口之间来回通信[父窗口和子窗口])
  2. svn server配置与TortoiseSVN、Ankhsvn+VS使用
  3. 学生管理系统(源码)(C语言版)
  4. 基于.net平台的Windows窗体应用程序——(已附源码)学生管理系统
  5. 线性代数及其应用:绪论
  6. Excel--学习VB编程之旅
  7. 赚不到钱的5大原因!
  8. html5留言板网页设计,网页设计制作-留言板
  9. php匹配ubb,php创建属于自己的UBB代码
  10. iocomp控件 Crack V512-sp6