学生评教,问卷调查表评价教师统计,python+pandas处理数据

news/2025/2/22 15:44:10/

先上一个结果表格

几个关键步骤

1、问卷网站上设置相关题目,条目,最好用评分题目(点击文本选项,但是保存下来的是分值),如图

2、pandas清洗数据,包括unstack,其目的是把所有学生得分细分展开,因为班级选科不同,问卷上针对的教师不同,比如有些学生需要评价物理教师,有些需要评价历史老师,教师数据每个维度都存在竖表中,如图

3、pandas以["校区","年级","班级","班主任或学科","题号"],groupby,进一步,按得分列求平均分,这个分数是学科的班级平均分(按评价细分维度,如第1题等等)

4、pandas数据透视表pivot_table,index=["校区","年级","班级","班主任或学科"], columns='题号', values='得分',建立班级汇总的得分透视表

5、上表已经是教学管理部门要求的最细表格,要作为结果保存在.xlsx中。然后根据教师姓名,利用AVERAGEIFS计算每位教师的汇总分(带的班级较多要计算平均分)。

第2、3步骤的代码:

# -*- coding: gbk -*-import pandas as pd
import osxl = pd.ExcelFile('学生细分表.xlsx')
df = xl.parse('Sheet1')df_melt = df.melt(id_vars=["校区","年级","班级","性别","选科"],var_name="项目",value_name="得分"  )#print(df_melt)
df_filtered = df_melt[pd.notna(df_melt['得分'])]
df_splitted = df_filtered['项目'].str.split('_',expand=True)
df_splitted = df_splitted.rename({0:'班主任或学科',1:'题号'},axis=1)
df_comb = pd.concat([df_filtered,df_splitted],axis=1)#'''
for index, row in df_comb.iterrows():#print(index,row['性别'],df_comb.at[index, '班主任或学科'])if row['性别'] == "男" and row['班主任或学科'] == "体育":new_sub = "体育男"df_comb.at[index, '班主任或学科'] = new_subif row['性别'] == "女" and row['班主任或学科'] == "体育":new_sub ="体育女" df_comb.at[index, '班主任或学科'] = new_sub
#'''df_comb.to_csv('学生细分表展开.csv', index=False)
print(df_comb.head(20))
#以上正常数据df_comb=df_comb.groupby(["校区","年级","班级","班主任或学科","题号"], as_index=False).agg({"得分":"mean"}) #跟39行reset_index作用一样df_class = pd.pivot_table(data=df_comb, index=["校区","年级","班级","班主任或学科"], columns='题号', values='得分')df_class.to_csv('班级按题号得分表.csv', index=False)df_comb.to_csv('班级按题号得分表展开.csv', index=False)

 第4步骤的代码

# -*- coding: gbk -*-import pandas as pd
import numpy as np
import osdf = pd.read_csv('班级按题号得分表展开.csv')
df2 = pd.read_csv('师资安排班师表展开.csv')df_class = pd.pivot_table(data=df, index=["校区","年级","班级","班主任或学科"], columns='题号', values='得分').reset_index()df_class['班主任或学科']=df_class['班主任或学科'].astype('category').cat.set_categories(['班主任','语文','数学','英语','物理','化学','生物','政治','历史','地理','音乐','体育女','体育男','美术','信息','通用','心理'])
df_class_sorted = df_class.sort_values(by=["班主任或学科","校区","年级","班级"], ascending=[True, True, True, True],inplace=True)df_class.insert(3, "教师", np.nan)
df_class.insert(5, "满意率", np.nan)for index, row in df_class.iterrows():#for column_name, value in row.items():con1=df_class.at[index, '校区']con2=df_class.at[index, '年级']con3=df_class.at[index, '班级']con4=df_class.at[index, '班主任或学科']sum=0if df_class.at[index, '班主任或学科'] =="班主任" :sum=df_class.at[index, '第1题']+df_class.at[index, '第2题']+df_class.at[index, '第3题']+df_class.at[index, '第4题']sum=sum/4else:sum=df_class.at[index, '第1题']+df_class.at[index, '第2题']+df_class.at[index, '第3题']+df_class.at[index, '第4题']+df_class.at[index, '第5题']+df_class.at[index, '第6题']+df_class.at[index, '第7题']+df_class.at[index, '第8题']sum=sum/8#print(con1,con2,con3,con4,sum)df_class.at[index, '满意率']=sumcons=df2.loc[(df2['校区']==con1) & (df2['年级']==con2) & (df2['班级']==con3) & (df2['班主任或学科']==con4),"教师"]sstr=list(cons)tname=""if len(sstr)>0:tname=sstr[0]else:tname=""df_class.at[index, '教师']=tnamedf_class.to_csv('班级按题号得分表.csv', index=False)

