使用Python轻松实现绘制词云图项目(附详细源码)

 更新时间:2022年06月23日 15:56:04   作者:我是J哥  
相信熟悉"词云图"的朋友都知道,"词云图"是用来做词频分析的可视化图形,下面这篇文章主要给大家介绍了关于如何使用Python轻松实现绘制词云图项目的相关资料,需要的朋友可以参考下

项目背景

虽然现在已经有很多现成的制作词云图的工具了,但一般存在以下几个问题:

问题一:工具太多,眼花缭乱,质量参差不齐,选择困难症;

问题二:大多词云工具或多或少有一些限制,自定义的空间有限;

问题三:有些工具甚至收费。

基于以上几个问题,觉得有必要写一篇Python绘制词云图的文章,因为实在太简单!没有任何编程基础的小白都能搞定的事,还找什么工具啊!

OK,FINE。咱不废话,直接实操。

项目实操

一、一般词云绘制

制作词云图首先得有词吧,词从哪来,迪迪想了半天硬是没想出来。既然没思路,那就拿过气的后浪软文玩一玩吧,对于后浪大家褒贬不一,迪迪也不敢妄加评论。

首先,咱们把后浪全文保存为HL.txt,截取部分,长这样:

接着,下载并导入制作词云所需的库,各个库的功能都有注释。

import jieba  #结巴分词
from wordcloud import WordCloud  #词云展示库
from PIL import Image  #图像处理库
import numpy as np  #支持多维数组和矩阵运算
import matplotlib.pyplot as plt  #图像展示库

然后,把HL.txt的内容读出来。

# 读取文本内容
with open('HL.txt','r',encoding="UTF-8") as f:
    file = f.read()  #将文本读取为整个字符串,readlines可以按行读取

紧接着,咱们需要把读取的整个字符串分成一个个的词,jieba出征,寸草不生。

#进行分词
data_cut =jieba.cut(file,cut_all = False) #精确模式分词

分完词后发现,什么逗号啊、分号啊、句号啊也作为单独的词全出来了,那可不行,咱得想办法stop它们。 构建停词表,把看不惯的词remove掉,没错,我不喜欢口口声声的我们你们啥的。

stop_words = [",","。",";","、","我们","你们"]  #自定义停词列表

当然,有朋友会说,你这是因为文本内容少,自己搞个停词表方便,可要是成千上万的文本你这点停词肯定不够用啊。OK,那咱们百度下停词表,随便download一个,保存为stopwords.txt。stopwords.txt共有1893个常用停词,长这样:

有了停词表,咱得用Python读出来。

stop_words = [] #创建空列表
with open("stopwords.txt", 'r', encoding='utf-8') as f:
    for line in f:
        if len(line)>0:
            stop_words.append(line.strip())  #把停词追加到stop_words列表中

停词准备好了,接下来就是remove停词,拿到我们需要的词了。

data_result = [i for i in data_cut if i not in stop_words] #获取需要的词

print一下data_result,长这样:

这可不行,咱们需要的是由一个个词构成的字符串。因此,需要用join函数以空格分隔并将所有词连接成一个新的字符串。replace在这表示将换行(\n)符替换为空。

text = " ".join(data_result).replace("\n","") #连接成字符串
print(text)

咱们打印一下text看效果:

词有了,可以开始设计词云图,由于所有词都是中文,而WordCloud默认不支持中文,摔!咱还得指定字体文件路径,否则会出现乱码。迪迪毕竟学欧体过来的,于是找了个小楷字体,你可以根据自己的喜好设置不同的字体,网上免费字体一大堆。

wc = WordCloud(
    #设置字体,不指定就会出现乱码,这个字体文件需要下载
    font_path = "演示悠然小楷.ttf",
    background_color = "black",
    max_words = 5000,
)

配置好之后,咱生成图片并展示出来。

# 生成词云图
wc.generate(text)

# 保存词云图
wc.to_file("IMJG.jpg") #保存图片

# 展示
plt.imshow(wc) #对图片进行处理,并显示其格式
plt.axis("off") #关闭坐标轴
plt.show() #将图片显示出来

效果如下:

到这,你可能以为迪迪准备写结语了。不好意思,还没完,咱们的目标可不能局限在这,在诗和远方,哦不,是定制属于自己的词云图。 迪迪准备给词云加个自定义的底图,让词云看起来更形象些。想了很久,不知道用什么图合适。于是迪迪打开了好久没用的Photoshop cc,绘制了一个你用美图秀秀都能做的比我好看的png。

我把这张图片命名为JG.png,并用Image方法打开。

#用Image方法打开图片
images = np.array(Image.open("JG.png"))

把images配置到词云wc中去,传给参数mask。

wc = WordCloud(
    #设置字体,不指定就会出现乱码,这个字体文件需要下载
    font_path = "演示悠然小楷.ttf",
    background_color = "black",
    max_words = 5000,
    mask=images
)

重新生成并保存下词云图,效果如下:

哈哈,略丑。朋友们有兴趣可以自己做个底图或者网上download一个底图试试,底图尽量清晰、颜色尽量突出就好啦。

