公号:码农充电站pro

主页:https://codeshellme.github.io

今天来介绍一下如何使用 Python 制作词云

词云又叫文字云,它可以统计文本中频率较高的词,并将这些词可视化,让我们可以直观的了解文本中的重点词汇。

词的频率越高,词显示的大小也就越大。

1,wordcloud 模块

wordcloud 是一个词云生成器,它不仅是一个 Python 库,还是一个命令行工具。我们可以通过 wordcloud 官方文档,和示例库来学习如何使用它。

在使用 wordcloud 之前,需要先安装它:

pip install wordcloud

2,WordCloud 类

WordCloud 类用于创建词云对象,先来看下它的原型:

WordCloud(font_path=None,
width=400, height=200,
margin=2, ranks_only=None,
prefer_horizontal=0.9,
mask=None, scale=1,
color_func=None, max_words=200,
min_font_size=4, stopwords=None,
random_state=None,
background_color='black',
max_font_size=None,
font_step=1, mode='RGB',
relative_scaling='auto',
regexp=None, collocations=True,
colormap=None, normalize_plurals=True,
contour_width=0, contour_color='black',
repeat=False, include_numbers=False,
min_word_length=0,
collocation_threshold=30)

可以看到,WordCloud 类有很多参数可以设置,这里介绍一些常用的参数:

  • font_path:设置字体文件路径,字体文件以 .ttf 为后缀。

    • 如果分析的文本是中文,则需要设置中文字体,否则会乱码。
  • background_color:设置图片背景颜色,默认为 black,也可以设置为 white 等。
  • mask:设置背景图片。
  • max_words:设置最大的词数,默认为200。
  • stopwords:设置停用词。
  • max_font_size:设置字体最大值。
  • width:设置画布的宽度,默认为400。
  • height:设置画布的高度,默认为200。
  • random_state:设置多少种随机状态,即多少种颜色。

在创建好词云对象后,可以使用 generate 方法生成词云,并使用 to_file 方法将词云图像保存在文件中。

generate 方法的原型如下:

generate(text)

参数text 是一个用空格隔开的文本字符串。如果分析的是中文,需要先用 jieba 进行分词,可以参考这里

除了将词云图像保存在文件中,还可以使用 Matplotlib 模块显示词云图像,示例代码如下:

import matplotlib.pyplot as plt

plt.imshow(wordcloud)  # wordcloud 是词云对象
plt.axis("off") # 用于关闭坐标轴
plt.show()

3,一个简单的示例

下面演示一个最简单的示例,来看如何使用 wordcloud

首先创建词云对象

from wordcloud import WordCloud
wc = WordCloud()

生成词云:

text = "Python is a programming language, it is easy to use."
wc.generate(text)

词云对象的 words_ 属性中存储了每个单词的(归一化后的)权重,权重的范围是 (0, 1]

words_ 属性是一个字典类型,它存储的键的最大个数为 max_words,即 WordCloud 类的参数。

如下:

>>> wc.words_
{'Python': 1.0, 'programming': 1.0, 'language': 1.0, 'easy': 1.0, 'use': 1.0}
# 示例中的这些单词出现的频率都相等(均为 1),
# 所以它们的权重都是 1。

Matplotlib 展示词云图像:

import matplotlib.pyplot as plt

plt.imshow(wc)
plt.axis("off")
plt.show()

词云图像如下:

4,对古诗做词云分析

我在这里准备了一个案例,是对1000 首古诗做词云分析。

代码目录如下:

wordcloud/
├── SimHei.ttf
├── gushi.txt
└── gushi_wordcloud.py

其中:

  • SimHei.ttf:是一个字体文件,避免词云分析时出现中文乱码。
  • gushi.txt:该文件中包含了1000 首古诗
  • gushi_wordcloud.py:是词云分析代码

我将代码也放在这里,方便查看:

#!/usr/bin/env python
# coding=utf-8 import os
import sys
import jieba
from wordcloud import WordCloud if sys.version.startswith('2.'):
reload(sys)
sys.setdefaultencoding('utf-8') # 去掉一些作者的名字
STOPWORDS = [
u'李白', u'杜甫', u'辛弃疾', u'李清照', u'苏轼',
u'李商隐', u'王维', u'白居易', u'李煜', u'杜牧',
] def load_file(file_path):
if sys.version.startswith('2.'):
with open(file_path) as f:
lines = f.readlines()
else:
with open(file_path, encoding='utf-8') as f:
lines = f.readlines() content = '' for line in lines:
line = line.encode('unicode-escape').decode('unicode-escape')
line = line.strip().rstrip('\n') content += line words = jieba.cut(content) l = []
for w in words:
# 如果词的长度小于 2,则舍去
if len(w) < 2: continue l.append(w) return ' '.join(l) if __name__ == '__main__':
file_path = './gushi.txt'
content = load_file(file_path) wc = WordCloud(
font_path="./SimHei.ttf",
stopwords=STOPWORDS,
width=2000, height=1200) wc.generate(content)
wc.to_file("wordcloud.jpg")

其中:

  • STOPWORDS 停用词列表,是一些作者的名字。
  • load_file 方法用于加载文本,其中用到了 jieba 分词。

最后将词云图像保存在了 wordcloud.jpg 文件中,如下:

我们也可以从词云对象的words_ 属性中查看每个词的权重,这里我列出前十个:

('明月', 1.0)
('今日', 0.9130434782608695)
('不知', 0.8405797101449275)
('何处', 0.8260869565217391)
('不见', 0.8115942028985508)
('春风', 0.7536231884057971)
('无人', 0.7536231884057971)
('不可', 0.7536231884057971)
('万里', 0.7536231884057971)
('现代', 0.6666666666666666)

