原始数据
原始数据为某宝一商品的用户评论数据
绘制词云图
# coding=utf-8 import jieba import re import wordcloud import imageio # 打开需要分析词频的文本 with open('淘宝评论3.0.txt', encoding='utf-8') as f: data = f.read() # 文本预处理 :去除一些无用的字符只提取出中文出来 new_data = re.findall('[\u4e00-\u9fa5]+', data, re.S) new_data = "/".join(new_data) # 文本分词 seg_list_exact = jieba.cut(new_data, cut_all=True) result_list = [] with open('py_code\数据分析\词云图\停用词库.txt', encoding='utf-8') as f: #可根据需要打开停用词库,然后加上不想显示的词语 con = f.readlines() stop_words = set() for i in con: i = i.replace("\n", "") # 去掉读取每一行数据的\n stop_words.add(i) for word in seg_list_exact: if word not in stop_words and len(word) > 1: result_list.append(word) # 导入 imageio 库中的 imread 函数,并用这个函数读取本地图片,作为词云形状图片 py = imageio.imread('果茶.png') # 如何你想要改变词云图的形状,可以添加 # 词云图设置 wc = wordcloud.WordCloud( width=1000, # 图片的宽 height=700, # 图片的高 background_color='white', # 图片背景颜色 font_path='msyh.ttc', # 词云字体 mask=py, # 所使用的词云图片 scale=15, # contour_width=5, # contour_color='red' # 轮廓颜色 ) # 给词云输入文字 data = ' '.join(result_list[:500]) wc.generate(data) # 词云图保存图片地址 wc.to_file('output5.png')
首先对评论数据进行文本预处理,包括去除无用的字符以及停用词,文本分词,最后绘制词云图如下
从词云图中我们可以看出消费者的评价主要集中在口感、包装、味道等进行了高度好评,好喝、不错、很好成为了主流趋势。说明消费者在线上购买水果茶的主要满足感来自果茶的味道、口感以及包装等因素,商家在制作以及销售的过程中应该重点在这几个方面进行加强突破
情感分析
情感分析是对带有感情色彩的主观性文本进行分析、处理、归纳和推理的过程。按照处理文本的类别不同,可分为基于新闻评论的情感分析和基于产品评论的情感分析。其中,前者多用于舆情监控和信息预测,后者可帮助用户了解某一产品在大众心目中的口碑。目前常见的情感极性分析方法主要是两种:基于情感词典的方法和基于机器学习的方法。
我们主要利用第三方库SnowNLP对用户评论做情感分析。主要原理是计算出的情感分数表示语义积极的概率,越接近0情感表现越消极,越接近1情感表现越积极。
基于SnowNLP对用户评论分析的流程
我们先把处理过的评论数据txt文件格式转换为xlsx格式,便于后面的情感分析
import xlwt #.py文件要在和xlwt和xlrd同一层目录,不然报错 import pandas as pd from openpyxl import Workbook work_book = xlwt.Workbook(encoding='utf-8') sheet = work_book.add_sheet('Sheet1') #sheet页第一页 sheet.write(0,0,'用户评论') f = open('淘宝评论.txt', encoding='utf-8') #.py文件和TestCase.txt同一目录,第一个参数是路径 row_excel = 1 #行 data = f.readlines() for line in data: print(line) #测试 sheet.write(row_excel,0,line) row_excel += 1 work_book.save('淘宝评论.xls') #输出在同一目录 f.close()
情感分析
#加载情感分析模块 from snownlp import SnowNLP #from snownlp import sentiment import pandas as pd import matplotlib.pyplot as plt #读取文本数据 df=pd.read_excel('淘宝评论.xls') #提取所有数据 df1=df.iloc[:,0] print('将提取的数据打印出来:\n',df1) # 遍历每条评论进行预测 values=[SnowNLP(i).sentiments for i in df1] #输出积极的概率,大于0.5积极的,小于0.5消极的 #myval保存预测值 myval=[] good=0 bad=0 for i in values: if (i>=0.5): myval.append("正面") good=good+1 else: myval.append("负面") bad=bad+1 df['预测值']=values df['评价类别']=myval #将结果输出到Excel df.to_excel('淘宝评论.xls') rate=good/(good+bad) print('好评率','%.f%%' % (rate * 100)) #格式化为百分比 #作图 y=values plt.rc('font', family='SimHei', size=10) plt.plot(y, marker='o', mec='r', mfc='w',label=u'评价分值') plt.xlabel('用户') plt.ylabel('评价分值') # 让图例生效 plt.legend() #添加标题 plt.title('评论情感分析',family='SimHei',size=14,color='blue') plt.show()
从图中我们可以看出,用户评论情感分析得出的分值主要集中在0.8~1.0之间,说明这1000个样本评论中,正面情感明显多于负面情感。未来更好的观察正面情感的占比情况,我们通过统计出正面情感与负面情感的个数做出来如下饼图。
如图所示,我们不难看出此商品的评论中正面情感占绝大部分,占比85%,即我们可以得出果茶类商品基本可以得到消费者的认可与好评,具有良好的消费者市场基础。