赞
踩
学生成绩可反应某次考试的学业水平情况,对于成绩异常的也可做诊断分析,比如某次高三理科月考成绩就可以做诊断分析,使用箱线图研究学生成绩学业水平情况。
箱线图可显示数据分散情况,常用于异常值的检测和识别,在研究学业水平时,箱线图不受异常值的影响,可以相对稳定地描述数据的离散分布情况,下面一起学习。
使用Matplotlib包绘制箱形图主要使用boxplot函数,boxplot函数的语法如下:
Signature: plt.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None,patch_artist=None,bootstrap=None,usermedians=None, conf_intervals=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None, manage_ticks=True, autorange=False, zorder=None, *, data=None)
可见boxplot函数的参数众多,这里说明如下几个常用的参数。
掌握常用的几个boxplot函数函数,绘制简单的箱形图,在参数中直接导入数据x,即可生成箱线图,生成的箱线图如下。
- import matplotlib.pyplot as plt
- x=[4,5,6,7,11,19]
- plt.boxplot(x)
- plt.show()
从上面的箱线图可以看出,图表一共包含以下几个点:异常值、上限、上四分位数、中位数、下四分位数、下限,下面一一介绍箱线图中这几个点的含义。
使用箱形图识别异常值,当数据值大于箱形图的上限或者小于箱线图的下限时,即判定为异常值,也就是说当数据点的位置大于Q3+1.5(Q3-Q1)或者小于Q3+1.5(Q3-Q1)时,超出上下限位置,判定为异常值,其中,Q3-Q1为四分位差。
下面使用一个实际案例来介绍箱线图,首先,导入2022年8月理科成绩数据,数据如下,包含学生姓名、班级、分数等字段。
- import pandas as pd
-
- #导入成绩数据
- df=pd.read_excel(r'D:\系统桌面(勿删)\Desktop\2022年8月理科.xlsx',skiprows=1)#skiprows=1跳过第一行
- df.head()
先判断每个班级的成绩是否有异常值,使用一个简便方法,可以导入seaborn包,快速生成各个班级成绩箱线图,由图可以看出,除3班、8班、7班、10班外,其他班级的成绩都有异常值,其中,6班的成绩异常值最大,表现在该成绩的异常点低于下限很多,需要细项分析该异常点的原因。
- import seaborn as sns
- import matplotlib.pyplot as plt
- import matplotlib.style as psl
-
- plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
- plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
-
- psl.use('ggplot')
- plt.figure(figsize=(9,6))#设置画布大小
- plt.title('各班级成绩箱线图')
-
- sns.boxplot(x=df['班级'],y=df['分数'],data=df)#绘制箱线图
筛选出6班的学生成绩,由于该班级的成绩异常值很大,需单独分析问题所在。
- df_select=df[df['班级']=='6班']
- df_select.tail()
导入matplotlib包,使用boxplot函数单独绘制箱线图,分析6班成绩异常点的原因,如下图可以看出,异常点为标注红色的点,该异常点低于下限很多,可推断出某位同学的考试成绩有重大异常。
- import pandas as pd
- import matplotlib.pyplot as plt
- import matplotlib.style as psl
-
- plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
- plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
-
- psl.use('ggplot')
- plt.title('6班学生成绩箱线图')
- plt.boxplot(x=df_select['分数'],#指定绘制箱线图的数据
- whis=1.5, #指定1.5倍的四分位数差
- widths=0.1, #指定箱线图中箱子的宽度为0.3
- showmeans=True, #显示均值
- #patch_artist=True, #填充箱子的颜色
- #boxprops={'facecolor':'RoyalBlue'}, #指定箱子的填充色为宝蓝色
- flierprops={'markerfacecolor':'red','markeredgecolor':'red','markersize':3}, #指定异常值的填充色、边框色和大小
- meanprops={'marker':'h','markerfacecolor':'black','markersize':8}, #指定中位数的标记符号(虚线)和颜色
- medianprops={'linestyle':'--','color':'orange'}, #指定均值点的标记符号(六边形)、填充色和大小
- labels=['6班'])
-
- plt.show()
分析出异常值后,需要在原始数据中将该异常点抓取出来,分别计算计算上、下四分位数,然后筛选出大于上限或者小于下限的数据,得出该同学本次理科成绩分数只有18分,为异常数据,经查明该同学因为请假没有参加后面的考试,故而成绩严重异常。
- #计算上、下四分位数
- Q1=df_select['分数'].quantile(q=0.25)#计算下四分位数
- Q3=df_select['分数'].quantile(q=0.75)#计算上四分位数
-
- #基于1.5倍的四分位数差计算上下限对应的值
- up_limit=Q3+1.5*(Q3-Q1) #上限值
- low_limit=Q1-1.5*(Q3-Q1) #下限值
-
- #查找异常值
- Value_error=df_select[(df_select['分数']>up_limit)|(df_select['分数']<low_limit)]
- Value_error
以上,借助某次学生理科成绩,介绍箱线图的使用,箱线图将异常值数据有效甄别出来,很大程度帮助我们数据分析,不仅用于数据预处理发现异常值,还可用于数据诊断分析,在实际中有很大用途。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。