关于python:实战Python轻松实现绘制词云图附详细源码

81次阅读

共计 3579 个字符,预计需要花费 9 分钟才能阅读完成。

我的项目背景 尽管当初曾经有很多现成的制作词云图的工具了,但个别存在以下几个问题:问题一:工具太多,目迷五色,品质参差不齐,抉择艰难症;问题二:大多词云工具或多或少有一些限度,自定义的空间无限;问题三:有些工具甚至免费。基于以上几个问题,迪迪感觉有必要写一篇 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 在这示意将换行(\n)符替换为空。

1text = "".join(data_result).replace("\n","") #连接成字符串 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 制作词云图还是很简略的,代码清晰,代码量也少,很适宜新手入门尝鲜。当然,要想出现良好的词云成果,前提是你的数据是洁净整洁的,因而数据荡涤的常识必须把握。

正文完
 0