python 进行文本情感分析

wordcloud安装参考:下载安装wordcloud
snownlp安装参考:下载安装snownlp
jieba安装参考:使用码云下载Github文件
wordcloud强调python版本,snownlp和jieba不强调版本,我装的都是python3.6下的。
数据:和鲸社区数据-京东2k条评论

import pandas as pd
data = pd.read_csv('C:/Users/admin/Desktop/新建文件夹/京东评论数据.csv')
data.head(2)
sku_id _id item_name comment_id content creation_time reply_count score useful_vote_count useless_vote_count ... user_province nickname user_level_name user_client user_client_show is_mobile days reference_time after_days after_user_comment
0 7534113 03b51aa9-2b5e-41c3-a40b-343164a1d23a comment 11801751173 还可以刷脸解锁,帮朋友买的,她很满意 2018-08-13 12:24:59 0 5 0 0 ... NaN k***0 PLUS会员 2 来自京东iPhone客户端 1.0 4.0 2018-08-09 13:38:15 0.0 NO_MESSAGE
1 7534113 03b51aa9-2b5e-41c3-a40b-343164a1d23a comment 11525358140 第一次买vivo,真心不错,1498的机子,没想到照相很清晰,性价比很高,买值了,还送了小音... 2018-05-27 17:49:17 7 5 19 0 ... NaN 呢***呐 PLUS会员 4 来自京东Android客户端 1.0 5.0 2018-05-22 09:32:37 0.0 NO_MESSAGE

2 rows × 21 columns

data1 = data[['sku_id','content']]
data1.head(10)
sku_id content
0 7534113 还可以刷脸解锁,帮朋友买的,她很满意
1 7534113 第一次买vivo,真心不错,1498的机子,没想到照相很清晰,性价比很高,买值了,还送了小音...
2 7534113 手机好用快递送的快。
3 8240587 手机收到。外观设计很好!美观大方。我喜欢!一直使用华为手机。从荣耀七,荣耀八,荣耀九。反正一...
4 5942439 收到了,挺好的,声音大,电池大,好用发货速度快,非常满意,好好好。
5 5089275 本来觉得双十一还会便宜的,想不到和11月初的价格差不多,想想还是感觉入手了,早买早享受。我的...
6 7081550 没有真正意义上的窄边框,不过已经不错了,手机流畅,另外还有51G空间可用,同时试了下近距拍摄...
7 5663902 幻夜黑颜色很漂亮,2.5D屏幕,圆润。2K屏很清晰,惊艳
8 7283905 特地用了一段时间才来评价,这手机值得这个价钱,打游戏还行,就是电池很不耐用,摄像头也很突出,...
9 5001213 机器没得说,价格也合理,虽说仍有不足,但还是比较满意的,首发就抢到了,暂时发现的不足就是扬声...

情感分析

from snownlp import SnowNLP
data1['emotion'] = data1['content'].apply(lambda x:SnowNLP(x).sentiments)
data1.head(10)
E:\Anconda\programfiles\lib\site-packages\ipykernel\__main__.py:2: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  from ipykernel import kernelapp as app
sku_id content emotion
0 7534113 还可以刷脸解锁,帮朋友买的,她很满意 0.470635
1 7534113 第一次买vivo,真心不错,1498的机子,没想到照相很清晰,性价比很高,买值了,还送了小音... 0.999999
2 7534113 手机好用快递送的快。 0.561609
3 8240587 手机收到。外观设计很好!美观大方。我喜欢!一直使用华为手机。从荣耀七,荣耀八,荣耀九。反正一... 0.868183
4 5942439 收到了,挺好的,声音大,电池大,好用发货速度快,非常满意,好好好。 0.983088
5 5089275 本来觉得双十一还会便宜的,想不到和11月初的价格差不多,想想还是感觉入手了,早买早享受。我的... 0.984574
6 7081550 没有真正意义上的窄边框,不过已经不错了,手机流畅,另外还有51G空间可用,同时试了下近距拍摄... 0.956682
7 5663902 幻夜黑颜色很漂亮,2.5D屏幕,圆润。2K屏很清晰,惊艳 0.999839
8 7283905 特地用了一段时间才来评价,这手机值得这个价钱,打游戏还行,就是电池很不耐用,摄像头也很突出,... 0.996540
9 5001213 机器没得说,价格也合理,虽说仍有不足,但还是比较满意的,首发就抢到了,暂时发现的不足就是扬声... 0.992436
data1.describe()
sku_id emotion
count 3.637000e+03 3637.000000
mean 7.936312e+09 0.746161
std 1.165137e+10 0.354481
min 1.592994e+06 0.000000
25% 5.920651e+06 0.562240
50% 7.651903e+06 0.962449
75% 2.034912e+10 0.999123
max 3.032369e+10 1.000000

emotion平均值为0.74,中位数为0.96,25%分位数为0.56,可见不到25%的数据造成了整体均值的较大下移。

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False

bins=np.arange(0,1.1,0.1)
plt.hist(data1['emotion'],bins,color='#4F94CD',alpha=0.9)
plt.xlim(0,1)
plt.xlabel('情感分')
plt.ylabel('数量')
plt.title('情感分直方图')
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sptxJnq5-1591712744516)(output_6_0.png)]

