python简简单单生成词云图,用词云图来拜年

最近在学习python的可视化,在展示文字信息时,偶然看到词云这种可视化方式,觉得很有意思。
刚好快过年啦,快了用词云图来拜年。
先来看下什么是词云图
地名词云图
这是一张从微信朋友圈中爬下来的好友的地理位置,然后生成的词云图。

python生成词云的方法,可以借助两个包:pyecharts、wordclound,这两个包都可以实现词云功能,两种方法实现起来都比较简单

利用echarts

安装pyecharts,pyecharts包中的WordCloud模块,可以用来生成词云

pip install pyecharts

示例

from pyecharts import WordCloud
attr = ['深圳','广州','上海','西安','北京']
values = [80,20,10,50,5]#设置词的权重
wc = WordCloud(width = 800,height = 600)
wc.add('',attr,values,word_size_range = [20,100])
wc.render(r'wordcloud.html')

结果
在这里插入图片描述

利用wordCloud

安装wordcloud

pip install wordcloud
from wordcloud import WordCloud

text = u'gis,arcgis,map,webgis,webgl,opengl,openlayers,leaflet,postgis,qgis'
wc = WordCloud(
    background_color = 'white',
    max_words = 200,
    min_font_size = 15,
    max_font_size = 50,
    width = 400
)
wc.generate(text)
wc.to_file('gis.png')

gis词云

中文问题,报错或输出乱码

将上面第二段代码中,text的内容改为中文,

text = u'恭喜发财,新年快乐,大吉大利,平平安安,阖家团圆,身体安康,五福临门,早生贵子,吉祥如意,财源广进'

居然报错

ValueError: We need at least 1 word to plot a word cloud, got 0.

于是在字符串前面加上’u’,声明字符串是unicode编码,这次没报错,但生成的图为乱码,
经查是因为wordcloud默认的字体导致,WordCloud支持指定通过字体路径设置字体,参数为font_path,可以在系统文件夹中找一个中文字体来设置
更新后的代码为:

from wordcloud import WordCloud
text = u'恭喜发财,新年快乐,大吉大利,平平安安,阖家团圆,身体安康,五福临门,早生贵子,吉祥如意,财源广进,天长地久,生意兴隆,岁岁平安,诸事顺利,笑口常开'
wc = WordCloud(
    background_color = 'white',
    max_words = 200,
    min_font_size = 15,
    max_font_size = 50,
    width = 400,
    font_path = r'C:\Windows\Fonts\simhei.ttf'
)
wc.generate(text)
wc.to_file('happynewyear.png')
# img = wc.to_image()
# img.show()

拜年

利用图片生成带形状的词云

这里要用到其它几个包:matplotlib、numpy、PIL等

from wordcloud import WordCloud
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
text = u'恭喜发财,新年快乐,大吉大利,平平安安,阖家团圆,身体安康,五福临门,早生贵子,吉祥如意,财源广进,天长地久,生意兴隆,岁岁平安,诸事顺利,笑口常开'
alice_mask = np.array(Image.open('alice.png'))
wc = WordCloud(
    background_color = 'white',
    max_words = 200,
    min_font_size = 15,
    max_font_size = 50,
    width = 400,
    font_path = r'C:\Windows\Fonts\simhei.ttf'
)
wc.generate(text)
plt.imshow(wc,interpolation='bilinear')
plt.axis('off')
plt.figure()
plt.show(alice_mask,cmap = plt.cm.gray, interpolation = 'bilinear')
plt.axis('off')
plt.show()

猜你喜欢

转载自blog.csdn.net/u012413551/article/details/86741554
今日推荐