python爬取携程旅游评价信息词云图分析

前言

前面咱们已经分析过如何爬取携程旅游的相关信息,如果没有看过的,可以先跳看一下前面的那篇博客

这一篇呢,咱们主要使用jieba和wordcloud这两个包进行评价词云图分析。jieba是一个中文分词的工具包,wordcloud是专门用来画词云图的。

先来看看效果图吧


从图中我们也能够看到,大家评价大多数是不错、方便这种积极的态度。对整体旅行的评价,通过这张图我们还是能够有很清楚的认识的。接下来,我将详细的讲一下源代码。

源代码分析

这次代码的讲解是基于上一篇博客,建议先浏览上一篇博客。

上次我们能够将旅游团的游客的评价爬取出来,这次,我们先将评价信息输出到文本中。

1. 评价输出文本

def mainfun():
comment_all = []
traveldestination = ['重庆']#这里是添加旅游地点
for i in range(len(traveldestination)):
listdata = test1(traveldestination[i])
print("地点:",traveldestination[i],end='\n')
for data in listdata:
print(data[0])
comment_all.append(test2(data[1]))
with open('comments.txt',encoding='utf-8',mode='w') as f:
for comment in comment_all:
for comment_data in comment:
f.write(comment_data+'\n')

此方法在原有基础上,将评价信息首先存储到list列表中,然后通过for循环输出到txt文件中。

同时,test2()方法我们也做了两处地方的修改:


2. jieba分词

def splitword():
with open('comments.txt',encoding='utf-8',mode='r') as f:
listdata = f.readlines()
commentdata = []
for delword in ['我们','酒店','携程','就是','自己']:
jieba.del_word(delword)
for data in listdata:
commentdata.append(' '.join(jieba.cut(data,cut_all=False)))
dataall = ' '.join(commentdata)
return dataall

我们首先看一下txt文本中的数据形式:


此方法的作用是对这些长句子进行分词,以此来分析关键词。

通过jieba.del_word()方法,可以去掉一些没有意义的词语,这些词语出现频率高,但是对我们没有任何信息价值。

jieba.cut()数1 是数据文本,类型需要时str。参数2是cut_all,为True是,为全模式,为False时,为精确模式。

3. wordcloud词云图

def word_cloud(dataall):
maskpng = np.array(Image.open('mask.png'))
WordClouds = WordCloud(background_color='white',
mask=maskpng,#遮罩图
font_path='font/msyh.ttf',#字体
max_words=50,#最大词数
random_state=50,#随机种子
scale=1.5 #放大比例
)
WordClouds.generate(dataall)
plt.imshow(WordClouds)
plt.axis('off')
plt.show()

首先我们创建一个WordCloud对象,然后设置相应的

使用WordClouds.generate(dataall) 生成词云图

plt.imshow(WordClouds)显示词云图

不显示坐标轴

由于我是在pycharm写的代码,所以需要写上plt.show() 才能够显示,jupyter notebook 上不用添这个语句。

对象方法详细数说明:详细参数说明

总结

词云图通过字体的大小来表示词语出现的频率,使我们能够更直观的看到文本中的关键信息。同时这两个包还有很多其他的用法,大家可以多去尝试一下,在这里我们只是举了个非常简单的例子供大家考。

最后附上jieba和wordcloud两个包的github地址

wordcloud

常简单的例子供大家考。