Python画词云图,其实很简单!跟小孩子画画一样

2019年2月23日 328点热度 0人点赞 0条评论

2月21日,咪蒙微信公众号在停更20天后,公号页面显示已注销。


上个月底,咪蒙旗下的“才华有限青年”发布《寒门状元之死》一文,因为虚构细节,引发广泛争议,咪蒙也成为矛头所指。面对舆论压力,春节前,咪蒙曾发公开信称:因咪蒙团队引发的负面影响,咪蒙微信公众号停更2个月、X蒙微博永久关停。

图片

公众号“咪蒙”2月1日推送的公告


同时,凤凰网旗下大风号、今日头条旗下头条号等平台也关停了“咪蒙”等账号。


图片

凤凰网声明的用词尤其激烈:停止其在本平台上的一切活动,全部关闭,不得转世。


这一消息一出,各大自媒体大V都开始写讨论咪蒙,有的支持有的反思,有的保持中立,但结局都相同,文章一出最后都迫于各种原因被删除。更有网友神评论,咪蒙走的时候,还带走了一些人!


作为一个Python技术的传播者,我这几天也在反思:坚决不能传播毒鸡汤、三观不正,煽动情绪,激发负能量的内容我认为自媒体写作里,好的内容,不一定多么具有文采,不一定观点多么完美,但一定要带给读者思考。


恋习Python,这个名称起的初衷就是,用Python做一些有意义的事,痴恋于Python,狂练习Python。


说偏了,上面的都是些题外话,我们回到今天主题,用Python画词云图。


词云图,也叫文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文本的主旨。

在谈画词云图时,先说说小学生学画画,这样的场景,你一定不陌生:


小孩开始画画的时候,许多家长觉得他们画的东西什么都“不像”、“乱七八糟”、“一塌糊涂”。于是他们上书店为孩子买回填色书,这类印有动物,风景的轮廓线,孩子们在线内填上颜色的填色书,在市场上很常见,买回后让小孩规规矩矩地涂色,看到有点像样了,爸爸妈妈们才感觉到欣慰。


总结起来,就是三大步:准备原材料(五颜六色的画笔)、选定一个填色书(需要有形状轮廓等)、最后开始填色。


用Python画词云图其实也是这三大步骤:

1、准备原材料


准备好一份自己需要分析的文本材料,今天恋习Python选取的是,1月25日,习近平在中共中央政治局第十二次集体学习时,关于推动媒体融合向纵深发展的讲话。


在这里,我们主要会用到Python库jieba,jieba就是这样一个非常好用的中文工具,是以分词起家的,但是功能比分词要强大很多。


jieba.cut返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode)。


jieba.cut 方法接受三个输入参数:

  • 需要分词的字符串

  • cut_all 参数用来控制是否采用全模式,一般情况下,cut_all为False

  • HMM 参数用来控制是否使用 HMM 模型


import jieba

list0 = jieba.cut('我原来是一名Java工程师,后来喜欢上了Python语言', cut_all=True)
print("全模式:",list(list0))

list1 = jieba.cut('我原来是一名Java工程师,后来喜欢上了Python语言', cut_all=False)
print("精准模式:",list(list1))

###输出结果:
全模式: ['我''原来''是''一名''Java''工程''工程师''''''后来''喜欢''上''了''Python''语言']
精准模式: ['我''原来''是''一名''Java''工程师'',''后来''喜欢''上''了''Python''语言']

同时,获得到文本时,我们需要对文本进行文本预处理(删除掉我们不想要的词语以及符号,如同剔除掉不需要的画笔)、文本分词以及词频统计(只获取我们希望展示的词语,如同保留下我们的画笔)


详细代码如下:


data_txt = open(r"E:\project\wordcloud\xinmeiti.txt",'r',encoding='utf-8').read()

#文本预处理
pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"')
data_txt = re.sub(pattern, '', data_txt)

#文本分词
cut_txt = jieba.cut(data_txt)
object_list=[]
remove_words = [u"的","习近平",u'对',u'等',u'能',u'都',u'。',u' ',u'、',u'中',u'在',u'了',u',',u'“',u'”',u'一个',u'是',u'人民日报']

#词频统计
for word in cut_txt:
    if word not in remove_words:
        object_list.append(word)

word_counts = collections.Counter(object_list)

2、选定填色书


关于词云图最后的形状轮廓,我们将选取宠物猪作为展示,如下图:

图片

这里主要说说Python中wordcloud的基本使用,wordcloud把词云当作一个对象,它可以将文本中词语出现的频率作为一个参数绘制词云,而词云的大小、颜色、形状等都是可以设定的。

WordCloud方法的参数如下:

width:指定词云对象生成的图片的宽度(默认为200px)

height:指定词云对象生成的图片的高度(默认为400px)

min_font_size:指定词云中字体最小字号,默认为4

max_font_size:指定词云中字体最大字号

font_step:指定词云中字体之间的间隔,默认为1

font_path:指定字体文件路径

max_words:指定词云中能显示的最多单词数,默认为200

stop_words:指定在词云中不显示的单词列表

background_color:指定词云图片的背景颜色,默认为黑色

mask:定义词频背景

说明一下:如果设置了mask参数,那么width、height参数将无效

word_cloud 生成词云有两个方法。from text 和 from frequencies 。即文本生成和频率生成,每一个都有对应的函数可以使用,如下:

  • wd.generate(txt)   向WordCloud 对象w中加载文本txt

  • wd.generate_from_frequencies(word_counts)  向WordCloud 对象wd中加载词语频率

详细代码如下:

#定义词频背景
background_image = np.array(Image.open(path_image))
font_path="E:\project\wordcloud\simfang.ttf"
wd = WordCloud(
    font_path=font_path,  #设置字体格式,不然会乱码
    background_color="white",  #设置背景颜色
    mask=background_image   #设置背景图
).generate_from_frequencies(word_counts)

#保存词云图
wd.to_file('zhu.png')
#显示词云图
plt.imshow(wd,interpolation="bilinear")
plt.axis("off")
plt.show()

结果图如下:

图片

由上图可看出,作为一个主流新媒体平台,我们要为人民发声,融合新技术,传播正确的政治舆论。


咪蒙的问题,有人说,没了咪蒙还有嘛蒙。这样说的人是不了解形势,如果嘛蒙长出来,那就再剪掉就好了嘛。国家每年都要缉毒,没人说抓了一个毒贩没有用,还有下一个毒贩。只要常抓不懈,网络空间就会天朗气清。


咪蒙,再见,再也不见!这都是个新的开始,鉴于社会舆论与政策的压力下,自媒体的试错成本将提高,那些畸形的自媒体商业模式、煽动民粹的生意经,早晚都会进行不下去。


最后,恋习Python谢谢大家的一直关注与陪伴,我将会不忘初心,与大家一起用Python做些有意义的事,传播Python知识。


恋习Python提醒您:

文章千万篇,干货每一篇,

原创不容易,好看点起来!

70120Python画词云图,其实很简单!跟小孩子画画一样

这个人很懒,什么都没留下

文章评论