## 舆情分析

舆情分析

文本挖掘基本流程

使用的数据是评论数据,即文本数据 · 文本数据的分析过程主要有:清洗,可视化,建模.这里针对中文文本

清洗基本流程:1.替换非中英文字符为空格;2.分词(结巴jieba);3.去掉停用词(对描 述和建模无意义的词);4.筛选高频词.此流程需要反复尝试对比效果
可视化:一般都是词云,可能配合关键词排序等
建模:建模前需要将数据转成文档词矩阵(dtm);有监督的话常用的是贝叶斯,其他 偏精度的算法也可以,要注意特征个数;无监督常用的是主题模型LDA,其他诸如 分群,情感分析也可以 · 清洗流程中,尤其是口语化较强的数据,例如评论数据,需要去除重复语句,以及字数少 于某个阈值的评论.
下面开始正式复现上述流程。

os.chdir('..')
os.chdir('./评论舆情数据')
filename = glob.glob('*.xlsx')
filename
['安速.xlsx', '德国拜耳.xlsx', '科林虫控.xlsx']
df6bai = pd.read_excel(filename[1])
bai6 = list(df6bai['评论'])
bai6[:5] # 提取5条看一看
['刚收到,家里厨房突然出现小强了,看了这个评价挺多挺好,销量也大,赶紧定了三盒,一定要管用啊一定要管用,一定要管用,准备看下后续效果会继续追加评价。不知道多久才能消灭干净,还在厨房,没法做饭了,都不愿意进去了。有点担心会挥发。看很多人在用也就试试吧。哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎',
 '朋友推荐的说之前用的挺管用的。在放药的前几天就没怎么见蟑螂了,然后出去玩之前把家里角角落落全都点涂上了,四天之后回来开门的时候内心相当忐忑啊?? 不过居然一只都没见...也不知道是真的没有了,还是跟我错峰出行了....但愿是管用了,不然我真疯了!第二次购买了,超级好用,之前家里蟑螂都翻烂了,朋友推荐这个,买了两支送了一支,点上胶饵以后,',
 '真心坑人啊!😂还没到24小时就凝固了!小强依然活跃🤑🤑🤑🤑',
 '盆友推荐的,说特别好用,效果杠杠的,看双十一做活动,就买啦,效果应该不错吧,不过尸体都是家里不怕蟑螂的人处理的,所以我也不是很清楚…可以认真考虑家里常备啦,但是不太敢一次买很多,怕放不好变质了。还送了沉甸甸的一大包湿巾,很棒,可以用来给蟑螂尸体的地方消毒。',
 '我是买到假货吗?那么贵的蟑螂药居然还有,还是蟑螂已经百毒不侵了?']

可见,我们需要一定的数据清洗:非中英文字符的不要、在分词前逗号、句号不要。

bai61 = [re.sub(r'[^a-z\u4E00-\u9Fa5]+',' ',i,
                flags=re.I) for i in bai6]#中文字符  \u4E00-\u9Fa5  flags=re.I 不区分大小写
bai61[:5]
['刚收到 家里厨房突然出现小强了 看了这个评价挺多挺好 销量也大 赶紧定了三盒 一定要管用啊一定要管用 一定要管用 准备看下后续效果会继续追加评价 不知道多久才能消灭干净 还在厨房 没法做饭了 都不愿意进去了 有点担心会挥发 看很多人在用也就试试吧 哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎哎',
 '朋友推荐的说之前用的挺管用的 在放药的前几天就没怎么见蟑螂了 然后出去玩之前把家里角角落落全都点涂上了 四天之后回来开门的时候内心相当忐忑啊 不过居然一只都没见 也不知道是真的没有了 还是跟我错峰出行了 但愿是管用了 不然我真疯了 第二次购买了 超级好用 之前家里蟑螂都翻烂了 朋友推荐这个 买了两支送了一支 点上胶饵以后 ',
 '真心坑人啊 还没到 小时就凝固了 小强依然活跃 ',
 '盆友推荐的 说特别好用 效果杠杠的 看双十一做活动 就买啦 效果应该不错吧 不过尸体都是家里不怕蟑螂的人处理的 所以我也不是很清楚 hellip 可以认真考虑家里常备啦 但是不太敢一次买很多 怕放不好变质了 还送了沉甸甸的一大包湿巾 很棒 可以用来给蟑螂尸体的地方消毒 ',
 '我是买到假货吗 那么贵的蟑螂药居然还有 还是蟑螂已经百毒不侵了 ']

接着我们来去掉停用词(百度的停用词库)。不过在此之前,我们得先分一下词,这里我们用的分词工具是jieba分词。先来看一下jieba的使用:

jieba.lcut('真心坑人啊 还没到 小时就凝固了 小强依然活跃')
['真心',
 '坑人',
 '啊',
 ' ',
 '还',
 '没到',
 ' ',
 '小时',
 '就',
 '凝固',
 '了',
 ' ',
 '小强',
 '依然',
 '活跃']

接下来正式进行分词

# 先读取停用词
# 原始字符串
stopwords = list(pd.read_csv(r'C:\Users\美丽小哈\data\百度停用词表.txt',
                             names=['stopwords'])['stopwords'])

bai62 = []
for i in bai61:
    #对每条评论分析
    seg1 = pd.Series(jieba.lcut(i))
    ind1 = pd.Series([len(j) for j in seg1])>1 #长度大于1的保留   
    seg2 = seg1[ind1]
    #去掉停用词 isin
    ind2 = ~seg2.isin(pd.Series(stopwords))
    seg3 = list(seg2[ind2].unique())#去重一下
    if len(seg3)>0:
        bai62.append(seg3)
bai62[0]  #得到的是大列表套小列表
['收到',
 '家里',
 '厨房',
 '小强',
 '评价',
 '销量',
 '赶紧',
 '三盒',
 '管用',
 '后续',
 '效果',
 '追加',
 '多久',
 '才能',
 '消灭',
 '干净',
 '没法',
 '做饭',
 '进去',
 '担心',
 '挥发',
 '很多',
 '试试']
#组合多个列表到一个列表:
bai63 = [y for x in bai62 for y in x]
bai63[:5]
['收到', '家里', '厨房', '小强', '评价']
#词频统计
baifreq = pd.Series(bai63).value_counts()
baifreq[:10]  # 看下前10个词
效果    541
蟑螂    409
双十    145
不错    144
评论    138
小强    114
收到    106
用户    100
填写    100
东西     95
dtype: int64

词云

#而构建一个词云所需要的数据 一个巨大字符串 (用空格分隔的词):
bai64 = ' '.join(bai63)
#最后一个步骤,调用WordCloud模块生成词云
#读取照片
mask = imageio.imread(r'C:\Users\美丽小哈\data\leaf.jpg')
#如果是中文的词云---字体
font = r'C:\Users\美丽小哈\data\simhei.ttf'

wc = WordCloud(background_color='white',mask=mask,
                       font_path=font).generate(bai64)
plt.figure(figsize=(8,8))
plt.imshow(wc)
plt.axis('off')#不要坐标轴
plt.show()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值