词云
词云是对文本数据中出现频率较高的“关键词”在视觉上的突出呈现从而一眼就可以领略文本数据的主要表达意思,属于数据可视化的一种形式。
通过民宿行业用户对相应住宿的评价做一个词云,分析用户关心的住宿特点
数据来源于台湾名宿网络部分用户评价
使用python构建词云
所有的源代码和数据资料均上传github,可以点击下载生成自己的词云,欢迎关注
生成词云图片预览
使用的原始图片
使用结巴分词操作数据,对词频统计前200的数据展示, 需要注意的是使用wordcloud构建词云时需要设置中文字体,否则会出现乱码。
#encoding=utf-8
import matplotlib.pyplot as plt
from scipy.misc import imread
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
from os import path
import pandas
import jieba
import jieba.analyse
# 构造词云生成类
class Cloud:
def __init__(self, content, img_filepath, font_filepath):
#使用结巴分词
tags = jieba.analyse.extract_tags(content, topK=200, withWeight=False)
self.d = path.dirname(__name__)
self.text = " ".join(tags)
self.img = imread(img_filepath)
self.wc = WordCloud(background_color="white", #背景颜色
max_words=2000,# 词云显示的最大词数
mask=self.img,#设置背景图片
font_path = font_filepath, #设置中文字体,使得词云可以显示(词云默认字体是“DroidSansMono.ttf字体库”,不支持中文)
# stopwords=STOPWORDS.add("said"),
max_font_size=38, #字体最大值
random_state=42) #颜色种类
self.wc.generate(self.text)
#展示词云
def show_wc(self):
img_color = ImageColorGenerator(self.img)
plt.imshow(self.wc.recolor(color_func=img_color))
plt.axis('off')
plt.show()
#保存词云
def save_wc(self, out_file_name):
self.wc.to_file(path.join(self.d, out_file_name))
#获取csv 中的评论
def readCsv(path, star):
dataFrame = pandas.read_csv(path)
comments = dataFrame[dataFrame['stars'] >= star]
comemntsText = " "
for index,row in comments.iterrows():
comemntsText += str(row['content'])
return comemntsText
if __name__ == '__main__':
# 在这里我挑选出评论分值为大于等于5的评价,也就是好评
content = readCsv('comments.csv', 5)
fo = open("text.txt", "w")
fo.write(content)
fo.close()
#给词云配置内容,图片,字体(为了使中文字体不会乱码
wc = Cloud(content, 'hunter.jpg', '宋体.ttc')
wc.show_wc()
wc.save_wc('world_cloud3.png')
```