(本节完。)


推荐阅读:

如何使用Python 进行数据可视化

Apriori 算法-如何进行关联规则挖掘

PageRank 算法-Google 如何给网页排名

K 均值算法-如何让数据自动分组

KNN 算法-实战篇-如何识别手写数字


欢迎关注作者公众号,获取更多技术干货。

如何用Python 制作词云-对1000首古诗做词云分析的更多相关文章

  1. 如何用Python做词云(收藏)

    看过之后你有什么感觉?想不想自己做一张出来? 如果你的答案是肯定的,我们就不要拖延了,今天就来一步步从零开始做个词云分析图.当然,做为基础的词云图,肯定比不上刚才那两张信息图酷炫.不过不要紧,好的开始 ...

  2. 一步一步教你如何用Python做词云

    前言 在大数据时代,你竟然会在网上看到的词云,例如这样的. 看到之后你是什么感觉?想不想自己做一个? 如果你的答案是正确的,那就不要拖延了,现在我们就开始,做一个词云分析图,Python是一个当下很流 ...

  3. python 生成18年写过的博客词云

    文章链接:https://mp.weixin.qq.com/s/NmJjTEADV6zKdT--2DXq9Q 回看18年,最有成就的就是有了自己的 博客网站,坚持记录,写文章,累计写了36篇了,从一开 ...

  4. Python给小说做词云

    闲暇时间喜欢看小说,就想着给小说做词云,展示小说的主要内容.开发语言是Python,主要用到的库有wordcloud.jieba.scipy.代码很简单,首先用jieba.cut()函数做分词,生成以 ...

  5. python3做词云分析

    python3做词云 其实词云一般分为两种,一个是权重比,一个是频次分析 主要还是体现在自然语言方向,难度较大,但这里我们用jieba词库 主要思路, 后端算数据+前端生成图(D3-cloud-好像是 ...

  6. 纯前端实现词云展示+附微博热搜词云Demo代码

    前言 最近工作中做了几个数据可视化大屏项目,其中也有用到了词云展示,以前做词云都是用python库来生成图片显示的,这次用了纯前端的实现(Ctrl+V真好用),同时顺手做个微博热搜的词云然后记录一下~ ...

  7. 做词云时报错cannot import name ‘WordCloud‘ from partially initialized module ‘wordcloud‘的解决办法

    问题: 在做词云时,运行时出现该问题,wordcloud安装成功,但运行出错,错误提示是:cannot import name 'WordCloud' from partially initializ ...

  8. 词云wordcloud类介绍&python制作词云图&词云图乱码问题等小坑

    词云图,大家一定见过,大数据时代大家经常见,我们今天就来用python的第三方库wordcloud,来制作一个大数据词云图,同时会降到这个过程中遇到的各种坑, 举个例子,下面是我从自己的微信上抓的微信 ...

  9. python制作词云

    需要模块wordcloud,pip install wordcloud安装即可.代码: , #边距background_color='black',#指定背景颜色font_path='simhei.t ...

随机推荐

  1. spring boot和spring cloud版本选择

    SpringBoot版本介绍 官网链接:https://spring.io/projects/spring-boot#learn Spring Boot的版本以数字表示.例如:Spring Boot ...

  2. [原题复现+审计][0CTF 2016] WEB piapiapia(反序列化、数组绕过)[改变序列化长度,导致反序列化漏洞]

    简介  原题复现:  考察知识点:反序列化.数组绕过  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 漏洞学习 数组 ...

  3. pikachs 渗透测试2-XSS漏洞及利用

    一.概述 XSS(跨站脚本)概述 Cross-Site Scripting 简称为"CSS",为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS.一般XS ...

  4. day94:flask:Jinjia2模板引擎&flask中的CSRF攻击&Flask-SQLAlchemy的创建模型类和基本的增删改查

    目录 1.Jinjia2模板引擎 1.Jinjia2加载模板并传递数据到模板中 2.Jinjia2的模板语句 3.模板中特有的变量和函数 4.模板中内置的过滤器 5.自定义过滤器 6.模板继承 2.在 ...

  5. java大厂面经-阿里腾讯、网易美团、京东、华为、快手、字节全在这里了

    前言 在这篇文章详细说了该如何去复习,之前也答应各位把面经整理一下,但是因为入职的事情耽搁了,现在整理出来回馈给大家! 美团 一面 0.自我介绍1.问项目(项目详细介绍.用到什么技术.有什么优化)2. ...

  6. 解析MindMapper选项中的鱼骨选项

    MindMapper思维导图可以画鱼骨图,而且完成的相当漂亮,我们可以在选项设置中定义鱼骨图图的默认样式.下面本文就分析了MindMapper选项中可以更改哪些鱼骨图设置. 我们首先打开MindMap ...

  7. FL studio系列教程(十六):FL Studio查看菜单讲解

    FL Studio中每个窗口的显示.隐藏和布局命令都在查看菜单中.其中它被分为窗口.布局和浏览器3个部分,各项名称都有其单独的作用.窗口部分主要是软件的显示的一些菜单这里就不详细讲解了,接下来我们重点 ...

  8. Ⅶ. Policy Gradient Methods

    Dictum:  Life is just a series of trying to make up your mind. -- T. Fuller 不同于近似价值函数并以此计算确定性的策略的基于价 ...

  9. 合并2个数组为1个无重复元素的有序数组--Go对比Python

    Go实现: 1 package main 2 3 import ( 4 "fmt" 5 "sort" 6 ) 7 8 func main() { 9 var a ...

  10. 蓝桥杯——测试次数·摔手机(2018JavaB组第4题,17分)

    x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市流通. x ...