來自:戀習Python(微訊號:sldata2017)
詞雲圖,也叫文字雲,是對文字中出現頻率較高的“關鍵詞”予以視覺化的展現,詞雲圖過濾掉大量的低頻低質的文字資訊,使得瀏覽者只要一眼掃過文字就可領略文字的主旨。
在談畫詞雲圖時,先說說小學生學畫畫,這樣的場景,你一定不陌生:
小孩開始畫畫的時候,許多家長覺得他們畫的東西什麼都“不像”、“亂七八糟”、“一塌糊塗”。於是他們上書店為孩子買回填色書,這類印有動物,風景的輪廓線,孩子們線上內填上顏色的填色書,在市場上很常見,買回後讓小孩規規矩矩地塗色,看到有點像樣了,爸爸媽媽們才感覺到欣慰。
總結起來,就是三大步:準備原材料(五顏六色的畫筆)、選定一個填色書(需要有形狀輪廓等)、最後開始填色。
用Python畫詞雲圖其實也是這三大步驟:
1、準備原材料
準備好一份自己需要分析的文字材料,今天戀習Python選取的是,1月25日,習近平在中共中央政治局第十二次集體學習時,關於推動媒體融合向縱深發展的講話。
在這裡,我們主要會用到Python庫jieba,jieba就是這樣一個非常好用的中文工具,是以分詞起家的,但是功能比分詞要強大很多。
jieba.cut傳回的結構都是一個可迭代的 generator,可以使用 for 迴圈來獲得分詞後得到的每一個詞語(unicode)。
jieba.cut 方法接受三個輸入引數:
-
需要分詞的字串
-
cut_all 引數用來控制是否採用全樣式,一般情況下,cut_all為False
-
HMM 引數用來控制是否使用 HMM 模型
import jieba
list0 = jieba.cut('我原來是一名Java工程師,後來喜歡上了Python語言', cut_all=True)
print("全樣式:",list(list0))
list1 = jieba.cut('我原來是一名Java工程師,後來喜歡上了Python語言', cut_all=False)
print("精準樣式:",list(list1))
###輸出結果:
全樣式: ['我', '原來', '是', '一名', 'Java', '工程', '工程師', '', '', '後來', '喜歡', '上', '了', 'Python', '語言']
精準樣式: ['我', '原來', '是', '一名', 'Java', '工程師', ',', '後來', '喜歡', '上', '了', 'Python', '語言']
同時,獲得到文字時,我們需要對文字進行文字預處理(刪除掉我們不想要的詞語以及符號,如同剔除掉不需要的畫筆)、文字分詞以及詞頻統計(只獲取我們希望展示的詞語,如同保留下我們的畫筆)
詳細程式碼如下:
data_txt = open(r"E:\project\wordcloud\xinmeiti.txt",'r',encoding='utf-8').read()
#文字預處理
pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"')
data_txt = re.sub(pattern, '', data_txt)
#文字分詞
cut_txt = jieba.cut(data_txt)
object_list=[]
remove_words = [u"的","習近平",u'對',u'等',u'能',u'都',u'。',u' ',u'、',u'中',u'在',u'了',u',',u'“',u'”',u'一個',u'是',u'人民日報']
#詞頻統計
for word in cut_txt:
if word not in remove_words:
object_list.append(word)
word_counts = collections.Counter(object_list)
2、選定填色書
關於詞雲圖最後的形狀輪廓,我們將選取寵物豬作為展示,如下圖:
這裡主要說說Python中wordcloud的基本使用,wordcloud把詞雲當作一個物件,它可以將文字中詞語出現的頻率作為一個引數繪製詞雲,而詞雲的大小、顏色、形狀等都是可以設定的。
WordCloud方法的引數如下:
width:指定詞雲物件生成的圖片的寬度(預設為200px)
height:指定詞雲物件生成的圖片的高度(預設為400px)
min_font_size:指定詞雲中字型最小字號,預設為4
max_font_size:指定詞雲中字型最大字號
font_step:指定詞雲中字型之間的間隔,預設為1
font_path:指定字型檔案路徑
max_words:指定詞雲中能顯示的最多單詞數,預設為200
stop_words:指定在詞雲中不顯示的單詞串列
background_color:指定詞雲圖片的背景顏色,預設為黑色
mask:定義詞頻背景
說明一下:如果設定了mask引數,那麼width、height引數將無效
word_cloud 生成詞雲有兩個方法。from text 和 from frequencies 。即文字生成和頻率生成,每一個都有對應的函式可以使用,如下:
-
wd.generate(txt) 向WordCloud 物件w中載入文字txt
-
wd.generate_from_frequencies(word_counts) 向WordCloud 物件wd中載入詞語頻率
詳細程式碼如下:
#定義詞頻背景
background_image = np.array(Image.open(path_image))
font_path="E:\project\wordcloud\simfang.ttf"
wd = WordCloud(
font_path=font_path, #設定字型格式,不然會亂碼
background_color="white", #設定背景顏色
mask=background_image #設定背景圖
).generate_from_frequencies(word_counts)
#儲存詞雲圖
wd.to_file('zhu.png')
#顯示詞雲圖
plt.imshow(wd,interpolation="bilinear")
plt.axis("off")
plt.show()
結果圖如下:
由上圖可看出,作為一個主流新媒體平臺,我們要為人民發聲,融合新技術,傳播正確的政治輿論。