《Python数据分析与挖掘实战》第15章 ——电商产品评论数据情感分
2021/7/1 20:23:22
本文主要是介绍《Python数据分析与挖掘实战》第15章 ——电商产品评论数据情感分,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 1.挖掘背景与目标
- 2.2 数据探索与预处理
-
* 2.1 数据筛选
- 2.2 数据去重
- 2.3 删除前缀评分
- 2.4 jieba分词
- 3 基于LDA 模型的主题分析
- 4.权重
- 5.如何在主题空间比较两两文档之间的相似度
本文是基于《Python数据分析与挖掘实战》的实战部分的第15章的数据——《电商产品评论数据情感分析》做的分析。
旨在回顾对评论文本数据的处理和建模方法。
1.挖掘背景与目标
对京东平台上的热水器评论进行文本挖掘分析,挖掘建模如下:
-
分析某一个品牌热水器的用户情感倾向
-
从评论文本中挖掘出该品牌热水器的优点和不足
-
提炼不同品牌热水器的卖点
2.2 数据探索与预处理
2.1 数据筛选
#-*- coding: utf-8 -*- import pandas as pd inputfile = '../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')
2.2 数据去重
#-*- coding: utf-8 -*- import pandas as pd inputfile = '../data/meidi_jd.txt' #评论文件 outputfile = '../data/meidi_jd_process_1.txt' #评论处理后保存路径 data = pd.read_csv(inputfile, encoding = 'utf-8', header = None,sep = 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))
安利一款可以做情感分析的软件叫做:ROST CM6,注意你提交的文件必须是ANSI编码,否则处理后的文件会乱码
2.3 删除前缀评分
#-*- 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')
删除前
删除后
![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=20190823123110736.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzc0NjQzMw==,size_16,color_FFFFFF,t_70)
2.4 jieba分词
#-*- 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')
3 基于LDA 模型的主题分析
https://blog.csdn.net/sinat_26917383/article/details/79357700#1__27
#-*- coding: utf-8 -*- import pandas as pd # 修改默认编码 import sys sys.getdefaultencoding() # 查看当前编码格式 # 报错时(AttributeError: 'module' object has no attribute 'setdefaultencoding') #参数初始化 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): # #print(neg_lda.show_topics())#展示主题 # 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): # #print(pos_lda.show_topics())#展示主题 # print(pos_lda.print_topic(i)) for i in neg_lda.show_topics(): print(i[0], i[1]) for i in pos_lda.show_topics(): print(i[0], i[1])
根据对美的热水器好评的3个潜在主题的特征词提取:
主题1中的高频特征词,即很好、送货快、加热、速度、很快、服务和非常等,主要反映京东送货快、服务非常好;美的热水器加热速度快;
主题2中的高频特征词,即热门关注点主要是价格、东西和值得等,主要反映美的热水器不错,价格合适值得购买等;
主题3中的高频特征词,即热门关注点主要是售后、师傅、上门和安装等,主要反映京东的售后服务以及师傅上门安装等。
从美的热水器差评的3个潜在主题中,我们可以看出:
主题1中的高频特征词主要是安装、服务、元等,即主题1主要反映的是美的热水器安装收费高、热水器售后服务不好等;
主题2中的高频特征词主要是不过、有点、还可以等情感词汇;
主题3主要反映的是美的热水器可能不满足其需求等;主题3中的高频特征词主要是没有、但是、自己等,主题3可能主要反映美的热水器自己安装等。
综合以上对主题及其中的高频特征词可以看出,美的热水器的 优势 有以下几个方面:
价格实惠、性价比高、外观好看、热水器实用、使用起来方便、加热速度快、服务好 。
相对而言,用户对美的热水器的 抱怨点 主要体现以下几个方面:
美的热水器安装的费用贵及售后服务等 。
因此,用户的购买原因可以总结为以下几个方面:美的大品牌值得信赖,美的热水器价格实惠,性价比高。
根据对京东平台上美的热水器的用户评价情况进行LDA主题模型分析,我们对美的品牌提出以下 建议 。
1)在保持热水器使用方便、价格实惠等优点的基础上,对热水器进行改进,从整体上提升热水器的质量。
2)提升安装人员及客服人员的整体素质,提高服务质量。安装费用收取明文细则,并进行公开透明,减少安装过程的乱收费问题。适度降低安装费用和材料费用,以此在大品牌的竞争中凸显优势。
4.权重
for i in range(3): print(pos_lda.print_topic(i, topn=5)) # 权重TOP5 for i in neg_lda.show_topics(num_topics=2, num_words=10, log=False, formatted=True): #权重TOP2或者100主题中,权重为TOP2的主题词汇 print(i[0], i[1])
5.如何在主题空间比较两两文档之间的相似度
import numpy as np topics =[pos_lda[c] for c in pos_corpus] dense = np.zeros((len(topics),100),float) for ti,t in enumerate(topics): for tj,v in t: dense[ti,tj] = v # 得到的是dense[文档id,主题id]=某文档在某主题的权重 print(dense)
![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=20190823143233596.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzc0NjQzMw==,size_16,color_FFFFFF,t_70)
这篇关于《Python数据分析与挖掘实战》第15章 ——电商产品评论数据情感分的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Python基础编程
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南