这里提示一下,因为班级汇总表出来后要填写班级任教信息,管理部门一般提供的这样的表格可以用以下代码转换为

df_melt = df.melt(id_vars=["校区","年级","班级","选科"],var_name="班主任或学科",value_name="教师"  )df_filtered = df_melt[pd.notna(df_melt['教师'])]df_filtered.to_csv('师资安排班师表展开.csv', index=False)  


http://www.ppmy.cn/news/1300418.html

相关文章

x-cmd pkg | usql - SQL 数据库的通用交互界面

目录 简介首次用户功能特点竞品和相关作品进一步阅读 简介 “usql” 是一个基于命令行的数据库客户端工具,它允许用户连接和管理多种类型的数据库。usql可以在多个操作系统上运行,包括 Linux、macOS 和 Windows。它还具有插件系统,可以根据需…

【AIGC】一组精美动物AI智能画法秘诀

如何使用AI绘画,从以下角度,依据表格内容梳理,表格如下: 外貌特征物种姿势特征描述场景风格技术描述小巧可爱幼小浣熊倚在桌子上具有人形特征中世纪酒馆电影风格照明8k分辨率细节精致毛茸茸手持咖啡杯Jean-Baptiste Monge的风格蓝…

MySQL 从零开始:02 MySQL 安装

文章目录 1、下载 MySQL 安装程序2、安装 MySQL 要操作 MySQL ,首先要安装 MySQL ,本文将一步步展示如何安装 MySQL,简直详细到令人发指。 环境: 操作系统:Windows10 64位MySQL版本:社区版 8.0.11.0 1、下…

第8章-第2节-Java中流的简单介绍

1、什么是流 我们可以先想象水流是怎样的?溪水不断流动,最终融入大海;我们今天的学习IO其实如同水流一样,当我们读取文件信息或者写入信息时,如同水流一样,不断读取或者写入,直到业务流程结束。…

华为“纯血”鸿蒙加速进场 高校、企业瞄准生态开发新风口

近日,华为终端BG CEO、智能汽车解决方案BU董事长余承东在2024年新年信中提出,开启华为终端未来大发展的新十年。 他特别提到,未来要构建强大的鸿蒙生态,2024年是原生鸿蒙的关键一年,将加快推进各类鸿蒙原生应用的开发…

如何使用 NFTScan NFT API 在 PlatON 网络上开发 Web3 应用

PlatON 是由万向区块链和矩阵元主导开发的面向下一代的全球计算架构,创新性的采用元计算框架 Monad 和基于 Reload 覆盖网络的同构多链架构,其愿景是成为全球首个提供完备隐私保护能力的运营服务网络。它提供计算、存储、通讯服务,并提供算力…

ROS---激光雷达的使用

ROS—激光雷达的使用 激光雷达是现今机器人尤其是无人车领域及最重要、最关键也是最常见的传感器之一,是机器人感知外界的一种重要手段。本文将介绍在ROS下使用激光雷达传感器,我们选用的激光雷达型号为思岚A1。 使用流程如下: 硬件准备;软…

云服务器哪家便宜?5个优惠云主机推荐

作为多年站长使市面上大多数的云厂商的云服务器都使用过,很多特价云服务器都是新用户专享的,本文有老用户特价云服务器,阿腾云atengyun.com有多个网站、小程序等,国内头部云厂商阿里云、腾讯云、华为云、UCloud、京东云都有用过&a…