一、前言
本文将介绍如何用python根据词频信息(xlsx、csv文件)绘制词云图,除了绘制常规形状的词云图(比如长方形),还可以指定词云图的形状。
二、安装并引入相关的库
1、安装相关的库
pip install jieba
pip install matplotlib
pip install wordcloud
pip install numpy
pip install Image
pip install pandas
2、导入相关的库
import jieba
import matplotlib
. pyplot
as plt
from wordcloud
import WordCloud
import numpy
as np
from PIL
import Image
# 图像处理
import pandas
as pd
三、数据处理
1、文件读取
import pandas
as pd
df
= pd
. read_excel
( "data-test.xlsx" ) # 读取excel数据信息
print ( df
)
# 只获取前5条数据
df_new
= df
. head
( 5 )
print ( df_new
)
结果如下: 2、数据格式转换
读取到excel文件后,需要把数据转换成字典的格式:
# 生成一个DataFrame文件,index为df数据的index
data
= 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 plt
from 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 pd
df
= pd
. read_excel
( "data-test.xlsx" ) # 读取excel数据信息
print ( df
)
# 只获取前5条数据
df_new
= df
. head
( 5 )
print ( df_new
)
# 生成一个DataFrame文件,index为df数据的index
data
= 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 plt
from 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" )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 2、绘制指定形状的词云图
(1)准备背景图片
以下面的背景图片为例: (注:图片的背景颜色要是白色的;而且不要有水印否则也会被当做背景图片的一部分!!!) (2)处理背景图片
# 生成词云图
import matplotlib
. pyplot
as plt
from wordcloud
import WordCloud
import 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 pd
df
= pd
. read_excel
( "data-test.xlsx" ) # 读取excel数据信息
print ( df
)
print ( "====================================================" )
# 只获取前5条数据
# df_new=df.head(5)
# print(df_new)
print ( "====================================================" )
# 生成一个DataFrame文件,index为df数据的index
data
= 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 plt
from wordcloud
import WordCloud
import 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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 五、待优化
1、指定词云图形状时,出现数据类型错误的报错
一开始生成词云图的数据格式是字典格式,但是后面在指定形状的时候,因为报错就把数据格式转换成字符串了,然后就能正常显示: # 生成dict格式数据
# data = dict(data)
data
= str ( data
)
2、图片轮廓的提取待改进
在指定形状的时候,对背景图片的要求比较高,比如图片的背景是白色的,图片的轮换不光滑的话提取效果不好,因此在提取背景图片的轮廓方面待改进。 img
= Image
. open ( 'grape.jpg' ) # 加载背景图片
img_array
= np
. array
( img
) # 将图片变为数组,便于用作词云图形状