python制作词云的核心在于wordcloud库,其关键参数包括font_path、background_color、width、height、max_words、stopwords、mask等。要生成词云,首先需安装wordcloud、matplotlib和jieba库;其次对中文文本进行分词处理;接着创建wordcloud对象并设置相关参数;最后使用matplotlib显示结果。自定义字体通过font_path参数实现,确保中文字体正常显示;背景图片则通过mask参数加载图片数组实现形状控制。常见挑战如中文乱码可通过正确配置字体解决,停用词问题可通过自定义stopwords集合过滤无关词汇,从而提升词云的聚焦性和美观性。
Python制作词云,核心在于wordcloud库。它能将文本数据转化为视觉上引人注目的图像,直观展示词频,让你一眼就能抓住文本的重点。这东西用起来比想象中要简单,但要做出彩,还是得花点心思。
要制作词云,你需要先安装必要的库:wordcloud、matplotlib(用于显示图片)以及jieba(处理中文文本,因为它默认不分词)。
# 如果你还没安装,先运行这行 # pip install wordcloud matplotlib jieba from wordcloud import WordCloud import matplotlib.pyplot as plt import jieba # 用于中文分词 # 1. 准备文本数据 text = """ 词云是一种非常酷的数据可视化方式,它能把大量文本数据中的高频词汇以大小不同的字体展现出来, 词频越高,字体越大。我个人觉得,这不仅仅是技术,更是一种艺术。 比如,你分析用户评论,或者读一份冗长的报告, 词云能帮你快速抓住核心关键词,省去了逐字逐句阅读的麻烦。 当然,要做好一个词云,选词、去停用词、字体选择,甚至背景图,都挺有讲究的。 有时候,一个好的词云设计,比纯粹的数据表格更能打动人。 它不仅仅是展示数据,更是在讲述一个故事。 """ # 2. (可选)中文文本分词 # 如果是英文,这一步可以跳过。中文必须分词,否则词云会把每个汉字当成一个词。 seg_list = jieba.cut(text, cut_all=False) # 精确模式分词 text_after_segmentation = " ".join(seg_list) # 3. 创建WordCloud对象并生成词云 # 这里可以设置一些基本参数,后面会详细讲。 wordcloud = WordCloud( font_path='SimHei.ttf', # 确保你有这个字体文件,或指定你系统里的其他中文字体 background_color="white", # 背景颜色 width=800, # 图片宽度 height=600, # 图片高度 max_words=200, # 最多显示的词数 margin=2, # 词语之间的距离 random_state=42 # 随机状态,保证每次生成的词云形状一致 ) wordcloud.generate(text_after_segmentation) # 生成词云 # 4. 显示词云图片 plt.figure(figsize=(10, 8)) # 设置图片大小 plt.imshow(wordcloud, interpolation='bilinear') # 显示图片 plt.axis("off") # 不显示坐标轴 plt.show()
wordcloud库的强大之处,很大程度上就体现在它那一大堆可调节的参数上。这些参数就像是画家的调色板,能让你把控最终词云的方方面面。我个人觉得,理解并灵活运用这些参数,是把词云从“能用”变成“好用”的关键。
立即学习“Python免费学习笔记(深入)”;
让词云从“标准版”升级到“定制版”,字体和背景图片是两个非常有效的途径。特别是对中文词云而言,字体选择的重要性不亚于文本内容本身。
1. 自定义字体:告别方块字
前面提到了font_path的重要性。没有合适的字体,中文词云就是一堆方块,那感觉真是...一言难尽。所以,你需要确保你的系统里有可用的中文字体文件(.ttf或.ttc格式),然后把它的绝对路径或者相对路径传给font_path参数。
Windows用户通常可以在C:\Windows\Fonts目录下找到字体文件,比如simhei.ttf(黑体)、msyh.ttc(微软雅黑)。 macOS用户可以在~/Library/Fonts或/Library/Fonts找到。 Linux用户则可能在/usr/share/fonts下。
# 假设你的中文字体文件在当前目录下,或者你提供了完整的路径 font_path = 'SimHei.ttf' # 替换成你实际的字体文件路径 # 或者 # font_path = 'C:/Windows/Fonts/simhei.ttf' # Windows示例 # font_path = '/System/Library/Fonts/STHeiti Light.ttc' # macOS示例 wordcloud = WordCloud( font_path=font_path, background_color="white", width=800, height=600 # ... 其他参数 ).generate(text_after_segmentation)
2. 自定义背景图片:塑造词云的形状
mask参数允许你用一张图片来定义词云的形状。它会把词语填充到图片中非透明(或非白色)的区域。这功能简直是创意无限的源泉!
你需要先用imageio或PIL(Pillow)库加载图片,然后将其转换为NumPy数组。注意:图片最好是黑白分明的,或者有透明背景的PNG图。 词云会根据图片的亮度来决定词语的填充区域,通常是白色区域不填充,非白色区域填充。如果你的图片是彩色的,wordcloud会将其转换为灰度图处理。
from wordcloud import WordCloud, ImageColorGenerator import matplotlib.pyplot as plt import numpy as np from PIL import Image # 需要安装 Pillow: pip install Pillow # 假设你有一张名为 'heart.png' 的图片作为遮罩 # 这张图片最好是白色背景,黑色或彩色形状的图片,或者带透明度的PNG mask_image_path = 'heart.png' # 替换成你的图片路径 # 加载图片并转换为NumPy数组 # Image.open().convert("RGBA") 可以确保图片有透明通道,如果原始图片没有,它会添加一个。 # np.array() 将PIL图片对象转换为NumPy数组 mask = np.array(Image.open(mask_image_path)) # 准备文本数据(同上) text = "..." # 你的文本数据 seg_list = jieba.cut(text, cut_all=False) text_after_segmentation = " ".join(seg_list) wordcloud_masked = WordCloud( font_path='SimHei.ttf', background_color="white", mask=mask, # 将加载的图片数组作为mask max_words=500, stopwords={"的", "是", "了", "我", "你", "我们", "他们"}, # 自定义停用词 contour_width=3, # 词云轮廓线宽度 contour_color='steelblue' # 词云轮廓线颜色 ) wordcloud_masked.generate(text_after_segmentation) # 如果你的遮罩图片本身有颜色,并且你想让词云的颜色也从图片中提取,可以使用 ImageColorGenerator # image_colors = ImageColorGenerator(mask) # plt.imshow(wordcloud_masked.recolor(color_func=image_colors), interpolation="bilinear") plt.figure(figsize=(10, 8)) plt.imshow(wordcloud_masked, interpolation='bilinear') plt.axis("off") plt.show()
我用contour_width和contour_color给遮罩加了个边框,有时候这样能让形状更突出,效果也挺不错的。
在实际操作中,你可能会遇到一些让人挠头的问题,比如中文乱码、不想要的词出现,或者词云形状不尽如人意。这些都是很常见的挑战,但都有对应的优化技巧。
1. 中文乱码问题:字体是根本
这是最常见也最让人头疼的问题。如果你在词云中看到一堆小方块而不是汉字,那基本可以确定是font_path没设置对,或者你指定的字体文件不包含中文字符集。
2. 停用词处理:让词云更聚焦
默认的wordcloud库自带一些英文停用词,但对于中文文本,或者某些特定领域的分析,你往往需要更定制化的停用词表。那些高频但无意义的词,比如“的”、“是”、“了”、“一个”等等,如果不去掉,它们会占据词云的大部分空间,掩盖了真正有价值的信息。
my_stopwords = {"的", "是", "了", "我", "你", "他", "她", "它", "我们", "你们", "他们", "和", "或", "一个", "这种", "那种", "什么", "怎么", "如何", "这样", "那样", "可以", "会", "就是", "所以", "但是", "而且", "然而", "因为", "所以", "如果", "那么", "虽然", "但是", "并且", "或者", "除了", "为了", "关于", "对于", "已经", "正在", "将会", "非常", "特别", "很", "比较", "更", "最", "都", "也", "还", "再", "又", "就", "才", "只", "总是", "常常", "往往", "总是", "有时候", "从来", "从不", "一定", "肯定", "大概", "可能", "也许", "当然", "确实", "真的", "简直", "根本", "一点", "一些", "很多", "许多", "很少", "很少", "多少", "每个", "所有", "各种", "一切", "任何", "任何", "自己", "别人", "大家", "各位", "先生", "女士", "小姐", "同志", "朋友", "老师", "学生", "医生", "工人", "农民", "解放军", "警察", "记者", "律师", "工程师", "科学家", "艺术家", "运动员", "总统", "总理", "部长", "主席", "委员", "代表", "领导", "成员", "单位", "部门", "公司", "企业", "学校", "医院", "银行", "商店", "饭店", "宾馆", "旅馆", "酒店", "公寓", "住宅", "别墅", "农村", "城市", "国家", "地区", "世界", "全国", "各地", "地方", "方面", "部分", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面
以上就是如何使用Python制作词云?wordcloud库参数详解的详细内容,更多请关注php中文网其它相关文章!
全网最新最细最实用WPS零基础入门到精通全套教程!带你真正掌握WPS办公! 内含Excel基础操作、函数设计、数据透视表等
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号