来源:中国信息技术教育 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'])
没有通过的可视化