1. 程式人生 > >Python-製作視覺化詞雲

Python-製作視覺化詞雲

目錄

一.對於視覺化詞雲的理解

  • 對人、物、事的文字描述中,大量出現的詞可以用於這些物件的標籤,將這些標籤按照詞頻的大小以圖片的方式展示出來,就成為了視覺化的個性化詞雲。
  • 例如,我們對某一類新聞進行詞頻統計,頻繁出現的詞語就是該類新聞的主題,將這些詞語按大小進行圖片填充,既形象也美觀。
  • 工業化中使用較多,用於研究好像有點造作。

二.python的程式碼實現

(1)實現步驟

  • 收集預料:
    語料可以是某一類新聞,某一篇小說,某一篇報道,人物描述,公司描述,物品描述等等,通過某個語料,獲取該語料的主題。
  • 2.資料讀取:
    對於爬蟲得到的資料需要去掉空行,對不規範的內容進行處理,對於規範的文字可以直接分詞。
  • 3.去停止詞
    分詞後需要去掉停止詞,停止詞的詞頻很大,影響結果。
  • 4.統計詞頻
  • 5.使用wordcloud製作成詞雲

(2)程式碼說明

1.匯入需要的庫

import warnings
warnings.filterwarnings('ignore')
import jieba
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
from wordcloud import WordCloud

2.讀取資料

#資料來自螞蟻花唄客服對話
df=pd.read_csv('./valid.csv'
, sep='\t', header=None,names=['segment']) #針對爬蟲得到的不規範資料需要進行精細處理 df=df.dropna() content=df.segment.values.tolist() segment=[] for line in content: try: segs=jieba.cut(line) for seg in segs: if len(seg)>1 and seg!='\r\n': segment.append(seg) except
: print(line) continue word_df=pd.DataFrame({'segment':segment}) #print(word_df.head())

3.去掉停止詞

stopword=pd.read_csv('chinese_stop_words.txt',sep='\t',names=['stopword'],encoding='gbk')
#print(stopword.head())
word_df=word_df[~word_df.segment.isin(stopword.stopword)]

4.統計詞頻

#增加計數列
word_stat=word_df.groupby(by=['segment'])['segment'].agg({'計數':np.size})
#將詞語數目從大到小排序
word_stat=word_stat.reset_index().sort_values(by=['計數'],ascending=False)

5.顯示詞雲

#設定圖片大小
matplotlib.rcParams['figure.figsize']=(10.0,5.0)
#通過C:/windows/font下的字型資料夾獲取字型;說明背景顏色;最大的字的size
wordcloud=WordCloud(font_path='./simkai.ttf',background_color='white',max_font_size=80)
#獲取頭20個詞語
word_frequence={x[0]:x[1] for x in word_stat.head(20).values}
wordcloud=wordcloud.fit_words(word_frequence)

plt.imshow(wordcloud)
plt.axis("off")
plt.show()

6.結果圖

這裡寫圖片描述

三、自定義背景圖

1.原圖,,不是很清晰,網上隨便找的
這裡寫圖片描述
2.結果圖,,原圖不清晰,所以結果圖也不清晰
這裡寫圖片描述
3.程式碼,,備註和上面相同,程式碼有一點點的改變

import warnings
warnings.filterwarnings('ignore')
import jieba
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['figure.figsize']=(10.0,10.0)
from wordcloud import WordCloud,ImageColorGenerator
from scipy.misc import imread
#1.讀取資料,jieba分詞
df=pd.read_csv('./valid.csv', sep='\t', header=None,names=['id', 'question1', 'question2', 'is_dup'])
df=df.dropna()
content=df.question1.values.tolist()
segment=[]
for line in content:
    try:
        segs=jieba.cut(line)
        for seg in segs:
            if len(seg)>1 and seg!='\r\n':
                segment.append(seg)
    except:
        print(line)
        continue
word_df=pd.DataFrame({'segment':segment})
#2.去掉停止詞
stopword=pd.read_csv('chinese_stop_words.txt',sep='\t',names=['stopword'],encoding='gbk')
word_df=word_df[~word_df.segment.isin(stopword.stopword)]
#3.獲取詞頻
word_stat=word_df.groupby(by=['segment'])['segment'].agg({'計數':np.size})
word_stat=word_stat.reset_index().sort_values(by=['計數'],ascending=False)
#4.新增自定義的背景圖
bimg=imread('./image.jpg')
wordcloud=WordCloud(font_path='./simkai.ttf',background_color='white',mask=bimg,max_font_size=80)
word_frequence={x[0]:x[1] for x in word_stat.head(100).values}
wordcloud=wordcloud.fit_words(word_frequence)
#引入顏色生成器
bimgcolor=ImageColorGenerator(bimg)
#5.顯示結果
plt.axis("off")
plt.imshow(wordcloud.recolor(color_func=bimgcolor))#重新填充
plt.show()