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

我:小哥哥,聽你上次說的jieba分詞能夠作詞雲圖,詞雲圖究竟是什麼鴨?

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

圖片


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

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


收集數據慘綠青年:數據可使用爬蟲來收集,此次爲了方便,我從網上找了個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庫去切分評論獲取詞語。app

#導入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]


製做詞雲圖ide

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

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

#從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()


圖片

生成詞雲的參數
spa


圖片

結果
3d


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

#導入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(),傳入鍵爲字符串、值爲數字的字典。

相關文章
相關標籤/搜索