• 个人年度军事训练成绩评定python算法


    前几天终于调休了,有时间把几个月前,几个不认识的,兄弟,打电话提出的成绩评定问题给解决了,刚做完,又开始加班,不过先把文章上线再说,多谢大家点赞支持!虽然离开PLA一年多了,但一直怀念那些拔草的岁月!O(∩_∩)O哈哈~

    使用Python3的numpypandas两个库完成,环境是Anaconda3-2021.05-python3.8-Windows-x86_64,强烈安利初学Python的同志安装Anaconda,Anaconda对于python初学者而言及其友好,相比单独安装python主程序,选择Anaconda可以帮助省去很多麻烦。

    Anaconda里已经添加了许多常用的功能包,同时Anaconda还附带捆绑了两个非常好用的交互式代码编辑器(Spyder、Jupyter notebook),我就是使用Jupyter notebook完成的此代码开发,对数据分析工作特别友好,因为可以分块执行,同时分块显示结果,非常方便进行上下数据比对。安装方法在CSDN里有很多,基本是傻瓜式的,链接如下。
    内网电脑适用的Python环境安装包Anaconda

    一、我们要解决的问题

    1.次要问题:专项课目

    专项课目成绩分为“合格”、“不合格”,只要有一项专项课目不合格,体能综合评定为不及格。专项课目全部合格,体能综合评定等于通用课目评定

    2.主要问题:个人年度军事训练成绩评定

    ①优秀:所有训练课目成绩均为良好以上且优秀率不低于50%,或者均为及格以且优秀率不低于70%;
    ②良好:所有训练课目成绩均为及格以上且优良率不低于50%;
    ③及格:80%以上的训练课目成绩为及格,或者50%以上的训练课目成绩为优秀;
    ④不及格:达不到及格标准。
    本项目中,体能综合评定,加上其他课目共7项课目,按照以上标准,进行计算,得出总评为优秀、良好、及格、不及格。

    二、解题思路

    使用pandas将原始Excel表的相关内容读入Python,存为DataFrame数据框格式,再使用apply函数调用另外的函数,设计算法,对某列进行赋值。

    三、项目实现

    1.导入库

    import numpy as np
    import pandas as pd
    
    • 1
    • 2


    2.每一段代码要点击“运行”按钮,单独运行,下面的Out就是输出。选择Excel表中有用的列导入,如要增加或删减项目,要从这里开始修改。

    df=pd.read_excel("./通用训练课目考核成绩计算.xlsx", sheet_name="输入",usecols="A,B,V,W,Y,AA,AC,AE,AG,AI,AK,AM,AO,AR")
    df
    
    • 1
    • 2


    3.因为表头有无用数据,所以要选择有用的行,从7行开始,并重新命名列名,方便查看数据。这里要仔细核对顺序,不能命名错误。

    df1=df.iloc[7:]
    #df1=df1(columns=['序号','姓名','通用课目评定'])
    df1.columns=['序号', '姓名', '通用课目评定', '浪木组合',
           '双杠3', '跳绳', '体能综合评定', '手枪射击',
           '通指装备操作', '专业课目1', '专业课目2', '步枪射击',
           '航空影像标图', '总评']
    df1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7


    4.专项课目成绩分为“合格”、“不合格”,只要有一项专项课目不合格,体能综合评定为不及格。专项课目全部合格,体能综合评定等于通用课目评定。

    apply函数调用stamina函数,3项专项课目均==‘合格’,return 通用课目评定的成绩,只要有一项专项课目不合格,体能综合评定return ‘不及格’。如果某项没有数据,是空的,则返回空值,并打印提示语。

    '''体能综合评定'''
    def stamina(x,col1,col2,col3,col4):
        if x[col1]=='合格'and x[col2]=='合格' and x[col3]=='合格':
            return x[col4]  # 合格
        if x[col1]=='不合格' or x[col2]=='不合格' or x[col3]=='不合格': # 不合格
            return '不及格'
        else:
            print('体能综合评定有空,是因为某数据为空或者输入有误')
            return np.nan  # 为空或者输入有误
            
        
    df1['体能综合评定']=df1.apply(stamina,axis=1,col1 ='浪木组合',col2 ='双杠3',col3 ='跳绳',col4='通用课目评定')
    df1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13


    5.最后总评。
    ①优秀:所有训练课目成绩均为良好以上且优秀率不低于50%,或者均为及格以且优秀率不低于70%;
    ②良好:所有训练课目成绩均为及格以上且优良率不低于50%;
    ③及格:80%以上的训练课目成绩为及格,或者50%以上的训练课目成绩为优秀;
    ④不及格:达不到及格标准。
    用L.count()方法统计L列表中某种成绩的数量,除以总课目数N,得到比率,有一项为空则返回空值,再判断及格,逐级提高标准判断良好、优秀,最后else的是不及格,这种算法保证全包含,没有遗漏或交叉错误。逐行运算,批量解决问题!

    '''总评'''
    def overall_appraisal(x,col1,col2,col3,col4,col5,col6,col7):
        L=[x[col1],x[col2],x[col3],x[col4],x[col5],x[col6],x[col7]]
        #print(L)
        N=7 # 总共7项科目
        appraisal=np.nan # 总评
        if L.count(np.nan)>0:
            print('有一人科目没有成绩')
            return appraisal
        elif L.count('不及格')/N<0.2 or L.count('优秀')/N>=0.5:
            appraisal= '及格'
            if L.count('不及格')==0 and (L.count('优秀')+L.count('良好'))/N>=0.5:  # 评良好条件
                appraisal= '良好'
            if (L.count('不及格')==0 and L.count('及格')==0 and L.count('优秀')/N>=0.5)\
            or (L.count('不及格')==0 and L.count('优秀')/N>=0.7):                  # 评优秀条件
                appraisal= '优秀'
        else :
            appraisal= '不及格'
        
        return appraisal
    df2=df1   
        
    df2['总评']=df2.apply(overall_appraisal,axis=1,col1 ='体能综合评定',col2 ='手枪射击',col3 ='通指装备操作',col4='专业课目1',col5='专业课目2',col6='步枪射击',col7='航空影像标图')
    
    df2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    6.最后生成结果,一张新表,考核总评.xlsx。

    df2.to_excel("./考核总评.xlsx", sheet_name="考核总评")
    
    • 1

    不用安装其它的IDE,只用Jupyter notebook就可以实现数据处理,将Anaconda环境安装包安装在内网电脑上即可!

    个人年度军事训练成绩评定python算法-Jupyter notebook文件

    个人年度军事训练成绩评定python源代码及资源

    个人年度军事训练成绩评定软件win10版

  • 相关阅读:
    nacos配置启动
    Deepin Linux系统怎安装打印机? 兄弟1618w打印机驱动安装图文教程
    Java 代码 格式化插件
    一起看 I/O | 用 Health Connect 连通应用间的健康数据
    MongoDB教程(三):mongoDB用户管理
    图像边缘检测与图像分割常用算法研究分析-含Matlab代码
    [附源码]java毕业设计校园失物招领管理系统
    Docker & Mysql实战:docker compose 搭建Mysql
    Spring Cloud Netflix微服务组件-Hystrix
    刷题笔记之四(Fibonacci数列+合法括号序列判断+跳石板+幸运的袋子+两种排序方式+最小公倍数)
  • 原文地址:https://blog.csdn.net/chinacqzgp/article/details/127665758