Python-制作可视化词云

目录

  • 目录
    • 一.对于可视化词云的理解
    • 二.python的代码实现
      • (1)实现步骤
      • (2)代码说明
        • 1.导入需要的库
        • 2.读取数据
        • 3.去掉停止词
        • 4.统计词频
        • 5.显示词云
        • 6.结果图
    • 三、自定义背景图

一.对于可视化词云的理解

  • 对人、物、事的文本描述中,大量出现的词可以用于这些对象的标签,将这些标签按照词频的大小以图片的方式展示出来,就成为了可视化的个性化词云。
  • 例如,我们对某一类新闻进行词频统计,频繁出现的词语就是该类新闻的主题,将这些词语按大小进行图片填充,既形象也美观。
  • 工业化中使用较多,用于研究好像有点造作。

二.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.结果图

Python-制作可视化词云_第1张图片

三、自定义背景图

1.原图,,不是很清晰,网上随便找的
Python-制作可视化词云_第2张图片
2.结果图,,原图不清晰,所以结果图也不清晰
Python-制作可视化词云_第3张图片
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()

你可能感兴趣的:(NLP,Python)