导读:你是否曾想过,如何将一堆枯燥的数据转化为一幅幅引人入胜的视觉艺术品?词云,作为一种流行的数据可视化技术,能够将文本数据中的关键词以不同大小和颜色呈现,直观地展示信息的密度和重要性。在本文中,我们将探索如何使用Python——一种强大而灵活的编程语言——来绘制出既美观又富有洞察力的词云图。
1
词云库安装与配置
python中可以使用wordcloud
库来绘制词云图,并通过matplotlib
库更好的展示。可以通过以下方式进行安装,如果是安装了Anaconda,可打开环境中的Terminal进行安装:
pip install wordcloud
pip install matplotlib
2
词云绘制函数
WordCloud()可用来绘制词云,并可以进行相关参数配置,调整整体样式。常见的配置选项包括:
以下是一个简单的配置示例:
from wordcloud import WordCloud
# 创建WordCloud对象
wordcloud = WordCloud(
background_color='white', # 设置背景颜色
max_words=200, # 设置最大词数
stopwords=['the', 'and'], # 设置停用词列表
font_path='path/to/font' # 设置字体路径
)
# 配置matplotlib
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 8)) # 设置图表大小
3
修改词典和增加停用词
在绘制词云时,修改词典和增加停用词是两个重要的步骤,它们可以帮助我们更好地控制词云的输出效果,避免一些无关紧要的词占据主导地位。
修改词典
Python的wordcloud库默认使用一个内置的词典,也可以根据特定的需求来修改。
1、自定义词典:可以创建一个自定义词典,只包含希望在词云中显示的词。例如:
custom_words = set(['Python', '编程', '数据分析'])
wordcloud.generate_from_frequencies(text_frequencies,
include_words=custom_words)
2、使用NLTK库扩展词典:NLTK(Natural Language Toolkit)是一个强大的自然语言处理库,它包含了大量的词汇资源。你可以使用NLTK来扩展你的词典:
import nltk
from nltk.corpus import words
# 下载NLTK的词典,只需执行一次
nltk.download('words')
english_words = set(words.words())
3、过滤词性:有时候你可能只想在词云中显示名词或特定的词性。可以使用NLTK的词性标注功能来过滤:
from nltk import pos_tag, word_tokenize
def get_nouns(text):
nouns = []
for word, tag in pos_tag(word_tokenize(text)):
if tag.startswith('N'):
nouns.append(word)
return set(nouns)
nouns_in_text = get_nouns(your_text)
wordcloud.generate_from_frequencies(text_frequencies, include_words=nouns_in_text)
停用词是指那些在文本中频繁出现但对分析意义不大的词,如“的”、“和”、“是”等。在词云中排除这些词可以使得词云更加突出重点。
1、定义停用词列表:创建一个包含所有停用词的列表,并在生成词云时传入这个列表:
stopwords = set(['的', '和', '是', '在', '有', '一个'])
wordcloud = WordCloud(stopwords=stopwords)
2、从文件加载停用词:如果有一个预先定义好的停用词文件,可以将其加载到停用词列表:
with open('stopwords.txt', 'r') as file:
stopwords = set([line.strip() for line in file.readlines()])
wordcloud = WordCloud(stopwords=stopwords)
3、使用现成的停用词库:有些库提供了现成的停用词列表,如nltk.corpus.stopwords,可以直接使用:
from nltk.corpus import stopwords as nltk_stopwords
english_stopwords = set(nltk_stopwords.words('english'))
wordcloud = WordCloud(stopwords=english_stopwords)
4、动态添加停用词:在生成词云的过程中,你可能会发现某些词虽然重要,但在当前的上下文中并不需要显示。你可以动态地将这些词添加到停用词列表中:
stopwords.add('特定词')
wordcloud.generate(text)
4
完整示例
以下是一个完整的示例,展示了如何使用jieba进行中文分词,设置自定义词典和停用词,并生成词云
from pylab import mpl
import matplotlib.pyplot as plt
import jieba
import jieba.analyse
from wordcloud import WordCloud, ImageColorGenerator
import jieba.posseg as pseg
from matplotlib import colors
mpl.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 打卡本文文件
with open('text2.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 自定义词典,添加新词
jieba.load_userdict('dict.txt')
#停用词
stopwords = {}.fromkeys([ line.rstrip() for line in open('rep.txt') ])
#分词
segs=[]
words = jieba.cut(text)
filtered_words = [word for word in words if word not in stopwords]
counts={}
for word in filtered_words:
if len(word) == 1 or word=='\n':#单个词和换行符不计算在内
continue
else:
if word not in counts.keys():
counts[word]=1
else:
counts[word]+=1
#展示词频前50的内容
by_value = sorted(counts.items(),key = lambda item:item[1],reverse=True)
newdict=by_value[:50]
newdict
color_list = ['#FF0000','#a41a1a']#建立颜色数组
colormap = colors.ListedColormap(color_list)#调用
wc = WordCloud(font_path="SimHei.ttf",background_color="white",width=1800,height=1200,colormap='inferno',contour_color='gray').fit_words(counts)
plt.figure(figsize=(18, 12))
plt.imshow(wc)
plt.axis("off")
plt.show()