还有朋友可能会问为啥我文章开头的词云图是一个个句子,这里一并说明下,因为读取HL.txt的时候用的是readlines啊~

二、根据词频绘制词云

一般的词云制作用以上方法就可以啦,但现实生活中我们的需求可能更为复杂,根据词频绘制词云图的案例也更为多见。以下就是J哥经常用到的一个实战案例,开源代码奉上。

大致思路是从Mysql数据库中提取上万条交易记录,用sql语句把交易规模前100的品牌select出来,然后根据各个品牌交易规模的大小制作词云,文字越大的表示交易规模越大。

#-*- coding = uft-8 -*-
#@Time : 2020/5/23 10:30 上午
#@Author : 我是J哥
#@File : my_wordcloud.py

#给定词频制作词云图
from matplotlib import pyplot as plt   #绘图,数据可视化
from wordcloud import WordCloud   #词云
from PIL import Image  #图片处理
import numpy as np   #矩阵运算
import pymysql   #数据库
import pandas as pd  #数据处理


#准备词云所需文字(词)
conn = pymysql.connect(host="localhost", user="你的", passwd="你的", db="test", port=3306, charset="utf8")
cur = conn.cursor()
sql = "select brand as name,round(sum(jine)/10000,0) as value from Sc_month4 group by name order by value desc limit 100;"
df = pd.read_sql(sql, conn)
print(df)
name = list(df.name)  #词
value = df.value  # 词的频率
dic = dict(zip(name, value))  # 词频以字典形式存储
#print(dic)
cur.close()
conn.close()

img = Image.open("tree.png")
img_arry = np.array(img)
wc = WordCloud(
    background_color="white",
    mask=img_arry,
    max_words=1000,
    max_font_size=500,
    #font_path="演示悠然小楷.ttf"
    #font_path="有字库龙藏体.ttf"
    font_path="演示悠然小楷.ttf"
)

wc.generate_from_frequencies(dic)  #以词频生成词云

#绘制图片
fig = plt.figure(1)
plt.imshow(wc)
plt.axis("off")
plt.show()

#输出词云图片到文件
plt.savefig("JGJG.jpg",dpi=400)

生成的词云图长这样:

结 语

整体来看,Python制作词云图还是很简单的,代码清晰,代码量也少,很适合新手入门尝鲜。当然,要想呈现良好的词云效果,前提是你的数据是干净整洁的,因此数据清洗的知识必须掌握。

到此这篇关于使用Python轻松实现绘制词云图项目的文章就介绍到这了,更多相关Python绘制词云图内容请搜索得牛网以前的文章或继续浏览下面的相关文章希望大家以后多多支持得牛网!

相关文章

  • pycharm-professional-2020.1下载与激活的教程

    pycharm-professional-2020.1下载与激活的教程

    这篇文章主要介绍了pycharm-professional-2020.1下载与激活的教程,本文分为安装和永久激活两部分内容,需要的朋友可以参考下
    2020-09-09
  • Python动态赋值的陷阱知识点总结

    Python动态赋值的陷阱知识点总结

    在本文中我们给大家整理了关于Python动态赋值的陷阱的相关知识点内容,需要的朋友们学习下。
    2019-03-03
  • mac下pycharm设置python版本的图文教程

    mac下pycharm设置python版本的图文教程

    今天小编就为大家分享一篇mac下pycharm设置python版本的图文教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • python中根据字符串调用函数的实现方法

    python中根据字符串调用函数的实现方法

    下面小编就为大家带来一篇python中根据字符串调用函数的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考,一起跟随小编过来看看吧
    2016-06-06
  • python: 自动安装缺失库文件的方法

    python: 自动安装缺失库文件的方法

    今天小编就为大家分享一篇python: 自动安装缺失库文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • NumPy索引与切片的用法示例总结

    NumPy索引与切片的用法示例总结

    numpy 数组索引是一个大话题,有很多种方式可以让你选中数据的子集或某个单个元素,一维数组比较简单,看起来和 python 的列表很类似,这篇文章主要给大家介绍了关于NumPy索引与切片用法的相关资料,需要的朋友可以参考下
    2021-07-07
  • python实现棋盘覆盖问题及可视化

    python实现棋盘覆盖问题及可视化

    这篇文章主要给大家介绍了关于python实现棋盘覆盖问题及可视化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Python常见内置高效率函数用法示例

    Python常见内置高效率函数用法示例

    这篇文章主要介绍了Python常见内置高效率函数用法,结合实例形式分析了Python中filter()、map()、reduce()、lambda匿名函数等功能与简单使用技巧,需要的朋友可以参考下
    2018-07-07
  • python开发一款翻译工具

    python开发一款翻译工具

    这篇文章主要介绍了如何用python开发一款翻译工具,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-10-10
  • Django中模型Model添加JSON类型字段的方法

    Django中模型Model添加JSON类型字段的方法

    这篇文章主要介绍了Django中模型Model添加JSON类型字段的方法,实例分析了Python的Django框架模型使用技巧,需要的朋友可以参考下
    2015-06-06

最新评论