Python-製作視覺化詞雲
阿新 • • 發佈:2019-01-05
目錄
一.對於視覺化詞雲的理解
- 對人、物、事的文字描述中,大量出現的詞可以用於這些物件的標籤,將這些標籤按照詞頻的大小以圖片的方式展示出來,就成為了視覺化的個性化詞雲。
- 例如,我們對某一類新聞進行詞頻統計,頻繁出現的詞語就是該類新聞的主題,將這些詞語按大小進行圖片填充,既形象也美觀。
- 工業化中使用較多,用於研究好像有點造作。
二.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()