You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

处理开放式问卷数据:统计Series每行唯一单词生成无偏差词云

开放式问卷词云分析:按受访者去重后汇总单词

需求说明

  • 处理100+行开放式问卷数据,为每个问题生成词云
  • 核心要求:每份回答仅保留唯一单词,单个受访者重复使用的单词不影响整体统计(比如某受访者重复100次"angry"但其他人都没提,这个词不会被过度加权)

初始数据导入

先将Excel问卷数据导入pandas,并提取目标问题的回答:

import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS

# 导入问卷数据
df = pd.read_excel("./Data - Open Ended Questions.xlsx", sheet_name="Working Data")
# 提取第一个问题的所有回答
df1 = df['question1']

初始尝试的问题

最初编写的函数仅返回第一份回答的唯一单词,原因是return语句放在了遍历循环内部,处理完第一行就直接终止了函数,无法汇总所有回答的去重单词:

def words(df):
    l = list()
    
    for index, response in df.items():
            response = response.lower()
            words = response.split()
            
            for word in words:
                if word in l:
                    l
                else:
                    l.append(word)
            return l  # 位置错误,导致仅处理第一行就返回

words(df1)

最终解决方案(参考Zombro提示)

修正后的函数实现了「单份回答内去重→汇总所有回答」的逻辑,同时处理了大小写统一、标点去除等细节:

import string  # 需导入string包处理标点

def unique_words_per_response(series):
    # 统一转为小写,避免"The"和"the"被当作不同单词
    series = series.str.lower()
    
    # 去除所有标点符号
    series = series.str.translate(str.maketrans("", "", string.punctuation))
    
    # 对每份回答拆分单词后去重,再展开为单列
    series = series.apply(lambda x: pd.Series(x.split()).unique()).explode()
    
    # 首字母大写,让词云显示更美观
    series = series.str.capitalize()
    
    # 拼接成单个字符串,供词云生成使用
    series = ' '.join(series.tolist())

    return series

内容的提问来源于stack exchange,提问作者Exquisite_Poupon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 21:27:20