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

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

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


安装pip install wordcloud


github项目:github.com/amueller/wo…


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页短评数据,保存到文本中。

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.计算词频,输出词云文件

基本的词云

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") # 保存词云文件

词云效果如下:

1719229975101.jpg

添加蒙版图片的词云

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


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


添加蒙版图片如下:

1719229994552.jpg

# 示例代码
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")

词云效果如下:

1719230050062.jpg

相关文章
|
1天前
|
Python
告别混乱!Python上下文管理器的自定义实践,让你的代码更加整洁有序
【7月更文挑战第6天】Python的上下文管理器通过`__enter__`和`__exit__`方法自动处理资源的获取与释放,如文件操作。使用with语句结合自定义类(如`FileManager`示例),能确保文件在使用后正确关闭,防止资源泄漏,提升代码整洁度和健壮性。自定义上下文管理器是代码模块化和错误处理的好实践。
|
1天前
|
设计模式 Python
深度揭秘!Python元类:掌握它,让你的代码拥有创造类的能力
【7月更文挑战第6天】Python元类探秘:**元类是类的类,用于控制类的创建。通过定义元类,可自定义类的行为,如动态添加方法或改变继承结构。示例中,`my_metaclass`在创建类时添加`new_method`。元类强大且适用于高级编程,如动态修改、注册类或实现设计模式。理解并善用元类能提升Python编程技巧。
6 0
|
1天前
|
数据采集 程序员 Python
深度定制Python上下文管理器,让你的代码世界从此井井有条
【7月更文挑战第6天】Python的上下文管理器简化了资源管理,通过`__enter__`和`__exit__`方法自动处理获取和释放。例如,一个自定义的LoggingContextManager类在`__enter__`中配置日志并返回记录器,在`__exit__`中关闭文件。使用`with`语句,可以优雅地控制日志文件的生命周期,提高代码的整洁性和健壮性。
5 0
|
1天前
|
Python
Python大神的秘密武器:揭秘上下文管理器的自定义艺术,让代码更优雅
【7月更文挑战第6天】Python上下文管理器是资源管理的关键,与with语句结合确保自动释放,防止资源泄露。通过定义__enter__和__exit__方法的类或使用contextmanager装饰器的生成器,可自定义管理器,简化代码,增强健壮性,如资源获取与释放、异常处理和高级功能实现。掌握这一技巧能提升代码的优雅度和可维护性。**
|
1天前
|
Python
惊艳!原来Python闭包与装饰器可以这样玩,让你的代码瞬间高大上
【7月更文挑战第6天】Python中的闭包和装饰器是代码复用和增强功能的利器。闭包是能记住外部作用域变量的内嵌函数,常用于封装和优化代码。例如,`make_multiplier_of`生成了乘法函数,如`times3`和`times5`,避免了重复代码。装饰器则不修改原函数即可添加新功能,如`my_decorator`在函数调用前后打印信息。当两者结合,如`repeat`装饰器,可以根据参数动态改变函数行为,如重复执行`greet`函数。闭包和装饰器的协同使用提升了代码的优雅性、效率和可扩展性。
6 0
|
1天前
|
Python
告别代码冗余!Python闭包与装饰器如何让你秒变代码优化大师?
【7月更文挑战第6天】Python的闭包和装饰器是解决代码冗余的利器。闭包,如匿名函数,记忆外部作用域变量,实现代码封装。例如,`make_multiplier_of`生成特定乘法函数,避免重复。装饰器如`@my_decorator`,不修改原函数,添加额外功能,如在函数调用前后打印信息。两者结合,提升代码灵活性和复用性,是优化和整洁代码的关键。
4 0
|
2天前
|
机器学习/深度学习 数据采集 算法
【2024泰迪杯】A 题:生产线的故障自动识别与人员配置 Python代码实现
【2024泰迪杯】A 题:生产线的故障自动识别与人员配置 Python代码实现
11 0
|
3天前
|
语音技术 开发者 Python
语音识别,python运行H ~W~,要使用英符,执行Python的流程是输入Python,回车,解释器的两大功能,翻译代码,提交计算机运算,多行代码运行,写一个py文件,pycharm安
语音识别,python运行H ~W~,要使用英符,执行Python的流程是输入Python,回车,解释器的两大功能,翻译代码,提交计算机运算,多行代码运行,写一个py文件,pycharm安
|
4天前
|
Python
惊呆了!Python 闭包与装饰器:解锁代码魔法的神秘钥匙🔑
【7月更文挑战第3天】Python中的闭包和装饰器是代码的神器。闭包是内嵌函数记住外部函数的变量,如`inner_function`记住`outer_function`的`x`。装饰器不修改原函数,增加额外功能,如`my_decorator`在`my_function`执行前后的打印。它们提升代码复用性,如`timeit_decorator`计时或`permission_required`控制访问权限。利用这些特性,编码变得更高效和优雅。
|
5天前
|
存储 程序员 Python
惊!Python数据类型竟藏着这些黑科技?列表推导式让你代码秒变炫酷!
【7月更文挑战第2天】Python的列表推导式是编程中的亮点,它以一行代码实现循环与条件判断,创建新列表。例如,要计算数字列表的平方,传统方法需循环,而列表推导式只需`[number ** 2 for number in numbers]`。它还能结合if语句筛选元素,如取偶数平方。嵌套使用时,能处理复杂数据结构,如展平并筛选偶数。列表推导式是Pythonic的体现,提升效率,简化代码。