如何使用python实现一个优雅的词云?

什么是词云

“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”。

从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。

        在网络上,我们经常可以看到一张图片,上面只有一堆大小不一的文字,有些通过文字生成一个人物的轮廓。像这样的图像,我们称之为词云。

        词云”就是数据可视化的一种形式。给出一段文本的关键词,根据关键词的出现频率而生成的一幅图像,人们只要扫一眼就能够明白文章主旨。

jieba

"结巴"中文分词:做最好的Python中文分词组件 "Jieba" 

安装

pip install jieba

jieba的分词模式

支持三种分词模式:

这里我就以昨日爬取微博鸿星尔克的评论为测试内容。

“网友:我差点以为你要倒闭了!”鸿星尔克捐款5000w后被网友微博评论笑哭...

精确模式

试图将句子最精确地切开,适合文本分析;

它可以将结果十分精确分开,不存在多余的词。

常用函数:cut(str)、lcut(str) 

import pandas as pd

import jieba

# 读取文件

pd_data = pd.read_excel('鸿星尔克.xlsx')

# 读取内容

text = pd_data['发帖内容'].tolist()

# 切割分词

wordlist = jieba.cut(''.join(text))

result =' '.join(wordlist)

print(result)

全模式,它可以将结果全部展现,也就是一段话可以拆分进行组合的可能它都给列举出来了

把句子中所有的可以成词的词语都扫描出来, 速度非常快

常用函数:lcut(str,cut_all=True) 、 cut(str,cut_all=True)

import pandas as pd

import jieba

# 读取文件

pd_data = pd.read_excel('鸿星尔克.xlsx')

# 读取内容

text = pd_data['发帖内容'].tolist()

# 切割分词

wordlist = jieba.lcut(''.join(text), cut_all =True)

result =' '.join(wordlist)

print(result)

搜索引擎模式,在精确模式的基础上,对长词再次切分

它的妙处在于它可以将全模式的所有可能再次进行一个重组

常用函数:lcut_for_search(str) 、cut_for_search(str)

import pandas as pd

import jieba

# 读取文件

pd_data = pd.read_excel('鸿星尔克.xlsx')

# 读取内容

text = pd_data['发帖内容'].tolist()

# 切割分词

wordlist = jieba.lcut_for_search(''.join(text))

result =' '.join(wordlist)

print(result)

处理停用词

在有时候我们处理大篇幅文章时,可能用不到每个词,需要将一些词过滤掉

这个时候我们需要处理掉这些词,比如我们比较熟悉的‘你’  ‘了’、 ‘我’、'的' 什么的

import pandas as pd

import jieba

from stylecloud import gen_stylecloud

# 读取文件

pd_data = pd.read_excel('鸿星尔克.xlsx')

# 读取内容

text = pd_data['发帖内容'].tolist()

# 切割分词

wordlist = jieba.lcut_for_search(''.join(text))

result =' '.join(wordlist)

# 设置停用词

stop_words = ['你','我','的','了','们']

ciyun_words =''

# 过滤后的词

for word in result:

if word not instop_words:

ciyun_words += word

print(ciyun_words)

可以看到,我们成功去除了我们不需要的词‘你’  ‘了’、 ‘我’、'的' ,那么这到底是个什么骚操作呢?

其实很简单,就是将这些需要摒弃的词添加到列表中,然后我们遍历需要分词的文本,然后进行读取判断

如果遍历的文本中的某一项存在于列表中,我们便弃用它,然后将其它不包含的文本添加到字符串,这样生成的字符串就是最终的结果了。

权重分析

很多时候我们需要将关键词以出现的次数频率来排列,这个时候就需要进行权重分析了,这里提供了一个函数可以很方便我们进行分析,

jieba.analyse.extract_tags

import pandas as pd

import jieba.analyse

# 读取文件

pd_data = pd.read_excel('鸿星尔克.xlsx')

# 读取内容

text = pd_data['发帖内容'].tolist()

# 切割分词

wordlist = jieba.lcut_for_search(''.join(text))

result =' '.join(wordlist)

# 设置停用词

stop_words = ['你','我','的','了','们']

ciyun_words =''

for word in result:

if word not in stop_words:

ciyun_words += word

# 权重分析

tag = jieba.analyse.extract_tags(sentence=ciyun_words, topK=10, withWeight=True)

print(tag)

'''

[('尔克', 0.529925025347557),

('国货', 0.2899827734123779),

('加油', 0.22949648081224758),

('鸿星', 0.21417335917247557),

('支持', 0.18191311638625407),

('良心', 0.09360297619470684),

('鞋子', 0.07001117869641693),

('之光', 0.06217569267289902),

('企业', 0.061882654176791535),

('直播', 0.059315225448729636)]

'''

topK就是指你想输出多少个词,withWeight指输出的词的词频。

