用Python和WordCloud绘制词

发布时间:2019-05-02 07:04:02编辑:auto阅读(2461)

    环境及模块:

      Win7 64位

      Python 3.6.4

      WordCloud 1.5.0

      Pillow 5.0.0

      Jieba 0.39

     目标:

      绘制安徽省2018年某些科技项目的词云,直观展示热点。

     思路:

      先提取项目的名称,再用Jieba分词后提取词汇;过滤掉“研发”、“系列”等无意义的词;最后用WordCloud 绘制词云。

     扩展:

      词云默认是矩形的,本代码采用图片作为蒙版,产生异形词云图。这里用的图片是安徽省地图。

     秘笈:

      用网上的常规方法绘制的词云,字体有点模糊,秘笈在最后点明。

     

    本文由hATEmATH原创 转载请注明出处:http://www.cnblogs.com/hatemath/

     

     正式开始,Show you the code

     1 import numpy as np
     2 from PIL import Image
     3 import re
     4 import jieba
     5 from wordcloud import WordCloud,ImageColorGenerator,STOPWORDS
     6 import  matplotlib.pyplot as plt
     7 
     8 # 打开存放项目名称的txt文件
     9 with open('content.txt','r',encoding='utf-8') as f:
    10     word= (f.read())
    11     f.close()
    12 
    13 # 图片模板和字体
    14 image=np.array(Image.open('ditu.jpg')) 
    15 font=r'C:\\Windows\\fonts\\msyh.ttf' 
    16 
    17 # 去掉英文,保留中文 
    18 resultword=re.sub("[A-Za-z0-9\[\`\~\!\@\#\$\^\&\*\(\)\=\|\{\}\'\:\;\'\,\[\]\.\<\>\/\?\~\。\@\#\\\&\*\%]", "",word) 
    19 wordlist_after_jieba = jieba.cut(resultword) 
    20 wl_space_split = " ".join(wordlist_after_jieba) 
    21 
    22 # 设置停用词 
    23 sw = set(STOPWORDS) 
    24 sw.add("研发")
    25 sw.add("系列")
    26 sw.add("这里不多写了,根据自己情况添加")
    27 
    28 # 关键一步
    29 my_wordcloud = WordCloud(scale=4,font_path=font,mask=image,stopwords=sw,background_color='white',
    30                          max_words = 100,max_font_size = 60,random_state=20).generate(wl_space_split) 
    31 
    32 #显示生成的词云 
    33 plt.imshow(my_wordcloud)
    34 plt.axis("off") 
    35 plt.show() 
    36 
    37 #保存生成的图片
    38 my_wordcloud.to_file('result.jpg')

     

    其中 ditu.jpg 为安徽省轮廓图片:

    运行结果:

     

     可以看到,智能设备、施工工法、系统平台、电缆、机器人等都是出现较多的词汇。

     

    最后是秘笈揭晓时间:

      为什么我这张图如此清晰?打开原图可以看到,这图的分辨率是1800*2500。你用网上的大多数代码,最后生成的图,尺寸很小,上面字迹边缘模糊。

      关键在于调用WordCloud时的一个参数,回放一下代码:

    1 # 关键一步
    2 my_wordcloud = WordCloud(scale=4,font_path=font,mask=image,stopwords=sw,background_color='white',
    3                          max_words = 100,max_font_size = 60,random_state=20).generate(wl_space_split) 

      第一个参数我写的是 scale=4,这个数值越大,产生的图片分辨率越高,字迹越清晰。你可以调到64试试,我希望你的电脑足够快 /笑哭

     

    本文由hATEmATH原创 转载请注明出处:http://www.cnblogs.com/hatemath/

     

关键字