数据分析2020年全国各省高考成绩分布情况(2020年各省高考成绩分段表)
开始
我突然想到,想看看高考成绩的分布情况。如果把各省市的分数划分为0-100分会怎样?简单来说,得分最高的人获得100分,得分最低的人获得100分。如果得0分,只需计算每个分数范围内的人数即可。
顺便说一句,你可以通过这个数据看到各省市一条线的划分比例,以及其他相关数据。
看起来比较简单,不妨尝试一下
数据收集
我上网查了一下,现在每年参加高考的人数都超过1000万,河南超过100万。数据来源:新浪教育https://edu.sina.cn/zt_d/gkbm
本表数据为全国各省市(除香港、澳门、台湾地区)的统计数据。各省市公布成绩后,会公布自己的分值表,统计各省市的得分人数。我们用这个数据按照惯例,由于我还没有太多精力去收集数据,所以我找到了网站高考100-一分一节表,里面提供了每项的一分一节表excel版本的省份和城市。稍微检查了一下,数据应该是对的。我暂时以这个数据为标准。
数据太多了。我暂时只做35万以上的省市。只有11个省市,加上北京、上海的数据,-河南-河北-广东-广西-湖南-湖北-江西-贵州-安徽-四川-山东-北京-上海
其中,北京、上海不分科。山东省选择一项考试进行考核,因此共有23张数据表。以后我会尽力上传数据。
数据整理
如上所述,北京、上海、山东的学科划分比较特殊。我们将根据艺术和科学来计算它。每个省份都会给出最高分及以上的数据,然后给出100分及以下的数据,但并不是每个省份都有100分以下的分数,所以需要特殊考虑。
不同高考政策与分类
山东高考政策细节尚不清楚,但似乎考生在6个辅修科目中选3个。从这张图了解山东高考改革的重点。在这里找到
我们就不分科了,只看山东的整体成绩。
不同统计方式
北京人口较少。400分以下每10个分段给出人数。为了方便起见,我们默认每个分数的平均人数。例如,390-399段有813人。我们考虑每个细分市场总共有81.3人,所以我们暂时这样处理。
不同省市将最高分表示为最高分及以上,但最低分则区别对待。这里就不做评价了。比如很多省市综合起来总分不到100分,有的只有100分。分数,100分以下的分数不予给出。这里最后的处理中,我们把0分的人全部删除,只统计1-100分的人。反正不影响整条曲线。
最后我们整理了数据表。每张Sheet代表一个省市的文科科目,最上面一行数据对应总分、人数、累计人数。
数据处理
数据处理思路
为方便起见,这是在Python中完成的。使用的是pandas读取的excel文件。我们统计所有数据的目标是将分数转换为0-100分。然后
变换后的分数=\frac{当前分数-最低分数}{最高分数-最低分数}\times100
各省份得分调整为[0,100]。这里使用了四舍五入的方法,导致计算过程中的实际数据有重叠。例如,将两个相邻分数中的一个四舍五入,另一个向上舍入,以统一分数。结果,数据充满噪音。只需使用一维中值滤波来平滑数据即可。
以河南文科为例,我们直接绘制归一化分数,经过中值滤波后进行比较。(图为测试时归一化为500点的图像,不影响理解)
各省市分数分布
我们之前已经把数据整理好了,接下来就去做。
#整理数据,将各省市的分数归一化为100分后的分配比例#简介pandasimportpandasaspdimportmatplotlibimportmatplotlib.pyplotaspltimportscipy.signalasss#设置中文字体plt.rcParams[字体。sans-serif]=[SimHei]#用于正常显示中文标签plt.rcParams[axes.unicode_minus]=False#用于正常显示负号#设置图像大小和分辨率plt.rcParams[figure.figsize]=(8.0,4.0)#设置figure_size大小plt.rcParams[image.interpolation]=最近#设置插值样式plt.rcParams[savefig.dpi]=300#图片像素plt.rcParams[figure.dpi]=300#分辨率#将分数统一为[0,]区间MAX_SCORE=100MIN_SCORE=0data_file=Data/data.xlsxres_file=Data/res-+str(MAX_SCORE-MIN_SCORE)+.xlsx#读取excel,获取所有表单名称excel_info=pd.ExcelFile(data_file)all_data={}all_data_ratio={}#获取表格中的每个数据文件,并将数据标准化为0-500forindexinrange(len(excel_info.sheet_names)):#读取每个表格cur_sheetname=excel_info.sheet_names[index]df_sheet=pd.read_excel(data_file,sheet_name=cur_sheetname)#获取总分以及各表中对应分数的人数Scores=df_sheet[df_sheet.columns.values[0]]nums=df_sheet[df_sheet.columns.values[1]]#数据对应每个分数的人数表ROWS=MAX_SCORE-MIN_SCORE+1trans_scores_nums=[0]*ROWSrows=len(scores)cur_max_score=Scores[0]cur_min_score=Scores[rows-1]cur_index=0;forsinScores:#计算变换后的舍入分数trans_score=(int)(round((s-cur_min_score)/(cur_max_score-cur_min_score)*(MAX_SCORE-MIN_SCORE)))#计算分数中对应分数的人数添加到位置trans_scores_nums[trans_score-1]+=nums[cur_index];cur_index+=1#对数据稍微处理一下,做简单的平滑,去掉得分最低的数据except0data=[0]*(ROWS-1)foriinrange(ROWS-1):except0data[i]=trans_scores_nums[i+1];#中值滤波去除噪声smooth_trans=ss.medfilt(except0data,7)#将数据转换为比率,更通用的属性sum=0smooth_trans_ratio=[0]*(ROWS-1)foriinrange(ROWS-1):sum+=smooth_trans[i]foriinrange(ROWS-1):smooth_trans_ratio[i]=smooth_trans[i]/sumall_data[cur_sheetname]=smooth_transall_data_ratio[cur_sheetname]=smooth_trans_ratio打印(正在进行{0}/{1},表名:{2}.format(index+1,len(excel_info.sheet_names),cur_sheetname))#plt.plot(smooth_trans2)#write_data=pd.Dataframe(all_data)#write_data.to_excel(res_file,sheet_name=res)write_data_ratio=pd.Dataframe(all_data_ratio)write_data_ratio.to_excel(res_file,sheet_name=ratio)print(Completed,Storagefile:{0}.format(res_file))在这个程序中,我们主要提取数据,将其计算为100-点刻度,然后重新存入excel表中。人数替换为各省、市的人数比例。也方便查看后续数据(因为感觉plt绘制的图像不好看,所以这里使用MATLAB进行图像绘制过程)
%绘制原始数据并计算平均值和中位数%读取excel数据,获取名称和列名data_file=Data/res-100.xlsx;res_ratio=xlsread(data_file,1,B2:X501);res_name={河南文科、河南文科、北京、上海、河北文科、河北文科、山东、广东文科、广东文科、湖北文科、湖北文科、湖南文科、湖南文科、四川文科、四川文科、安徽文科、安徽理科、广西文科、广西理科、贵州文科、贵州理科、江西文科、江西理科};图()保持[行,列]=大小(res_ratio);平均值=零(列,1);媒体=零(列,1);fori=1:cols%绘制百分比率图表plot(res_ratio(:i)*100);%计算平均中值media_l=0.5;媒体查找FLG=0;对于j=1:行avg(i)=avg(i)+j*res_ratio(j,i);%超过统计比例一半的数字为中值,找到后不再更新if(media_find_flg==0)if(media_l0)media_l=media_l-res_ratio(j,i);否则媒体(i)=j;媒体查找FLG=1;结束结束结束结束图例(res_name);%createxlabelxlabel({标准化为100分后的分数});%创建titletitle({归一化各省市分数分布比例});%创建ylabelylabel({单位成绩分配比例});最后,我们得到了这样的一张照片。细节较多,数据有噪声,但数据整体趋势大致清晰。噪音较大的黄线是来自北京的,暂时不做过多分析。
各省市分数平均值与中值
我们这里计算的平均值是每个分段的人数乘以该分段的比例得到的最终结果。然后,简单地去违反中值,找到中间比率所在的区间即可。我还没有浏览过代码。如果进行多个过程,如果能得到结果就太好了。
数据简单分析
上一章我们给了一张图。matlab绘制的图片颜色比较接近。建议下载原图观看。给出分布图。我们分别绘制数据中最特殊的线条。
最右的黄色,最左的紫色,最左的紫色,广西文科最高,浅蓝色,贵州文科最一般,浅紫色,湖北理科双峰,蓝色江西文科.事实上,这些形状都有独特的含义。理论曲线是直线分布,但由于各种原因,我们主要关注实际曲线。-向右,数据整体较大-向左,整体数据较小-最高表示数据较为集中,-最低表示数据分布均匀-双峰表示数据严重碎片化(我编的)。
总体来看,各省市的峰值分数(众数)也分为两部分。部分省市峰值在40分左右,主要有河南文科、河北文科、湖北文科、广西文科、广西文科。其余理科分数的众数集中在60分多一点。
emmm,仅此而已。再多的分析也没有多大用处。毕竟北京NB
剩下的就是高考本科录取率之类的数据,但是各个省份的本科分数线确实不一样。
我给出的数据是我在各地高考的成绩(批次线)。您可以在本页面查看2020年各省份高考批次线。一般省市分为1、2专科。除了北京、上海、河北之外,山东、广东等地以后也会想办法去做。我想他们不会这么做。
高考大省与高考小省
我们以高考大省河南、河北为例,再对比一下上海和北京。我们来看一下数据。其实我们应该在这里寻找数据轴上最明显的特征线。具体数据我们可以自己分析。
但我们暂时只看这些数据。
这些是之前给出的所有数据,我们将它们绘制出来
北京的表现明显好于河北。河南和上海的数据其实是一致的。即使在整个曲线图中,它们也被认为是相对中间的。
总结
我搞了好久,也没用。我的手很痒,我做了很多事情。我做得越多,我做得就越多。后续还有很多工作要做。
根据本文数据,北京的成绩优于全国各省市。可能是训练方法不同造成的。
其实这个分数分布并不一定是训练造成的,部分是因为各个省份的考试条件不同造成的,所以数据仅供参考,北京NB
备注
我将所有数据存储在Github上
https://github.com/Schen1024/GaoKao
如果你有兴趣,可以拿数据来分析一下。最后一点稍后会完成。