分词介绍完了,接下来我们介绍一下绘图库 

wordcloud 

我们词云的主要实现是用过 wordcloud 模块中的 WordCloud 类实现的,我们先来了解一个 WordCloud 类。

安装

pip install wordcloud

生成一个简单的词云

我们实现一个简单的词云的步骤如下:

导入 wordcloud 模块

准备文本数据

创建 WordCloud 对象

根据文本数据生成词云

保存词云文件

我们按照上面的步骤实现一个最简单的词云:

# 导入模块

from wordcloud import WordCloud

# 文本数据

text ='he speak you most bueatiful time|Is he first meeting you'

# 词云对象

wc = WordCloud()

# 生成词云

wc.generate(text)

# 保存词云文件

wc.to_file('img.jpg')

可以看到,目标是实现了,但是效果不怎么好。我们继续往下看

WordCloud 的一些参数

我们先看看 WordCloud 中的一些参数,

如下表,各个参数的介绍都写了。

参数参数类型参数介绍

widthint(default=400)词云的宽

heightint(default=200)词云的高

background_colorcolor value(default=”black”)词云的背景颜色

font_pathstring字体路径

masknd-array(default=None)图云背景图片

stopwordsset要屏蔽的词语

maxfontsizeint(default=None)字体的最大大小

minfontsizeint(default=None)字体的最小大小

max_wordsnumber(default=200)要显示词的最大个数

contour_widthint轮廓粗细

contour_colorcolor value轮廓颜色

scalefloat(default=1)按照原先比例扩大的倍数

我们来测试一下上面的参数:

# 导入模块

from wordcloud import WordCloud

# 文本数据

text ='he speak you most bueatiful time Is he first meeting you'

# 准备禁用词,需要为set类型

stopwords = set(['he','is'])

# 设置参数,创建WordCloud对象

wc = WordCloud(

width=200,# 设置宽为400px

height=150,# 设置高为300px

background_color='white',# 设置背景颜色为白色

stopwords=stopwords,# 设置禁用词,在生成的词云中不会出现set集合中的词

max_font_size=100,# 设置最大的字体大小,所有词都不会超过100px

min_font_size=10,# 设置最小的字体大小,所有词都不会超过10px

max_words=10,# 设置最大的单词个数

scale=2# 扩大两倍

)

# 根据文本数据生成词云

wc.generate(text)

# 保存词云文件

wc.to_file('img.jpg')

生成一个有形状的词云

我们设置的图形形状是

import pandas as pd

import jieba.analyse

from wordcloud import WordCloud

import cv2

# 读取文件

pd_data = pd.read_excel('鸿星尔克.xlsx')

# 读取内容

text = pd_data['发帖内容'].tolist()

# 切割分词

wordlist = jieba.lcut_for_search(''.join(text))

result =' '.join(wordlist)

# 设置停用词

stop_words = ['你','我','的','了','们']

ciyun_words =''

forwordinresult:

ifwordnotinstop_words:

ciyun_words += word

# 读取图片

im = cv2.imread('11.jpg')

# 设置参数,创建WordCloud对象

wc = WordCloud(

font_path='msyh.ttc',# 中文

background_color='white',# 设置背景颜色为白色

stopwords=stop_words,# 设置禁用词,在生成的词云中不会出现set集合中的词

mask=im

)

# 根据文本数据生成词云

wc.generate(ciyun_words)

# 保存词云文件

wc.to_file('img.jpg')

发现全是矩形,这是因为 WordCloud 默认不支持中文的缘故,我们需要设置一个可以支持中文的字体,我们添加代码如下:

# 创建词云对象

wc = WordCloud(font_path='msyh.ttc')

文末再给大家介绍一个宝藏库

stylecloud

使用它设置词云再简单不过了,为什么?

因为它有7865个词云图标供你选择。

需要使用那个图标只需复制下面的图标名称即可!

而且自带停用词的那种

import pandas as pd

import jieba.analyse

from stylecloud importgen_stylecloud

# 读取文件

pd_data = pd.read_excel('鸿星尔克.xlsx')

exist_col = pd_data.dropna()# 删除空行

# 读取内容

text = exist_col['发帖内容'].tolist()

# 切割分词

wordlist = jieba.cut_for_search(''.join(text))

result =' '.join(wordlist)

gen_stylecloud(text=result,

icon_name='fas fa-comment-dots',

font_path='msyh.ttc',

background_color='white',

output_name='666.jpg',

custom_stopwords=['你','我','的','了','在','吧','相信','是','也','都','不','吗','就','我们','还','大家','你们','就是','以后']

)

print('绘图成功!')

又方便又好看,是我现在制作词云的首选!

【印象Python】累计原创100+篇趣味干货(爬虫,数据分析,算法,面试指南,原创趣味实战,Python游戏,机器学习),欢迎一起学Python,交流指正。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容