上次 meeting,老師把我做的「研究對象基本資料表」推回來,理由不是數字,是格式:表格有直線,Word 內建表格樣式自動畫的,APA 不要直線;標題在表格下面,APA 要在上面;小數點沒對齊,有的兩位有的四位。改完格式,老師又問了一句:「這個性別百分比,男 17% 加女 83%,等於一百嗎?」
我心算了一下,等於 96%。因為分母用了全部 279 人,但性別這一題有 21 人選「拒答」——就是 Day 15 那個埋下去的 999。我算百分比的時候,忘了照 Day 15 定的規則把它排除。
一張表,兩種錯:格式錯是委員看得順不順眼,分母錯是數字本身是不是騙人。今天把這兩件事一起解決。
APA 表格的格式規則,比想像中具體
APA 第七版對表格的規則寫得很細,不是「好看就好」。核心是「三線表」:只有三條橫線——表格最上面一條、欄名下面一條、表格最下面一條,中間完全沒有直線也沒有橫線。標題在表格上方,先寫「表 1」,換行寫斜體的表格描述。表格下方可以加註,說明縮寫或特殊處理。數字要小數點對齊,同一欄的小數位數要一致。
這些規則的共同精神是:線只用來分隔「不同種類的東西」,不用來裝飾。 頂線和底線標出表格的範圍,欄名下的線把「欄位名稱」和「資料」分開,除此之外的線都是雜訊,會讓人分心去看線、不是看數字。
先寫規格檔
跟前面每個工具一樣,先把要做的事寫成人讀的檔案,analysis/table1-spec.md:
data/clean/02_cleaned.csv
analysis/spss-dictionary.md(值標籤與遺漏值代碼的來源)
類別變項(報 n 與 %):
SKILL.md 全文
存在 .claude/skills/table1-apa/SKILL.md:
data/clean/02_cleaned.csv,analysis/table1-spec.md,analysis/spss-dictionary.md
我實際跑出來的表
用清理好的資料跑一次,這是真的輸出結果,不是編的:
變項 n %/M SD
性別(N = 258)
男 45 17.4%
女 213 82.6%
最高學歷(N = 279)
專科 32 11.5%
學士 83 29.7%
碩士 157 56.3%
博士以上 7 2.5%
班別(N = 279)
白班 87 31.2%
小夜班 90 32.3%
大夜班 102 36.6%
護理年資(年) 279 13.81 8.60
每週工時(小時) 279 44.20 8.40
性別的男女百分比加起來是 100%(17.4 + 82.6),因為分母是 258,不是 279。旁邊標出「N = 258」,這張表擺出來,任何人都能自己驗算分母對不對——這正是規則二要求「有效人數要透明」的用意。
Word 版的三線表,肉眼看不出程式痕跡:頂線、欄名底線、表格底線,中間乾乾淨淨,跟系所範例裡的表一長得一樣。
哪裡會出錯
Word 表格預設會畫滿版格線,三線表不是選個樣式就有。 python-docx 建表格的時候,套用內建樣式會自動畫出所有框線,包含我不要的那些直線和中間橫線。三線表沒有現成的按鈕可以點,要自己用底層的 XML 操作,一格一格指定哪條邊要線、哪條邊不要。這件事我原本以為是小事,結果是這支腳本裡最長的一段程式碼。
第一版分母沒排除遺漏值,男女加起來不是 100%。 這就是被老師抓到的那個錯。腳本第一版直接用 value_counts() 除以總樣本數 279,沒有先排除 999。規則二寫進規格檔之後,才改成「先篩掉遺漏值,再用篩選後的人數當分母」。這個錯很好抓——只要每個類別變項自己心算一下百分比加起來是不是 100,抓得到;但如果沒人心算,這種錯會安靜地躺在論文裡,跟 Day 15 那個「拒答當成真實年資」是同一種問題,只是換了一個地方發生。
小數位數不統一,是 pandas 預設格式化造成的。 第一版沒有指定小數位數,讓 Python 自己決定要顯示幾位,有的變項顯示 13.814285714,有的顯示 44.2。統一成「M、SD 兩位,% 一位」這條規則,要在程式裡明確寫 round() 或格式化字串,不能讓它自己決定,不然同一張表裡小數位數長短不一,委員一眼就看出來是沒有校過的表。
群組標題跟資料列如果沒有視覺區隔,看起來像同一層。 「性別」和它底下的「男」「女」如果字體、縮排都一樣,讀者分不出哪一列是變項名稱、哪一列是選項。我用粗體標群組、資料列前面加一個全形空格縮排,這是最小可行的做法,不是唯一做法,但足夠讓表格有層次。
這張表跟 Day 15 是同一條線
Day 15 說遺漏值代碼設錯,數字會安靜地壞掉。今天這個分母錯,是同一件事在下游又發生了一次——遺漏值代碼設對,不代表用到它的每一支程式都記得排除它。 規則要在每一個會用到那個變項的地方重申一次,寫進規格檔,不能假設「反正字典檔裡有寫」就會自動生效。這條線會一路延伸到之後所有要用到這批資料的分析。
我還不確定的地方
表一目前只放人口學變項,倦怠量表的總分要不要也放進來,我還沒決定——通常表一是樣本特性,結果量表的描述統計會另外開一張表,但兩張表的格式規則應該完全一樣,之後可以直接複用今天這支腳本的框架。另外中文字體,我這裡用的是標楷體,但學校論文範本規定內文用新細明體,表格裡是不是要跟著範本,還是保持標楷體區隔「這是統計軟體產出的表格」,我還沒問老師。
明天
Day 17:圖表工具。一致的樣式、深色淺色螢幕都看得清楚的配色,還有為什麼我後來決定圖表也要照規格檔做,不再憑感覺調。