电商产品评论数据感情分析

抽取数据
我们这里先抽取出美的品牌的评论信息:

import pandas as pdinputfile = 'huizong.csv' #评论汇总文件
outputfile = 'meidi_jd.txt' #评论提取后保存路径
data = pd.read_csv(inputfile,encoding = 'gb18030')#python3上面导入中文经常会出错,utf-8不行要用gb18030#提取出美的品牌的数据
data = data[data[u'品牌'] == u'美的']
#提取出美的品牌的评论
data = data[u'评论']
#保存为txt模式,去掉索引号,
data.to_csv(outputfile, index = False, header = False)

评论信息预处理
很多评论是没有价值的,如果将这些评论也引入进行分词,词频统计,情感分析,会对结果的准确性造成很程度的影响,所以要需要预处理:

  1. 文本去重

要去出什么样的评论:
同一个人的重复评论;
系统自动评论;
复制他人的评论

这里处理方法是:比较删除法,直接删除完全相同的评论:

import pandas as pdinputfile = 'meidi_jdzuixin.txt' #评论文件
outputfile = '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('删除了%s条评论。' %(l1 - l2))

删除了2725条评论。

  1. 机械压缩去词

将重复词删除掉,只删除开头或者结尾的重复词

  1. 语句删除

删除掉小于四个字的无用评论比如所“很不错”这些的

模型构建
这里我们假设已经利用COSTCM6把评论分成了“正面情感结果”,“负面情感结果”,“中性情感结果”三类,这里抛弃“中性情感结果”得到的文本名:‘meidi_jd_process_end_neg.txt’和’meidi_jd_process_end_pos.txt’

基于LDA模型的主题分析:
首先,对于COSTCM6得到的结果,有评分前缀:

我们先去除前缀:

import pandas as pd#参数初始化
inputfile1 = 'meidi_jd_process_end_neg.txt'
inputfile2 = 'meidi_jd_process_end_pos.txt'
outputfile1 = 'meidi_jd_negitive123.txt'
outputfile2 = 'meidi_jd_positive123.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')


用jieba分词:

import pandas as pd
import jieba #导入结巴分词,需要自行下载安装#参数初始化
inputfile1 = 'meidi_jd_negitive123.txt'
inputfile2 = 'meidi_jd_positive123.txt'
outputfile1 = 'meidi_jd_neg_cut123.txt'
outputfile2 = 'meidi_jd_pos_cut123.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主题分析:

import pandas as pd#参数初始化
negfile = 'meidi_jd_neg_cut123.txt'
posfile = 'meidi_jd_pos_cut123.txt'
stoplist = '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',engine = 'python')
#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#负面主题分析
"""问题与编号之间的映射,我们称其为字典(Dictionary)。
我们利用gensim.corpora.dictionary.Dictionary类为每个出现在语料库中的单词分配了一个独一无二的整数编号。这个操作收集了单词计数及其他相关的统计信息。
如果想要查看单词与编号之间的映射关系:>>> print(dictionary.token2id)
"""
neg_dict = corpora.Dictionary(neg[2]) #建立词典
print(neg_dict.token2id)   #查看单词与编号之间的映射关系
neg_corpus = [neg_dict.doc2bow(i) for i in neg[2]] #建立语料库
neg_lda = models.LdaModel(neg_corpus, num_topics = 3, id2word = neg_dict) #LDA模型训练
# ldamodel = gensim.models.ldamodel.LdaModel(corpus=corpus, num_topics=3, id2word = dictionary, passes=20)
# corpus: 必须。语料库
# num_topics: 必须。LDA 模型要求用户决定应该生成多少个主题。由于我们的文档集很小,所以我们只生成三个主题;
# id2word:必须。LdaModel 类要求我们之前的 dictionary 把 id 都映射成为字符串;
# passes:可选。模型遍历语料库的次数。遍历的次数越多,模型越精确。但是对于非常大的语料库,遍历太多次会花费很长的时间。
# 调整模型的主题数和遍历次数对于得到一个好的结果是很重要的
for i in range(3): neg_lda.print_topic(i) print(neg_lda.print_topic(i)) #输出每个主题#正面主题分析
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.print_topic(i) #输出每个主题print(pos_lda.print_topic(i))

