前言
在大数据时代,你竟然会在网上看到的词云,例如这样的。
看到之后你是什么感觉?想不想自己做一个?
如果你的答案是正确的,那就不要拖延了,现在我们就开始,做一个词云分析图,Python是一个当下很流行的编程语言,你不仅可以用它做数据分析和可视化,还能用来做网站、爬取数据、做数学题、写脚本替你偷懒……
如果你之前没有编程基础,没关系。希望你不要限于浏览,而是亲自动手尝试一番。到完成的那一步,你不仅可以做出第一张词云图,而且这还将是你的第一个有用的编程作品。
结巴分词
Python中的分词模块有很多,他们的功能也都是大同小异,我们安装的结巴分词 是当前使用的最多的类型。
下面我来简单介绍一下结巴分词的用法
结巴分词的分词模式分为三种:
(1)全模式:把句子中所有的可以成词的词语都扫描出来, 速度快,但是不能解决歧义问题
(2)精确模式:将句子最精确地切开,适合文本分析
(3)搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词
下面用一个简单的例子来看一下三种模式的分词区别:
import jieba
text = '我来北京清华大学,开着法拉利在水一方吃着苹果梨'
seg_list = jieba.cut(text,cut_all=True)
print('[全模式]:','/'.join(seg_list))#全模式
seg_list = jieba.cut(text,cut_all=False)
print('[精确模式]:','/'.join(seg_list))#精确模式
seg_list = jieba.cut(text)#默认精确模式
print(u"[默认模式]: ", "/ ".join(seg_list))
seg_list = jieba.cut_for_search('小明硕士毕业于中国科学院计算所,后在日本京都大学深造')#搜索引擎模式
print(u"[搜索引擎模式]: ", "/ ".join(seg_list))
使用自定义词典
#自定义词典
#jieba.load_userdict(file_name)
txt = '欧阳建国是创新办主任也是欢聚时代公司云计算方面的专家'
print(','.join(jieba.cut(txt)))
#使用用户字典(user_dict)
jieba.load_userdict('../user_dict.txt')
print(','.join(jieba.cut(txt)))
禁用词的输出结果
text = "哈利波特是一常优秀的文学作品"
stopwords = {}.fromkeys(['优秀','文学作品'])
seg_list = jieba.cut(text)
final = ''
for seg in seg_list:
if seg not in stopwords:
final +=seg
seg_list_new = jieba.cut(final)
print(u"[切割之后]: " , " ".join(seg_list_new))
可以看到输出结果中并没有“优秀”和“文学作品”两个词。
词云的制作
1、使用结巴分词将文章分成词语的形式,下面是分词的函数
from wordcloud import WordCloud,ImageColorGenerator
import PIL .Image as image
import numpy as np
import jieba
def trans_CN(text):
jieba.suggest_freq(('学长学姐'),True)
word_list = jieba.cut(text)
# 分词后在单独个体之间加上空格
result = " ".join(word_list)
return result;
jieba.suggest_freq(('学长学姐'),True):设置词语不分词
2、读取文章,并制作词云。
使用的是wordcloud函数库,可以根据喜好来定义词云的颜色、轮廓等参数 ,下面为常用的参数设置方法
with open("pachong.txt",encoding = 'utf-8') as fp:
text = fp.read()
text = trans_CN(text)
# print(text)
#设置词云形状,若设置了词云的形状,生成的词云与图片保持一致,后面设置的宽度和高度将默认无效
mask = np.array(image.open("aixin.jpg"))
# 提取背景图片颜色
img_colors = ImageColorGenerator(mask)
wordcloud = WordCloud(
mask=mask,
font_path = "C:\\Windows\\Fonts\\STXINGKA.TTF",# 若想生成中文字体,需添加中文字体路径
background_color='white', #默认黑色背景,更改为白色
margin=2, # 页面边缘
scale=2,
max_words=200, # 最多词个数
min_font_size=4,
max_font_size=100,
random_state=42,
#,colormap = 'Blues'
).generate(text)
# 设置为背景色,若不想要背景图片颜色,就注释掉
#wordcloud.recolor(color_func=img_colors)
image_produce = wordcloud.to_image()#返回对象
#保存图片
wordcloud.to_file("new_wordcloud.jpg")
image_produce.show()#显示图像
我的词云原图:
生成的词云图:
C盘中有font字体,那么这些呢你可以自己去找,trans_CN方法是分词用的,通过font-path就可以指定里面的生成文本。这大概就是词云的基础了,可以将爬虫和词云生成结合在一起,在爬取信息之后生成这样的词云。