如果你是大佬,這里還是建議你去看 官方文檔,本博客偏向一些萌新。
安裝
首先是我們需要用到的兩個庫,一個是wordcloud
用於生成詞雲,還有一個是jieba
(外號:結巴)用於進行中文的分詞,如果你制作的圖雲中不包含中文,那么可以不用下載結巴。
環境報錯解決思路
如果你是用的pycharm或者其他類似的虛擬環境,安裝的時候應該會出現關於C++環境缺少的報錯,就算你已經安裝了c++環境,還是照樣報錯。這時候就需要用到離線安裝包了
wordcloud離線安裝包下載地址
(https://www.lfd.uci.edu/~gohlke/pythonlibs/#Wordcloud)
首先你需要下載離線安裝包,然后在命令行執行安裝命令
我當前執行的安裝命令為F:\我的大學\項目代碼\python環境\未知領域環境\未知領域\Scripts\python.exe -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade F:\個人資料\安裝 包\wordcloud-1.6.0-cp38-cp38-win_amd64.whl
其中F:\我的大學\項目代碼\python環境\未知領域環境\未知領域\Scripts\python.exe
是我虛擬環境的地址,如果你用的不是虛擬環境,這里直接寫python
即可,然后F:\個人資料\安裝 包\wordcloud-1.6.0-cp38-cp38-win_amd64.whl
是我當前下載的離線wordcloud的地址。中間那一部分我之所以使用了-i https://pypi.tuna.tsinghua.edu.cn/simple
是安裝wordcloud如果出現依賴其他庫需要下載時用國內鏡像源下載。
上面的庫中,除了pymysql外都為wordcloud
和其依賴庫。
WordCloud方法介紹
WordCloud方法是wordcloud
庫中使用頻率最高的為作用最大的方法, 主要用於詞雲的生成和繪制。
wordcloud屬性 | 作用 |
---|---|
font_path | 字符串 類型, 字體路徑(windows下默認字體路徑為C:\\Windows\\Fonts\\ 如果是自行安裝的字體,可能會在C:\\Users\\用戶名\\AppData\\Local\\Microsoft\\Windows\\Fonts\\ ) |
width | 整數 類型, 生成詞雲的寬度, 默認:400 |
height | 整數 類型, 生成詞雲的高度, 默認:200 |
prefer_horizontal | 浮點 類型,詞語水平方向排版出現的頻率,默認:0.9 |
mask | 遮罩圖, 下方會詳細介紹。默認:無 |
scale | 浮點 類型, 按照比例進行放大畫布, 默認:1 |
min_font_size | 整數 類型, 顯示的最小的字體大小, 默認:4 |
max_font_size | 整數 類型, 顯示的最大的字體大小, 默認:無 |
margin | 整數 類型, 邊緣空白寬度, 默認:2 |
font_step | 整數 類型, 字體步長, 默認:1 |
max_words | 整數 類型,要顯示的詞的最大個數 ,默認:200 |
background_color | 字符串 類型, 背景顏色,默認:黑色 |
stopwords | 設置需要屏蔽的詞,如果為空,則使用內置的STOPWORDS |
relative_scaling | 浮點 類型,詞頻和字體大小的關聯性,默認:auto。 |
regexp | 字符串 類型,使用正則表達式分隔輸入的文本 |
collocations | 布爾 類型, 是否包括兩個詞的搭配 |
colormap | 給每個單詞隨機分配顏色,若指定color_func,則忽略該方法。 |
normalize_plurals | 布爾 類型,是否刪除單詞中的s ,如果使用generate_from_frequencies,則將其忽略。默認:True |
contour_width | 浮點 類型,如果mask 遮罩不是None和contour_width > 0,則繪制mask 遮罩輪廓。默認:0 |
contour_color | 字符串 類型, mask 遮罩輪廓顏色。默認: black |
repeat | 布爾 類型,是否重復單詞和短語,直到達到max_words 或min_font_size 。默認:False |
include_numbers | 布爾 類型,是否將數字包含為短語。默認:False |
min_word_length | 整數 類型,一個單詞必須包含的最小字母數。默認:0 |
mode | 顏色模式,默認“RGB”。如果想設置透明底色的雲詞圖,那么可以設置background_color=None, mode=“RGBA” |
被棄用屬性 | ranks_only |
wordcloud方法 | 作用 |
---|---|
fit_words(frequencies) | 根據詞頻生成詞雲(frequencies,為字典類型),generate_from_frequencies(frequencies) 的簡寫 |
generate(text) | 根據文本生成詞雲,generate_from_text(text) 的簡寫 |
generate_from_frequencies(frequencies, max_font_size=None) | 根據詞頻生成詞雲 |
generate_from_text(text) | 根據文本生成詞雲 |
process_text(text) | 將長文本分詞並去除屏蔽詞(此處指英語,中文分詞還是需要自己用別的庫先行實現,使用上面的 fit_words(frequencies) ) |
recolor([random_state, color_func, …]) | 對現有輸出重新着色。重新上色會比重新生成整個詞雲快很多。 |
to_array() | 轉換為numpy數組。 |
to_file(filename) | 輸出到文件(filename為輸出文件名) |
to_svg([embed_font, …]) | 導出為SVG格式。 |
簡單詞雲生成實例
使用上述的方法和屬性我們就可以生成一個自己的詞雲。
# 制作詞雲使用
from wordcloud import WordCloud
# 中文分詞使用
import jieba
# 獲取制作詞雲的文本路徑
path_txt = '詞雲.txt'
# 打開文本
with open(path_txt, 'r', encoding='UTF-8') as f:
# 結巴分詞,生成字符串,wordcloud無法直接生成正確的中文詞雲
cut_text = " ".join(jieba.cut(f.read()))
# 設置詞雲屬性
wordcloud = WordCloud(
# 設置字體,不然會出現口字亂碼,文字的路徑是電腦的字體一般路徑,可以換成別的
font_path="C:\\Users\\xunmi\\AppData\\Local\\Microsoft\\Windows\\Fonts\\WenCangShuFang.ttf",
# 設置了背景(當前為透明)
background_color=None,
mode='RGBA',
# 寬
width=1000,
# 高
height=880
)
# 生成詞雲
wordcloud.generate(cut_text)
# 設置詞雲圖片保存路徑
wordcloud.to_file("圖雲.png")
當前我使用的是文藏書房字體,這是一套免費商用字體,需要的可以自行百度獲得。
wordcloud中其他的方法
wordcloud從除了WordCloud
外,還有
ImageColorGenerator
: 基於彩色圖像的顏色生成器。根據RGB圖像生成顏色。單詞將使用彩色圖像中包圍矩形的平均顏色進行着色。- 測試
random_color_func
: 隨機色調顏色生成。colormap_color_func
: 給每個單詞指定顏色get_single_color_func
: 創建一個顏色函數,該函數返回單個色調和飽和度。
生成自定義樣式和顏色的圖片
使用maks
屬性即可幫助我們生成帶蒙版的詞雲,但需要注意的是我們不能直接將一個圖片給maks,否則會報錯AttributeError: 'str' object has no attribute 'dtype'
大致意思就是str(字符串)沒有dtype屬性。這里我們需要用到matplotlib.pyplot
庫中的.imread('')
屬性。顏色方面我們可以使用recolor
進行重新着色,使用ImageColorGenerator
讀取背景顏色。
# 制作詞雲使用
from wordcloud import WordCloud, ImageColorGenerator
# 中文分詞使用
import jieba
# 轉化蒙版圖片
import matplotlib.pyplot as plt
# 獲取制作詞雲的文本路徑
path_txt = '詞雲.txt'
# 打開文本
with open(path_txt, 'r', encoding='UTF-8') as f:
# 結巴分詞,生成字符串,wordcloud無法直接生成正確的中文詞雲
cut_text = " ".join(jieba.cut(f.read()))
# 設置背景圖片
backgroud_image = plt.imread('蒙版圖.jpg')
# 設置詞雲屬性
wordcloud = WordCloud(
# 設置字體,不然會出現口字亂碼,文字的路徑是電腦的字體一般路徑,可以換成別的
font_path="C:\\Users\\xunmi\\AppData\\Local\\Microsoft\\Windows\\Fonts\\WenCangShuFang.ttf",
# 設置了背景(當前為透明)
background_color=None,
mode='RGBA',
# 寬
width=1000,
# 高
height=880,
# 設置背景蒙版
mask=backgroud_image
)
# 生成詞雲
wordcloud.generate(cut_text)
# 將字體顏色重新着色為背景顏色(recolor方法必須在generate之后執行)
wordcloud.recolor(color_func=ImageColorGenerator(backgroud_image))
# 設置詞雲圖片保存路徑
wordcloud.to_file("圖雲.png")