python繪制用戶畫(huà)像---wordcloud

word_cloud是python的一個(gè)三方庫(kù),稱為詞云也叫做文字云,是根據(jù)文本中的詞頻,對(duì)內(nèi)容進(jìn)行可視化的匯總,可以用來(lái)繪制用戶畫(huà)像

下載與安裝

安裝word_cloud可以使用 python 自帶的 pip 工具來(lái)進(jìn)行

首先確保已經(jīng)安裝pythonpip并且pip以及更新到最新版本.
這里使用的python版本為3.7,pip版本為19.2.1

word_cloud依賴于numpypillow,當(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ù)越多的單詞,在生成的圖像越大,效果圖如下

默認(rèn)效果.png

控制繪制參數(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")
簡(jiǎn)單設(shè)置一下背景和長(zhǎng)度.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")
默認(rèn)字體中文亂碼.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")
指定字體后.png

在指定背景圖上生成

使用numpymatplotlib庫(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")

原始圖


原始圖
按輪廓生成.jpg
按輪廓按顏色生成.jpg

給定的詞數(shù)比較少,導(dǎo)致效果不是太明顯,增加一下text內(nèi)容即可

numpymatplotlib的用法此處不做具體講解,僅最簡(jiǎn)單使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末萎津,一起剝皮案震驚了整個(gè)濱河市豁护,隨后出現(xiàn)的幾起案子杏头,更是在濱河造成了極大的恐慌,老刑警劉巖代乃,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旬牲,死亡現(xiàn)場(chǎng)離奇詭異仿粹,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)原茅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)吭历,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人擂橘,你說(shuō)我怎么就攤上這事晌区。” “怎么了通贞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵朗若,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我昌罩,道長(zhǎng)哭懈,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任茎用,我火速辦了婚禮遣总,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘轨功。我一直安慰自己旭斥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布古涧。 她就那樣靜靜地躺著垂券,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蒿褂。 梳的紋絲不亂的頭發(fā)上圆米,一...
    開(kāi)封第一講書(shū)人閱讀 52,785評(píng)論 1 314
  • 那天卒暂,我揣著相機(jī)與錄音啄栓,去河邊找鬼。 笑死也祠,一個(gè)胖子當(dāng)著我的面吹牛昙楚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诈嘿,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼堪旧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了奖亚?” 一聲冷哼從身側(cè)響起淳梦,我...
    開(kāi)封第一講書(shū)人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎昔字,沒(méi)想到半個(gè)月后爆袍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體首繁,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年陨囊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了弦疮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蜘醋,死狀恐怖胁塞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情压语,我是刑警寧澤啸罢,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站无蜂,受9級(jí)特大地震影響伺糠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜斥季,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一训桶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧酣倾,春花似錦舵揭、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至映之,卻和暖如春拦焚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背杠输。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工赎败, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蠢甲。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓僵刮,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親鹦牛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子搞糕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361