Python绘制词云图并统计词频

前言

词云图又叫文字云,是对文本数据中出现频率较高的关键词予以视觉上的突出,形成"关键词的渲染"就类似云一样的彩色图片,从而过滤掉大量的文本信息,使人一眼就可以领略文本数据的主要表达意思。
下面就用Python借助wordcloud库生成指定图形形状的词云图,并对数据进行统计。代码等相关文件可以去我的GitHub网站下载。

程序

1. 读取文件

def read_file(file_name):
    if os.path.exists(file_name):  # 判断文件是否存在
        with open(file_name, "r", encoding='utf-8') as file:  # 读取文件
            content = file.read()
            if content:  # 判断文本内容是否为空
                return content
            else:
                print("文件无内容")
    else:
        print(file_name, "文件不存在")
        

2. 词频统计

def statistics_words(content, number, word_statis_name):
    not_statis = ['也', '我', '着', '那', '这', '了', '你', ':', ':', '?', '!', '...', '…', '他', '她', '?', ',', '、', '。', '的', '和', '\u3000', '“', '”', ' ', 'ri', '与', '是', '在', '中', '了', '\n']
    words = list(jieba.lcut(content))
    statistics = Counter(words).most_common(number)
    dic = {key: value for (key, value) in statistics}
    for i in list(dic.keys()):
        if i in not_statis:
            dic.pop(i)

    label = list(dic.keys())
    N = len(dic)
    theta = np.arange(0.0, 2*np.pi, 2*np.pi/N)
    radii = list(dic.values())
    width = np.pi/6
    ax = plt.subplot(111, projection='polar')
    bars = ax.bar(theta, radii, width=width, bottom=0.0)
    plt.xticks(theta+np.pi/12, label)
    for r, bar in zip(radii, bars):
        bar.set_facecolor(plt.cm.viridis(r / 10.))
        bar.set_alpha(0.5)
    plt.savefig(word_statis_name)
    plt.show()
    

3. 生成词云图

def generate_word_cloud_illustration(content, figure_name, result_name):
        cut_text = jieba.cut(content)
        words = " ".join(cut_text)  # 拼接
        img = np.array(Image.open(figure_name))  # 读取图片
        img_colors = ImageColorGenerator(img)
        wd = wordcloud.WordCloud(mask=img, font_path="simhei.ttf", background_color="white")
        # wd.generate(words)
        wd.generate_from_text(words)
        plt.imshow(wd.recolor(color_func=img_colors), interpolation="bilinear")
        plt.axis("off")
        plt.savefig(result_name)
        plt.show()
        

4. main函数以及导入的包

import os
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image  # 导入PIL模块中的Image对象
import jieba           # 导入中文分词组件
import wordcloud       # 导入词云模块
from wordcloud import ImageColorGenerator
from collections import Counter
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签


if __name__ == '__main__':
    #file_name = "story.txt"     # 预读取文本文件名
    file_name = 'zhuxian.txt'
    figure_name = "map.png"     # 词频图形状图片文件名
    result_name = 'result.png'  # 保存的词云图文件名
    word_statis_name = "word_statistics"  # 词频统计绘制的雷达图文件名
    content = read_file(file_name)        # 读取文件
    statistics_words(content, 35, word_statis_name)  # 词频统计并绘制雷达图
    generate_word_cloud_illustration(content, figure_name, result_name)  # 生成词云图

结果

1. 词频统计

在这里插入图片描述

2. 词云图

在这里插入图片描述

