省/市 | 2020年 | 2019年 | 2018年 | 2017年 | 2016年 | 2015年 | 2014年 | 2013年 | 2012年 |
---|---|---|---|---|---|---|---|---|---|
全國 | 1071萬↑ | 1031萬↑ | 975萬↑ | 940萬 | 940萬↓ | 942萬↑ | 939萬↑ | 912萬↓ | 915萬↓ |
河南 | 115.8萬↑ | 100萬+↑ | 98.3萬↑ | 86.3萬↑ | 82萬↑ | 77.2萬↑ | 72.4萬↓ | 71.63萬↓ | 80.5萬↑ |
廣東 | 78.8萬↑ | 76.8萬↑ | 75.8萬↑ | 75.7萬↑ | 73.3萬↓ | 75.4萬↓ | 75.6萬↑ | 72.7萬↑ | 69.2萬↑ |
四川 | 67萬↑ | 65萬↑ | 62萬↑ | 58.3萬↑ | 57.13萬 | 超57萬 | 57.17萬↑ | 54萬↑ | 53.8萬↑ |
河北 | 62.48萬↑ | 55.96萬↑ | 48.6萬↑ | 43.6萬↑ | 42.31萬↑ | 40.48萬↓ | 41.82萬↓ | 44.98萬↓ | 45.93萬↓ |
安徽 | 52.38萬↑ | 51.3萬↑ | 49.9萬 | 49.9萬↓ | 50.99萬↓ | 54.6萬↑ | 52.7萬↑ | 51.1萬↑ | 50.6萬↓ |
湖南 | 53.7萬↑ | 50萬↑ | 45.2萬↑ | 41.1萬↑ | 40.16萬↑ | 38.99萬↑ | 37.8萬↑ | 37.3萬↑ | 35.2萬↓ |
山東 | 53萬↓ | 55.99萬↑ | 59.2萬↑ | 58.3萬↓ | 60.2萬↑ | 69.61萬↑ | 55.8萬↑ | 50萬↓ | 51萬↓ |
廣西 | 50.7萬↑ | 46萬↑ | 40萬↑ | 36.5萬↑ | 33萬余↑ | 近31萬↓ | 31.5萬↑ | 29.8萬↑ | 28.5萬↓ |
貴州 | 47萬↑ | 45.8萬↑ | 44.1萬↑ | 41.2萬↑ | 37.38萬↑ | 33.05萬↑ | 29.27萬↑ | 24.78萬↓ | 24.8萬↑ |
江西 | 38.94萬↓ | 42.1萬↑ | 38萬↑ | 36.5萬↑ | 36.06萬↑ | 35.46萬↑ | 32.59萬↑ | 27.43萬↑ | 26.9萬↓ |
湖北 | 39.48萬↑ | 38.4萬↑ | 37.4萬↑ | 36.2萬↑ | 36.14萬↓ | 36.84萬↓ | 40.27萬↓ | 43.8萬↓ | 45.7萬↓ |
江蘇 | 34.89萬↑ | 33.9萬↑ | 33萬 | 33萬↓ | 36.04萬↓ | 39.29萬↓ | 42.57萬↓ | 45.1萬↓ | 47.4萬↓ |
山西 | 32.6萬↑ | 31.4萬↑ | 30.5萬↓ | 31.7萬↓ | 33.9萬↓ | 34.22萬↑ | 34.16萬↓ | 35.8萬↓ | 36.1萬↑ |
云南 | 34.3萬↑ | 32.6萬↑ | 30萬↑ | 29.3萬↑ | 28萬↑ | 27.21萬↑ | 25.59萬↑ | 23.6萬↑ | 21萬↓ |
陜西 | 32.23萬↓ | 32.59萬↑ | 31.9萬 | 31.9萬↓ | 32.8萬余↓ | 34.4萬↓ | 35.3萬↓ | 36.65萬↓ | 37.53萬↓ |
浙江 | 32.57萬↑ | 31.5萬↑ | 30.6萬↑ | 29.1萬↓ | 30.74萬↓ | 31.79萬↑ | 30.86萬↓ | 31.3萬↓ | 31.6萬↑ |
重慶 | 28.3萬↑ | 26.4萬↑ | 25萬↑ | 24.7萬↓ | 24.88萬↓ | 25.54萬↑ | 25.06萬↑ | 23.5萬↑ | 23萬↑ |
遼寧 | 24.4萬↑ | 18.5萬↓ | 20.8萬↓ | 21.82萬↓ | 22.51萬↓ | 23.9萬↓ | 25.4萬↓ | 25.6萬↑ | |
甘肅 | 26.31萬↑ | 21.8萬↓ | 27.3萬↓ | 28.5萬↓ | 29.6萬余↓ | 30.38萬↑ | 29.7萬↑ | 28.3萬↓ | 29.6↓ |
黑龍江 | 21.1萬↑ | 20.6萬↑ | 16.9萬↓ | 18.8萬↓ | 19.7萬↓ | 19.8萬↓ | 20.4萬↓ | 20.8萬↓ | 21萬↑ |
福建 | 20.26萬↓ | 20.78萬↑ | 20萬↑ | 18.8萬↑ | 17.5萬↓ | 18.93萬↓ | 25.5萬 | 25.5萬↑ | 25萬↓ |
內蒙古 | 197901↑ | 19.5萬↓ | 19.8萬↓ | 20.11萬↓ | 18.4萬↓ | 18.8萬↓ | 19.3萬↑ | 18.95萬↓ | |
新疆 | 22.93萬↑ | 20.7萬↑ | 18.4萬↑ | 16.61萬↑ | 16.05萬↓ | 16.26萬↑ | 15.87萬↑ | 15.47萬↑ | |
吉林 | 15萬余↑ | 15萬↑ | 14.3萬↓ | 14.85萬↓ | 13.76萬↓ | 16.02萬↑ | 15.9萬↓ | 16.2萬↓ | |
寧夏 | 60298↓ | 7.17萬↑ | 6.9萬 | 6.9萬 | 6.9萬↑ | 6.7萬↑ | 6.4萬↑ | 5.87萬↓ | 6.02萬↑ |
海南 | 57336↓ | 5.9萬↑ | 5.8萬↑ | 5.7萬↓ | 6.04萬↓ | 6.2萬↑ | 6.1萬↑ | 5.6萬↑ | 5.5萬↑ |
北京 | 49225↓ | 5.9萬↓ | 6.3萬↑ | 6萬↓ | 6.12萬↓ | 6.8萬↓ | 7.05萬↓ | 7.27萬↓ | 7.3萬↓ |
青海 | 46620↑ | 44313↑ | 4.2萬↓ | 4.6萬↑ | 4.5萬↑ | 4.2萬↑ | 3.97萬↓ | 4.06萬↑ | 3.8萬↓ |
天津 | 56258↑ | 5.5萬 | 5.5萬↓ | 5.7萬↓ | 約6萬↓ | 6.1萬↓ | 約6萬 | 6.3萬↓ | 6.4萬↓ |
上海 | 5萬 | 5萬+ | 約5.1萬 | 5.1萬↓ | 5.2萬↓ | 5.3萬↓ | 5.5萬↓ | ||
西藏 | 32973↑ | 2.5萬↓ | 2.8萬↑ | 2.4萬↑ | 2.1萬↑ | 1.96萬↑ | 1.89萬↓ | 1.9萬↑ |
這個表的數據是統計的全國各個省市(除港澳臺)之外的數據, 各個省市在出成績之后會出各自的一分一段表, 統計每一分的成績的人數, 我們以這個數據為準, 由于個人還是沒有太多精力去收集數據的,網上找到了 高考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{當前分數-最低分}{最高分-最低分} \times 100\]
對于每個省的成績將其調整到 [0,100], 這里使用的是 四舍五入, 導致實際在計算過程中的數據會重疊,比如相鄰的兩個成績一個舍去,一個入上,在統一分數,導致數據噪聲較大, 這是使用 一維的中值濾波平滑一下數據就好了,
以河南文科為例, 我們直接繪制歸一化之后的成績并進行中值濾波之后對比,
(圖為測試過程中歸一化到500分的圖像,不影響理解)
各省市分數分布
我們在之前已經整理得到的數據, 然后我們 就要動手做了,
# 整理數據,將各省市的成績歸一到100分之后的分布比率 # 引入 pandas import pandas as pd import matplotlib import matplotlib.pyplot as plt import scipy.signal as ss # 設定中文字體 plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標簽 plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號 # 設定圖像尺寸 與分辨率 plt.rcParams['figure.figsize'] = (8.0, 4.0) # 設置figure_size尺寸 plt.rcParams['image.interpolation'] = 'nearest' # 設置 interpolation style plt.rcParams['savefig.dpi'] = 300 #圖片像素 plt.rcParams['figure.dpi'] = 300 #分辨率 # 將成績統一到 [0,] 區間 MAX_SCORE = 100 MIN_SCORE = 0 data_file = 'Data/data.xlsx' res_file = 'Data/res-'+str(MAX_SCORE-MIN_SCORE)+'.xlsx' # 讀取excel , 獲取所有表單名字 excel_info = pd.ExcelFile(data_file) all_data = {} all_data_ratio = {} # 獲取表中的每一個數據文件 并將數據歸一化到 0-500 for index in range(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 + 1 trans_scores_nums = [0] * ROWS rows = len(scores) cur_max_score = scores[0] cur_min_score = scores[rows - 1] cur_index = 0; for s in scores: # 計算 變換之后的分數 四舍五入 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) for i in range(ROWS - 1): except0data[i] = trans_scores_nums[i + 1]; # 中值濾波去除噪點 smooth_trans = ss.medfilt(except0data, 7) # 將數據轉換成比例, 更具有一般性 sum = 0 smooth_trans_ratio = [0] * (ROWS - 1) for i in range(ROWS - 1): sum += smooth_trans[i] for i in range(ROWS - 1): smooth_trans_ratio[i] = smooth_trans[i] / sum all_data[cur_sheetname] = smooth_trans all_data_ratio[cur_sheetname] = smooth_trans_ratio print('正在進行 {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('已經完成,存儲文件:{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 = {'河南文科', '河南理科', '北京', '上海', '河北文科', '河北理科', '山東', '廣東文科' '廣東理科' '湖北文科', '湖北理科', '湖南文科', '湖南理科', '四川文科', '四川理科', '安徽文科', '安徽理科', '廣西文科', '廣西理科', '貴州文科', '貴州理科', '江西文科', '江西理科'}; figure() hold on [rows,cols] = size(res_ratio); avg = zeros(cols,1); media =zeros(cols,1); for i=1:cols % 繪制百分比率圖 plot(res_ratio(:,i)*100); % 計算平均值 中值 media_l = 0.5; media_find_flg = 0; for j = 1:rows avg(i) = avg(i) + j*res_ratio(j,i); % 統計比率超過一半的 數之后就是中值 找到后就不更新了 if(media_find_flg ==0) if(media_l >0) media_l = media_l - res_ratio(j,i); else media(i) = j; media_find_flg = 1; end end end end legend(res_name); % 創建 xlabel xlabel({'歸一化到100分后成績'}); % 創建 title title({'各省市歸一化成績分布比率'}); % 創建 ylabel ylabel({'單位成績分布比率'});
最終我們得到了這樣的一副圖, 細節部分比較多,且數據噪聲較大,但是數據的整體趨勢大概明白了,噪聲較大的黃色的線是北京的,暫時不做過多分析
各省市分數平均值與中值
我們這里的計算平均值就是 每分段人數乘以該分段的比例,最終得到的結果,
然后, 中值這里簡單除暴, 找到中間比率所在的區間就好了, 代碼沒有去過多處理, 能跑出來結果就好
**** | 平均數 | 中數 | 眾數 |
---|---|---|---|
河南文科 | 49.48792233 | 50 | 46 |
河南理科 | 54.58292813 | 58 | 65 |
北京 | 68.04792125 | 70 | 70 |
上海 | 57.56537197 | 60 | 62 |
河北文科 | 51.23109382 | 52 | 37 |
河北理科 | 58.00918618 | 61 | 66 |
山東 | 53.14176529 | 56 | 60 |
廣東文科 | 47.7185653 | 49 | 52 |
廣東理科 | 48.64707915 | 51 | 55 |
湖北文科 | 48.50952865 | 49 | 37 |
湖北理科 | 51.9093088 | 55 | 64 |
湖南文科 | 60.26081026 | 62 | 72 |
湖南理科 | 59.09632919 | 62 | 65 |
四川文科 | 54.82215427 | 57 | 59 |
四川理科 | 61.59698771 | 64 | 60 |
安徽文科 | 51.95829486 | 55 | 69 |
安徽理科 | 54.62690506 | 57 | 56 |
廣西文科 | 37.84799656 | 37 | 31 |
廣西理科 | 41.46558284 | 41 | 33 |
貴州文科 | 63.48516406 | 65 | 64 |
貴州理科 | 57.96584346 | 58 | 56 |
江西文科 | 53.35740184 | 55 | 71 |
江西理科 | 56.85982591 | 61 | 62 |
數據簡單分析
我們在上一章節給出了一張圖, matlab 繪制的圖的顏色比較接近, 建議下載原圖觀看,給出了分布圖,
我們把數據最為特殊的幾條線單獨繪制一下,
其實這些形態是有獨特的意義的,理論上的曲線是正太分布的,但是由于各種原因,我們以實際曲線為主,
就總體而言, 各個省市的成績的峰值(眾數)也主頁也分為兩個部分,部分省市的峰值在40分左右,主要包括河南文科,河北文科,湖北文科,廣西文科,廣西理科
剩下的分數的眾數都集中在60分多一點的位置,
emmm, 就這么多了, 再多的分析也沒有太多用, 畢竟北京NB
剩下的部分就是 高考本科上線率這種數據了, 但是各省對于本科的分數線真是不同
我給出的數據是我在各地高考歷年分數線(批次線) 這個網頁上能看到2020 年各省高考批次線, 一般的省市都是劃分 1本2本專科, 除了北京,上海,河北,山東,廣東
后面想辦法再做吧, 估計會不做了
高考大省與高考小省
我們拿高考大省河南河北然后對比上海和北京, 看下數據
其實這里應該去找數據軸上的最明顯特征的線, 具體數據自己分析好了
但是我們暫時只看這幾個數據,
**** | 平均數 | 中數 | 眾數 |
---|---|---|---|
河南文科 | 49.48792233 | 50 | 46 |
河南理科 | 54.58292813 | 58 | 65 |
北京 | 68.04792125 | 70 | 70 |
上海 | 57.56537197 | 60 | 62 |
河北文科 | 51.23109382 | 52 | 37 |
河北理科 | 58.00918618 | 61 | 66 |
都是前面給出的數據, 我們繪制出來了
北京的成績是明顯優于河北的,河南和上海的數據其實是一直的,即使是在全部曲線圖上也算比較中間的類型了,
總結
搞了半天, 屁用沒有,就是手癢然后就搞了一大堆, 越搞越多, 后續還有一堆要做的,
根據本篇數據而言, 北京的成績是比全國各個省市的成績要好的,可能與培養方式不同吧,
其實這種分數分布并不一定是培養造成的, 還有部分是各省考試情況不同導致的,所以數據僅供參考, 北京NB
備注
我將所有的數據都存在了 Github 上
https://github.com/SChen1024/GaoKao
有興趣的可隨便拿數據進行分析, 后續還會做完最后一點
到此這篇關于數據分析2020年全國各省高考成績分布情況的文章就介紹到這了,更多相關2020年全國各省高考成績內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!