前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Python绘制词云:让数据可视化变得生动有趣

用Python绘制词云:让数据可视化变得生动有趣

作者头像
三猫
发布2024-06-26 10:34:54
4120
发布2024-06-26 10:34:54
举报
文章被收录于专栏:机器学习养成记
戳蓝色字关注我们哟!

导读:你是否曾想过,如何将一堆枯燥的数据转化为一幅幅引人入胜的视觉艺术品?词云,作为一种流行的数据可视化技术,能够将文本数据中的关键词以不同大小和颜色呈现,直观地展示信息的密度和重要性。在本文中,我们将探索如何使用Python——一种强大而灵活的编程语言——来绘制出既美观又富有洞察力的词云图。

1

词云库安装与配置

python中可以使用wordcloud库来绘制词云图,并通过matplotlib库更好的展示。可以通过以下方式进行安装,如果是安装了Anaconda,可打开环境中的Terminal进行安装:

代码语言:javascript
复制
pip install wordcloud
pip install matplotlib

2

词云绘制函数

WordCloud()可用来绘制词云,并可以进行相关参数配置,调整整体样式。常见的配置选项包括:

  • 背景颜色:可以设置为白色、黑色或其他颜色。
  • 字体:选择一个合适的字体来显示词云中的词。
  • 最大词数:设置词云中显示的最大词数。
  • 停用词:设置一个停用词列表,这些词在词云中将不会出现。

以下是一个简单的配置示例:

代码语言:javascript
复制

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、自定义词典:可以创建一个自定义词典,只包含希望在词云中显示的词。例如:

代码语言:javascript
复制
custom_words = set(['Python', '编程', '数据分析'])
wordcloud.generate_from_frequencies(text_frequencies, 
include_words=custom_words)

2、使用NLTK库扩展词典:NLTK(Natural Language Toolkit)是一个强大的自然语言处理库,它包含了大量的词汇资源。你可以使用NLTK来扩展你的词典:

代码语言:javascript
复制
import nltk
from nltk.corpus import words

# 下载NLTK的词典,只需执行一次
nltk.download('words')
english_words = set(words.words())

3、过滤词性:有时候你可能只想在词云中显示名词或特定的词性。可以使用NLTK的词性标注功能来过滤:

代码语言:javascript
复制
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、定义停用词列表:创建一个包含所有停用词的列表,并在生成词云时传入这个列表:

代码语言:javascript
复制
stopwords = set(['的', '和', '是', '在', '有', '一个'])
wordcloud = WordCloud(stopwords=stopwords)

2、从文件加载停用词:如果有一个预先定义好的停用词文件,可以将其加载到停用词列表:

代码语言:javascript
复制
with open('stopwords.txt', 'r') as file:    
  stopwords = set([line.strip() for line in file.readlines()])
wordcloud = WordCloud(stopwords=stopwords)

3、使用现成的停用词库:有些库提供了现成的停用词列表,如nltk.corpus.stopwords,可以直接使用:

代码语言:javascript
复制
from nltk.corpus import stopwords as nltk_stopwords

english_stopwords = set(nltk_stopwords.words('english'))
wordcloud = WordCloud(stopwords=english_stopwords)
代码语言:javascript
复制

4、动态添加停用词:在生成词云的过程中,你可能会发现某些词虽然重要,但在当前的上下文中并不需要显示。你可以动态地将这些词添加到停用词列表中:

代码语言:javascript
复制
stopwords.add('特定词')
wordcloud.generate(text)

4

完整示例

以下是一个完整的示例,展示了如何使用jieba进行中文分词,设置自定义词典和停用词,并生成词云

代码语言:javascript
复制

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()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习养成记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 增加停用词
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档