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

【办公类106-02】20260805问卷星新生家长调查问卷(deep seek制作python词云图

背景需求

过了一周

把文本的xlsx下载

from openpyxl import load_workbook import jieba from collections import Counter from wordcloud import WordCloud import matplotlib.pyplot as plt import os # ======================配置区,修改这里====================== path=r'C:\Users\mhjg2\Desktop\20250728托小幼儿挂牌' excel_path = path+r"\新生调查问卷_132_132.xlsx" # 修改为你的excel完整路径 sheet_name = "Sheet1" # 修改为你的工作表名称 output_img = path+r"\幼儿园家长担心词云.png" title_text = "您的孩子要上幼儿园了,您最担心的是什么?" # K=11,O=15,读取K~O列 start_col = 11 end_col = 15 top_n = 20 font = r"C:\Windows\Fonts\simhei.ttf" # windows黑体,解决中文乱码 # ========================================================== # 1、读取Excel K‑O列所有单元格文本 wb = load_workbook(excel_path) ws = wb[sheet_name] all_sentence = [] for row in ws.iter_rows(min_col=start_col, max_col=end_col, values_only=True): for cell_val in row: if cell_val is not None and isinstance(cell_val, str): txt = str(cell_val).strip() if len(txt) > 0: all_sentence.append(txt) full_text = " ".join(all_sentence) # 2、jieba分词 + 过滤停用词(单字、无意义虚词) stop_words = {"的","和","与","我","会","有","不","很","比较","一点","也","都","就","还是","希望","怕","担心","什么","对","在","要","是","了","吗"} words = jieba.lcut(full_text) valid_words = [] for w in words: w = w.strip() if len(w)>=2 and w not in stop_words: valid_words.append(w) # 3、统计词频,取top20 counter = Counter(valid_words) top20 = counter.most_common(top_n) print("====出现最多20个关键词【词,次数】====") for k,v in top20: print(f"{k}:{v}次") # 拼接top20文本给词云 cloud_text = " ".join([item[0] for item in top20]) # 4、生成词云 wc = WordCloud( font_path=font, width=1400, height=900, background_color="white", max_words=top_n, collocations=False ) wc.generate(cloud_text) # 5、matplotlib添加中文标题并保存图片 plt.rcParams["font.sans-serif"] = ["SimHei"] plt.figure(figsize=(14,9),dpi=150) plt.imshow(wc, interpolation="bilinear") plt.axis("off") plt.title(title_text, fontsize=14, pad=15) plt.tight_layout() plt.savefig(output_img, bbox_inches="tight") plt.close() print(f"\n✅词云图已输出:{output_img}") wb.close()

from openpyxl import load_workbook import jieba from collections import Counter from wordcloud import WordCloud import matplotlib.pyplot as plt import os # ======================配置区,修改这里====================== path=r'C:\Users\mhjg2\Desktop\20250728托小幼儿挂牌' excel_path = path+r"\新生调查问卷_132_132.xlsx" # 修改为你的excel完整路径 sheet_name = "Sheet1" # 修改为你的工作表名称 output_img = path+r"\幼儿园家长担心词云.png" title_text = "您的孩子要上幼儿园了,您最担心的是什么?" # K=11,O=15,读取K~O列 start_col = 11 end_col = 15 top_n = 20 font = r"C:\Windows\Fonts\simhei.ttf" # windows黑体,解决中文乱码 # ========================================================== # 1、读取Excel K‑O列所有单元格文本 wb = load_workbook(excel_path) ws = wb[sheet_name] all_sentence = [] for row in ws.iter_rows(min_col=start_col, max_col=end_col, values_only=True): for cell_val in row: if cell_val is not None and isinstance(cell_val, str): txt = str(cell_val).strip() if len(txt) > 0: all_sentence.append(txt) full_text = " ".join(all_sentence) # 2、jieba分词 + 过滤停用词(单字、无意义虚词) stop_words = {"小朋友","是否","不会","老师","问题","不能","情况","","的","和","与","我","会","有","不","很","比较","一点","也","都","就","还是","希望","怕","担心","什么","对","在","要","是","了","吗"} words = jieba.lcut(full_text) valid_words = [] for w in words: w = w.strip() if len(w)>=2 and w not in stop_words: valid_words.append(w) # 3、统计词频,取top20 counter = Counter(valid_words) top20 = counter.most_common(top_n) print("====出现最多20个关键词【词,次数】====") for k,v in top20: print(f"{k}:{v}次") # 拼接top20文本给词云 cloud_text = " ".join([item[0] for item in top20]) # 4、生成词云 wc = WordCloud( font_path=font, width=1400, height=900, background_color="white", max_words=top_n, collocations=False ) wc.generate(cloud_text) # 5、matplotlib添加中文标题并保存图片 plt.rcParams["font.sans-serif"] = ["SimHei"] plt.figure(figsize=(14,9),dpi=150) plt.imshow(wc, interpolation="bilinear") plt.axis("off") plt.title(title_text, fontsize=14, pad=15) plt.tight_layout() plt.savefig(output_img, bbox_inches="tight") plt.close() print(f"\n✅词云图已输出:{output_img}") wb.close()

from openpyxl import load_workbook import jieba from collections import Counter from wordcloud import WordCloud import matplotlib.pyplot as plt import os # ======================配置区,修改这里====================== path=r'C:\Users\mhjg2\Desktop\20250728托小幼儿挂牌' excel_path = path+r"\新生调查问卷_132_132.xlsx" # 修改为你的excel完整路径 sheet_name = "Sheet1" # 修改为你的工作表名称 output_img = path+r"\幼儿园家长担心词云.png" title_text = "您的孩子要上幼儿园了,您最担心的是什么?" # K=11,O=15,读取K~O列 start_col = 11 end_col = 15 top_n = 20 font = r"C:\Windows\Fonts\simhei.ttf" # windows黑体,解决中文乱码 # ========================================================== # 1、读取Excel K‑O列所有单元格文本 wb = load_workbook(excel_path) ws = wb[sheet_name] all_sentence = [] for row in ws.iter_rows(min_col=start_col, max_col=end_col, values_only=True): for cell_val in row: if cell_val is not None and isinstance(cell_val, str): txt = str(cell_val).strip() if len(txt) > 0: all_sentence.append(txt) full_text = " ".join(all_sentence) # 2、jieba分词 + 过滤停用词(单字、无意义虚词) stop_words = {"小朋友","是否","不会","老师","问题","不能","情况","同学","能否","孩子","好好","","的","和","与","我","会","有","不","很","比较","一点","也","都","就","还是","希望","怕","担心","什么","对","在","要","是","了","吗"} words = jieba.lcut(full_text) valid_words = [] for w in words: w = w.strip() if len(w)>=2 and w not in stop_words: valid_words.append(w) # 3、统计词频,取top20 counter = Counter(valid_words) top20 = counter.most_common(top_n) print("====出现最多20个关键词【词,次数】====") for k,v in top20: print(f"{k}:{v}次") # 拼接top20文本给词云 cloud_text = " ".join([item[0] for item in top20]) # 4、生成词云 wc = WordCloud( font_path=font, width=1400, height=900, background_color="white", max_words=top_n, collocations=False ) wc.generate(cloud_text) # 5、matplotlib添加中文标题并保存图片 plt.rcParams["font.sans-serif"] = ["SimHei"] plt.figure(figsize=(14,9),dpi=150) plt.imshow(wc, interpolation="bilinear") plt.axis("off") plt.title(title_text, fontsize=14, pad=15) plt.tight_layout() plt.savefig(output_img, bbox_inches="tight") plt.close() print(f"\n✅词云图已输出:{output_img}") wb.close()

from openpyxl import load_workbook import jieba from collections import Counter from wordcloud import WordCloud import matplotlib.pyplot as plt import os # ======================配置区,修改这里====================== path=r'C:\Users\mhjg2\Desktop\20250728托小幼儿挂牌' excel_path = path+r"\新生调查问卷_132_132.xlsx" sheet_name = "Sheet1" output_img = path+r"\幼儿园家长担心词云.png" title_text = "您的孩子要上幼儿园了,您最担心的是什么?" # K=11,O=15,读取K~O列 start_col = 11 end_col = 15 top_n = 15 # 减少词数量,从20改为15,减少拥挤 font = r"C:\Windows\Fonts\simhei.ttf" min_count = 2 # 只保留出现>=2次的词,过滤掉只出现1次的微小干扰词 # ========================================================== # 1、读取Excel K‑O列所有单元格文本 wb = load_workbook(excel_path) ws = wb[sheet_name] all_sentence = [] for row in ws.iter_rows(min_col=start_col, max_col=end_col, values_only=True): for cell_val in row: if cell_val is not None and isinstance(cell_val, str): txt = str(cell_val).strip() if len(txt) > 0: all_sentence.append(txt) full_text = " ".join(all_sentence) # 2、jieba分词 + 过滤停用词(单字、无意义虚词) stop_words = {"小朋友","是否","不会","老师","问题","不能","情况","同学","能否","孩子","好好","","的","和","与","我","会","有","不","很","比较","一点","也","都","就","还是","希望","怕","担心","什么","对","在","要","是","了","吗"} words = jieba.lcut(full_text) valid_words = [] for w in words: w = w.strip() if len(w)>=2 and w not in stop_words: valid_words.append(w) # 3、统计词频,过滤频次过低词汇,取top counter = Counter(valid_words) # 过滤:只保留出现次数 >= min_count 的词 filter_counter = {k:v for k,v in counter.items() if v >= min_count} top_list = Counter(filter_counter).most_common(top_n) print("====筛选后关键词【词,次数】====") for k,v in top_list: print(f"{k}:{v}次") cloud_text = " ".join([item[0] for item in top_list]) # 4、生成词云:关键调参,解决拥挤小字干扰 wc = WordCloud( font_path=font, width=1800, # 加宽画布 height=1200, # 加高画布 background_color="white", max_words=top_n, collocations=False, margin=40, # ✨词语之间边距,拉开距离,解决文字堆叠 relative_scaling=0.4, # ✨控制大小词字号差距,避免有的词过小 min_font_size=24, # ✨设置最小字号,彻底消除很小的干扰小字 max_font_size=320 # ✨限制最大字号,防止个别词过大挤占空间 ) wc.generate(cloud_text) # 5、matplotlib添加中文标题并保存图片 plt.rcParams["font.sans-serif"] = ["SimHei"] plt.figure(figsize=(16,11),dpi=150) plt.imshow(wc, interpolation="bilinear") plt.axis("off") plt.title(title_text, fontsize=15, pad=20) plt.tight_layout() plt.savefig(output_img, bbox_inches="tight") plt.close() print(f"\n✅词云图已输出:{output_img}") wb.close()

我发现每次运行代码,生成出来的图的布局都不同

标题文字变大

from openpyxl import load_workbook import jieba from collections import Counter from wordcloud import WordCloud import matplotlib.pyplot as plt import os # ======================配置区,修改这里====================== path=r'C:\Users\mhjg2\Desktop\20250728托小幼儿挂牌' excel_path = path+r"\新生调查问卷_132_132.xlsx" sheet_name = "Sheet1" output_img = path+r"\幼儿园家长担心词云.png" title_text = "您的孩子要上幼儿园了,您最担心的是什么?" # K=11,O=15,读取K~O列 start_col = 11 end_col = 15 top_n = 15 # 减少词数量,从20改为15,减少拥挤 font = r"C:\Windows\Fonts\simhei.ttf" min_count = 2 # 只保留出现>=2次的词,过滤掉只出现1次的微小干扰词 # ========================================================== # 1、读取Excel K‑O列所有单元格文本 wb = load_workbook(excel_path) ws = wb[sheet_name] all_sentence = [] for row in ws.iter_rows(min_col=start_col, max_col=end_col, values_only=True): for cell_val in row: if cell_val is not None and isinstance(cell_val, str): txt = str(cell_val).strip() if len(txt) > 0: all_sentence.append(txt) full_text = " ".join(all_sentence) # 2、jieba分词 + 过滤停用词(单字、无意义虚词) stop_words = {"小朋友","是否","不会","老师","问题","不能","情况","同学","能否","孩子","好好","","的","和","与","我","会","有","不","很","比较","一点","也","都","就","还是","希望","怕","担心","什么","对","在","要","是","了","吗"} words = jieba.lcut(full_text) valid_words = [] for w in words: w = w.strip() if len(w)>=2 and w not in stop_words: valid_words.append(w) # 3、统计词频,过滤频次过低词汇,取top counter = Counter(valid_words) # 过滤:只保留出现次数 >= min_count 的词 filter_counter = {k:v for k,v in counter.items() if v >= min_count} top_list = Counter(filter_counter).most_common(top_n) print("====筛选后关键词【词,次数】====") for k,v in top_list: print(f"{k}:{v}次") cloud_text = " ".join([item[0] for item in top_list]) # 4、生成词云:关键调参,解决拥挤小字干扰 wc = WordCloud( font_path=font, width=1800, # 加宽画布 height=1200, # 加高画布 background_color="white", max_words=top_n, collocations=False, margin=40, # ✨词语之间边距,拉开距离,解决文字堆叠 relative_scaling=0.4, # ✨控制大小词字号差距,避免有的词过小 min_font_size=24, # ✨设置最小字号,彻底消除很小的干扰小字 max_font_size=320 # ✨限制最大字号,防止个别词过大挤占空间 ) wc.generate(cloud_text) # 5、matplotlib添加中文标题并保存图片 plt.rcParams["font.sans-serif"] = ["SimHei"] plt.figure(figsize=(16,11),dpi=150) plt.imshow(wc, interpolation="bilinear") plt.axis("off") plt.title(title_text, fontsize=35, pad=20) plt.tight_layout() plt.savefig(output_img, bbox_inches="tight") plt.close() print(f"\n✅词云图已输出:{output_img}") wb.close()

每次生成都不一样,批量生成10张,让领导自己选

最终效果

''' 读取问卷星“文本格式”xlsx表,寻找过滤词,提取前20个出现字数最高的词语 家长担心的5个项目 豆包,阿夏 20260805 ''' from openpyxl import load_workbook import jieba from collections import Counter from wordcloud import WordCloud import matplotlib.pyplot as plt import os # ======================配置区,修改这里====================== path=r'C:\Users\mhjg2\Desktop\20250728托小幼儿挂牌' excel_path = path+r"\新生调查问卷_132_132.xlsx" sheet_name = "Sheet1" output_img = "幼儿园家长担心词云" all=path+fr'\{output_img}' os.makedirs(all,exist_ok=True) title_text = "您的孩子要上幼儿园了,您最担心的是什么?" # K=11,O=15,读取K~O列 start_col = 11 end_col = 15 top_n = 15 # 减少词数量,从20改为15,减少拥挤 font = r"C:\Windows\Fonts\simhei.ttf" min_count = 2 # 只保留出现>=2次的词,过滤掉只出现1次的微小干扰词 # ========================================================== for i in range(10): # 1、读取Excel K‑O列所有单元格文本 wb = load_workbook(excel_path) ws = wb[sheet_name] all_sentence = [] for row in ws.iter_rows(min_col=start_col, max_col=end_col, values_only=True): for cell_val in row: if cell_val is not None and isinstance(cell_val, str): txt = str(cell_val).strip() if len(txt) > 0: all_sentence.append(txt) full_text = " ".join(all_sentence) # 2、jieba分词 + 过滤停用词(单字、无意义虚词) stop_words = {"小朋友","是否","不会","老师","问题","不能","情况","同学","能否","孩子","好好","","的","和","与","我","会","有","不","很","比较","一点","也","都","就","还是","希望","怕","担心","什么","对","在","要","是","了","吗"} words = jieba.lcut(full_text) valid_words = [] for w in words: w = w.strip() if len(w)>=2 and w not in stop_words: valid_words.append(w) # 3、统计词频,过滤频次过低词汇,取top counter = Counter(valid_words) # 过滤:只保留出现次数 >= min_count 的词 filter_counter = {k:v for k,v in counter.items() if v >= min_count} top_list = Counter(filter_counter).most_common(top_n) print("====筛选后关键词【词,次数】====") for k,v in top_list: print(f"{k}:{v}次") cloud_text = " ".join([item[0] for item in top_list]) # 4、生成词云:关键调参,解决拥挤小字干扰 wc = WordCloud( font_path=font, width=1800, # 加宽画布 height=1200, # 加高画布 background_color="white", max_words=top_n, collocations=False, margin=40, # ✨词语之间边距,拉开距离,解决文字堆叠 relative_scaling=0.4, # ✨控制大小词字号差距,避免有的词过小 min_font_size=24, # ✨设置最小字号,彻底消除很小的干扰小字 max_font_size=320 # ✨限制最大字号,防止个别词过大挤占空间 ) wc.generate(cloud_text) # 5、matplotlib添加中文标题并保存图片 plt.rcParams["font.sans-serif"] = ["SimHei"] plt.figure(figsize=(16,11),dpi=150) plt.imshow(wc, interpolation="bilinear") plt.axis("off") plt.title(title_text, fontsize=35, pad=20) plt.tight_layout() plt.savefig(all+fr"\{output_img}{i:02}.png", bbox_inches="tight") plt.close() print(f"\n✅词云图已输出:f{output_img}") wb.close()

同理制作第二问

0、没有添加过滤词,原始状态中,有很多“口语化”填写“是否、有没有”

1、复制一份,改名,使用修改过滤词的列表

2、把代码里面的担心改成关心

3、修改读取数据列数

因为上一个代码已经过滤掉“是否、不会、老师、小朋友”等词语,所以现在只有“有没有”一个过滤词

''' 读取问卷星“文本格式”xlsx表,寻找过滤词,提取前20个出现字数最高的词语 家长关心的5个项目 豆包,阿夏 20260805 ''' from openpyxl import load_workbook import jieba from collections import Counter from wordcloud import WordCloud import matplotlib.pyplot as plt import os # ======================配置区,修改这里====================== path=r'C:\Users\mhjg2\Desktop\20250728托小幼儿挂牌' excel_path = path+r"\新生调查问卷_132_132.xlsx" sheet_name = "Sheet1" output_img = "幼儿园家长关心词云" all=path+fr'\{output_img}' os.makedirs(all,exist_ok=True) title_text = "您的孩子要上幼儿园了,您最关心的是什么?" # K=11,O=15,读取K~O列 start_col = 16 end_col = 20 top_n = 15 # 减少词数量,从20改为15,减少拥挤 font = r"C:\Windows\Fonts\simhei.ttf" min_count = 2 # 只保留出现>=2次的词,过滤掉只出现1次的微小干扰词 # ========================================================== for i in range(10): # 1、读取Excel K‑O列所有单元格文本 wb = load_workbook(excel_path) ws = wb[sheet_name] all_sentence = [] for row in ws.iter_rows(min_col=start_col, max_col=end_col, values_only=True): for cell_val in row: if cell_val is not None and isinstance(cell_val, str): txt = str(cell_val).strip() if len(txt) > 0: all_sentence.append(txt) full_text = " ".join(all_sentence) # 2、jieba分词 + 过滤停用词(单字、无意义虚词) stop_words = {"有没有","小朋友","是否","不会","老师","问题","不能","情况","同学","能否","孩子","好好","","的","和","与","我","会","有","不","很","比较","一点","也","都","就","还是","希望","怕","关心","什么","对","在","要","是","了","吗"} words = jieba.lcut(full_text) valid_words = [] for w in words: w = w.strip() if len(w)>=2 and w not in stop_words: valid_words.append(w) # 3、统计词频,过滤频次过低词汇,取top counter = Counter(valid_words) # 过滤:只保留出现次数 >= min_count 的词 filter_counter = {k:v for k,v in counter.items() if v >= min_count} top_list = Counter(filter_counter).most_common(top_n) print("====筛选后关键词【词,次数】====") for k,v in top_list: print(f"{k}:{v}次") cloud_text = " ".join([item[0] for item in top_list]) # 4、生成词云:关键调参,解决拥挤小字干扰 wc = WordCloud( font_path=font, width=1800, # 加宽画布 height=1200, # 加高画布 background_color="white", max_words=top_n, collocations=False, margin=40, # ✨词语之间边距,拉开距离,解决文字堆叠 relative_scaling=0.4, # ✨控制大小词字号差距,避免有的词过小 min_font_size=24, # ✨设置最小字号,彻底消除很小的干扰小字 max_font_size=320 # ✨限制最大字号,防止个别词过大挤占空间 ) wc.generate(cloud_text) # 5、matplotlib添加中文标题并保存图片 plt.rcParams["font.sans-serif"] = ["SimHei"] plt.figure(figsize=(16,11),dpi=150) plt.imshow(wc, interpolation="bilinear") plt.axis("off") plt.title(title_text, fontsize=35, pad=20) plt.tight_layout() plt.savefig(all+fr"\{output_img}{i:02}.png", bbox_inches="tight") plt.close() print(f"\n✅词云图已输出:f{output_img}") wb.close()

发给领导

感悟:

1、问卷星的词云图是固定一张,而且不能去掉“过滤词”

2、Python可以生成人工去掉“过滤词”。并批量生成多个样式,便于选择。

http://www.jsqmd.com/news/1337857/

相关文章:

  • 德鲁克影响管理世界几十年,这本经典书籍帮你看懂他的思想
  • JSM4826 是一款60V 双通道独立 N 沟道增强型功率 MOSFET
  • 本地大模型参数调优实战:从Temperature到Top-p的深度解析与实验指南
  • AI绘画提示词工程实战:从复杂指令到精准图像生成
  • 解决codex接入Deepseek后不能识别图片!!!!别再让 Codex 当“文盲“了!这个开源 Skill 让它直接看懂你的截图
  • 开源参与指南:从心理建设到代码贡献的完整路径
  • Godot 4.x 实现 JRPG 回合制战斗系统:架构、状态机与实战优化
  • 基于MRS2的嵌入式AI产品开发实践——水果识别与营养分析案例
  • 部署 MHA 高可用
  • 从加密Godot项目中恢复源代码与资源的完整技术指南
  • Linux 网络服务架设学习笔记(第三期)——文件共享服务(上篇):NFS 与 Rsync——网络文件系统与数据同步
  • 2026年怎么从抖音提取视频?收藏学习向实用教程 - 免费软件工具方法教程
  • 本地AI助理moltbot/Clawdbot:从RAG原理到私有化部署实战
  • 正余弦优化算法(SCA)原理详解与Python实现:从数学到工程优化
  • 拼多多批量开票为什么还要一张张点?我做了个“多多开票助手”
  • DRF视图与路由进阶:从基础CRUD到复杂API架构设计
  • Thanos多集群监控聚合平台在分布式测试中的应用
  • Windows SAM文件与NTLM Hash解密原理及攻防实战
  • C++与OpenCV实现多视图逆透视变换生成鸟瞰图完整指南
  • 修复Rocky Linux MobaXterm SSH 反复断开问题
  • 优化AI推理:针对AI工作负载的实时Node Balancers指标
  • 界首市外墙漏水怎么处理_2026皖西北黄淮平原城市漏水维修避坑指南与精选 - 雨婺虹修缮
  • 无源带通滤波器设计:从LC谐振原理到工程实践
  • C++游戏开发入门:从语言核心到实战避坑指南
  • 为什么ChatGPT查文献总被编造DOI误导?聊聊MedPeer依托真实数据解决AI幻觉的方案
  • 基于ddddocr与BurpSuite的验证码自动化识别与绕过实战
  • S905L电视盒子刷机实战:打造Android TV与EmuELEC双系统娱乐中心
  • 天文数据处理:Python实现FITS文件频率基准转换与重网格化
  • 永磁直驱海上风电仿真建模与Matlab实践
  • DDD领域驱动设计:从业务建模到微服务落地的核心思想与实践