如何从pandas数据框生成按词频定大小、按类别配色的一元词词云
基于Pandas DataFrame生成带分类配色的Unigram词云
直接按下面的步骤实现即可,核心是用generate_from_frequencies方法绑定词频权重,自定义颜色函数匹配分类色,不需要额外做冗余格式转换。
- 前置依赖安装
先装好需要的第三方库,命令行执行:pip install pandas wordcloud matplotlib - 实现逻辑说明
- 先过滤Word列,只保留不带空格的unigram(一元词)
- 把Word和Frequency列转成词频字典,作为词云的大小计算依据,词的显示大小完全和Frequency数值正相关
- 提前定义Category和颜色的映射表,写颜色匹配函数,渲染每个词的时候自动匹配对应分类的颜色
- 完整可运行代码
import pandas as pd import matplotlib.pyplot as plt from wordcloud import WordCloud # -------------------------- # 这里替换成你自己的DataFrame即可 # 示例DataFrame结构和需求完全一致 df = pd.DataFrame({ 'Word': ['code', 'test', 'run', 'error', 'debug', 'efficient', 'stable', 'fast'], 'Frequency': [120, 98, 156, 87, 76, 102, 65, 89], 'Category': ['noun', 'verb', 'verb', 'noun', 'verb', 'adj', 'adj', 'adj'] }) # -------------------------- # 1. 过滤只保留unigram(一元词:不含空格的单个词) df_unigram = df[~df['Word'].str.contains(r'\s', na=False)].reset_index(drop=True) # 2. 定义分类和颜色的映射,可自行修改色值 category_color_map = { 'noun': '#2E86AB', 'verb': '#A23B72', 'adj': '#F18F01' } # 提前做词到分类的查找字典,提升渲染效率 word_cat_map = dict(zip(df_unigram['Word'], df_unigram['Category'])) # 3. 构造词频字典 freq_dict = dict(zip(df_unigram['Word'], df_unigram['Frequency'])) # 4. 自定义颜色匹配函数 def match_category_color(word, **kwargs): cat = word_cat_map.get(word) return category_color_map.get(cat, '#000000') # 找不到分类默认返回黑色 # 5. 生成词云 wc = WordCloud( width=1000, height=600, background_color='white' ).generate_from_frequencies(freq_dict) # 绑定自定义颜色函数(仅修改颜色,不改变已生成的词大小) wc.recolor(color_func=match_category_color) # 6. 渲染出图 plt.figure(figsize=(12, 8)) plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show()
小提示:如果需要处理中文内容,初始化WordCloud时必须添加
font_path参数指定系统内可用的中文字体路径,否则会显示方块乱码;如果需要调整不同分类的颜色,直接修改category_color_map里的十六进制色值即可。
内容的提问来源于stack exchange,提问作者Rajendra Prasad
相关产品推荐
相关产品推荐

