小工具知识网

当前位置: 首页 > 行业知识 > Python(wordcloud):根据词频信息(xlsx、csv文件)绘制词云图

行业知识

Python(wordcloud):根据词频信息(xlsx、csv文件)绘制词云图

2026-11-10 10:01:52 来源:互联网转载

一、前言

本文将介绍如何用python根据词频信息(xlsx、csv文件)绘制词云图,除了绘制常规形状的词云图(比如长方形),还可以指定词云图的形状。

二、安装并引入相关的库

1、安装相关的库
pip install jiebapip install matplotlibpip install wordcloudpip install numpypip install Image pip install pandas
2、导入相关的库
import jiebaimport matplotlib.pyplot as pltfrom wordcloud import WordCloudimport numpy as npfrom PIL import Image # 图像处理import pandas as pd

三、数据处理

1、文件读取
  • 本文使用的数据集是excel文件(后缀名是.xlsx),该文件包含2个字段:关键词以及对应的频数

  • 以下是对excel文件的相关操作:

    import pandas as pddf=pd.read_excel("data-test.xlsx")# 读取excel数据信息print(df)
    • 数据读取结果如下:
      • 只读取文件的前N条数据
        # 只获取前5条数据df_new=df.head(5)print(df_new)
        • 结果如下:
          2、数据格式转换

          读取到excel文件后,需要把数据转换成字典的格式:

          # 生成一个DataFrame文件,index为df数据的indexdata = pd.DataFrame(index=df['关键词'])# 先将词频这一列赋值为0 ,即定义这一列为int格式,后面再赋值data['词频']=0# 将excel的数据写入data中for i in range(0,len(df)):    data.iloc[i,0]=df.iloc[i,1]# 将词频按照从大到小排序data = data['词频'].sort_values(ascending = False)# 生成dict格式数据data = dict(data)print(data)
          • 结果如下:

            四、绘制词云图

            由于excel文件本身已经提供了关键词以及对应的词频,因此这里绘制词云图的时候不用对文本进行结巴分词。

            1、绘制基本的词云图
            • 词云图的相关代码:
              import matplotlib.pyplot as pltfrom wordcloud import WordCloud#关键词有中文,因此需要设置显示字体,否则会乱码font_path = "C:\Windows\Fonts\Microsoft YaHei UI\msyh.ttc"# 设置词云图相关参数wc=WordCloud(             font_path=font_path,             width=400,height=400,             scale=2,mode="RGBA",             background_color='white')# 根据dict制作词云图wc=wc.generate_from_frequencies(data)#存储词云图结果wc.to_file('词云图1.png')
              • 图片展示的相关代码
                #显示图片plt.imshow(wc,interpolation="bilinear")plt.axis("off")# 不显示图像坐标系# 显示图像plt.show()plt.savefig("词云图2.png")
                • 结果如下:

                • 完整代码

                  import pandas as pddf=pd.read_excel("data-test.xlsx")# 读取excel数据信息print(df)# 只获取前5条数据df_new=df.head(5)print(df_new)# 生成一个DataFrame文件,index为df数据的indexdata = pd.DataFrame(index=df['关键词'])# 先将词频这一列赋值为0 ,即定义这一列为int格式,后面再赋值data['词频']=0# 将excel的数据写入data中for i in range(0,len(df)):    data.iloc[i,0]=df.iloc[i,1]# 将词频按照从大到小排序data = data['词频'].sort_values(ascending = False)# 生成dict格式数据data = dict(data)print(data)# 生成词云图import matplotlib.pyplot as pltfrom wordcloud import WordCloud#关键词有中文,因此需要设置显示字体,否则会乱码font_path = "C:\Windows\Fonts\Microsoft YaHei UI\msyh.ttc"# 设置词云图的相关参数wc=WordCloud(             font_path=font_path,             width=500,             height=500,             scale=2,             mode="RGBA",             background_color='white')# 根据dict制作词云图wc=wc.generate_from_frequencies(data)#存储词云图结果#存储图像wc.to_file('词云图1.png')#显示图片plt.imshow(wc,interpolation="bilinear")# 不显示坐标系plt.axis("off")# 显示图像plt.show()# 保存结果plt.savefig("词云图2.png")
                  2、绘制指定形状的词云图
                  (1)准备背景图片
                  • 以下面的背景图片为例:

                    (注:图片的背景颜色要是白色的;而且不要有水印否则也会被当做背景图片的一部分!!!)

                    (2)处理背景图片
                    • 需要将图片转化为数组,便于用作词云图形状
                      # 生成词云图import matplotlib.pyplot as pltfrom wordcloud import WordCloudimport numpy as np # numpy数据处理库from PIL import Image # 图像处理库,用于读取背景图片img = Image.open('图片地址') # 加载背景图片img_array = np.array(img)    # 将图片变为数组,便于用作词云图形状
                      • 将图片数组化之后,结果如下:
                        (3)生成指定形状的词云图
                        wc=WordCloud(mask=img_array,             font_path=font_path,             width=500,             height=500,             scale=2,             contour_color='purple',contour_width=3,             max_font_size=80,max_words=100,             background_color='white')
                        • 结果如下:

                        • 完整代码

                          import pandas as pddf=pd.read_excel("data-test.xlsx")# 读取excel数据信息print(df)print("====================================================")# 只获取前5条数据# df_new=df.head(5)# print(df_new)print("====================================================")# 生成一个DataFrame文件,index为df数据的indexdata = pd.DataFrame(index=df['关键词'])# 先将词频这一列赋值为0 ,即定义这一列为int格式,后面再赋值data['词频']=0# 将excel的数据写入data中for i in range(0,len(df)):    data.iloc[i,0]=df.iloc[i,1]# 将词频按照从大到小排序data = data['词频'].sort_values(ascending = False)# 生成dict格式数据# data = dict(data)data = str(data)print(data)# print(type(data))print("====================================================")# 生成词云图import matplotlib.pyplot as pltfrom wordcloud import WordCloudimport numpy as np # numpy数据处理库from PIL import Image # 图像处理库,用于读取背景图片img = Image.open('grape.jpg') # 加载背景图片img_array = np.array(img)    # 将图片变为数组,便于用作词云图形状#关键词有中文,因此需要设置显示字体,否则会乱码font_path = "C:\Windows\Fonts\Microsoft YaHei UI\msyh.ttc"# 设置词云图的相关参数# 设置词云图的相关参数wc=WordCloud(mask=img_array,             font_path=font_path,             width=500,             height=500,             scale=2,             contour_color='purple',contour_width=3,             max_font_size=80,max_words=100,             background_color='white')# 根据dict制作词云图wc=wc.generate(data)# wc=wc.generate_from_frequencies(data)#存储词云图结果#存储图像wc.to_file('词云图1.png')#显示图片plt.imshow(wc,interpolation="bilinear")# 不显示坐标系plt.axis("off")# 显示图像plt.show()# 保存结果plt.savefig("词云图2.png")

                          五、待优化

                          1、指定词云图形状时,出现数据类型错误的报错
                          • 一开始生成词云图的数据格式是字典格式,但是后面在指定形状的时候,因为报错就把数据格式转换成字符串了,然后就能正常显示:
                            # 生成dict格式数据# data = dict(data)data = str(data)
                            2、图片轮廓的提取待改进
                            • 在指定形状的时候,对背景图片的要求比较高,比如图片的背景是白色的,图片的轮换不光滑的话提取效果不好,因此在提取背景图片的轮廓方面待改进。
                              img = Image.open('grape.jpg') # 加载背景图片img_array = np.array(img)    # 将图片变为数组,便于用作词云图形状

上一篇:揭秘验证码识别源码,破解验证难题,轻松应对挑战!

下一篇:宝塔面板后台怎么连接?