项目背景虽然现在有很多现成的词云图制作工具,但普遍存在以下问题:问题一:工具太多,刺眼、质量差、参差不齐、难以选择;问题二:大部分词云工具都有或多或少的限制,定制的空间有限;问题三:有的工具还要收费。基于以上问题,滴滴觉得有必要写一篇用Python画词云图的文章,因为太简单了!一个没有任何编程基础的小白,能做出什么样的工具呢?好的。废话不说,直接上手。项目实践1通用词云图要做词云图,首先要有词。文字从何而来?滴滴想了半天也想不通。既然没脑子,就跟那个离谱的后浪阮文玩玩吧。对于后浪,每个人都有不同的看法,滴滴也不敢妄下评论。首先,我们将后浪全文保存为HL.txt,截取部分,如下所示:接下来,下载并导入制作词云所需的库,并对每个库的功能进行了注释。1importjieba#结巴分词2fromwordcloudimportWordCloud#词云展示库3fromPILimportImage#图像处理库4importnumpyasnp#支持多维数组和矩阵运算5importmatplotlib.pyplotasplt#图像展示库然后放HL。txt内容被读出。1#读取文本内容2withopen('HL.txt','r',encoding="UTF-8")asf:3file=f.read()#读取文本为一整串,readlines可以读取byline紧随其后,我们需要将整个读取的字符串一个一个地拆分成单词,jieba出去,长不出草来。1#进行分词2data_cut=jieba.cut(file,cut_all=False)#精准模式分词分词后发现逗号、分号、句号都作为单独的词出来,那是不行的,我们必须想办法阻止他们。建立停用词列表并删除不习惯的词。是的,我不喜欢你对我们的评价。1stop_words=[",",".",";",",","We","You"]#自定义停用词列表当然,有些朋友会说你自己做,因为没有文字content一个停用词表很方便,但是如果有几千条文本,你的停用词肯定不够用。OK,那我们去百度下载停用词列表,随便下载一个,保存为stopwords.txt。stopwords.txt一共有1893个常用的停用词,长这样:有了停用词表,我们就得用Python把它读出来。1stop_words=[]#Createanemptylist2withopen("stopwords.txt",'r',encoding='utf-8')asf:3forlineinf:4iflen(line)>0:5stop_words.append(line.strip())#将停用词添加到停用词列表中。停用词准备好了,下一步就是去掉停用词,得到我们需要的词。1data_result=[iforiindata_cutifinotinstop_words]#得到需要的词并打印data\_result,看起来是这样的:这是不可能的,我们需要的是由词组成的字符串。因此,需要使用join函数将所有的单词分开拼接成一个新的字符串。这里的replace意思是把换行符(\n)替换掉。1text="".join(data_result).replace("\n","")#连接成字符串2print(text)我们把文字打印出来看看效果:我们有了字,我们可以开始设计字了云图,因为所有的词都是中文,而WordCloud默认不支持中文,fall!我们必须指定字体文件路径,否则会出现乱码。毕竟滴滴学的是欧式,所以找了个小写的字体。可以根据自己的喜好设置不同的字体,网上有很多免费的字体。1wc=WordCloud(2#设置字体,不指定会出现乱码,这个字体文件需要下载。3font_path="DemoLeisurelyLowerCase.ttf",4background_color="black",5max_words=5000,6)配置完成后,我们生成图片并显示出来。1#生成词云图2wc.generate(text)34#保存词云图5wc.to_file("IMJG.jpg")#保存图片67#显示8plt.imshow(wc)#对图片进行处理并显示其格式9plt.axis("off")#关闭坐标轴10plt.show()#显示图片的效果如下:此时,你可能认为滴滴已经准备好写结论了。抱歉,还没完,我们的目标不能只限于此,在诗与远方,哦不,是定制属于你自己的词云图。滴滴准备给词云添加自定义底图,让词云看起来更生动。想了半天,不知道用什么图。于是滴滴打开好久没用的photoshopcc,画了一张可以用美图秀秀做的png,比我的还好。我把这张图片命名为JG.png,用Image方法打开。1#使用Image方法打开图片2images=np.array(Image.open("JG.png"))配置图片到词云wc中,传给参数mask。1wc=WordCloud(2#设置字体,不指定会出现乱码,这个字体文件需要下载。3font_path="DemoLeisurelyLowerCase.ttf",4background_color="black",5max_words=5000,6mask=images7)Restart生成并保存词云图,效果如下:哈哈,有点难看。有兴趣的朋友可以自己制作底图或者从网上下载底图试试。底图尽量清晰,颜色尽量突出。可能有朋友会问为什么我文章开头的词云图是一个句子。我一起来解释一下,因为读取HL.txt的时候会用到readlines~二、根据词频画词云,做一个通用的词云可以用上面的方法,但是在现实生活中,我们的需求可能会更复杂,根据词频绘制词云图的案例比较多。下面是J哥经常使用的一个实际案例,并提供开源代码。大致思路是从Mysql数据库中提取数万条交易记录,用SQL语句选出交易规模排名前100的品牌,然后根据每个品牌的交易规模创建词云。文字越大,交易规模越大。1#-*-coding=uft-8-*-2#@Time:2020/5/2310:30am3#@Author:我是J哥4#@File:my_wordcloud.py56#给定词频制作词云图7frommatplotlibimportpyplotasplt#drawing,datavisualization8fromwordcloudimportWordCloud#wordcloud9fromPILimportImage#imageprocessing10importnumpyasnp#matrixoperation11importpymysql#database12importpandasaspd#dataprocessing131415#preparationwordCloud所需文本(词)16conn=pymysql。connect(host="localhost",user="your",passwd="your",db="test",port=3306,charset="utf8")17cur=conn.cursor()18sql="选择品牌作为名称,round(sum(jine)/10000,0)asvaluefromSc_month4groupbynameorderbyvaluedesclimit100;"19df=pd.read_sql(sql,conn)20print(df)21name=list(df.name)#word22value=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(31background_color="white",32mask=img_arry,33max_words=1000,34max_font_size=500,35#font_path="悠闲小写演示.ttf"36#font_path="龙藏有词库style.ttf"37font_path="Demo悠然小写.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)生成的词云看起来像this:结论总体来说,用Python制作词云图还是很简单的,代码清晰,代码量小,非常适合初学者。当然,要想呈现出好的词云效果,前提是你的数据干净整洁,所以数据清洗的知识一定要掌握。.
