可绘制词云图的python第三方库,Python绘制词云
相信熟悉‘词云图’的朋友都知道,‘词云图’是一种用于词频分析的可视化图形。下面文章主要介绍如何用Python轻松实现绘制word云图项目的相关信息。有需要的可以参考一下。
00-1010项目背景项目实践一、绘制通用字云二。根据词频绘制词云
目录
虽然有很多现成的制作文字云图的工具,但一般都存在以下问题:
一个问题:工具太多,眼花缭乱,质量参差不齐,选择困难;
问题二:大部分词云工具或多或少都有一些局限性,定制的空间有限;
问题# 3:有些工具甚至收费。
基于以上问题,我觉得有必要写一篇关于Python绘制word云图的文章,因为太简单了!如果没有编程基础的小白能做到,你能找到什么工具!
好吧,好吧.我们废话少说,动手吧。
项目背景
项目实操
首先你要有一个字,做一个字的云图。这个词从何而来?滴滴想了半天就是想不通。既然没有想法,那就用过时的后浪软文玩一玩吧。对于后浪,大家褒贬不一,滴滴也不敢妄加评论。
先把后浪全文存为HL.txt,截取部分,看起来是这样的:
然后,下载导入做词云需要的库,每个库的功能都有标注。
导入结巴#结巴分词
从wordcloud导入WordCloud # Word Cloud展示库
从PIL导入图像#图像处理库
Import numpy as np #支持多维数组和矩阵运算。
将matplotlib.pyplot导入为plt #图像显示库
然后,读出HL.txt的内容
#阅读文本内容
用open(HL.txt , r ,编码=UTF-8 )作为f:
File=f.read() #将文本作为整个字符串读取,readlines可以逐行读取
然后,我们需要把我们读到的整个字符串分成单词。解霸出门寸草不生。
#分词
Data _ cut=jieba.cut (file,cut _ all=false) #精确模式分词
分单词后,我发现逗号,分号,句号都是单独出来的单词。那可不行。我们必须想办法阻止他们。建立一个非索引字表,去掉你不喜欢的单词。是的,我不喜欢谈论我们和你。
stop_words=[,, .;、、、我们、你] #自定义停用词表
当然,有些朋友会说,因为缺少文本内容,你自己做非索引字表很方便,但如果有成千上万的文本,这个非索引字表对你来说肯定是不够的。好,那我们从百度下载一个停用词列表,保存为stopwords.txt停用词. txt共有1893个常用停用词,看起来是这样的:
对于非索引字表,我们必须用Python来读出它。
Stop_words=[] #创建一个空列表
with open(stopwords.txt , r ,encoding=utf-8) as f:
对于f:中的线路
if len(行)0:
stop _ words . Append(line . strip())#将停用字词追加到停用字词列表中。
停用词准备好了,下一步就是去掉停用词,得到我们需要的词。
data _ result=[I for I in data _ cut if I not in stop _ words]#获取所需的单词
查看printdata _ 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绘制词云图内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。