数据可视化已成为我们理解复杂信息的关键工具。词云,作为一种流行的数据可视化形式,能够将大量文本数据中的关键词以视觉化的方式呈现,让我们迅速捕捉到文本的核心。本文将通过Python编程语言,使用jieba和wordcloud库,并基于斗破苍穹第一章的内容,生成一个具有特定形状的词云。
在开始之前,确保你的Python环境中安装了必要的库。如果尚未安装,可以通过以下命令进行安装:
1 2 3 4 5 |
pip install matplotlib jieba wordcloud numpy pillow |
我们将使用《斗破苍穹第一章》的文本作为示例。首先,确保文本文件以UTF-8编码保存,以避免编码错误:
1 2 |
with open('斗破苍穹第一章.txt', 'r', encoding='utf-8') as file: text = file.read() |
中文文本处理的第一步是分词。我们使用jieba库,它是中文文本分词的常用工具:
1 2 3 |
import jieba cut_text = jieba.cut(text) word = ' '.join(cut_text) |
在生成词云之前,我们需要定义一组停用词,以排除那些在文本中频繁出现但对分析没有太大意义的词:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
stopwords={ '了', '的', '和', '是', '我', '你', '这', '就', '有', '在', '也', '一', '不', '人', '都', '一个', '我们', '他', '她', '得', '地', '很', '到', '说', '要', '去', '上', '说', '知道', '能', '看', '自己', '出来', '过', '着', '听', '觉得', '但是', '而且', '因为', '所以', '虽然', '如果', '就是', '只有', '可以', '什么', '哪', '哪个', '那些', '什么', '怎么', '怎样', '这么', '那么', '这样', '那样', '一点', '一些', '一点', '一些', '一下', '一下', '一会儿', '一点儿', '现在', '然后', '再', '曾经', '曾经', '曾经', '曾经', '或者', '或者', '以及', '或者', '跟', '跟', '同', '和', '与', '跟', '同', '跟', '与', '跟', '和', '与', '而且', '并且', '或者', '还是', '或者', '或者', '又', '也', '还', '再', '另外', '那', '然后', '接着', '之后', '起来', # ... 其他语气助词 ... } |
词云的形状可以是任何形式,本例中我们将使用一张图片来定义词云的形状:
1 2 3 4 5 |
from PIL import Image import numpy as np
pic = Image.open('test1.png') pic_array = np.array(pic) |
现在,我们将所有元素结合在一起,生成词云:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import wordcloud from matplotlib import colors
color_list = ['black', 'red', 'blue', 'green'] colormap = colors.ListedColormap(color_list)
wc = wordcloud.WordCloud( mask=pic_array, font_path='simhei.ttf', background_color='white', colormap=colormap, stopwords=stopwords )
wc.generate(word) |
最后,我们使用matplotlib库来显示我们生成的词云:
1 2 3 |
plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show() |
通过上述步骤,我们不仅学习了如何使用Python生成词云,还了解了如何通过jieba进行中文分词,以及如何使用wordcloud库自定义词云的生成。
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 |
import matplotlib.pyplot as plt import jieba import wordcloud from PIL import Image import numpy as np from matplotlib import colors
# 读取文本文件 str1 = open('斗破苍穹第一章.txt', 'r', encoding='utf-8').read() # 确保使用正确的编码
cut_text = jieba.cut(str1) # 分词处理 word = ' '.join(cut_text) # 以空格分割文本
color_list = ['black', 'red','blue','green'] colormap = colors.ListedColormap(color_list) # matplotlib色图
# 使用Pillow读取图片 pic = Image.open('test1.png') # 读取图片
# 将Pillow图像转换为numpy数组 pic_array = np.array(pic)
wc = wordcloud.WordCloud( mask=pic_array, # 使用转换后的数组作为背景图形 font_path='simhei.ttf', # 可以改成自己喜欢的字体 background_color='white', # 词云图背景颜色可以换成自己喜欢的颜色 colormap=colormap, stopwords={ '了', '的', '和', '是', '我', '你', '这', '就', '有', '在', '也', '一', '不', '人', '都', '一个', '我们', '他', '她', '得', '地', '很', '到', '说', '要', '去', '上', '说', '知道', '能', '看', '自己', '出来', '过', '着', '听', '觉得', '但是', '而且', '因为', '所以', '虽然', '如果', '就是', '只有', '可以', '什么', '哪', '哪个', '那些', '什么', '怎么', '怎样', '这么', '那么', '这样', '那样', '一点', '一些', '一点', '一些', '一下', '一下', '一会儿', '一点儿', '现在', '然后', '再', '曾经', '曾经', '曾经', '曾经', '或者', '或者', '以及', '或者', '跟', '跟', '同', '和', '与', '跟', '同', '跟', '与', '跟', '和', '与', '而且', '并且', '或者', '还是', '或者', '或者', '又', '也', '还', '再', '另外', '那', '然后', '接着', '之后', '起来', # ... 其他语气助词 ... } )
wc.generate(word) # 生成词云
# 显示词云图 plt.imshow(wc, interpolation='bilinear') # 使用bilinear插值可以使词云看起来更平滑 plt.axis('off') plt.show() |