在上一篇的博客中,获取到了大量的淘宝MM的数据,这里我们使用这些数据来生成一个类似如下的图片
在这里我们要用到结巴分词、词云WordCloud和会图库matplotlib。直接上代码
# coding:utf-8
from os import path
from scipy.misc import imread
import matplotlib.pyplot as plt
import jieba
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
stopwords = {}
def importStopword(filename=''):
global stopwords
f = open(filename, 'r', encoding='utf-8')
line = f.readline().rstrip()
while line:
stopwords.setdefault(line, 0)
stopwords[line] = 1
line = f.readline().rstrip()
f.close()
def processChinese(textContent):
jieba.enable_parallel(4)
seg_generator = jieba.cut(textContent) # 使用结巴分词,也可以不使用
seg_list = [i for i in seg_generator if i not in stopwords]
seg_list = [i for i in seg_list if i != u' ']
seg_list = r' '.join(seg_list)
return seg_list
importStopword(filename='./stopwords1.txt')
# 获取当前文件路径
# __file__ 为当前文件, 在ide中运行此行会报错,可改为
# d = path.dirname('.')
d = path.dirname(__file__)
text = open(path.join(d, 'data.txt'), encoding='utf-8').read()
# 如果是中文
text = processChinese(text) # 中文不好分词,使用Jieba分词进行
# 设置背景图片
back_coloring = imread(path.join(d, "./image/nv.png"))
wc = WordCloud(font_path='./font/叶立群几何体.ttf', # 设置字体
background_color="white", # 背景颜色
max_words=2000, # 词云显示的最大词数
mask=back_coloring, # 设置背景图片
# max_font_size=100, #字体最大值
random_state=42,
)
# 生成词云, 可以用generate输入全部文本(中文不好分词),也可以我们计算好词频后使用generate_from_frequencies函数
wc.generate(text)
# wc.generate_from_frequencies(txt_freq)
# txt_freq例子为[('词a', 100),('词b', 90),('词c', 80)]
# 从背景图片生成颜色值
image_colors = ImageColorGenerator(back_coloring)
# 绘制词云
plt.figure()
# 以下代码显示图片
plt.imshow(wc)
plt.axis("off")
plt.show()
# 保存图片
wc.to_file(path.join(d, "名称.png"))
name
order
age
place
birthday
style
size
place
fans
flow
active
profession
blood_type
school
&
nbsp
公历
blood
type
name
背景图使用如下的:(要使用边界分明的图片,不然容易生成方形的图片)
程序生成如下的图片
如果对比收集到的数据,这个图是能说明一些问题的,比如我们的数据里有MM的地址、血型、职业、风格等等的一些信息,图片中放大显示的就是我们的数据里占比比较大的数据。