【Python】1.生成+统计+保存调查问卷数据
目录
分析问卷
代码思路
多选
单选
跳转
生成数据
统计数据
保存数据
完整代码
问卷调查,让技术人员去搞,看着就烦,浪费时间,浪费金钱。这不,工科大学生的毛概课程非得要进行社会调查,看着就脑阔疼。但是,工科生有那么容易就会跟着你课程搁这浪费时间、浪费金钱?不好意思,脚本搞起来!!!
不想听我唠叨的小伙伴可直接拉到文章的最下面获取本问卷的完整代码。。。
以下方的问卷调查为例。
分析问卷
首先我们得分析一下这个问卷。
在我们第3问,选择第3个选项的时候,4到17问全部不见了,发生了一个跳转。好家伙,不过是个小问题。。。
继续往下看。可恶,在第6问选择第2、第3个选项的时候,第7问又不见了,又发生了跳转。离谱,代码难度加大了呀。
继续看,等等,为啥还会有多选的呀,我#¥%6@4!?.....真有你的
继续找找看,,,好了,没有了,其他的都是单选的。
代码思路
要拿到最终统计好的数据,必须要获得每一份问卷的数据,而对于每一份的问卷数据要怎样获得,方法有很多,我这里采用随机数获得。
上面分析了一下问卷的特点,即多选、单选、跳转。
- 多选:可以随机产生一个数来确定多选的个数,当然这个数不能超过多选的最大个数
- 单选:随机产生一个数来作为这个问题的选项结果,这个数肯定也是不能超过这个问题的选项个数的
- 跳转:跳过去的题就默认用0来代替,表示啥都不选
多选
if i == 8: # 多选GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)elif i == 10:GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)elif i == 11:GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)elif i == 13:GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)elif i == 14:GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)elif i == 17:GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)elif i == 18:GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)
单选
else: # 单选XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项TiMu.append(XuanZe) # 把题目的选择放到题目里
跳转
if i == 2 and XuanZe == 3:DiaoCha_Biao.append(TiMu) # 把每个题目的结果放到调查表里TiMu = [] # 清空题目列表while i != 17:TiMu = [0]i += 1DiaoCha_Biao.append(TiMu)elif i == 5 and XuanZe != 1:DiaoCha_Biao.append(TiMu) # 把每个题目的结果放到调查表里TiMu = [] # 清空题目列表while i != 6:TiMu = [0]i += 1DiaoCha_Biao.append(TiMu)else:DiaoCha_Biao.append(TiMu) # 把每个题目的结果放到调查表里TiMu = []
生成数据
到这里,就很简单了,需要多少数据,就直接用for就能跑出来,当然在这里用到三维的列表进行对数据的临时存储。
在这里用中文输入表示一下,列表临时存储数据的结构:
【【【】,【】,【】,……,【】】,【】,【】】
最里面的中括号是每个问题的选择结果。
中间的中括号是每一份数据,就类似于每一份问卷所填的数据
最外面的中括号是所有的数据,就相当于包括了所有的问卷
# 产生数据
for k in range(0, 536):i = 0while i < 21:if i == 8: # 多选GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)elif i == 10:GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)elif i == 11:GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)elif i == 13:GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)elif i == 14:GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)elif i == 17:GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)elif i == 18:GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)else: # 单选XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项TiMu.append(XuanZe) # 把题目的选择放到题目里if i == 2 and XuanZe == 3:DiaoCha_Biao.append(TiMu) # 把每个题目的结果放到调查表里TiMu = [] # 清空题目列表while i != 17:TiMu = [0]i += 1DiaoCha_Biao.append(TiMu)elif i == 5 and XuanZe != 1:DiaoCha_Biao.append(TiMu) # 把每个题目的结果放到调查表里TiMu = [] # 清空题目列表while i != 6:TiMu = [0]i += 1DiaoCha_Biao.append(TiMu)else:DiaoCha_Biao.append(TiMu) # 把每个题目的结果放到调查表里TiMu = []TiMu = [] # 清空题目列表i += 1ZongDiaoCha_Biao.append(DiaoCha_Biao)DiaoCha_Biao = []yan_shi = random.random()time.sleep(yan_shi)print(k + 1)
统计数据
数据生成完之后,需要对数据进行一个统计。
# 对数据进行统计
DiaoCha_Biao = []
biao = []
ZongTongJiBiao = np.zeros((21, 8))
for biao in (ZongDiaoCha_Biao):i = 0for ti_mu in (biao):for j in range(1, TiMu_XuanXiang_num[i] + 1):if j in ti_mu:ZongTongJiBiao[i][j - 1] += 1i += 1
print(ZongTongJiBiao)
保存数据
数据统计完之后,还可以将数据保存到excel表格,方便对数据作进一步的处理。
# 保存数据到excel表格
Data = load_workbook('总统计数据.xlsx')
Data_0 = Data['Sheet1']
Data_0.cell(1, 1).value = '题号'
for i in range(2, 23):Data_0.cell(i, 1).value = '题' + str(i - 1)
for i in range(2, 10):Data_0.cell(1, i).value = '选项' + str(i - 1)
for i in range(0, 21):for j in range(0, 8):Data_0.cell(i + 2, j + 2).value = ZongTongJiBiao[i][j]
Data.save('总统计数据.xlsx')
Data.close()
好了,现在我们就得到了一份完美的数据,不仅省钱、省力、省时间,还可以提高编写代码能力,一箭四雕,嘻嘻嘻。。。
下面附上本问卷的完整代码。
完整代码
# Author:Eric
# -*- codeing = utf-8 -*-
# @Time : 2022-04-01 14:18
# @Author : cet
# @File : MoNi_ShuJu_1.py
# @Software: PyCharmimport random # 引入随机库
import numpy as np
import time
from openpyxl import load_workbookZongDiaoCha_Biao = [] # 总调查表
DiaoCha_Biao = [] # 调查表
TiMu = [] # 题目
GeShu = 0 # 多选题的个数
XuanZe = 0 # 选择到的选项
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
TiMu_XuanXiang_num = [4, 5, 3, 4, 2, 3, 6, 2, 3, 8, 4, 4, 4, 4, 4, 5, 8, 4, 4, 4, 4] # 每一题的选项数# 产生数据
for k in range(0, 536):i = 0while i < 21:if i == 8: # 多选GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)elif i == 10:GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)elif i == 11:GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)elif i == 13:GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)elif i == 14:GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)elif i == 17:GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)elif i == 18:GeShu = random.randint(1, TiMu_XuanXiang_num[i]) # 随机产生多选题选择的个数temp = 0while temp < GeShu:XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项if XuanZe not in TiMu:TiMu.append(XuanZe) # 把题目的选择放到题目里temp += 1TiMu.sort(reverse=False)else: # 单选XuanZe = random.randint(1, TiMu_XuanXiang_num[i]) # 随机生成1到TiMu_XuanXiang_num[i]的随机整数,第i题选择哪个选项TiMu.append(XuanZe) # 把题目的选择放到题目里if i == 2 and XuanZe == 3:DiaoCha_Biao.append(TiMu) # 把每个题目的结果放到调查表里TiMu = [] # 清空题目列表while i != 17:TiMu = [0]i += 1DiaoCha_Biao.append(TiMu)elif i == 5 and XuanZe != 1:DiaoCha_Biao.append(TiMu) # 把每个题目的结果放到调查表里TiMu = [] # 清空题目列表while i != 6:TiMu = [0]i += 1DiaoCha_Biao.append(TiMu)else:DiaoCha_Biao.append(TiMu) # 把每个题目的结果放到调查表里TiMu = []TiMu = [] # 清空题目列表i += 1ZongDiaoCha_Biao.append(DiaoCha_Biao)DiaoCha_Biao = []yan_shi = random.random()time.sleep(yan_shi)print(k + 1)
print(len(ZongDiaoCha_Biao))# 对数据进行统计
DiaoCha_Biao = []
biao = []
ZongTongJiBiao = np.zeros((21, 8))
for biao in (ZongDiaoCha_Biao):i = 0for ti_mu in (biao):for j in range(1, TiMu_XuanXiang_num[i] + 1):if j in ti_mu:ZongTongJiBiao[i][j - 1] += 1i += 1
print(ZongTongJiBiao)# 保存数据到excel表格
Data = load_workbook('总统计数据.xlsx')
Data_0 = Data['Sheet1']
Data_0.cell(1, 1).value = '题号'
for i in range(2, 23):Data_0.cell(i, 1).value = '题' + str(i - 1)
for i in range(2, 10):Data_0.cell(1, i).value = '选项' + str(i - 1)
for i in range(0, 21):for j in range(0, 8):Data_0.cell(i + 2, j + 2).value = ZongTongJiBiao[i][j]
Data.save('总统计数据.xlsx')
Data.close()
print("数据保存完成!")
【Python】1.生成+统计+保存调查问卷数据相关推荐
- python依托Excel批量实现调查问卷数据的图表可视化
在学习工作中,会经常遇见需要制作很多图表,虽然Word里面也提供的有图表插入,问卷星的自带图表有点不喜欢,想自己做,但是手动处理几十个甚至几百个量化数据就很麻烦,所以尝试用python处理了这个问题. ...
- 数据分享|R语言因子分析、相关性分析大学生兼职现状调查问卷数据可视化报告...
全文链接:http://tecdat.cn/?p=31765 随着大学的普及教育,大学生就业形势变得更加困难,很多学生都意识到这个问题(点击文末"阅读原文"获取完整代码数据). 相 ...
- 计算机品牌调查表excel,如何用excel统计的调查问卷
如何用excel统计的调查问卷 如何用excel统计的调查问卷 有些人可能经常要对调查问卷进行统计,使用手写的方法(就是在纸上写正字的方法)虽然很方便,不过不方便在一定条件下进行统计,如在男士的条件下 ...
- Python条形码生成:让你的数据更加规范和美观
Python条形码生成:让你的数据更加规范和美观 如果你需要将某些数据以条形码的形式表现出来,那么Python是一个非常好的选择.Python提供了许多库来进行条形码的生成,其中最为常见且易于使用的是 ...
- python:生成基金净值周K线数据
由基金每日净值数据,生成基金净值周K线数据. week_data.py # coding=utf-8 import os, sys import datetimeif len(sys.argv) == ...
- python/sklearn 生成分类、回归的数据
使用sklearn.datasets这个工具即可 from sklearn.datasets import make_regression, make_classification# 生成回归数据,1 ...
- 调查问卷考试问卷创建生成工具助手小程序开发
调查问卷考试问卷创建生成工具助手小程序开发 问卷调查考试软件,可以自由让每一个用户自由发起调查问卷.考试问卷.发布的问卷允许控制问卷的搜集.回答等各个环节的设置,同时支持系统模板问卷,选用模板问卷后可 ...
- 如何有效设计你的调查问卷?
夜深人静,你却烦躁不安.一头是调研报告的最后期限,一头是调查数据的百思不解.因子.回归.聚类.判别都使用过了,神经网络.关联规则和决策树也尝试好多次了,可面前的这堆数据还是无法解释.你打一个哈欠,将烟 ...
- 计算机平面设计专业技能怎么填,计算机平面设计专业毕业生情况调查问卷
<计算机平面设计专业毕业生情况调查问卷>由会员分享,可在线阅读,更多相关<计算机平面设计专业毕业生情况调查问卷(7页珍藏版)>请在人人文库网上搜索. 1.计算机平面设计专业毕业 ...
最新文章
- android屏幕分辨率详解 ldpi mdpi hdpi 程序UI自适应 《官方翻译》
- 效果很好的asp.net的数据库访问模型(优化,封装一体化)
- 学学python(4):面向对象及类,模块
- 前端学习(2942):vue的本地注册
- 20165222第一周查漏补缺
- 值得所有设计师拥有的国内外“设计导航网站”
- solr java api_Solr7.4.0的API(Solrj)操作
- gradle 修改java代码_Gradle 插件
- Oracle开发实战经典教程(教学视频)
- 地理探测器的学习与研究初探
- github 本地提交代码到服务器
- 手把手教你玩物联网(二)---onenet云平台产品创建
- 【web前端开发教程】
- c语言流水调度作业,最简C语言流水灯程序,给初学者看下,高手请绕行。
- 计算机16进制A3 B9,ASCII码16进制对照表
- 任天堂国行 Switch OLED 版 评测
- 防火墙技术及应用(一)
- 如何删除有外键关系的两张表的数据
- 【区块链】PoW、PoS、DPoS算法详解及对比
- 《ClickHouse原理解析与应用实践》读书笔记(1)