### 回答1: 好的,下面是使用Python绘制词云图的步骤: 1. 安装相应的库:需要安装 wordcloud 和 matplotlib 这两个库。可以使用 pip install 命令进行安装。 2. 准备文本数据:需要准备一段文本数据,可以是从文件中读取或者是从数据库中获取。 3. 清洗文本数据:使用正则表达式或者其他方式对文本进行清洗,去除无用的字符或者词语。 4. 分词:使用 jieba 等分词库对文本进行分词。 5. 统计词频统计每个词语在文本中出现的次数。 6. 生成词云图:使用 wordcloud 库生成词云图,并使用 matplotlib 库进行可视化。 下面是一个简单的示例代码: ```python import jieba from wordcloud import WordCloud import matplotlib.pyplot as plt # 读取文本数据 with open('data.txt', 'r', encoding='utf-8') as f: text = f.read() # 分词 words = jieba.cut(text) # 统计词频 word_freq = {} for word in words: if word not in word_freq: word_freq[word] = 0 word_freq[word] += 1 # 生成词云图 wordcloud = WordCloud(background_color='white').generate_from_frequencies(word_freq) # 可视化 plt.imshow(wordcloud, interpolation='bilinear') plt.axis('off') plt.show() ``` 这个示例代码使用 jieba 库对文本进行分词,并使用 WordCloud 库生成词云图。最后使用 matplotlib 库进行可视化。 ### 回答2: Python可以使用多种库来绘制词云图,其中比较常用的是wordcloud库。 首先,需要安装wordcloud库。可以使用pip命令来进行安装,打开命令提示符窗口并输入以下命令: ``` pip install wordcloud ``` 安装完成后,可以导入相应的库并使用其中的函数来绘制词云图。一般情况下,绘制词云图的步骤如下: 1. 导入所需的库: ```python import wordcloud import matplotlib.pyplot as plt ``` 2. 配置词云图的参数: ```python # 配置词云图参数 wordcloud_obj = wordcloud.WordCloud(width=800, height=400, background_color='white') ``` 这里设置了词云图的宽度、高度和背景颜色等参数。 3. 生成词云图: ```python # 生成词云图 wordcloud_obj.generate(text) ``` 其中`text`是用于生成词云图的文本数据。 4. 绘制词云图: ```python # 绘制词云图 plt.imshow(wordcloud_obj, interpolation='bilinear') plt.axis('off') # 隐藏坐标轴 plt.show() ``` 这里使用`imshow`函数来显示词云图,`axis('off')`可以隐藏坐标轴。 以上就是使用Python绘制词云图的基本步骤。根据具体需求,还可以对词云图进行更多的样式调整和处理,比如设置字体、颜色、形状以及词频的处理等。 ### 回答3: Python绘制词云图需要使用第三方库`wordcloud`,下面是绘制词云图的步骤。 首先,我们需要安装`wordcloud`库。在命令行中使用以下命令安装: ``` pip install wordcloud ``` 安装完成后,我们可以开始绘制词云图。首先,导入`wordcloud`模块和`matplotlib`模块: ```python import matplotlib.pyplot as plt from wordcloud import WordCloud ``` 然后,我们需要准备文本数据,可以是一段文字、一篇文章、一本书等。假设我们的文本数据保存在一个字符串变量`text`中。 接下来,我们可以创建一个`WordCloud`对象,并设置相应的参数。例如,可以设置词云图的宽度和高度、背景颜色、字体、最大词频等。以下是设置一些常用参数的示例代码: ```python wc = WordCloud(width=800, height=400, background_color='white', max_words=50, font_path='msyh.ttc') ``` 然后,将文本数据传递给`WordCloud`对象的`generate`方法,生成词云图的数据。例如: ```python wc.generate(text) ``` 接着,可以使用`matplotlib`库绘制词云图。创建一个新的图形并显示词云图: ```python plt.figure(figsize=(10, 5)) plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show() ``` 最后,运行代码,即可绘制词云图。 需要注意的是,绘制词云图还可以通过设置`mask`参数来指定词云图的形状。`mask`可以是一个图片文件,也可以是一个二维数组。例如,可以使用如下代码设置一个心形的词云图: ```python from PIL import Image # 读取心形图片 heart_mask = np.array(Image.open("heart.png")) # 创建词云对象,并设置形状为心形 wc = WordCloud(mask=heart_mask, background_color='white', font_path='msyh.ttc') # 绘制词云图 plt.figure(figsize=(10, 10)) plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show() ``` 以上是使用Python绘制词云图的简要步骤。不同的应用场景可能会有不同的参数设置和数据预处理方式,可以根据实际需要进行相应的调整。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值