文本分析相关的问题经常会用到词云图这种可视化形式,因此特意开一个博客记录一下词云图相关。
首先推荐几个词云图生成网页,如果只有少量词的话用网页可能会方便一点。
Tendcode
这个工具非常简单,也是免费的。
https://tendcode.com/tool/word-cloud/
缺点在于生成的图看起来还是有点草率了。。
词云文字
这个网站功能多但是免费版最多支持20个词
https://www.ciyunwenzi.com/web/ciyun/#/ciyun/data
最后就是我们的python啦
python画词云图的库是wordcloud,使用步骤大概是调库,配置参数,生成,保存图片四步
1. 调库
from wordcloud import WordCloud
2. 配置参数
wc= wordcloud.WordCloud(<参数>)
wc = WordCloud( width=500, height=400, mode="RGBA",
background_color=None)
3. 生成
wc.generate(text)
此处的text是一个字符串,即词云图中所有词通过空格连接起来合成的字符串:比如“科技 科技 创新 发展....”
但很多时候我们的输入都是一个txt文件如何转化成长字符串呢?这里就会用到jieba这个库,jiaba是python中文分词的一个库,输入txt文件jieba会帮忙分词并连接。具体用法如下:
import jieba
text = open("/Users/yezizhi/Desktop/test.txt", encoding="utf-8").read() # 标明文本路径,打开
text = ' '.join(jieba.cut(text))
4. 保存图片
# 显示词云图
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.show()
# 保存文件
wc.to_file("/Users/yezizhi/Desktop/all_word_cloud.png")
然后我就发现自己的词云图是这个样子的⬇️!
在网上查阅资料得知,应该在词云图配置那一步增加“collocations=False,”避免出现重复图,第二步修改为
wc = WordCloud( width=500, height=400, mode="RGBA",
background_color=None,collocations=False,)
完整代码
def word_cloud():
# 导入txt文件
text = open("/Users/yezizhi/Desktop/test.txt", encoding="utf-8").read() # 标明文本路径,打开
text = ' '.join(jieba.cut(text))
# 生成对象
wc = WordCloud(width=500, height=400, mode="RGBA",collocations=False,
background_color=None).generate(text)
# 显示词云图
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.show()
# 保存文件
wc.to_file("/Users/yezizhi/Desktop/all_word_cloud.png")
下面这段代码是因为我的输入是一个xls文件,第一列是词,第二列是对应词频,因此我就自己手动拼接成了一个长字符串,大家如果有不同的输入也是同理,给word_cloud一个长字符串就好了,不过注意词与词之间空格连接。
def xlsx_word_cloud():
data = pd.read_excel('整体词频.xlsx')
data_cy = data.copy()
max_word = 300
string_data = ''
for i_row in range(1,max_word):
times = data.iloc[i_row, 1]
for i_time in range(1,times):
string_data += data.iloc[i_row, 0]
string_data += " "
wc = WordCloud(width=500, height=400, mode="RGBA",
background_color=None,collocations=False,).generate(string_data)
# 显示词云图
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.show()
# 保存文件
wc.to_file("/Users/yezizhi/Desktop/all_word_cloud.png")