Python数据分析与可视化教案6.1 成绩数据预处理与分析.docx
6.1成绩数据预处理与分析学生成绩是表达学生学习能力水平的重要数据之一。如何从各学期、各科目的大量学 生成绩中快速准确读取分析学生的综合能力,成为学校各项工作的重要数据支持。一、数据源本案例以某年级1班到5班的数学、语文、英语、计算机四门学科的期末成绩为例, 对其进行数据分析,数据文件为score.xls,如图6-*所示。白X剪切 粘贴力复制,-y格式刷剪贴板宋体B / U 字体11 -n晨 笠.三三三涉,哥自动换行室春建运运幽合并后居中,对齐方式Q常规N38 GA性别A开始 插入 页面布局 公式 数据 审阅 视图文件12345678910111213141592101921029210392104921059210692107921089210992110921119211292113161718192021222324 OCT92114921159211692117921189211992120921219212292123男男男女女女女女男女男男地区数学语文英语计算机江苏-无锡85313465安徽-黄山70462150安徽-芜湖90848292江苏-南京94855190江苏-连云港82886185山东-潍坊80856192江苏-南京87784193四川-成都92716185江苏-苏州87755275山东-济南76776587江苏-盐城86595087江苏-苏州92739271安徽-黄山 88689083BCD E F G H女女出班2江苏-常州 四川-成都 江苏-盐城 江苏-苏州 安徽-合肥 江苏-常州 安徽-芜湖 江苏-常州 江苏-无锡 江苏-盐城,_,卜在学住二 3班4班5班均928587778193988791923n815678625457537851488592938561413966533290838781796777697268图6-*数据源二、要求1 .查询语文和英语都较好的同学。2 .根据四科成绩,计算总分,对总分进行排名,查看名次的大概情况。3 .计算总分的平均分和中位数,并进行比拟。4 .计算江苏省学生四门学科的平均分,并加以比拟。5 .根据总分生成总分段,并分析哪个总分段的比例最高。6 .总分等级为C的学生中,计算不同城市学生的平均分,并加以比拟。三、步骤步骤1 :导入库,设置参数。导入所需要的库pandas,利用pd.set_option解除显示宽 度的显示,设置数据对齐。步骤1代码如下:import pandas as pdpd.set_option('display.width',None)pd.seCoptionCdisplay.unicode.easLasian-WidthTrue)步骤2:数据拼接。利用循环语句分别导入1班、2班、3班、4班、5班的数据,并 利用append将其合并为一个数据,命名为data,并查看数据的行数、列数和列名。步骤2代码如下:data = pd.read_excel(nc:/data/score.xlsn,sheet_name=0)for i in range(l,5):data_append = pd.read_excel(nc:/data/score.xls",sheet_name=i) print(data_append)data = data.append(data_append,ignore_index=True)输出结果如图6-*所不。Run:6-1>C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-1.py数据的行数=300 数据的列数=7部 三 数据的所有列名为:index('学号',性别',地区',数学','语文','英语','计算机dtype='object')*” Process finished with exit code 0图6-*步骤2输出结果步骤3 :数据查询。(1)查询数据学号与四门学科的前5行。(2)查询语文和英语都大于90分的数据。步骤3 (1)代码如下:print(data学号,嗷学?语文?英语?计算机皿:5)输出结果如图6-*所不。Run:6-1>C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-1.py学号数学语文英语计算机09210185313465I=519210270462150292103908482923921049485519049210582886185Process finished with exit code 0图6-*步骤3 (1)输出结果步骤3 (1)代码如下:print(data.loc(data语文】>85) & (data英语>85)输出结果如图6-*所不。Run:6-1» 个 C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-l.py学号性别地区数学语文英语计算机3292133女江苏连云港828893856592206男安徽-合肥878690746892209女江苏-连云港8386938210292243男四川-成都8186866113092311男江苏-盐城5986908713292313女安徽-黄山6888928313392314男江苏-常州8292939015092331男安徽-芜湖84909392Process finishedwith exitcode 0图6-*步骤3 (2)输出结果步骤4 :添加新列。(1)生成新列“总分”,计算公式为:总分=数学+语文+英语+计算机。(2)将“地区”列拆分为两列,分别命名为“省”、“城市”。步骤4 (1)代码如下:data总分=data数学】+ data语文】+ data英语+ data计算机】步骤4 (2)代码如下:data省=data/地区.str. split,,expand=True)Odata/城市'=data,±fbX'.str.split(,-',expand=True)lprint(data.head()输出结果如图6-*所不。Run:6-1>C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-1.py0学号性别地区 江苏-无锡数学85语文英语计算机总分65省215城市92101男3134江苏无锡5192102男安徽-黄山70462150187安徽黄山*292103男安徽-芜湖90848292348安徽芜湖392104女江苏-南京94855190320江苏南京1EP492105女江苏-连云港82886185316江苏连云港Process finished with exit code 0图6-*步骤4输出结果步骤5:数据排名。根据总分按照降序排名,如果总分相同,按照最小排名计算,并 输出“学号”、“总分”、“总分排名”的前5行,将排名结果存放在新列“总分排名”。步骤5代码如下:data = data. sort_values(by ='总分ascending=False)data'总分排名'=data,/l,.rank(method='min,ascending=False)print(data学号;总分,总分排名R:5)输出结果如图6-*所不。Run:6-1C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-l.py学号 总分 总分排名91922323621.0531921323612.0150 923313593.0133 923143574.090922313525.0Process finished with exit code 0图6-*步骤5输出结果步骤6 :数据分段。根据总分进行分段,总分在300最大总分为A, 250299为 B. 200249为C, 0199以下为D,将排名结果存放在新列“总分等级”。步骤6代码如下:data'总分等级'=pd.cut(data'总分bins=0,199,249,299,data,.max(),print(data.head()输出结果如图6-*所示。Run:6-1» 个 C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-1.py学号性别地区数学语文英语计算机总分省城市总分等级092101男江苏-无锡85313465215江苏无锡CI=5192102男安徽-黄山70462150187安徽黄山D丑292103男安徽-芜湖90848292348安徽芜湖A392104女江苏-南京94855190320江苏南京A492105女江苏-连云港82886185316江苏连云港AProcess finished with exit code 0步骤7 :描述性统计分析(1)计算总分的平均分和中位数。(2)计算江苏省四门学科的平均分。(3)统计总分不同等级比例,比例保存百分比两位小数。步骤7 (1)代码如下:print("总分的平均值=%.2f"%data总分.mean。)print("总分的中位数=%.2f*'%data总分.median。)输出结果如图6-*所不。Run:6-1AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-1.py总分的平均值=278.53 总分的中位数=278.00Process finished with exit code 0 » »图6-*步骤7 (1)输出结果步骤7 (2)代码如下:datajoc 二 data.locdata'省二='江苏'for i in数学?语文,英语?计算机:mean = data_loci.mean()print("江苏省s 的平均分二%.2f'%(i,mean) 输出结果如图6-*所不。 Run:6-1A . C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-l.py 江苏省数学的平均分=78.19 江苏省语文的平均分=65.59= 5 江苏省英语的平均分=61.93过 江苏省计算机的平均分=75.41* 二Process finished with exit code 0图6-*步骤7 (2)输出结果步骤7 (3)代码如下:count = data总分等级'.value_counts(normalize=True,ascending=False)count = count.apply(lambda x:".2f%"%(x*100)print("总分不同等级的比例为:n”,count)输出结果如图6-*所示。Run:6-1AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-l.py总分不同等级的比例为:C56.33%D28.33%丑B13.00%,音A2.33%Name:总分等级,dtype: objectProcess finished with exit code 0图6-*步骤7 (3)输出结果步骤8 :分类汇总。统计总分为C等级的学生的不同城市的总分平均分。步骤8代码如下:data_loc = data.locdata总分等级=Cresult2 = dataoc.groupby(by='城市')总、分'.mean()result2 = round(result2,2)print("总分等级为C等级的不同城市总分平均分为:n”,result©输出结果如图6-*所不。Run:6-1AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-l.py总分等级为(:等级的不同城市总分平均分为:城市=方南京215.50三成都247.00»扬州212.25Mi无锡218.25潍坊230.00盐城237.33芜湖222.10苏州242.50连云港236.00黄山230.50Name:总分,dtype: float64图6-*步骤8输出结果四、结论L从数据查询分析的结果可以看出,语文和英语都大于85分的学生只有8条,占总体 的比例不高。2 .从数据排名分析的结果可以看出,320分可以排进前40名,187分排在最后10名。3 .从描述性统计分析的结果可以看出,总分的平均分和中位数较为接近,说明总分较 为正常,两端的极端值不是很多。4 .从江苏省学生的四科平均分的结果可以看出,数学和计算机较好。5总分不同等级比例中,C最多,占了 56.33%。6 .总分等级为C的学生中,南京和成都的学生总分平均较高。