無需要太多,只需要一張Python詞雲圖

我:小哥哥,聽你上次說的jieba分詞可以做詞雲圖,詞雲圖到底是什麼鴨?

慘綠青年:“詞雲圖過濾掉大量的文本信息,使瀏覽網頁者只要一眼掃過文本就可以領略文本的主旨。”——《百度百科》。下面是一張三大運營商年報的詞雲圖。

圖片


我:原來是醬紫。教教我做唄¯ω¯?

慘綠青年:做詞雲圖可以大致分爲三個步驟,第一步是收集數據,第二步是處理數據,第三步是製作詞雲圖。這次教你做一個網易雲歌曲評論的詞雲圖吧。


收集數據慘綠青年:數據可以使用爬蟲來收集,這次爲了方便,我從網上找了個api去獲取數據。我:api是啥鴨?慘綠青年:api就是應用程序編程接口,通過向該接口發送請求可以獲取數據。類似向服務器發送請求去獲取網頁。我:好像有點懂了。慘綠青年:就像爬取網頁一樣使用requests庫獲取數據。

#導入requests庫,該庫是第三方庫,需要自行下載import requests
#定義url,limit表示每次取的數量,offset表示從第幾個開始取url = 'https://music.163.com/api/v1/resource/comments/R_SO_4_26620756?limit=100&offset={}'
#定義headers防反爬措施headers = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'    }
#定義列表來存放評論數據comments = []
#通過循環獲取數據for i in range(0, 114000, 100):    res = requests.get(url.format(i), headers=headers).json()for comment in res.get('comments'):        comments.append(comment.get('content'))


處理數據慘綠青年:數據收集好後就要進行處理。因爲評論裏面有些是表情,顯示成文字的時候是“[愛心]”這樣的,所以要用re庫去清除掉。然後再用jieba庫去切分評論獲取詞語。

#導入re庫import re#導入jieba庫,該庫是第三方庫,需要自行下載import jieba
#清除表情文字comments = [re.sub('(\[.*?\])', '', comment) for comment in comments]
#使用jieba庫切分評論獲取長度大於1的詞語cut = [word for comment in comments for word in jieba.cut(comment) if len(word) > 1]


製作詞雲圖

慘綠青年:接下來教你兩種詞雲圖的製作方法。一種是普通詞雲圖,另一種是根據圖片生成的詞雲圖。

慘綠青年:詞雲圖首先需要生成一個詞雲對象,然後對這個對象進行操作去生成詞雲圖。下面是生成普通詞雲圖的方法。

#從wordcloud庫導入WordCloud,該庫是第三方庫,需要自行下載from wordcloud import WordCloud
#定義詞雲的字體,製作中文詞雲圖時必須選擇中文的字體font = r'C:\Windows\Fonts\simsun.ttc'
#創建一個詞雲對象wc = WordCloud(font_path=font)
#調用generate()生成詞雲,該方法接收的是字符串參數,用空格把詞語拼接起來後傳進去wc.generate(' '.join(cut))
#調用to_image()把詞雲對象轉化成圖片wc_img = wc.to_image()
#調用show()把圖片展示出來wc_img.show()


圖片

生成詞雲的參數


圖片

結果


慘綠青年:根據圖片生成詞語圖需要多一點操作,就是把圖片對象作爲詞雲的模板。

#導入imageio庫的imread模塊from imageio import imread
#打開圖片文件作爲模板mask = imread(r'C:\Users\MyPC\Desktop\heart.jfif', pilmode='RGB')
#用模板生成詞雲對象wc = WordCloud(font_path=font, height=912, width=912, mask=mask, background_color='white')
#調用generate()生成詞雲,該方法接收的是字符串參數,用空格把詞語拼接起來後傳進去wc.generate(' '.join(cut))
#調用to_image()把詞雲對象轉化成圖片wc_img = wc.to_image()
#調用show()把圖片展示出來wc_img.show()


圖片

根據圖片生成的詞雲圖


慘綠青年:若想要根據圖片的顏色去生成,需要在生成詞雲的時候傳入參數或者使用recolor()重新設置。

#從wordcloud導入ImageColorGeneratorfrom wordcloud import ImageColorGenerator
#打開圖片文件作爲模板mask = imread(r'C:\Users\MyPC\Desktop\heart.jfif', pilmode='RGB')
#用模板生成詞雲對象wc = WordCloud(font_path=font, height=912, width=912, mask=mask, background_color='white')
#調用generate()生成詞雲,該方法接收的是字符串參數,用空格把詞語拼接起來後傳進去wc.generate(' '.join(cut))
#用圖片生成ImageColorGenerator對象image_colors = ImageColorGenerator(mask)
#重新設置詞雲的顏色wc.recolor(color_func=image_colors)
#調用to_image()把詞雲對象轉化成圖片wc_img = wc.to_image()
#調用show()把圖片展示出來wc_img.show()

圖片



慘綠青年:此外,還可以通過詞語的頻率去生成詞雲圖。出現頻率高的詞語字體會相對大一點。這裏利用pandas庫去統計每個詞出現的次數並把結果轉化爲字典。

#導入pandas庫,該庫是第三方庫,需要自行下載import pandas as pd
#將切分好的詞語轉化爲Series對象ser = pd.Series(cut)
#使用value_counts()獲取統計數據再用to_dict()轉化爲字典res_dic = ser.value_counts().to_dict()
#打開圖片文件作爲模板mask = imread(r'C:\Users\MyPC\Desktop\leslie.jfif', pilmode='RGB')
#用模板生成詞雲對象wc = WordCloud(height=912, width=912, font_path=font, max_font_size=200, mask=mask)
#使用generate_from_frequencies()根據詞語的頻率生成詞雲圖wc.generate_from_frequencies(res_dic)
#調用to_image()把詞雲對象轉化成圖片wc_img = wc.to_image()
#調用show()把圖片展示出來wc_img.show()

圖片


慘綠青年:若想保存爲文件,可使用wc_img.save('圖片名')。你可以嘗試調整不同的參數,過濾不想要的詞語,做出自己喜歡的詞雲圖。
我:嗯嗯。學到了~
總結:
1.製作詞雲圖步驟:收集數據→處理數據→製作詞雲圖。2.普通詞雲圖:創建詞雲對象後使用generate(),傳入字符串。3.根據圖片生成詞雲圖:使用imageio模塊的imread打開圖片文件,將文件對象傳入WordCloud()內。
4.根據詞頻生成詞雲圖:創建詞雲對象後使用generate_from_frequencies(),傳入鍵爲字符串、值爲數字的字典。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章