本文将介绍如何用python根据词频信息(xlsx、csv文件)绘制词云图,除了绘制常规形状的词云图(比如长方形),还可以指定词云图的形状。
pip install jieba
pip install matplotlib
pip install wordcloud
pip install numpy
pip install Image
pip install pandas
import jieba
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import numpy as np
from PIL import Image # 图像处理
import pandas as pd
import pandas as pd
df=pd.read_excel("data-test.xlsx")# 读取excel数据信息
print(df)
# 只获取前5条数据
df_new=df.head(5)
print(df_new)
读取到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文件本身已经提供了关键词以及对应的词频,因此这里绘制词云图的时候不用对文本进行结巴分词。
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")
# 生成词云图
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) # 将图片变为数组,便于用作词云图形状
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")
# 生成dict格式数据
# data = dict(data)
data = str(data)
img = Image.open('grape.jpg') # 加载背景图片
img_array = np.array(img) # 将图片变为数组,便于用作词云图形状