環境及模塊:
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/