【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 = 0
            while 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 += 1
            TiMu.sort(reverse=False)
        elif i == 10:
            GeShu = random.randint(1, TiMu_XuanXiang_num[i])  # 随机产生多选题选择的个数
            temp = 0
            while 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 += 1
            TiMu.sort(reverse=False)
        elif i == 11:
            GeShu = random.randint(1, TiMu_XuanXiang_num[i])  # 随机产生多选题选择的个数
            temp = 0
            while 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 += 1
            TiMu.sort(reverse=False)
        elif i == 13:
            GeShu = random.randint(1, TiMu_XuanXiang_num[i])  # 随机产生多选题选择的个数
            temp = 0
            while 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 += 1
            TiMu.sort(reverse=False)
        elif i == 14:
            GeShu = random.randint(1, TiMu_XuanXiang_num[i])  # 随机产生多选题选择的个数
            temp = 0
            while 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 += 1
            TiMu.sort(reverse=False)
        elif i == 17:
            GeShu = random.randint(1, TiMu_XuanXiang_num[i])  # 随机产生多选题选择的个数
            temp = 0
            while 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 += 1
            TiMu.sort(reverse=False)
        elif i == 18:
            GeShu = random.randint(1, TiMu_XuanXiang_num[i])  # 随机产生多选题选择的个数
            temp = 0
            while 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 += 1
            TiMu.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 += 1
                DiaoCha_Biao.append(TiMu)
        elif i == 5 and XuanZe != 1:
            DiaoCha_Biao.append(TiMu)  # 把每个题目的结果放到调查表里
            TiMu = []  # 清空题目列表
            while i != 6:
                TiMu = [0]
                i += 1
                DiaoCha_Biao.append(TiMu)
        else:
            DiaoCha_Biao.append(TiMu)  # 把每个题目的结果放到调查表里
            TiMu = []

生成数据

       到这里,就很简单了,需要多少数据,就直接用for就能跑出来,当然在这里用到三维的列表进行对数据的临时存储。

在这里用中文输入表示一下,列表临时存储数据的结构:

【【【】,【】,【】,……,【】】,【】,【】】

最里面的中括号是每个问题的选择结果。

中间的中括号是每一份数据,就类似于每一份问卷所填的数据

最外面的中括号是所有的数据,就相当于包括了所有的问卷

# 产生数据
for k in range(0, 536):
    i = 0
    while i < 21:
        if i == 8:  # 多选
            GeShu = random.randint(1, TiMu_XuanXiang_num[i])  # 随机产生多选题选择的个数
            temp = 0
            while 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 += 1
            TiMu.sort(reverse=False)
        elif i == 10:
            GeShu = random.randint(1, TiMu_XuanXiang_num[i])  # 随机产生多选题选择的个数
            temp = 0
            while 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 += 1
            TiMu.sort(reverse=False)
        elif i == 11:
            GeShu = random.randint(1, TiMu_XuanXiang_num[i])  # 随机产生多选题选择的个数
            temp = 0
            while 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 += 1
            TiMu.sort(reverse=False)
        elif i == 13:
            GeShu = random.randint(1, TiMu_XuanXiang_num[i])  # 随机产生多选题选择的个数
            temp = 0
            while 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 += 1
            TiMu.sort(reverse=False)
        elif i == 14:
            GeShu = random.randint(1, TiMu_XuanXiang_num[i])  # 随机产生多选题选择的个数
            temp = 0
            while 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 += 1
            TiMu.sort(reverse=False)
        elif i == 17:
            GeShu = random.randint(1, TiMu_XuanXiang_num[i])  # 随机产生多选题选择的个数
            temp = 0
            while 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 += 1
            TiMu.sort(reverse=False)
        elif i == 18:
            GeShu = random.randint(1, TiMu_XuanXiang_num[i])  # 随机产生多选题选择的个数
            temp = 0
            while 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 += 1
            TiMu.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 += 1
                DiaoCha_Biao.append(TiMu)
        elif i == 5 and XuanZe != 1:
            DiaoCha_Biao.append(TiMu)  # 把每个题目的结果放到调查表里
            TiMu = []  # 清空题目列表
            while i != 6:
                TiMu = [0]
                i += 1
                DiaoCha_Biao.append(TiMu)
        else:
            DiaoCha_Biao.append(TiMu)  # 把每个题目的结果放到调查表里
            TiMu = []
        TiMu = []  # 清空题目列表
        i += 1
    ZongDiaoCha_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 = 0
    for ti_mu in (biao):
        for j in range(1, TiMu_XuanXiang_num[i] + 1):
            if j in ti_mu:
                ZongTongJiBiao[i][j - 1] += 1
        i += 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: PyCharm

import random  # 引入随机库
import numpy as np
import time
from openpyxl import load_workbook

ZongDiaoCha_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 = 0
    while i < 21:
        if i == 8:  # 多选
            GeShu = random.randint(1, TiMu_XuanXiang_num[i])  # 随机产生多选题选择的个数
            temp = 0
            while 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 += 1
            TiMu.sort(reverse=False)
        elif i == 10:
            GeShu = random.randint(1, TiMu_XuanXiang_num[i])  # 随机产生多选题选择的个数
            temp = 0
            while 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 += 1
            TiMu.sort(reverse=False)
        elif i == 11:
            GeShu = random.randint(1, TiMu_XuanXiang_num[i])  # 随机产生多选题选择的个数
            temp = 0
            while 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 += 1
            TiMu.sort(reverse=False)
        elif i == 13:
            GeShu = random.randint(1, TiMu_XuanXiang_num[i])  # 随机产生多选题选择的个数
            temp = 0
            while 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 += 1
            TiMu.sort(reverse=False)
        elif i == 14:
            GeShu = random.randint(1, TiMu_XuanXiang_num[i])  # 随机产生多选题选择的个数
            temp = 0
            while 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 += 1
            TiMu.sort(reverse=False)
        elif i == 17:
            GeShu = random.randint(1, TiMu_XuanXiang_num[i])  # 随机产生多选题选择的个数
            temp = 0
            while 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 += 1
            TiMu.sort(reverse=False)
        elif i == 18:
            GeShu = random.randint(1, TiMu_XuanXiang_num[i])  # 随机产生多选题选择的个数
            temp = 0
            while 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 += 1
            TiMu.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 += 1
                DiaoCha_Biao.append(TiMu)
        elif i == 5 and XuanZe != 1:
            DiaoCha_Biao.append(TiMu)  # 把每个题目的结果放到调查表里
            TiMu = []  # 清空题目列表
            while i != 6:
                TiMu = [0]
                i += 1
                DiaoCha_Biao.append(TiMu)
        else:
            DiaoCha_Biao.append(TiMu)  # 把每个题目的结果放到调查表里
            TiMu = []
        TiMu = []  # 清空题目列表
        i += 1
    ZongDiaoCha_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 = 0
    for ti_mu in (biao):
        for j in range(1, TiMu_XuanXiang_num[i] + 1):
            if j in ti_mu:
                ZongTongJiBiao[i][j - 1] += 1
        i += 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("数据保存完成!")

  • 12
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载体验!下载完使用问题请私信沟通。 2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 基于模糊专家系统的笔记本选购推荐系统python源码+数据+项目说明.zip 整体结构 ![整体结构]( /flowchart/整体结构.png) * 获取笔记本电脑详细配置参数。共收集了157条笔记本电脑信息(不含大多数游戏本),具体包括品牌、型号、年份、续航时间、是否有独立显卡、处理器、内存、硬盘大小等 * 模糊规则映射。将各参数信息分别映射到[0,1]区间的数值。这里通过Matlab工具箱FuzzyLogic来处理。如评估续航能力,输入为续航时间,输出为续航能力的得分。 像评估处理器的性能,输入为内存容量、处理器i5/i7、是否有独立显卡、CPU核数,并制定了了一系列规则来评估。 如:IF 处理器为i7 and 内存容量为 16G , THEN 处理器性能为最佳 IF 处理器为i5 and 有独立显卡,THEM 处理器性能较好 IF 处理器为i5 and 内存容量为 8G and 无独立显卡,处理器性能一般。 (实际制订的规则更多,也更复杂) * 模糊设计处理 ![模糊设计处理]( /flowchart/模糊处理设计.png) * 输出的语言变量 ![语言变量]( /flowchart/语言变量.png) * 使用Django开发,前端引导用户填写问卷,选择自己对笔记本电脑的要求(包括用途、对性能如屏幕分辨率、处理器、续航时间等要求、预算)。 将笔记本电脑原始数据信息和各项得分信息分别存入数据库中,计算时取出,并根据用户的需求与得分内积运算。最终选取得分较高的前五名(由于同一型号不同配置的 笔记本电脑得分相近,这里对同一型号仅保留了得分最高的电脑,后期可能会在展示页面增加链接进入同种型号不同配置的电脑的页面)推荐给用户,并展示笔记本电脑 图片、针对用户需求的指标的得分情况、总推荐指数和其他具体信息。 * 打分过程 ![打分过程]( /flowchart/打分过程.png) * 数据库设计 ![数据库]( /flowchart/数据库.png)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

因心,三人水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值