1.準備
開始之前,你要確保Python和pip已經成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細Python安裝指南進行安裝。
**(可選1) **如果你用Python的目的是數據分析,可以直接安裝Anaconda:Python數據分析與挖掘好幫手—Anaconda,它內置了Python和pip.
**(可選2) **此外,推薦大家用VSCode編輯器,它有許多的優點:Python 編程的最好搭檔—VSCode 詳細指南)。
請選擇以下任一種方式輸入命令安裝依賴 :
- Windows 環境 打開 Cmd (開始-運行-CMD)。
- MacOS 環境 打開 Terminal (command+空格輸入Terminal)。
- 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install wordcloud == 1.5.0
pip install scipy == 1.1.0
pip install multidict == 4.5.2
pip install matplotlib == 2.2.4
pip install fire == 0.2.1
pip install numpy == 1.16.4
看到 Successfully installed xxx 則說明安裝成功。或公眾號后臺回復生日快樂可獲得本文全部代碼,然后進入文件夾,輸入一行命令安裝所有依賴:
pip install -r requirements.txt
如果你不想折騰代碼,安裝完依賴后,輸入以下命令就可以生成你的詞云:
python birthday.py 圖片位置 對象姓名
如:
python birthday.py example.png 寶典哥
2.編寫代碼
首先是引入詞云對象,并初始化【生日快樂】和對方姓名:
words = multidict.MultiDict()
# 生日快樂和姓名的權重必須先初始化兩個最大權重的
words.add('生日快樂', 10)
words.add(name, 12)
細心的讀者可能發現了,我們在這里用了MultiDict,這主要是因為wordcloud只允許接受【字典】數據結構,而Python內置的字典不允許重復值,所以我們只能引入multidict模塊。
然后是插入新的生日快樂詞云和對方姓名:
# 隨意插入新的詞語
for i in range(1000):
words.add('生日', numpy.random.randint(1, 5))
words.add('快樂', numpy.random.randint(1, 5))
words.add(name, numpy.random.randint(1, 5))
然后我們需要對圖片進行一些處理,現在網絡上的圖片很多都包含一些雜色,因此需要把這些雜色去掉:
def transform_format(val):
"""
用于去除雜色
Args:
val (list): RGB顏色組
Returns:
list: 去除雜色后的組
"""
if val[0] > 245 and val[1] > 245 and val[2] > 245:
val[0] = val[1] = val[2] = 255
return val
else:
return val
引入圖片,去除雜色:
# 設定圖片
bimg = imread(file)
for color in range(len(bimg)):
bimg[color] = list(map(transform_format, bimg[color]))
wordcloud = WordCloud(
background_color='white', mask=bimg,
font_path='simhei.ttf'
).generate_from_frequencies(words)
生成詞云并渲染:
# 生成詞云
bimgColors = ImageColorGenerator(bimg)
# 渲染詞云
plt.axis("off")
plt.imshow(wordcloud.recolor(color_func=bimgColors))
plt.savefig(name+'.png')
plt.show()
完整代碼如下:
# coding:utf-8
# Python 實用寶典
# 2021/08/01
import numpy
import fire
import multidict
import matplotlib.pyplot as plt
from scipy.misc import imread
from wordcloud import WordCloud, ImageColorGenerator
def transform_format(val):
"""
用于去除雜色
Args:
val (list): RGB顏色組
Returns:
list: 去除雜色后的組
"""
if val[0] > 245 and val[1] > 245 and val[2] > 245:
val[0] = val[1] = val[2] = 255
return val
else:
return val
def gen_happy_birthday_cloud(file, name):
"""
生成生日快樂詞云
Args:
file (str): 詞云背景圖
name (str)): 對方的姓名
"""
words = multidict.MultiDict()
# 生日快樂和姓名的權重必須先初始化兩個最大權重的
words.add('生日快樂', 10)
words.add(name, 12)
# 隨意插入新的詞語
for i in range(1000):
words.add('生日', numpy.random.randint(1, 5))
words.add('快樂', numpy.random.randint(1, 5))
words.add(name, numpy.random.randint(1, 5))
# 設定圖片
bimg = imread(file)
for color in range(len(bimg)):
bimg[color] = list(map(transform_format, bimg[color]))
wordcloud = WordCloud(
background_color='white', mask=bimg,
font_path='simhei.ttf'
).generate_from_frequencies(words)
# 生成詞云
bimgColors = ImageColorGenerator(bimg)
# 渲染詞云
plt.axis("off")
plt.imshow(wordcloud.recolor(color_func=bimgColors))
plt.savefig(name+'.png')
plt.show()
fire.Fire(gen_happy_birthday_cloud)
3.整合一句運行
接下來,我們使用上次提到的 [一行命令實現功能將這個功能打包成輸入命令就能運行的程序,比如:
python birthday.py 圖片 寶典哥
嘛,在完整代碼最后面加一行語句就行了:
import fire
fire.Fire(gen_happy_birthday_cloud)
當然,別忘了還要import fire模塊。
最后實驗一下:
python birthday.py example.png 寶典哥
怎么樣,效果不錯吧?喜歡的話記得點一個在看哦!
-
安裝
+關注
關注
2文章
98瀏覽量
22265 -
python
+關注
關注
56文章
4792瀏覽量
84628
發布評論請先 登錄
相關推薦
評論