天天看点

怎么用python电商文本挖掘?(5)11 舆情分析

以驱虫市场数据为例,挖掘某店铺新的业务方向和市场增长点。

联系微信sinoleadgolf

接上一节(4) 接下来看市场的舆情情况分析。

11 舆情分析

读数据:

定义文件路径
os.chdir('..')
os.chdir('./评论舆情数据')
用glob把里面文件名都拿到 并赋值给filenames5
filenames5 = glob.glob('*.xlsx')
filenames5
读取其中的bai的数据
df6bai = pd.read_excel(filenames5[1])
df6bai.head(3)
           
怎么用python电商文本挖掘?(5)11 舆情分析

抽评论 洗数据:

df6bai['评论'].head()
转换为列表为后边处理文本使用
bai6 = list(df6bai['评论'])
           
怎么用python电商文本挖掘?(5)11 舆情分析

接下来要把这些数据洗干净,然后再做 词云啊 dtm啊 看需要是否建模啊,等等这样的思路展开。

① re正则表达式 替换非中英文为空格

去掉列表 中评论数据 的 除了 英文 中文 以外的 其他东西:

bai61 = [re.sub(r'[^a-z\u4E00-\u9Fa5]+',' ',i,flags=re.I) for i in bai6]
r表示声明是原始字符串,避免与转义字符冲突,平时经常放上
[]表示里面的关系是取 或 的关系
^ 表示 非 的意思 就是除了中文和英文的意思
a-z\u4E00-\u9Fa5 固定表示 中文和英文的 代码
' ',是替换成空格
i 是准备替换的数据
flages=re.i 表示大小写都算
           

正则表达式

执行完后 数据中的除了中文英文外的其他东西都没有了:

怎么用python电商文本挖掘?(5)11 舆情分析

②jieba分词 ④去掉停用词

构建停用词表,首先手上有一份下载好的百度停用词表,读进来

stopwords = list(pd.read_csv('D:/data/python/百度停用词表.txt',
                             names=['stopwords'])['stopwords'])
           
stopwords.extend([' ','蟑螂'])
自己按业务增加 停用词
           
bai62 = [] # 定义一个列表
for i in bai61:#bbai61是保留中英文后的列表
    seg0 = pd.Series(jieba.lcut(i))
    # 用Series 后边好做布尔索引 这一步是 用i在bai61这个列表里面 去循环每一句话 然后用jieba分词
    ind1 = pd.Series([len(j) for j in seg0])>1
    # [len(j) for j in seg0]是对分好词的seg0 里面的 做判断 是否长度大于 1 去掉等于1的词
    seg1 = seg0[ind1]
    # 布尔索引 得到seg1 去掉了长度小于1的
    ind2 = ~seg1.isin(pd.Series(stopwords))
    # ~ 符号表示取反的意思 isin判断 seg1里面的词是否在停用词中 返回布尔值 取反就是要不在 停用词中的
    seg2 = list(seg1[ind2].unique())
    #  分好词 去掉长度小于1的 seg1 进行布尔索引(去停用词) 和 去重 得到 列表 seg2
    if len(seg2)>0:
        bai62.append(seg2)
           

上面两段代码 就做好了分词 和 去掉停用词

大概看下最后得到的 评论的后几行

怎么用python电商文本挖掘?(5)11 舆情分析

⑤取高频词

列表生成式子,把一个列表中的列表,都变成字符串,生成在一张大列表中:

bai63 = [y for x in bai62 for y in x]
bai63
# 或如下方式:
# from itertools import chain
# bai63 = list(chain(*bai62))
           
怎么用python电商文本挖掘?(5)11 舆情分析

计算词频:

baifreq=pd.Series(bai63).value_counts()
baifreq[:50]
           
怎么用python电商文本挖掘?(5)11 舆情分析

绘制词云

按照词云包的格式
组合多个字符为一个长字符,空格分隔
bai64 = ' '.join(bai63)
           
怎么用python电商文本挖掘?(5)11 舆情分析
设置字体的路径,不然最后显示不出来
font=r'‪C:\Windows\Fonts\msyh.ttc'
放入词云包
wc = WordCloud(font_path=font).generate(bai64)
将图形画出来
plt.figure(figsize=(16,8))
plt.imshow(wc)
plt.axis('off')
plt.show()
           
怎么用python电商文本挖掘?(5)11 舆情分析
将词云图导出图片
wc.to_file('D:/data/python/情词云.png')