原始成績會受到每次測驗難易度而影響,而PR值是看自己在全校成績中的位置。
在考完國中第一次段考後,很多小孩剛上國中的家長心裡都會受打擊:「我小孩國小都考九十分,怎麼上國中只有考八十分或是更低」於是開始去尋覓補習班,幫小孩補習,然後到第二次段考發現成績有一些起色,就覺得補習真是有效。
可是啊,事情真的是這樣嗎?
這是最近三次段考的全校成績分佈圖,第二次段考成績比第一次高,不代表全校都用功了,可能是學生適應國中生活了,同時第二次也比較簡單。而第三次的低分成績多,是因為考的範圍變多了。
這是最近三次段考的全校成績分佈圖,第二次段考成績比第一次高,不代表全校都用功了,可能是學生適應國中生活了,同時第二次也比較簡單。而第三次的低分成績多,是因為考的範圍變多了。
學生的成績變化除了跟自身的努力有關,同時也跟該次評量的難易度有關。小學的原始成績是90分,但是如果拿全校成績分佈來看,那90分的PR值可能會只有80-90,因為更多人考100。所以光看原始成績來比較,就容易產生這種謬誤。
這次的圖表製作,是直接用python3寫幾十行程式去從資料裡撈出數據做折線圖,並且將個人圖表組成全班圖表,也方便我在段考結束後跟導師討論學生的學習狀況。畢竟導師還是要透過和任課老師討論才比較能知道學生在個別課的上課狀況。
=====以下是python3的code=====
# -*- coding: utf-8 -*-
#coding:utf-8
"""
Created on Wed Jan 18 21:41:17 2017
@author: pancala
"""
#讀取csv檔
import os
import pandas as pd
os.chdir("/media/pancala/3T/試題分析/105")
file='105A.csv'
data = pd.read_csv(file)
#定義中文,字型檔用 fc-list :lang=zh 查詢
from matplotlib.font_manager import *
myfont = FontProperties(fname='/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc')
#解決負號'-'顯示為方塊的問題
matplotlib.rcParams['axes.unicode_minus']=False
import numpy as np
import matplotlib.pyplot as plt
#把任教班級取出
for stuclass in [7,8,16,18]:
#for stuclass in [7]:
#篩選出特定班級
filter = data["班級"] == stuclass
new_data = data[filter]
#計算班級人數
studentNum = new_data.shape[0]
#subplot的列數由總班級人數決定
subplotRowNum = int(np.ceil(studentNum/5))
#設定subplots的列數、欄數和大小
fig, axarr = plt.subplots(nrows=subplotRowNum,
ncols=5,
sharex=False,
sharey=False,
figsize=(10,subplotRowNum*2+2))
#設定主標題
fig.suptitle(str(stuclass)+ "班" +"上學期生物段考PR變化",fontproperties=myfont, size=20)
#plt.title(str(stuclass)+ "班" +"上學期生物段考PR變化",fontproperties=myfont, fontsize=10)
#各小圖之間的間隔設定
fig.tight_layout(pad=6, w_pad=1, h_pad=3.0)
#把每一個學生的資料取出
for i in range(0,studentNum):
#for i in [1]:
#座號
num = new_data.iloc[i,3]
#座號前面補零
if num <10:
num=str(0)+str(num)
#姓名
name = new_data.iloc[i,4]
#A1的PR
a1 = new_data.iloc[i,8]
a1 = float(a1)
#A2的PR
a2 = new_data.iloc[i,9]
a2 = float(a2)
#A3的PR
a3 = new_data.iloc[i,10]
a3 = float(a3)
x= [1,2,3]
y = [a1,a2,a3]
#畫出PR折線圖
axarr[int(i/5),i%5].plot(x,y)
#限定y軸大小
axarr[int(i/5),i%5].set_ylim([-5,105])
#設定小圖的標題為姓名
axarr[int(i/5),i%5].set_title(str(num) + name,fontproperties=myfont,size=15)
#X軸標示設定為一二三
axarr[int(i/5),i%5].set_xticks((1,2,3))
axarr[int(i/5),i%5].set_xticklabels( ("一","二","三"),fontproperties=myfont)
axarr[int(i/5),i%5].tick_params(labelsize=10)
#plt.show()
#班級前面補零
if stuclass <10:
stuclass=str(0)+str(stuclass)
else:
stuclass=str(stuclass)
fig.savefig(stuclass + ".png",dpi = 250)
#plt.close()