评论文本被聚成三个主题,每个主题下有十个最可能出现的词:
0.025*“安装” + 0.022*“不错” + 0.020*“热水器” + 0.018*“买” + 0.015*“知道” + 0.014*“美的” + 0.014*“好” + 0.009*“问题” + 0.007*“京东” + 0.006*“师傅”

0.024*“不错” + 0.019*“安装” + 0.019*“加热” + 0.018*“热水器” + 0.016*“买” + 0.013*“有点” + 0.010*“好” + 0.009*“速度” + 0.009*“一个” + 0.008*“热水”

0.059*“安装” + 0.015*“买” + 0.015*“好” + 0.014*“师傅” + 0.013*“热水器” + 0.011*“美的” + 0.010*“京东” + 0.008*“东西” + 0.008*“知道” + 0.008*“送货”

0.105*“好” + 0.086*“不错” + 0.034*“安装” + 0.023*“东西” + 0.022*“送货” + 0.022*“买” + 0.021*“挺” + 0.019*“京东” + 0.016*“美的” + 0.015*“服务”

0.068*“安装” + 0.020*“买” + 0.019*“师傅” + 0.015*“热水器” + 0.015*“安装费” + 0.014*“不错” + 0.012*“高” + 0.011*“美的” + 0.009*“一个” + 0.009*“材料”

0.032*“加热” + 0.022*“不错” + 0.015*“速度” + 0.013*“保温” + 0.013*“安装” + 0.012*“很快” + 0.012*“热水器” + 0.011*“好” + 0.010*“热水” + 0.009*“美的”

从正面评论的第一个主题中的词可以看出,美的品牌较好,质量不错,且京东平台不错;而从第二个主题可以看出美的品牌安装不错;第三个主题中除了安装还体现了加热快这个优点。
负面评论是,安装的问题,主题显示其实很像是优势,这应该跟ROSTCM6的情感分析有关。

《数据分析与挖掘 第十五章 电商产品评论数据感情分析》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. C++作用域为类的常量
  2. 【不会吧不会吧,不会有人真的三分钟入门Python了吧?】Python编程基础
  3. STM32速度---网页讲解
  4. P2408 不同子串个数
  5. mysql 按月和年累加_广西柳州市市场监管局公布市2020年11月(第一批)电梯按需维保试点名单...
  6. 《C语言深度解剖》学习笔记之内存管理
  7. [Python] * 和 ** 的用法
  8. 苏宁11.11:苏宁易购移动端的架构优化实践
  9. 优秀课件笔记——财政学1
  10. OpenCV算法精解3--OpenCV中C++矩阵基本运算
  11. 计算机基础知识思维导图怎么画,怎样在计算机中绘制思维导图的操作过程分享...
  12. winpe硬盘安装linux,winpe+linux安装到移动硬盘
  13. 【求职面试】面试中 HR 经常问到什么样的问题?赶紧看一看!
  14. Android系统的系统运行库层,Android系统框架
  15. Win10 /11 开热点无法上网问题
  16. STM32实现自定义HID复合设备
  17. MATLAB数据预处理之缺失值插补
  18. 2020CCF BDCI 企业非法集资风险预测-线上0.848(水哥的baseline),在此基础已做到线上0.848,排名前1%(参赛队伍3000+))。
  19. overflow:hidden的功能
  20. 轨道交通综合计算机网络,城市轨道交通综合监控系统

热门文章

  1. docker 安装 mssql
  2. Reveal 配置
  3. 人这一生最可怕的,就是突然有一天,听懂了一首歌
  4. c语言均值滤波步骤,关于中值滤波算法,以及C语言实现
  5. 二本计算机考研简单吗,二本考生考研一本院校难不难?不要听那些奇怪论调,而要看这些!...
  6. 【C++】STL常用容器总结之十二:string类
  7. 万豪集团2023年中国市场酒店数量将超500家,进一步布局长三角、大湾区、环渤海 | 美通社头条...
  8. 计算机组成原理试题(二)(附参考答案)
  9. 求组合数(四种方法)
  10. git版本管理软件——git发布补丁和打补丁