当前位置: 首页 > article >正文

Python数据分析可视化之词云图

要使用自定义形状和颜色映射生成中文词云图并保存到指定位置,你需要按照以下步骤操作。我们将结合 wordcloudmatplotlibjieba 以及 PIL(Python Imaging Library)来完成这个任务。

步骤 1:安装必要的库

确保你已经安装了以下库:

pip install wordcloud matplotlib jieba pillow
  • wordcloud:用于生成词云图。
  • matplotlib:用于显示图像。
  • jieba:用于中文分词。
  • Pillow:用于处理图像文件。

步骤 2:准备文本数据

假设你有一个包含中文文本的文件 chinese_text.txt,我们将从该文件中读取文本数据。

步骤 3:准备形状模板

你需要一个 PNG 图像作为词云的形状模板。例如,你可以使用一个心形或圆形的 PNG 文件。确保图像为白色背景,黑色填充(即非零像素将作为词云的形状)。我们将使用 PIL 来读取这个图像文件。

步骤 4:编写代码

以下是完整的代码示例,展示如何使用自定义形状和颜色映射生成中文词云图,并将其保存到指定位置。

示例代码
from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt
import jieba
import numpy as np
from PIL import Image
import os

# 1. 读取文本文件
def read_file(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        return f.read()

# 2. 使用 jieba 进行中文分词
def preprocess_text(text):
    # 分词
    words = jieba.lcut(text)
    # 去除停用词
    stopwords = set(STOPWORDS) | set(['的', '是', '在', '和', '我', '这', '它', '你', '有', '一', '不', '了', '都', '而', '与'])
    filtered_words = [word for word in words if word not in stopwords and len(word.strip()) > 0]
    return " ".join(filtered_words)

# 3. 读取形状模板图像
def get_mask_image(mask_path):
    mask = np.array(Image.open(mask_path))
    return mask

# 4. 生成词云图
def generate_wordcloud(text, mask, output_path, font_path, colormap='viridis'):
    # 创建词云对象
    wordcloud = WordCloud(
        width=800,
        height=400,
        background_color='white',
        font_path=font_path,  # 指定支持中文的字体路径
        max_words=100,
        mask=mask,  # 使用自定义形状
        colormap=colormap,  # 设置颜色映射
        stopwords=STOPWORDS  # 使用默认停用词列表
    ).generate(text)

    # 保存词云图到指定位置
    wordcloud.to_file(output_path)

    # 显示词云图
    plt.figure(figsize=(10, 5))
    plt.imshow(wordcloud, interpolation='bilinear')
    plt.axis('off')  # 关闭坐标轴
    plt.show()

# 5. 主函数
def main():
    # 文件路径
    text_file_path = 'path/to/chinese_text.txt'  # 替换为你的文本文件路径
    mask_image_path = 'path/to/mask.png'  # 替换为你的形状模板图像路径
    output_image_path = 'path/to/output/wordcloud.png'  # 替换为你想要保存的路径
    font_path = 'path/to/simhei.ttf'  # 替换为你的中文字体文件路径

    # 确保输出目录存在
    output_dir = os.path.dirname(output_image_path)
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    # 读取文本
    text = read_file(text_file_path)

    # 预处理文本
    processed_text = preprocess_text(text)

    # 读取形状模板
    mask = get_mask_image(mask_image_path)

    # 生成并保存词云图
    generate_wordcloud(processed_text, mask, output_image_path, font_path, colormap='plasma')

if __name__ == '__main__':
    main()

代码说明

  1. read_file(file_path):读取文本文件的内容。
  2. preprocess_text(text):使用 jieba 对中文文本进行分词,并去除常见的停用词。你可以根据需要调整停用词列表。
  3. get_mask_image(mask_path):读取形状模板图像,并将其转换为 NumPy 数组,以便 wordcloud 可以使用。
  4. generate_wordcloud(text, mask, output_path, font_path, colormap):创建词云对象,生成词云图,并将其保存到指定位置。我们还使用了 matplotlib 来显示生成的词云图。
  5. main():主函数,负责调用上述所有功能。你需要替换文件路径为实际的路径。

自定义选项

  • colormap:你可以选择不同的颜色映射。matplotlib 提供了许多内置的颜色映射,如 'viridis', 'plasma', 'inferno', 'magma' 等。你可以通过 colormap 参数指定你想要的颜色映射。
  • font_path:确保你指定了一个支持中文的字体文件路径(如 simhei.ttf)。你可以从网上下载适合的字体文件,或者使用系统自带的字体。
  • mask:传入一个 PNG 图像作为词云的形状模板。图像中的非零像素将作为词云的形状。你可以使用任何图像作为模板,例如圆形、心形等。

保存路径

  • output_image_path:指定你想要保存词云图的路径。确保路径中的目录存在,否则代码会自动创建目录。

示例输出

运行代码后,词云图将被保存到指定的路径,并且会在控制台中显示出来。你可以根据需要调整参数,生成不同风格的词云图。

进一步优化

  1. 添加更多停用词:如果你发现某些词汇频繁出现但没有意义,可以将其添加到停用词列表中。
  2. 调整词频:如果你有一组词语及其对应的频率,可以使用 generate_from_frequencies() 方法生成词云。
  3. 处理特殊字符:如果文本中包含特殊字符(如标点符号、HTML 标签等),建议在生成词云之前对文本进行预处理,去除这些不必要的字符。

常见的颜色映射

colormap='plasma'matplotlib 库中的一种颜色映射(colormap),它用于定义词云图中单词的颜色分布。plasma 是一种从深紫色到亮黄色的渐变色方案,常用于数据可视化中,因为它可以很好地表示数据的层次和变化。

在生成词云图时,wordcloud 库允许你通过 colormap 参数指定颜色映射。你可以选择不同的颜色映射来改变词云图的视觉效果。matplotlib 提供了许多内置的颜色映射,每种映射都有其独特的颜色渐变效果。

以下是一些常见的 matplotlib 颜色映射及其描述:

  • viridis:从深蓝色到亮黄色的渐变,适合大多数数据集。
  • plasma:从深紫色到亮黄色的渐变,颜色对比度较高。
  • inferno:从黑色到亮橙色的渐变,适合高对比度的图像。
  • magma:从黑色到红色再到白色的渐变,颜色过渡平滑。
  • cividis:专门为色盲优化的颜色映射,从深蓝色到浅黄色。
  • coolwarm:从蓝色到红色的渐变,适合表示温度等双极数据。
  • rainbow:彩虹色渐变,包含多种颜色,适合展示丰富的色彩变化。
  • autumn:从黄色到红色的渐变,适合表示秋季主题。
  • spring:从洋红色到黄色的渐变,适合表示春季主题。
  • summer:从绿色到黄色的渐变,适合表示夏季主题。
  • winter:从蓝色到绿色的渐变,适合表示冬季主题。

http://www.kler.cn/a/451295.html

相关文章:

  • Kafka可视化工具 Offset Explorer (以前叫Kafka Tool)
  • K8s 无头服务(Headless Service)
  • 《计算机组成及汇编语言原理》阅读笔记:p86-p115
  • 聊天社交管理系统 Java 源码,构建个性化社交空间
  • vscode插件更新特别慢的问题
  • 一键打断线(根据相交点打断)——CAD c# 二次开发
  • 架构师应如何考虑重构
  • ArcGIS Maps SDK for JavaScript:根据经纬度定位,并添加定位标记
  • Git开发常用命令总结
  • 关于卡尔曼滤波
  • Mono里运行C#脚本3—mono_jit_init
  • Leetcode855:考场就座
  • 聚类之轮廓系数
  • Github Copilot:已免费,速回归!!!
  • 彻底认识和理解探索分布式网络编程中的SSL安全通信机制
  • Pytorch+Mumu模拟器+萤石摄像头实现对小孩学习的监控
  • ip归属地跨省会变吗?ip地址归属地不对怎么办
  • MyBatisSQL优化
  • FastJson读取resources下的json文件并且转成对象
  • flutter轮播图控件根据图片高度动态调整图高度
  • GO语言基础面试题
  • 机器人角度参考方式
  • Linux的启动流程
  • 渗透测试 - webshell jsp一句话大马 蚁剑连接
  • OpenAI 普及 ChatGPT,开通热线电话,近屿智能深耕AI培训
  • Spring Boot 中的 @Scheduled 定时任务以及开关控制