项目背景虽然现在已经有很多现成的制作词云图的工具了,但一般存在以下几个问题:问题一:工具太多,眼花缭乱,质量参差不齐,选择困难症; 问题二:大多词云工具或多或少有一些限制,自定义的空间有限;问题三:有些工具甚至收费。基于以上几个问题,迪迪觉得有必要写一篇Python绘制词云图的文章,因为实在太简单!没有任何编程基础的小白都能搞定的事,还找什么工具啊!

OK,FINE。咱不废话,直接实操。项目实操一一般词云绘制

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

print一下data_result,长这样:

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

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

咱们打印一下text看效果:

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

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

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

 1# 生成词云图 2wc.generate(text) 3 4# 保存词云图 5wc.to_file("IMJG.jpg") #保存图片 6 7# 展示 8plt.imshow(wc) #对图片进行处理,并显示其格式 9plt.axis("off") #关闭坐标轴10plt.show() #将图片显示出来

效果如下:

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

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

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

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

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

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

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

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

二根据词频绘制词云

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

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

 1#-*- coding = uft-8 -*- 2#@Time : 2020/5/23 10:30 上午 3#@Author : 我是J哥 4#@File : my_wordcloud.py 5 6#给定词频制作词云图 7from matplotlib import pyplot as plt   #绘图,数据可视化 8from wordcloud import WordCloud   #词云 9from PIL import Image  #图片处理10import numpy as np   #矩阵运算11import pymysql   #数据库12import pandas as pd  #数据处理131415#准备词云所需文字(词)16conn = pymysql.connect(host="localhost", user="你的", passwd="你的", db="test", port=3306, charset="utf8")17cur = conn.cursor()18sql = "select brand as name,round(sum(jine)/10000,0) as value from Sc_month4 group by name order by value desc limit 100;"19df = pd.read_sql(sql, conn)20print(df)21name = list(df.name)  #词22value = df.value  # 词的频率23dic = dict(zip(name, value))  # 词频以字典形式存储24#print(dic)25cur.close()26conn.close()2728img = Image.open("tree.png")29img_arry = np.array(img)30wc = WordCloud(31    background_color="white",32    mask=img_arry,33    max_words=1000,34    max_font_size=500,35    #font_path="演示悠然小楷.ttf"36    #font_path="有字库龙藏体.ttf"37    font_path="演示悠然小楷.ttf"38)3940wc.generate_from_frequencies(dic)  #以词频生成词云4142#绘制图片43fig = plt.figure(1)44plt.imshow(wc)45plt.axis("off")46plt.show()4748#输出词云图片到文件49plt.savefig("JGJG.jpg",dpi=400)

生成的词云图长这样:

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

