python 词云库_Python数据可视化:词云库的讲解和如何制作词云

本文介绍了如何使用Python的jieba库进行文本分词,然后结合wordcloud库生成词云图。通过统计《西游记》中出现频率最高的词,展示了词云图的制作过程,并探讨了如何限制词的长度以过滤特定长度的词汇。最后,通过自定义图片形状展示词云,展示了词云图的多样化可能性。
摘要由CSDN通过智能技术生成

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

以下文章来源于仓储进化 ,作者 小无为

身边总是不经意间能看到词云的效果图。本章介绍python实现词云的方法。效果如下:

d13b6f80aa920ac161267076a71c5068.png

(词云--出现频率越多的词,字体越大 )

工具篇

1、安装可视化库

pip3 install matplotlib

d9218ba23acdd8343ba746962642c791.png

( matplotlib 是专业的python可视化库,可用来生成各种各样的图表。也是二级考试里面推荐的可视化库。)

2、安装词云库, 用来生成词云图片信息的

pip3 install wordcloud

fbb608a0e4d653b54e52508bf1dc43bb.png

3、安装 “结巴” 库, 这个名字起的真接地气, 给开发者点个赞

pip3 install jieba

442c6fe1e9673f3ae9cf571f3ae78a6c.png

这个库用来解析中文,把一句话解析成一个个的词,

我们中文不像英文每个词之间有空格。需要根据语义分析拆分成词组

我们用《剑雨》的一段对话举例:

import jieba #引入结巴库

str='师傅,他为何说禅机已到,\

佛祖点化世人讲究机缘,\

禅机一过缘即灭矣,\

而禅机未到虽点亦不中

我愿化身石桥又是何意'

print(str)

# 解析拆分词组 lcut的方法

words = jieba.lcut(str)

print(words)

效果如下:

31edc9b48e23212cd1d5c679eefcff43.png

( 把完整的句子拆分成一个个的词,看着断断续续,可能这就是结巴的由来吧,【拆词】最难的这部分,结巴库都做好了,这也是python强大的原因吧,各式各样的库都有了 )

结巴库

网上下载txt格式的《西游记》,

下载完成后转换成utf-8格式再保存一下。

转化方法:记事本另存为的时候,选择编码格式UTF-8

67f6ea3bfea184b44f82383f731364a4.png

稍微、稍微、稍微列一下涉及到的知识点

( 不要被吓到,不难,都是二级考试要求的内容 )

print的format的格式化输出

for 循环用法

文件的开打,读取,关闭,文件路径

数组,python不叫数组,叫list列表

python的字典类型 key:value,类似java的map类型或者json对象

准备工作:

西游记和python文件可放到一个目录,引用起来方便,直接文件名就 ok,不用写路径了,

拷贝一个中文字体库,放到同目录下,也是为了引入方便,在Windows的C:\Windows\Fonts里面,随便找一个中文字体,就行,否则生成的图片都是乱码, (也可以用绝对路径直接指定)

准备几张图片,词云支持按指定的图片形状显示,比如心形,五角星,汽包,或者人像等等,但要求图片是白色背景

0b45e0ca9fcb4f98def886e14d50e665.png

format 格式化输出:

#列标题 format

print("{0:<5}{1:<8}{2:<5}".format('序号','词语', '频率'))

{0:<5} :

0 表示序号:第一个参数,第一列,

< 左对齐, > 右对齐

5 代表宽度

任务一:统计西游记里面出现频率最高的10个词:

后面为了方便,我们把这个叫主代码。

#引入结巴库

import jieba

#open 内置函数 不需要引用 直接使用

#开打文件西游记和python 文件放到同一个目录,可直接引用不需要路径

f = open('西游记.txt', 'r' ,encoding='utf-8' )

# 查看文件的编码格式

print('文件的编码格式:'+f.encoding)

#读取文件

txt = f.read()

#关闭文件,良好的习惯

f.close()

# 使用精确模式对文本进行分词

# 使用结巴库把西游拆分成一个个的词组

words = jieba.lcut(txt)

# 通过键值对的形式存储词语及其出现的次数

# 大括号表示 python的字典类型对应,

# 键值对 key:value1 ,类似java的map对象和list

counts = {}

chiyun = []

for word in words:

# == 1 单个词语不计算在内

if len(word) < 2 :

continue

else:

# 遍历所有词语,每出现一次其对应的值加 1

counts[word] = counts.get(word, 0) + 1

#将键值对转换成列表

items = list(counts.items())

# 根据词语出现的次数进行从大到小排序

items.sort(key=lambda x: x[1], reverse=True)

#列标题 format

print("{0:<5}{1:<8}{2:<5}".format('序号','词语', '频率'))

#需要显示的范围 10即显示前10个,0到9

for i in range(10):

word, count = items[i]

print("{0:<5}{1:<8}{2:>5}".format(i+1,word, count))

效果如下:

99b3d449bc1dd7c54d4c60bce1dec292.png

行者 妥妥的第一主角。

我预期的师徒四人后,就应该有观音

