word_cloud是python的一個(gè)三方庫(kù),稱為詞云也叫做文字云,是根據(jù)文本中的詞頻,對(duì)內(nèi)容進(jìn)行可視化的匯總,可以用來(lái)繪制用戶畫(huà)像
下載與安裝
安裝word_cloud
可以使用 python 自帶的 pip 工具來(lái)進(jìn)行
首先確保已經(jīng)安裝python與pip并且pip以及更新到最新版本.
這里使用的python版本為3.7,pip版本為19.2.1
word_cloud
依賴于numpy
與pillow
,當(dāng)然如果只想將圖像保存成圖片文件,
使用matplotlib
庫(kù)代替也可以,此處索性就將三個(gè)庫(kù)都安裝好.
pip install numpy
pip install pillow
pip install matplotlib
安裝完成后,再安裝word_cloud
pip install wordcloud
如果安裝失敗,可以去github主頁(yè)下載zip包
根據(jù)文本繪制
word_cloud
的使用非常簡(jiǎn)單,一下的demo展示了如何從字符串中生成詞頻圖并保存的
# -*- coding: utf-8 -*-
from wordcloud import WordCloud
text = "dog cat fish bird cat cat dog"
wc = WordCloud()
wc.generate(text)
wc.to_file("1.png")
word_cloud
從給定的text中按空格讀取單詞,出現(xiàn)次數(shù)越多的單詞,在生成的圖像越大,效果圖如下
控制繪制參數(shù)
上面的例子比較粗糙,為了更精細(xì)化的控制,word_cloud
提供了大量參數(shù)用來(lái)控制圖像的生
屬性名 | 示例 | 說(shuō)明 |
---|---|---|
background_color | background_color='white' | 指定背景色,可以使用16進(jìn)制顏色 |
width | width=600 | 圖像長(zhǎng)度默認(rèn)400 單位像素 |
height | height=400 | 圖像高度 默認(rèn)200 |
margin | margin=20 | 詞與詞之間的邊距 默認(rèn)2 |
scale | scale=0.5 | 縮放比例 對(duì)圖像整體進(jìn)行縮放 默認(rèn)為1 |
prefer_horizontal | prefer_horizontal=0.9 | 詞在水平方向上出現(xiàn)的頻率,默認(rèn)為0.9 |
min_font_size | min_font_size=10 | 最小字體 默認(rèn)為4 |
max_font_size | max_font_size=20 | 最大字體 默認(rèn)為200 |
font_step | font_step=2 | 字體步幅 控制在給定text遍歷單詞的步幅 默認(rèn)為1 一般不用修改 對(duì)于較大text 增大font_step會(huì)加快讀取速度 但會(huì)犧牲部分準(zhǔn)確性 |
stopwords | stopwords=set('dog') | 設(shè)置要過(guò)濾的詞 以字符串或者集合作為接收參數(shù) 如不設(shè)置將使用默認(rèn)的 停動(dòng)詞詞庫(kù) |
mode | mode='RGB' | 設(shè)置顯色模式 默認(rèn)RGB 如果為RGBA且background_color不為空時(shí)薇组,背景為透明 |
relative_scaling | relative_scaling=1 | 詞頻與字體大小關(guān)聯(lián)性 默認(rèn)為5 值越小 變化越明顯 |
color_func | color_func=None | 生成新顏色的函數(shù) 如果為空 則使用 self.color_func |
regexp | regexp=None | 默認(rèn)單詞是以空格分割,如果設(shè)置這個(gè)參數(shù) 將根據(jù)指定函數(shù)來(lái)分割 |
width | regexp=None | 默認(rèn)400 單位像素 |
collocations | collocations=False | 是否包含兩個(gè)詞的搭配 默認(rèn)為T(mén)rue |
colormap | colormap=None | 給所有單詞隨機(jī)分配顏色 指定color_func則忽略 |
random_state | random_state=1 | 為每個(gè)單詞返回一個(gè)PIL顏色 |
font_path | font_path='PangMenZhengDaoBiaoTiTi-1.ttf' | 指定字體 |
mask | mask=None | 指定背景圖,會(huì)將單詞填充在背景圖像素非白色(#FFFFFF RGB(255,255,255))的地方 |
利用屬性設(shè)置一下圖像,效果如下
from wordcloud import WordCloud
text = "dog cat fish bird cat cat dog"
wc = WordCloud(
background_color='white',
width=600,
)
wc.generate(text)
wc.to_file("1.png")
中文亂碼問(wèn)題解決
在使用word_cloud
處理中文時(shí),會(huì)出現(xiàn)亂碼,如下
from wordcloud import WordCloud
text = "張三 李四 王五"
wc = WordCloud(
background_color='white',
width=600,
)
wc.generate(text)
wc.to_file("1.png")
這是由于word_cloud
自帶的字體DroidSansMono.ttf
不支持中文
解決方法為使用支持中午跟的字體替代(注意版權(quán)),下面例子使用旁門(mén)正道
字體
from wordcloud import WordCloud
text = "張三 李四 王五"
wc = WordCloud(
background_color='white',
font_path="PangMenZhengDaoBiaoTiTi-1.ttf"
)
wc.generate(text)
wc.to_file("1.png")
在指定背景圖上生成
使用numpy
與matplotlib
庫(kù),可以在指定背景圖上生成詞云
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
from wordcloud import WordCloud, ImageColorGenerator
text = "dog cat fish bird lino tiger monkey rabbit koala panda snake"
# 加載背景圖
color_mask = np.array(Image.open("f.jpeg"))
wc = WordCloud(
mask=color_mask,background_color='white'
)
wc.generate(text)
image_colors = ImageColorGenerator(color_mask)
# 在只設(shè)置mask的情況下 會(huì)得到一個(gè)擁有圖片形狀的詞云 axis默認(rèn)為on 會(huì)開(kāi)啟邊框
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.savefig("a.jpg")
# 直接在構(gòu)造函數(shù)中直接給顏色 這種方式詞云將會(huì)按照給定的圖片顏色布局生成字體顏色策略
plt.imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")
plt.axis("off")
plt.savefig("b.jpg")
原始圖
給定的詞數(shù)比較少,導(dǎo)致效果不是太明顯,增加一下text內(nèi)容即可
numpy
與matplotlib
的用法此處不做具體講解,僅最簡(jiǎn)單使用