实战Python轻松实现绘制词云图(附详细源码)相关推荐

  1. 实战|Python轻松实现绘制词云图(附详细源码)

    项目背景虽然现在已经有很多现成的制作词云图的工具了,但一般存在以下几个问题:问题一:工具太多,眼花缭乱,质量参差不齐,选择困难症: 问题二:大多词云工具或多或少有一些限制,自定义的空间有限:问题三:有 ...

  2. 实战|Python轻松实现动态网页爬虫(附详细源码)

    用浅显易懂的语言分享爬虫.数据分析及可视化等干货,希望人人都能学到新知识. 项目背景 事情是这样的,前几天我公众号写了篇爬虫入门的实战文章,叫做<实战|手把手教你用Python爬虫(附详细源码) ...

  3. beautifulsoup解析动态页面div未展开_实战|Python轻松实现动态网页爬虫(附详细源码)...

    用浅显易懂的语言分享爬虫.数据分析及可视化等干货,希望人人都能学到新知识.项目背景事情是这样的,前几天我公众号写了篇爬虫入门的实战文章,叫做<实战|手把手教你用Python爬虫(附详细源码)&g ...

  4. Python轻松实现PDF格式转换(附详细源码)

    公众号后台回复"图书",了解更多号主新书内容 作者:J哥 来源:菜J学Python 项目背景 网上PDF转换工具眼花缭乱,选择困难症,有些甚至还收费: 直接以其他格式打开PDF效果 ...

  5. Python轻松实现动态网页爬虫(附详细源码)!

    AJAX动态加载网页 一 什么是动态网页 J哥一向注重理论与实践相结合,知其然也要知其所以然,才能以不变应万变. 所谓的动态网页,是指跟静态网页相对的一种网页编程技术.静态网页,随着html代码的生成 ...

  6. 通俗易懂玩QT:Qpaint绘制开关按钮(内附详细源码)

    Qpaint 绘制开关按钮(内附详细源码) 一.实验效果与开发环境 效果图如下: 开发环境: 二.实验代码 switch.h #ifndef SWITCH_H #define SWITCH_H#inc ...

  7. python:实现绘制png图片(附完整源码)

    python:实现绘制png图片 from PIL import Image, ImageDraw, ImageFont, ImageColor def drawPic(fileName):img = ...

  8. python实现监控电脑打开网页_Python轻松实现动态网页爬虫(附详细源码)

    AJAX动态加载网页 一 什么是动态网页 J哥一向注重理论与实践相结合,知其然也要知其所以然,才能以不变应万变. 所谓的动态网页,是指跟静态网页相对的一种网页编程技术.静态网页,随着html代码的生成 ...

  9. Python编程:实现词云生成(附详细源码)

    Python编程:实现词云生成(附详细源码) 词云是一种数据可视化的方式,它可以用来展示某个主题下的主要关键词汇.在Python中,我们可以使用 wordcloud 库来实现词云的生成.本文将带您一步 ...

  10. Python实现恩尼格玛加密算法——附完整源码

    Python实现恩尼格玛加密算法--附完整源码 恩尼格玛是第二次世界大战中德国所使用的复杂电机械式密码机.它被认为是世界上最复杂的加密设备之一.在这个项目中,我们将使用Python模拟实现恩尼格玛加密 ...

最新文章

  1. Spring Boot中Web应用的统一异常处理
  2. element -ui 表单验证 如果 需要验证的v-model 是对象中的对象 总是提示没有填写....
  3. 零基础学Python(第十八章 文件IO流操作)
  4. 收藏 | TinaFace:人脸检测新纪录
  5. [leetcode双周赛]5311. 将数字变成 0 的操作次数
  6. Android 两个App间进行IPC通信
  7. 对个人来说,最好的记账方法是什么?
  8. visio中绘制空间坐标系
  9. Python学习笔记2:indent expected、unindent does not match any outer indentation level
  10. 浅谈PHP如何实现网站文章或博客浏览量页面访问量+1
  11. 多少开发人员 饿了么_开发个类似饿了么外卖app要多少钱
  12. Google File System中文版
  13. 一个公众号绑定多个商户支付
  14. 二维三维四维vector乃至多维vector数组的建立
  15. python的var是什么意思_python3函数里var是什么意思?
  16. ORM一键还原系统官方版
  17. php post 漏洞_ThinkPHP5 5.0.23 远程代码执行漏洞
  18. python 统计哈姆雷特词汇频率
  19. 类似冒险岛这类游戏是用什么语言编写?或者说它的制作流程是什么?
  20. 在IOS中根据圆心坐标、半径和角度计算圆弧上的点坐标

热门文章

  1. 火星坐标系(高德)和84坐标系互换
  2. 复制xml导致乱码问题解决。
  3. TIBCO Spotfire 入门指南
  4. MYSQL监控工具--mytop
  5. (亲测有效)Win11卸载Edge浏览器
  6. 将百度地图下载为图片-自定义尺寸
  7. 收据模板 纯css+html
  8. 苹果计算机重装系统步骤,苹果台式电脑重装系统教程,适合imac恢复出厂设置...
  9. jQuery视频播放器插件
  10. 电力系统建模与仿真, 地理接线图,配电图,电力系统组态与监控,电力调度,自动控制,VBScript脚本控制,JavaScript脚本控制, 潮流分析2018...