iT邦幫忙

2026 iThome 鐵人賽

DAY 16
0
Claude AI

研究生自救指南:30 天用 Claude Code 打造我的論文工具箱系列 第 16

Day 16|表一被退回:不是數字錯,是格式錯,還有一個分母算錯的百分比

  • 分享至 

  • xImage
  •  

上次 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 與 %):

  • sex(性別)
  • education(最高學歷)
  • shift(班別)
    連續變項(報 M 與 SD):
  • years(護理年資)
  • hours_week(每週工時)

計算規則

  1. 每個變項各自排除自己的遺漏值,不共用同一個排除清單。
    例如 sex 有拒答被排除,education、shift 的分母不受影響。
  2. 類別變項的百分比分母=該變項扣除遺漏值後的有效人數,不是總樣本數。
  3. 每個變項旁標出其有效人數 N,讓分母透明。
  4. 小數位數:M、SD 到小數點後 2 位;% 到小數點後 1 位。全部變項統一位數,不因數字大小改變。

表格格式(APA 7)

  • 三線表:頂線、欄名下線、底線,無其他橫線與直線
  • 標題在表格上方:第一行「表 1」,第二行斜體描述
  • 表格下方加註:說明遺漏值如何處理

輸出

  • analysis/table1.md:markdown 預覽,先自己看過
  • draft/table1.docx:正式表格
    規則二是這張表最重要的一條,直接對應被退回的原因。規則一也不是廢話——這次只有性別有拒答,但如果哪天教育程度也有人跳題,兩個變項的分母不會互相拖累,各自算各自的。

SKILL.md 全文
存在 .claude/skills/table1-apa/SKILL.md:


name: table1-apa
description: 依 analysis/table1-spec.md 從清理後的資料算出樣本描述統計,輸出 APA 7 格式的三線表(markdown 預覽與 Word 正式版)。使用者說「做表一」「樣本特性表」「APA 表格」時使用。

表一:APA 格式描述統計表

輸入

data/clean/02_cleaned.csv,analysis/table1-spec.md,analysis/spss-dictionary.md

規則

  1. 完全依規格檔列出的變項與遺漏值規則計算,不得自行增減變項。
  2. 類別變項的百分比分母,必須是該變項排除遺漏值後的有效人數。輸出時把每個變項的有效 N 標出來,讓分母可以被檢查。
  3. 小數位數依規格檔設定,同一欄全部變項統一位數,不因數字大小而改變位數。
  4. Word 表格的框線必須是三線表:只有頂線、欄名列下線、表格底線,其餘框線一律移除,不使用 Word 內建表格樣式的預設格線。
  5. 標題在表格上方,格式為「表 1」另起一行斜體描述;表格下方加註遺漏值處理方式。
  6. 不得在表格裡放入任何規格檔沒列出的統計量(例如不得自行加檢定結果)。

輸出

  • analysis/table1.md
  • draft/table1.docx
    在專案資料夾打「讀 @analysis/table1-spec.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:圖表工具。一致的樣式、深色淺色螢幕都看得清楚的配色,還有為什麼我後來決定圖表也要照規格檔做,不再憑感覺調。


上一篇
Day 15|匯出給 SPSS:變數標籤與值標籤的自動化,以及一個會讓平均數爆掉的數字
下一篇
Day 17|圖表工具:色盲安全色票,印成黑白還是可能失敗
系列文
研究生自救指南:30 天用 Claude Code 打造我的論文工具箱21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言