2022年9月5日

會考分析的程式實作方法

上週把心測中心的資料用程式做出了一個分析檔案,詳見此篇

以下就紀錄一些整個文件的製作想法。

分析後的結果內容是一個PDF,按照答題率高低分頁,每頁一題共三張圖,圖一是把各題的選項答題率畫成折線圖,圖二是把通過率和鑑別度畫成散佈圖再把該題的位置標上去,圖三再加上題目截圖,

其實完全可以用手工製作,但是做完應該會往生。我做了四個年度的考題分析,以111年度的考題共有214題,而108~109的題目數量則較多一些。每題要三張圖。所以共計大約要900張圖。如果做錯一個部份的話,就要再從來一次。所以盡可能都要用程式去完成,才能省工。

首先是試題分析word檔,因為是直接透過雲端硬碟開啟的,所以我是從google文件上複製下來,再貼到gnumeric上存成ods檔,然後再用python讀取每一題的每一選項的答題率和鑑別度、通過率這些。由於我工作電腦是linux,所以使用gnumeric和ods檔對我最方便,若是在windos電腦上,使用xlsx亦可。

讀取後存成dataframe,再去讀取每一題的標準答案,將每一題的標準答案畫在圖表的第一個位置,再將剩下三個選項按照全體答題率的順序畫出。其他群題如基礎或待加強的學生的選項順序也是依照全體的資料來排。這可以讓使用者直接看到各個不同群體和全體的差異是什麼?若是以最簡單的題目來看,則這些群體的答題曲線都是類似的。而通過率越低的題目,它的答題曲線就會越特別。

接下來的第二張圖的繪製,以前就寫了程式,所以直接複製過來就行。讀取該科該年段所有題目的通過率和鑑別度畫成散布圖,再以每一題的資料各自畫出一張圖。好處是你可以看到整體題目的分佈,是不是有離群值?大致分佈的通過率範圍在哪裡?都可以一目了然。

第三張圖不過就是題目截圖,花了一些時間研究如何達成。先用python解析pdf文檔,解析完會得到許多文字框的資訊,包含文字框的座標和內容。但PDF文字框的規則不知道是怎麼做的?有些是一整個題目就是一個文字框,但有些又不是。而我需要的是找出每一題的座標在哪裡,作法是在歷遍各個文字框的內容找出「題號」和「D選項」分別在哪些文字框中,紀錄該文字框所在的頁面、Y座標。然後再根據這些Y座標找出每一題的起訖座標,再根據這些座標截圖下來。這邊要提醒的是,座標原點在左下角,所以Y座標是向上為正。

本來這樣的邏輯應該可以順利解出所有的題目圖檔,但是偏偏各科的排版方式都不太一樣,所以我會再人工檢查每一題的圖檔是否正確,若是有錯則是人工再截圖過。

做完以上三張圖之後,其實工作就完成了八九成了,剩下就是把三張圖合成一張圖,再根據通過率的高低,排出一個PDF檔。