效果:
import pandas as pd
#读取数据
data = pd.read_csv('homework.csv')
#数据清洗
data = data.drop_duplicates() #去重
data = data.dropna() #删除空白数据
data.index=range(197) #index重新计数
#数据分组
class_avg = data.groupby(['class'],as_index=False)[['chinese','math','english']].mean() #班级平均分
class_max = data.groupby(['class'],as_index=False)[['chinese','math','english']].max() #班级最高分
class_min = data.groupby(['class'],as_index=False)[['chinese','math','english']].min() #班级最低分
grade_chinese_avg = data['chinese'].mean() #年级中文平均分
grade_math_avg = data['math'].mean() #年级数学平均分
grade_english_avg = data['english'].mean() #年级语文平均分
import matplotlib.pyplot as plt
fig = plt.figure()
fig.patch.set_facecolor('#c0d9d9') #设置画布背景色
fig.subplots_adjust(wspace=0.6,hspace=0.6) #设置子图间距
plt.rcParams['font.sans-serif'] = ['SimHei'] #设置中文不乱码
bar_width = 0.2 #设置柱子的位置,间隔和宽度
plt.subplot(2,2,1) #创建第一个子图
plt.bar(class_max['class'],class_max['chinese'],bar_width,label='chinese') #bar_width:设置柱子宽度,label设置这个颜色的柱子的注释,label要结合plt.legend一起使用才有效果
plt.bar(class_max['class']+bar_width,class_max['math'],bar_width,label='math') #class_max+bar_width设置这个柱子的位置,比上一个柱子多0.2
plt.bar(class_max['class']+bar_width*2,class_max['english'],bar_width,label='english')
plt.xlabel('班级') #设置x坐标标题
plt.ylabel('分数') #设置y坐标标题
plt.title('各班各科最高成绩统计图') #设置图标标题
plt.legend(fontsize=6) #配合bar中的label注释产生各个颜色柱子的注释,fontsize设置图例大小
plt.ticklabel_format(useOffset=False,style='plain') #解决班级名称被自动转成科学计数法
plt.ylim(0,150) #将y轴的坐标延长,这样才能让各个颜色柱子的注释位置在图的右上角
# plt.xticks(class_max['class']+bar_width) #设置x坐标在三个柱子的正中间,但是班级名称会有小数,没找到解决办法
plt.xticks(class_max['class'])
plt.subplot(2,2,2)#创建第二个子图
plt.bar(class_avg['class'],class_avg['chinese'],bar_width,label='chinese') #bar_width:设置柱子宽度,label设置这个颜色的柱子的注释,label要结合plt.legend一起使用才有效果
plt.bar(class_avg['class']+bar_width,class_avg['math'],bar_width,label='math') #class_max+bar_width设置这个柱子的位置,比上一个柱子多0.2
plt.bar(class_avg['class']+bar_width*2,class_avg['english'],bar_width,label='english')
plt.xlabel('班级') #设置x坐标标题
plt.ylabel('分数') #设置y坐标标题
plt.title('各班各科平均成绩统计图') #设置图标标题
plt.legend(fontsize=6) #配合bar中的label注释产生各个颜色柱子的注释,fontsize设置图例大小
plt.ticklabel_format(useOffset=False,style='plain') #解决班级名称被自动转成科学计数法
plt.ylim(0,120) #将y轴的坐标延长,这样才能让各个颜色柱子的注释位置在图的右上角
# plt.xticks(class_max['class']+bar_width) #设置x坐标在三个柱子的正中间,但是班级名称会有小数,没找到解决办法
plt.xticks(class_avg['class'])
plt.subplot(2,2,3)#创建第三个子图
plt.bar('chinese',grade_chinese_avg,label='chinese') #bar_width:设置柱子宽度,label设置这个颜色的柱子的注释,label要结合plt.legend一起使用才有效果
plt.bar('math',grade_math_avg,label='math')
plt.bar('english',grade_english_avg,label='english')
plt.xlabel('课程') #设置x坐标标题
plt.ylabel('分数') #设置y坐标标题
plt.title('24级各科平均成绩统计图') #设置图标标题
plt.legend(fontsize=6) #配合bar中的label注释产生各个颜色柱子的注释,fontsize设置图例大小
plt.ylim(0,80) #将y轴的坐标延长,这样才能让各个颜色柱子的注释位置在图的右上角
#
plt.subplot(2,2,4)#创建第四个子图
x = ['chinese','math','english']
y = [grade_chinese_avg,grade_math_avg,grade_english_avg]
plt.plot(x,y) #bar_width:设置柱子宽度,label设置这个颜色的柱子的注释,label要结合plt.legend一起使用才有效果
plt.xlabel('课程') #设置x坐标标题
plt.ylabel('分数') #设置y坐标标题
plt.title('24级各科平均成绩折线图') #设置图标标题
plt.legend(fontsize=6) #配合bar中的label注释产生各个颜色注释,fontsize设置图例大小
plt.ylim(0,80) #将y轴的坐标延长,这样才能让各个颜色柱子的注释位置在图的右上角
plt.show()
依赖的数据:
class,id,chinese,math,english 24301,24301001,40,96,37 24301,24301001,40,96,37 24301,24301002,58,18,33 24301,24301002,58,18,33 24301,24301003,13,60,76 24301,24301003,13,60,76 24301,24301004,66,61,6 24301,24301004,66,61,6 24301,24301005,8,56,100 24301,24301005,8,56,100 24301,24301006,31,5,45 24301,24301006,31,5,45 24301,24301007,14,65,43 24301,24301008,22,4,71 24301,24301009,37,23,1 24301,24301010,0,67,77 24301,24301011,80,82,94 24301,24301012,70,14,70 24301,24301013,5,6,70 24301,24301014,85,84,27 24301,24301015,77,77,78 24301,24301016,61,93,39 24301,24301017,13,50,80 24301,24301018,79,70,57 24301,24301019,39,29,66 24301,24301020,41,37,77 24301,24301021,49,69,88 24301,24301022,43,38,1 24301,24301023,85,1,88 24301,24301024,21,79,53 24301,24301025,36,42,3 24301,24301026,98,32,66 24301,24301027,99,45,87 24301,24301028,31,90,37 24301,24301028,31,90,37 24301,24301029,36,64,33 24301,24301029,36,64,33 24301,24301030,47,78,60 24301,24301030,47,78,60 24302,24302001,3,27,9 24302,24302001,3,27,9 24302,24302002,73,36,86 24302,24302002,73,36,86 24302,24302003,25,60,29 24302,24302003,25,60,29 24302,24302004,48,88,19 24302,24302005,78,23,10 24302,24302006,44,48,59 24302,24302007,39,37,58 24302,24302008,23,90,9 24302,24302009,16,53,84 24302,24302010,37,21,21 24302,24302011,67,99,67 24302,24302012,91,78,3 24302,24302013,32,69,76 24302,24302014,45,48,35 24302,24302015,87,70,98 24302,24302016,85,16,46 24302,24302017,69,93,77 24302,24302018,76,50,19 24302,24302019,77,68,72 24302,24302020,29,90,14 24302,24302021,40,21,14 24302,24302022,77,45,46 24302,24302023,72,24,83 24302,24302024,32,82,80 24302,24302025,11,73,2 24302,24302026,11,66,14 24302,24302027,80,61,67 24302,24302028,70,1,0 24302,24302029,90,61,68 24302,24302030,14,29,51 24302,24302031,78,96,39 24302,24302032,53,1,86 24302,24302033,3,98,27 24302,24302034,59,34,63 24302,24302035,66,61,36 24303,24303001,63,65,60 24303,24303002,92,70,41 24303,24303003,36,72,25 24303,24303004,5,41,79 24303,24303005,60,27,8 24303,24303006,5,17,46 24303,24303007,84,50,73 24303,24303008,33,37,37 24303,24303009,13,45,74 24303,24303010,84,45,79 24303,24303011,31,42,43 24303,24303012,73,59,51 24303,24303013,75,91,80 24303,24303014,73,32,83 24303,24303015,25,74,17 24303,24303016,40,88,83 24303,24303017,7,55,24 24303,24303018,42,18,31 24303,24303019,14,52,59 24303,24303020,46,100,100 24303,24303021,87,93,52 24303,24303022,98,76,6 24303,24303023,97,75,5 24303,24303024,10,56,45 24303,24303025,33,65,44 24303,24303026,74,97,58 24303,24303027,35,27,48 24303,24303028,84,52,93 24303,24303029,65,87,47 24303,24303030,8,69,80 24303,24303031,10,32,90 24303,24303032,53,14,90 24303,24303033,28,68,2 24303,24303034,48,26,28 24303,24303035,88,49,3 24303,24303036,77,38,7 24303,24303037,2,85,23 24303,24303038,14,5,20 24303,24303039,71,17,2 24303,24303040,35,10,69 24303,24303041,68,60,39 24303,24303042,98,82,6 24303,24303043,72,79,75 24303,24303044,61,29,39 24304,24304001,78,9,5 24304,24304002,95,50,63 24304,24304003,80,90,14 24304,24304004,84,63,8 24304,24304005,43,53,76 24304,24304006,0,45,99 24304,24304007,99,24,7 24304,24304008,66,15,14 24304,24304009,61,78,54 24304,24304010,37,32,37 24304,24304011,66,16,100 24304,24304012,82,42,82 24304,24304013,22,49,15 24304,24304014,69,13,53 24304,24304015,80,87,55 24304,24304016,3,63,95 24304,24304017,69,44,40 24304,24304018,14,57,27 24304,24304019,100,44,4 24304,24304020,4,3,21 24304,24304021,2,46,19 24304,24304022,73,95,22 24304,24304023,95,56,61 24304,24304024,100,56,67 24304,24304025,86,84,62 24304,24304026,66,57,95 24304,24304027,3,22,37 24304,24304028,45,44,57 24304,24304029,57,65,49 24304,24304030,25,17,20 24304,24304031,51,47,35 24304,24304032,54,10,92 24304,24304033,84,51,34 24304,24304034,33,3,89 24304,24304035,65,19,69 24304,24304036,78,98,62 24304,24304037,35,98,53 24304,24304038,32,36,3 24304,24304039,22,24,98 24304,24304040,55,88,15 24304,24304041,13,75,44 24304,24304042,51,41,43 24304,24304043,14,94,72 24304,24304044,38,18,6 24304,24304045,40,88,84 24304,24304046,7,37,16 24304,24304047,53,69,70 24304,24304048,34,0,1 24304,24304049,23,90,40 24304,24304050,66,72,47 24304,24304051,13,3,66 24304,24304052,30,64,78 24304,24304053,95,7,5 24304,24304054,78,54,1 24304,24304054,78,54,1 24304,24304055,44,53,14 24304,24304055,44,53,14 24304,24304056,12,36,10 24304,24304056,12,36,10 24304,24304057,58,50,21 24304,24304058,23,3,27 24304,24304059,4,95,56 24304,24304060,91,67,94 24304,24304061,92,25,8 24304,24304062,75,76,21 24304,24304063,2,32,83 24304,24304064,64,97,20 24304,24304065,67,72,83 24304,24304066,82,20,13 24304,24304067,77,34,99 24304,24304068,24,27,44 24304,24304069,54,56,41 24304,24304070,8,2, 24304,24304071,55,91,60 24304,24304072,61,15,58 24304,24304073,46,20,9 24304,24304074,54,35,1 24304,24304075,14,84,74 24304,24304076,33,71,87 24304,24304077,76,9,20 24304,24304078,93,65,67 24304,24304079,92,49,81 24304,24304080,25,47,56 24304,24304081,55,69,59 24304,24304082,82,2,43 24304,24304083,96,68,97 24304,24304084,100,26,18 24304,24304085,63,62,72 24304,24304086,,94,90 24304,24304087,84,11,21 24304,24304088,62,18,71 24304,24304089,50,85,53 24304,24304090,100,27,5 24304,24304090,100,27,5 24304,24304090,100,27,5 24304,24304090,100,27,5 24304,24304090,100,27,5 24304,24304090,100,27,5