由直方图可见,评论内容两级分化较为严重。
3637条评论中有约2200条评论情感分在[0.9,1]区间内;同时,有约500条评论情感分在[0,0.1]区间内。

from wordcloud import WordCloud
import jieba
w = WordCloud(font_path="msyh.ttc")   #font_path="msyh.ttc",设置字体,否则显示不出来
text = ''
for s in data['content']:
    text += s
data_cut = ' '.join(jieba.lcut(text))
w.generate(data_cut)
image = w.to_file('词云图.png')

在这里插入图片描述
WordCloud各参数:https://blog.csdn.net/yaochuyi/article/details/80094659

#关键词top10
from jieba import analyse 
key_words = jieba.analyse.extract_tags(sentence=text, topK=10, withWeight=True, allowPOS=())
key_words
[('手机', 0.20904023041744998),
 ('不错', 0.10491967558213072),
 ('京东', 0.09431019624843097),
 ('屏幕', 0.054966423247022445),
 ('华为', 0.05061411737589104),
 ('小米', 0.04731076382922812),
 ('拍照', 0.04647606302614274),
 ('非常', 0.044200923839597485),
 ('手感', 0.04270424332006433),
 ('感觉', 0.040063432512755605)]

参数说明 :
sentence 需要提取的字符串,必须是str类型,不能是list
topK 提取前多少个关键字
withWeight 是否返回每个关键词的权重
allowPOS是允许的提取的词性,默认为allowPOS=‘ns’, ‘n’, ‘vn’, ‘v’,提取地名、名词、动名词、动词

积极评论与消极评论

#计算积极评论与消极评论各自的数目
pos = 0
neg = 0
for i in data1['emotion']:
    if i >= 0.5:
        pos += 1
    else:
        neg += 1
print('积极评论,消极评论数目分别为:')
pos,neg
积极评论,消极评论数目分别为:

(2791, 846)

# 积极评论占比
import matplotlib.pyplot as plt 

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False

pie_labels='postive','negative'
plt.pie([pos,neg],labels=pie_labels,autopct='%1.1f%%',shadow=True)

plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VZRPTzVB-1591712744520)(output_14_0.png)]

#获取消极评论数据
data2=data1[data1['emotion']<0.5]
data2.head(10)
sku_id content emotion
0 7534113 还可以刷脸解锁,帮朋友买的,她很满意 0.470635
13 5942439 收到货,声音很大,功能也多,适合老人用,就是重量有点重, 0.461794
17 7283905 27号下的单,今天收到1星期内,座标河南商丘,手机是武汉仓过来的。充电头是5V2A的 不支持... 0.001627
18 5001213 今天刚收到!\n看到京东的快递包装盒,我内心是一群奔腾而过的!几千块钱的物品包装,没有防压提... 0.495955
22 5942439 用着目前还可以,就是不知道可以用多久。希望久一些吧。 0.239150
32 5001213 第一批抢到,两天后才收到,机器没一代惊艳,边框略粗,全面屏?解决了通话,回归正常手机行列!!... 0.444317
35 8240587 总体来说,颜值非常高,很好看,虽然说是后置指纹,但是后背看起来还是挺不错的。用起来整体体验还... 0.000012
44 3901175 手机还可以,就刚开始把卡放进去的时候不显示卡,过了第二天才显示出来,耳机也没有,还有就是怎么... 0.005839
48 7534113 像素不行,反正买都买了用都用了总体来说还行吧不讨厌也不喜欢一般般,暂时没有什么问题 0.499447
51 5089275 总之还是挺好的,挺不错、虽然没有什么优惠吧,抢了个神券还不能用!!!也是用的上了第三个苹果、... 0.457264
#消极评论词云图
text2 = ''
for s in data2['content']:
    text2 += s
data_cut2 = ' '.join(jieba.lcut(text2))
w.generate(data_cut2)
image = w.to_file('消极评论词云.png')

在这里插入图片描述

#消极评论关键词top10
key_words = jieba.analyse.extract_tags(sentence=text2, topK=10, withWeight=True, allowPOS=())
key_words
[('手机', 0.19237764869875004),
 ('京东', 0.08930157104159077),
 ('未填写', 0.08087213276666493),
 ('评价', 0.06602737843353074),
 ('屏幕', 0.05285184715212572),
 ('快递', 0.050103021155518554),
 ('用户', 0.05005720904465942),
 ('充电', 0.04605195695403029),
 ('收到', 0.038929704221495554),
 ('没有', 0.03758001077768642)]

消极评论关键词显示,“屏幕”“快递”“充电”是造成用户体验不佳的几个重要因素,屏幕和充电问题有可能是手机不良品率过高或快递压迫。
因此平台应注重提高手机品控,降低不良品率,另外应设法提升发货,派送,派件的效率和质量。
本文使用jieba,snownlp,wordcloud,matplotlib等模块对文本数据进行了简要的情感分析及可视化,旨在了解用户使用体验,以此改进对平台运营提出优化建议。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章