我们看前20是否有观音,在主代码里的第39行代码for循环的范围改成20

for i in range(20):

19fc43f34aa6bc86ceddf250d2b670fa.png

还是没有观音, 放出前100,200,300 到500在看:

终于出现了,在349位,重复61次,

应该是有哪里问题,直觉判断不止61次重复

c9e4b5ce65835e16c8834bf1655e5d0e.png

任务二:统计四个字重新次数

把上面主代码25行,改成小于4,即长度小于4个的词不统计

if  len(word) 

效果如下:

c9acf88bd7a19aecae1d0d7858812ce7.png

预知后事如何,请听下回分解,‘下回分解’排第二合理。

悟空每次打妖怪都要吹下牛,在洞口报个名:我是五百年前大闹天宫的齐天大圣,这两个词出现在前10 合理。

词云库

我们在梳理下流程:

119a13eb7123ed0d0645bb5443bb8aab.png

注意下:结巴库不是必须,主要是用来把句子拆分成词,如果你已经有统计好的词组,可直接用词云显示。

试一个简单的:我们手工创建个词组,直接用词云显示出来。即绕开结巴库了

from wordcloud import WordCloud

# python的可视化库,也是二级考试推荐的可视化库

import matplotlib.pyplot as plt

str=['齐天大圣','大圣','大圣','八戒','嫦娥']

#数组里面添加内容

str.append('玉兔')

str.append('女儿国')

str.append('牛魔王')

str.append('大圣')

str.append('土地公公')

str.append('小神仙')

str.append('八戒')

print(str)

#join 函数 用斜杆拼接词组mask =maskph,

#这里一定要join拼接一下 转成字符串

text_cut = '/'.join(str)

#看一下连接后的样子

#关键点 text_cut 是词云要处理的内容

print(text_cut)

wordcloud = WordCloud( background_color='white',font_path = 'msyh.ttc', width=1000, height=860, margin=2).generate(text_cut)

# 显示图片

plt.imshow(wordcloud)

plt.axis('off')

plt.show()

可观察下效果图:主要join后的输出,用/拼接成了一个字符串:

98f5340a1b36862a31f5c2d64fc716ea.png

效果图:

f9cb29c945b7cdca1f9c6a65af943971.png

(大圣和八戒出现次数多,字体最大)

词云图

先把全代码放上,后面实例在解析:

这段可先略过,下面直接看效果图:

#引入结巴库

import jieba

#词云库

from wordcloud import WordCloud

# python的可视化库,也是二级考试推荐的可视化库

import matplotlib.pyplot as plt

from PIL import Image #处理图片的

#矩阵 好像也是协助处理图片的

import numpy as np

#open 内置函数 不需要引用 直接使用

#开打文件西游记和python 文件放到同一个目录,可直接引用不需要路径

f = open('西游记.txt', 'r' ,encoding='utf-8' )

# 查看文件的编码格式

print('文件的编码格式:'+f.encoding)

#读取文件

txt = f.read()

#关闭文件,良好的习惯

f.close()

# 使用精确模式对文本进行分词

# 使用结巴库把西游拆分成一个个的词组

words = jieba.lcut(txt)

# 通过键值对的形式存储词语及其出现的次数

# 大括号表示 python的字典类型对应,

# 键值对 key:value1 ,类似java的map对象和list

counts = {}

#数组对象 用来接收需要传递给词云的内容

chiyun = []

for word in words:

# == 1 单个词语不计算在内

if len(word) < 2 :

continue

else:

# 遍历所有词语,每出现一次其对应的值加 1

counts[word] = counts.get(word, 0) + 1

#将键值对转换成列表

items = list(counts.items())

# 根据词语出现的次数进行从大到小排序

items.sort(key=lambda x: x[1], reverse=True)

#列标题 format

print("{0:<5}{1:<8}{2:<5}".format('序号','词语', '频率'))

#需要显示的范围 10即显示前10个,0到9

for i in range(80):

word, count = items[i]

print("{0:<5}{1:<8}{2:>5}".format(i+1,word, count))

chiyun.append(word)

#print(chiyun)

#加载图片信息

maskph = np.array(Image.open('山东舰航母.png'))

#join 函数 用斜杆拼接词组

text_cut = '/'.join(chiyun)

wordcloud = WordCloud(mask =maskph, background_color='white',font_path = 'msyh.ttc', width=1000, height=860, margin=2).generate(text_cut)

# 显示图片

plt.imshow(wordcloud)

plt.axis('off')

plt.show()

效果1:全部显示

即:结巴库处理好的词组,不做限制,全部送给词云显示:

7a5ea0d6da13438120f01df04e9a1f59.png

显示二:限定内容显示

比如改成 只输出前20个词:(显示密度会稀好多)

即:结巴库处理好后,取前20个高频词传给词云显示:

( 这个二级教材里面没有哈 )

9474827f788e24d33ca023a41a19dd75.png

再试一下前20的 四个字的词:

329262f90d70b15862157bf296525d3f.png

本文分享 CSDN - 松鼠爱吃饼干。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值