学生成绩数据统计及可视化

来源:中国信息技术教育 2021NO.21《基于Pandas和Pandas-Bokeh的……》

语言:Python   外部库:Pandas、numpy、pandas_bokeh    位置:503

一、调试过程

1.导入excel文件并查看

2.计算均分、最高分,优秀人数等

3.分段统计

4.优秀学生排行

5.数据可视化

二、问题与解决

1.数据可视化---均分、最高分等折线无法显示出来?

初步判断:是否与电脑环境有关?因为有一个图是能正确显示的。

三、总结


附代码:

import pandas as pd

student_list=pd.read_excel('全校考试数据分析2.xlsx')

student_list.head()

#student_list.info()

student_list.duplicated()

student_list.fillna(value=0)  #缺失值用0填充


import numpy as np

subject_name=['语文','数学','英语','科学','社会']

grade=student_list['年级'].unique()#年级列表

for grade_name in grade:

    grade_name_group=student_list.groupby('年级').get_group(grade_name)#获取年级分组


    for sub in subject_name:

        grade_analysis=student_list.groupby(['班级'])[sub].agg([("均分","mean"),("最高分","max"),\

                                                              ("优秀人数",lambda x:np.sum(x>=80)),\

                                                              ("及格人数",lambda x:np.sum(x>=60))]).reset_index()   

grade_analysis


bins=[]#分箱列表

fenduan_max=(int(grade_name_group[sub].max()//10))*10#最高分

fenduan_min=(int(grade_name_group[sub].min()//10))*10#最低分

bins.clear()

for j in range(fenduan_min,fenduan_max+10,10):

    bins.append(j)#按照最高分与最低分将得分分为10个分箱

    fsd_all_simple=[]

    for name,val in grade_name_group.groupby('班级')[sub]:

        val.rename(name,inplace=True)

        fsd_class_simple=pd.cut(val,bins=bins,include_lowest=True).value_counts(sort=False).rename_axis(sub+'分数段').reset_index(name=name).set_index(sub+'分数段')

        fsd_all_simple.append(fsd_class_simple)

        fsd_simple=pd.concat(fsd_all_simple,axis=1)#合并数据

fsd_simple   


grade_TOP=student_list[['年级','班级','性别',sub]].groupby(['年级']).get_group(grade_name)#按年级、学科分组

grade_TOP_n=grade_TOP.nlargest(10,sub,keep='all')#取每个分组降序排列的前10行并保留全部重复数据

grade_TOP_n


import pandas_bokeh as pb

grade_TOP_n.plot_bokeh(kind="bar",

                      x='性别',

                      y=sub,

                      vertical_xlabel=True,

                      xlabel='姓名',

                      ylabel='分数',

                      title=" 前10名学生成绩比较",

                      colormap=['#3A8FC6'])


以上通过的代码。

pb.output_notebook() #设置输出方式为Jupyter notebook展示1均分、最高分等折线图

grade_analysis.plot_bokeh(kind="line",

                          x='班级',

                          y=['均分','最高分','优秀人数'],

                          ylabel='分数',

                          title="各班均分、最高分、优秀人数",

                          plot_data_points=True,

                          plot_data_points_size=10,

                          marker='triangle',

                          colormap=['#DFEBC3','#B0DFD1','#8BCDCD','#63BCD8'])


fsd_simple.plot_bokeh(kind="bar",

                    xlabel='班级',

                      ylabel='百分比',

                      stacked=True,

                      title="各分数段占百分比比较",

                      colormap=['#DFEBC3','#B0DFD1','#8BCDCD'])


没有通过的可视化

你可能感兴趣的:(学生成绩数据统计及可视化)