前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >拿来就用能的Python词云图代码|wordcloud生成词云详解

拿来就用能的Python词云图代码|wordcloud生成词云详解

作者头像
吾非同
发布2021-03-12 11:08:32
1.8K0
发布2021-03-12 11:08:32
举报
文章被收录于专栏:吾非同吾非同

词云也叫文字云,是一种可视化的结果呈现,常用在爬虫数据分析中,原理就是统计文本中高频出现的词,过滤掉某些干扰词,将结果生成一张图片,直观的获取数据的重点信息。今天,我们就来学习一下Python生成词云的常用库「wordcloud」

「安装」pip install wordcloud

github项目:https://github.com/amueller/word_cloud

「wordcloud」对象有很多参数设定,可以绘制不同形状、颜色和尺寸的词云图。

WordCloud对象常用参数

参数

说明

font_path

设置字体,指定字体文件的路径

width

生成图片宽度,默认400像素

height

生成图片高度,默认200像素

mask

词云形状,默认使用矩形

min_font_size

词云中最小的字体字号,默认4号

font_step

字号步进间隔,默认1

max_font_size

词云中最大的字体字号,默认根据高度自动调节

max_words

词云显示的最大词数,默认200

stopwords

设置停用词(需要屏蔽的词),停用词不在词云中显示,默认使用内置的STOPWORDS

background_color

图片背景颜色,默认黑色

WordCloud常用方法

方法

功能

generate(text)

加载词云文本

to_file(filename)

输出词云文件

wordcloud默认是为了英文文本来做词云的,如果需要制作中文文本词云,就需要先对中文进行分词。这里就需要用到中文分词库「jieba」

jieba

「jieba」是优秀的中文分词库,需要安装。它的原理是利用一个中文词库,确定中文字符之间的关联概率,汉字间概率大的组成词组,形成分词结果,除了分词,还可以添加自定义词组。

安装:pip install jieba

jieba有三种分词模式,这里我们只学习它的精确模式,把文本精确的切分开,不存在冗余单词。

使用jieba.lcut(s),返回列表型分词结果。当然,也可以使用jieba.add_word(w)向jieba库中增加词语。

词云案例

爬取最近很火的一部电影《你好,李焕英 》的影评数据,生成词云。

「获取10页短评数据,保存到文本中。」

代码语言:javascript
复制
import requests
from bs4 import BeautifulSoup
import time
import random
urls=['https://movie.douban.com/subject/34841067/comments?start={}&limit=20&status=P&sort=new_score'.format(str(i)) for i in range(0, 200, 20)] #通过观察的url翻页的规律,使用for循环得到10个链接,保存到urls列表中
print(urls)
dic_h = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"}
comments_list = [] #初始化用于保存短评的列表

for url in urls: #使用for循环分别获取每个页面的数据,保存到comments_list列表
    r = requests.get(url=url,headers = dic_h).text

    soup = BeautifulSoup(r, 'lxml')
    ul = soup.find('div',id="comments")
    lis= ul.find_all('p')

    list2 =[]
    for li in lis:
        list2.append(li.find('span').string)
    # print(list2)
    comments_list.extend(list2)
    time.sleep(random.randint(0,3)) # 暂停0~3秒
    
with open('lhy_comments.txt', 'w', encoding='utf-8') as f: #使用with open()新建对象f
    # 将列表中的数据循环写入到文本文件中
    for i in comments_list:
        f.write(i+"\n") #写入数据
使用wordcloud生成词云的步骤

「1.读取文件,分词整理」

「2.配置对象参数,加载词云文本」

「3.计算词频,输出词云文件」

基本的词云
代码语言:javascript
复制
import jieba
import wordcloud
# 读取文本
with open("lhy_comments.txt",encoding="utf-8") as f:
    s = f.read()
print(s)
ls = jieba.lcut(s) # 生成分词列表
text = ' '.join(ls) # 连接成字符串


stopwords = ["的","是","了"] # 去掉不需要显示的词

wc = wordcloud.WordCloud(font_path="msyh.ttc",
                         width = 1000,
                         height = 700,
                         background_color='white',
                         max_words=100,stopwords=s)
# msyh.ttc电脑本地字体,写可以写成绝对路径
wc.generate(text) # 加载词云文本
wc.to_file("李焕英1.png") # 保存词云文件

词云效果如下:

添加蒙版图片的词云

可以将有白色背景的图片作为蒙版图片,有图案的地方会被词云填充。

添加蒙版图片需要使用PIL,numpy库。

添加蒙版图片如下:

代码语言:javascript
复制
# 示例代码
from wordcloud import WordCloud
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import jieba

# 打开文本
with open("lhy_comments.txt",encoding="utf-8") as f:
    s = f.read()

# 中文分词
text = ' '.join(jieba.cut(s))

# 生成对象
img = Image.open("mask_pic.png") # 打开遮罩图片
mask = np.array(img) #将图片转换为数组

stopwords = ["我","你","她","的","是","了","在","也","和","就","都","这"]
wc = WordCloud(font_path="msyh.ttc",
               mask=mask,
               width = 1000,
               height = 700,
               background_color='white',
               max_words=200,
               stopwords=stopwords).generate(text)

# 显示词云
plt.imshow(wc, interpolation='bilinear')# 用plt显示图片
plt.axis("off")  # 不显示坐标轴
plt.show() # 显示图片

# 保存到文件
wc.to_file("李焕英2.png")

词云效果如下:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 吾非同 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • WordCloud对象常用参数
  • WordCloud常用方法
  • jieba
  • 词云案例
    • 使用wordcloud生成词云的步骤
      • 基本的词云
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档