python爬取携程旅游评价信息词云图分析
前言
前面咱们已经分析过如何爬取携程旅游的相关信息,如果没有看过的,可以先跳转看一下前面的那篇博客: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 常简单的例子供大家参考。