处理开放式问卷数据:统计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
相关产品推荐
相关产品推荐

