首页 > Python资料 博客日记
【Python】生成词云图太简单了|拿来就用能的词云图代码
2024-05-14 02:00:04Python资料围观436次
1 词云简介
词云也叫文字云,是一种可视化的结果呈现,常用在爬虫数据分析中,原理就是统计文本中高频出现的词,过滤掉某些干扰词,将结果生成一张图片,直观的获取数据的重点信息。今天,我们一起来学习一下Python生成词云的常用库「wordcloud」。
wordcloud是第三方库,需要提前下载安装。
安装: pip install wordcloud
wordcloud 对象有很多参数设定,设定不同的参数,可以绘制不同形状、颜色和尺寸的词云图。
2 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 | 图片背景颜色,默认黑色 |
3 WordCloud常用方法
方法 | 功能 |
---|---|
generate(text) | 加载词云文本 |
to_file(filename) | 输出词云文件 |
wordcloud默认是为了英文文本来做词云的,如果需要制作中文文本词云,就需要先对中文进行分词。这里就需要用到中文分词库「jieba」。
4 jieba 分词库
jieba 是优秀的中文分词库,需要安装。它的原理是利用一个中文词库,确定中文字符之间的关联概率,汉字间概率大的组成词组,形成分词结果,除了分词,还可以添加自定义词组。
安装:
pip install jieba
jieba有三种分词模式,这里我们只学习它的精确模式,把文本精确地切分开,不存在冗余单词。
使用jieba.lcut(s)
,返回列表型分词结果。当然,也可以使用jieba.add_word(w)向jieba库中增加词语。
5 使用wordcloud生成词云的步骤
- 读取文件,分词整理,生成词云文本
- 配置wordcloud对象参数,加载词云文本
- 计算词频,输出词云文件
6 词云案例
--- 爬取最近很火的一部电影《芭比》的影评数据,生成词云图。
1)生成文本文件
获取豆瓣电影网站10页短评数据,保存到文本中。
代码如下:
import requests
from lxml import etree
import time
import random
# 通过观察url翻页的规律,使用for循环得到10个链接,保存到urls列表中
urls = ['https://movie.douban.com/subject/4058939/comments?start={}&limit=20&status=P&sort=new_score'.format(str(i)) for
i in range(0, 200, 20)]
# print(urls)
headers = {
"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循环遍历获取每个页面的数据,保存到comments_list列表中
for url in urls:
resp = requests.get(url=url, headers=headers).text
html = etree.HTML(resp)
data_list = html.xpath('//div[@id="comments"]/div[@class="comment-item "]')
# page_list用于保存同一页面内的所有评论
page_list = []
for data in data_list:
comment = data.xpath('./div[2]/p/span/text()')[0]
page_list.append(comment)
# print(page_list)
comments_list.extend(page_list)
# 让程序随机睡眠0~3秒,避免速度过快被反爬
time.sleep(random.randint(0, 3))
print("共获取电影《芭比》的短评条数:", len(comments_list))
with open('movie_comments.txt', 'w', encoding='utf-8') as f:
# 将列表中的数据逐条写入到文本文件中
for comment in comments_list:
f.write(comment + "\n")
2)生成基本的词云
读取第一步中的文本文件,生成词云图。
代码如下:
import jieba
import wordcloud
# 读取文本
with open("movie_comments.txt", encoding="utf-8") as f:
s = f.read()
# print(s)
# 生成分词列表
list_s = jieba.lcut(s)
# print(ls)
# 用空格连接成字符串文本
text = ' '.join(list_s)
# print(text)
# 将不需要显示的词整理好后,放入stopwords中
stopwords = ["是", "的", "了", "啊"]
# 创建词云对象
wc = wordcloud.WordCloud(font_path="msyh.ttc",
width=1000,
height=700,
background_color='white',
max_words=100,
stopwords=stopwords)
# msyh.ttc是电脑本地字体,也可以写成绝对路径,字体也可以根据需求换其他字体文件
wc.generate(text) # 加载词云文本
wc.to_file("芭比comments.png") # 保存词云图文件
词云图效果如下:
3)添加蒙版图片的词云图
可以将有白色背景的图片作为蒙版图片,而有图案的地方会被词云填充。
添加蒙版图片需要使用PIL库和numpy库,需提前下载安装。
本案例添加蒙版图片如下:
代码如下:
from wordcloud import WordCloud
from PIL import Image
import numpy as np
import jieba
# 打开文本
with open("movie_comments.txt", encoding="utf-8") as f:
s = f.read()
# 中文分词
text = ' '.join(jieba.cut(s))
# 打开蒙版图片,生成Image对象
img = Image.open("img/chicken.jpg") # 打开遮罩图片
# 生成蒙版
mask = np.array(img) # 将图片转换为数组
# 整理不需要显示的词
stopwords = ["的", "是", "了", "在", "也", "和", "就", "都", "这", "你", "我", "她"]
# 生成WordCloud词云对象,并加载text字符串文本
wc = WordCloud(font_path="msyh.ttc",
mask=mask,
width=1000,
height=800,
background_color='white',
max_words=200,
stopwords=stopwords).generate(text)
# 保存词云图到文件
wc.to_file("芭比comments.png")
词云图效果如下:
标签:
上一篇:房屋出租管理系统需求分析及功能介绍
下一篇:JSP语法——[JSP]5
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj