AI分析SP和pk进行sk分析

news2024/11/17 3:25:38

SP原始表行标题代表题目序号,列代表学生,如果学生答对题目为1,否则为0。问题知识点矩阵这个文件横轴代表每个知识点,列标题代表每个题目序号,如果题目包含这个知识点则该处值为1。通过两个文件判断学生对于每个知识点的掌握,生成一个Excel,列为学生,行标题为知识点。如果学生对每个知识点关联的题目都能答对吗,值为2,都答错值为0,一些答对一些答错值为1

1
按行遍历这个Excel中含1的单元格返回该单元格所在列

2

到这一步能成功返回结果

import pandas as pd

# 读取Excel文件
df1 = pd.read_excel('问题-知识点矩阵.xlsx')

class knowledge:
    def __init__(self, name):
        self.name = name
        flag=0

class question:
    def __init__(self, name):
        self.name = name
        self.knowledge = []
        self.flag=0

class student:
    def __init__(self, name):
        self.name = name
        self.question= []

# 创建student列表
students = []
questions = []

knowledges=[]

# 第一列的列名
first_column_name = df1.columns[0]


students = []


def get_student_results(file_path):
    # 读取Excel文件
    df = pd.read_excel(file_path)

    # 初始化一个空字典来存储结果
    results = {}

    # 遍历数据框的每一行
    for index, row in df.iterrows():
        # 初始化student对象
        student_obj = student(row['学生'])

        # 遍历除'学生'列之外的其他列
        for col in df.columns[1:]:
            # 检查学生的答案是否为1(正确)或0(错误)
            if row[col] == 1:
                flag = 1
            else:
                flag = 0

            # 创建question对象,并设置flag
            question_obj = question(col)
            question_obj.flag = flag

            # 将question对象添加到student对象的question列表中

            for index, value in df1[first_column_name].items():
                # 找到当前行中所有包含1的列
                ones_columns = [col for col in df1.columns[1:] if df1.at[index, col] == 1]
                # 遍历ones_columns列表中的每个列名
                # 创建question对象
                #print(question_obj.name)
                if question_obj.name ==  value:
                    #value  是 题目

                    #print(value)
                    for col in ones_columns:
                        # 将question对象添加到questions列表中
                        question_obj.knowledge.append(col)
                questions.append(question_obj)



            student_obj.question.append(question_obj)



            # 遍历第一列的所有元素

        # 将student对象添加到students列表中
        students.append(student_obj)
get_student_results('sp原始表.xlsx')
# 遍历student列表,打印
for student in students:
    print(student.name)
    for question in student.question:
        print(question.name, question.flag)
        for knowledge in question.knowledge:
            print(knowledge)



在这里插入图片描述
分别返回 题目:答对还是打错

涉及到的知识点包括

成功获取集合:

import pandas as pd

# 读取Excel文件
df1 = pd.read_excel('问题-知识点矩阵.xlsx')

class knowledge:
    def __init__(self, name):
        self.name = name
        flag=0

class question:
    def __init__(self, name):
        self.name = name
        self.knowledge = []
        self.flag=0

class student:
    def __init__(self, name):
        self.name = name
        self.question= []

# 创建student列表
students = []
questions = []

knowledges=[]

# 第一列的列名
first_column_name = df1.columns[0]


students = []


def get_student_results(file_path):
    # 读取Excel文件
    df = pd.read_excel(file_path)

    # 初始化一个空字典来存储结果
    results = {}

    # 遍历数据框的每一行
    for index, row in df.iterrows():
        # 初始化student对象
        student_obj = student(row['学生'])

        # 遍历除'学生'列之外的其他列
        for col in df.columns[1:]:
            # 检查学生的答案是否为1(正确)或0(错误)
            if row[col] == 1:
                flag = 1
            else:
                flag = 0

            # 创建question对象,并设置flag
            question_obj = question(col)
            question_obj.flag = flag

            # 将question对象添加到student对象的question列表中

            for index, value in df1[first_column_name].items():
                # 找到当前行中所有包含1的列
                ones_columns = [col for col in df1.columns[1:] if df1.at[index, col] == 1]
                # 遍历ones_columns列表中的每个列名
                # 创建question对象
                #print(question_obj.name)
                if question_obj.name ==  value:
                    #value  是 题目

                    #print(value)
                    for col in ones_columns:
                        # 将question对象添加到questions列表中
                        question_obj.knowledge.append(col)
                questions.append(question_obj)



            student_obj.question.append(question_obj)



            # 遍历第一列的所有元素

        # 将student对象添加到students列表中
        students.append(student_obj)
get_student_results('sp原始表.xlsx')


right=[]
worng=[]
hunhe=[]
name=[]


# 更改类名为AllResults以避免与内置函数all()冲突
class AllResults:
    def __init__(self, name):
        self.name = name
        self.right = []  # 答对的知识点
        self.wrong = []  # 答错的知识点
        self.hunhe = []  # 交集,即答对和答错中都有的知识点


# 假设students是已经定义好的学生列表
# students = [...]

# 初始化存储结果的列表
all_results_list = []

for student in students:
    # 创建AllResults实例
    all_results = AllResults(student.name)

    right_set = set()  # 使用集合来避免重复
    wrong_set = set()

    for question in student.question:
        if question.flag == 1:
            right_set.update(question.knowledge)
        elif question.flag == 0:
            wrong_set.update(question.knowledge)

    # 更新AllResults实例的属性
    all_results.right.extend(right_set)
    all_results.wrong.extend(wrong_set)
    all_results.hunhe.extend(right_set.intersection(wrong_set))

    # 移除交集部分
    all_results.right = list(right_set - wrong_set)
    all_results.wrong = list(wrong_set - right_set)

    # 添加到结果列表
    all_results_list.append(all_results)

# 遍历all_results_list,写入txt文件
for i, all_results in enumerate(all_results_list):
    with open(f'{all_results.name}.txt', 'w') as f:
        f.write(f'{all_results.name}\n')
        f.write(f'答对知识点:{all_results.right}\n')
        f.write(f'答错知识点:{all_results.wrong}\n')
        f.write(f'交集知识点:{all_results.hunhe}\n')


下面开始判断
sk:

我要判断的是每个学生对于不同的问题,这些不同问题下面的相同知识点的flag是否一致

判断knowledge.name 的name相同的知识点 的flagflag是否都是1,或者都是0,或者有1有0三种情况
,返回给我关于每个knowledge.name所在的三种情况

class AllResults:
def init(self, name):
self.name = name
self.right = [] # 答对的知识点
self.wrong = [] # 答错的知识点
self.hunhe = [] # 交集,即答对和答错中都有的知识点 写本地代码把AllResults类中的name和s.xlsx对应以后,s.xlsx的表头是知识点,self.right = [] #
答对的知识点里面单元格填2,self.wrong = [] # 答错的知识点单元格填0, self.hunhe = [] #
交集,即答对和答错中都有的知识点用1填充,无需你运行,给我代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1704953.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

行为设计模式之职责链模式

文章目录 概述原理代码实现小结 概述 职责链模式(chain of responsibility pattern) 定义: 避免将一个请求的发送者与接收者耦合在一起,让多个对象都有机会处理请求.将接收请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止. 在职责链模式中&…

文件上传漏洞:pikachu靶场中的文件上传漏洞通关

目录 1、文件上传漏洞介绍 2、pikachu-client check 3、pikachu-MIME type 4、pikachu-getimagesize 最近在学习文件上传漏洞,这里使用pikachu靶场来对文件上传漏洞进行一个复习练习 废话不多说,开整 1、文件上传漏洞介绍 pikachu靶场是这样介绍文…

【Leetcode 160】环形链表——双指针,细节讲解

题目 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#…

智能时代下,人机交互和虚拟现实的机遇和挑战

智能时代下,人机交互和虚拟现实的机遇和挑战

使用 Django 与 Redis 实现缓存优化

文章目录 什么是Redis?为什么选择Django与Redis?如何在Django中使用Redis?总结与拓展 在Web开发中,性能优化是一个至关重要的方面。而使用缓存是提高Web应用性能的常见方法之一。在这篇文章中,我们将探讨如何结合Djang…

免费分享一套SpringBoot+Vue企业客户关系CRM管理系统【论文+源码+SQL脚本+PPT】,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue企业客户关系CRM管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue企业客户关系CRM管理系统系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue企业客户关系CRM管…

JAVASE2

封装的步骤: 1、所有属性私有化,使用private关键字进行修饰,private表示私有的,修饰的所有数据只能在本类中访问 2、对外提供简单入口:比如说被private修饰的成员变量,在其他类中只能通过getXxx/setXxx方法…

10大领域应该怎么记?

文章目录 5大过程组10大领域49个过程输出输入工具与技术 参考文档: https://mp.weixin.qq.com/s/BJ-Dpn0zxTP0TCbeoJXb9A 5大过程组 启动、规划、执行、监控、收尾 10大领域 巧记:【挣饭进城市,咨购风菜干】【狗子整范进—成人风采】 整…

【源码】2024完美运营版商城/拼团/团购/秒杀/积分/砍价/实物商品/虚拟商品等全功能商城

后台可以自由拖曳修改前端UI页面 还支持虚拟商品自动发货等功能 前端UNIAPP 后端PHP 一键部署版本 获取方式: 微:uucodes

数据结构(六)队列

文章目录 一、概念二、逻辑结构:线性结构三、存储结构(一)顺序队列(二)循环队列1. 结构体定义2. 创建队列(1)函数定义(2)注意点(3)代码实现 3. 入…

Solana 验证节点搭建教程 SOL节点

搭建验证节点 (成功下载快照) 部署 Solana 验证节点 由于项目需求,需要部署一台solana节点,我们从一开始搭建,遇到许多坑,做个记录。 一定要注意服务器配置,配置不够,rpc启动不起来。 一、简介 官网地址…

ChAMP加载肺癌数据和分析甲基化数据流程

ChAMP加载肺癌数据和分析甲基化数据流程 1. 加载数据分析 #!/bin/evn R rm(list = ls()) library(rstudioapi) current_script_path <- getActiveDocumentContext()$path# 将路径转换为当前目录 current_directory <- dirname(current_script_path)# 设置当前工作目录 …

代码随想录算法训练营day14|二叉树的递归遍历、二叉树的迭代遍历、二叉树的统一迭代法

二叉树的递归遍历 首先需要明确的一点是&#xff0c;前序中序和后序在二叉树的递归遍历中的区别仅在于递归函数中操作的顺序&#xff0c;前序是在遍历一个节点的左右子树前进行操作&#xff0c;中序是在遍历一个节点的左子树后进行操作再遍历右子树&#xff0c;而后序是在遍历…

【DevOps】Elasticsearch在Ubuntu 20.04上的安装与配置:详细指南

目录 一、ES 简介 1、核心概念 2、工作原理 3、 优势 二、ES 在 Ubuntu 20.04 上的安装 1、安装 Java 2、下载 ES 安装包 3、创建 ES 用户 4 、解压安装包 5、 配置 ES 6、 启动 ES 7、验证安装 三、ES 常用命令 1、创建索引 2、 插入文档 3、查询文档 四、ES…

Weblogic SSRF漏洞 [CVE-2014-4210]

漏洞复现环境搭建请参考 http://t.csdnimg.cn/svKal docker未能成功启动redis请参考 http://t.csdnimg.cn/5osP3 漏洞原理 Weblogic的uddi组件提供了从其他服务器应用获取数据的功能并且没有对目标地址做过滤和限制&#xff0c;造成了SSRF漏洞&#xff0c;利用该漏洞可以向内…

git工作流程

以财务开发为例子&#xff1a; 1. 新建分支 1.1. upstream新建分支&#xff1a;finance-feature 1.2. origin新建对应分支&#xff1a;finance-feature 1.3 新建本地分支 git branch finance-feature 注&#xff1a; 同步远程分支&#xff1a;git fetch upstream feature…

【Flutter】KeyAnimatedList组件

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;Flutter学习 &#x1f320; 首发时间&#xff1a;2024年5月28日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e; 目…

微软联手清华,AI注释让文本到图像生成更符合人类偏好

获取本文论文原文PDF&#xff0c;请在公众号【AI论文解读】留言&#xff1a;论文解读 摘要 本研究展示了利用人类偏好数据集来精细调整文本到图像生成模型的潜力&#xff0c;增强了生成图像与文本提示之间的一致性。尽管取得了进展&#xff0c;现有的人类偏好数据集要么构建成…

[Algorithm][动态规划][简单多状态DP问题][买卖股票的最佳时机 III][买卖股票的最佳时机 Ⅳ]详细讲解

目录 1.买卖股票的最佳时机 III1.题目链接2.算法原理详解3.代码实现 2.买卖股票的最佳时机 IV1.题目链接2.算法原理详解3.代码实现 1.买卖股票的最佳时机 III 1.题目链接 买卖股票的最佳时机 III 2.算法原理详解 注意&#xff1a;本题为了便于初始化&#xff0c;有较多细节服…

对竞品分析的理解

一、竞品分析是什么 竞品分析即对竞争对手进行分析&#xff0c;是市场研究中的一项重要工作&#xff0c;它可以帮助企业了解竞争对手的产品、策略、市场表现等信息&#xff0c;通过竞品分析可以为自己的产品制定更加精准的策略。 二、为什么要做竞品分析 1.了解市场情况 了解…