昨天已經成功讓PHP讀取 CSV,並且將資料顯示成網頁上的表格。
今天要開始做真正的「資料品質檢查」。
在醫療資料中,缺失值是很常見的問題。例如某位病人的性別、身高或心跳資料沒有填寫,如果直接拿這些資料進行分析,可能會影響後續結果。
因此今天先從最基本的功能開始:檢查 CSV 裡面是否有空白欄位
一、先找出測試資料中的問題
測試資料刻意讓P002的gender 欄位留白:
P002,25,,165,52,115/75,82,外科,2026-09-01
可以看到 25 後面直接接了下一個逗號,代表 gender 沒有資料。
今天的目標就是讓 PHP 自動找到這個問題。
二、讓PHP判斷空白資料
首先讀取CSV的第一列,將它當作欄位名稱:
$header = fgetcsv($handle, 0, ',', '"', '');
接著逐筆讀取資料:
while (($row = fgetcsv($handle, 0, ',', '"', '')) !== false) {
再使用 foreach 檢查每一個欄位:
foreach ($row as $index => $value) {
if (trim($value) === '') {
// 發現缺失值
}
}
這裡使用trim()是為了先去除前後的空白,再判斷這個欄位是不是空的。
如果判斷到空白,就代表這個欄位有缺失值。
三、顯示是哪一筆資料有問題
一開始只能知道:gender 有缺失
但如果之後 CSV 有幾百甚至幾千筆資料,光知道欄位名稱是不夠的。
所以又加入了:
$row[0]
因為CSV的第一個欄位是patient_id,所以可以利用它找到是哪一位病人的資料有問題。
最後使用:
echo'發現缺失值:'. $row[0] . ' → ' . $header[$index] . '<br>';
就可以顯示:發現缺失值:P002 → gender
這樣就能很清楚知道是哪一筆資料、哪一個欄位需要處理。
四、統計缺失值數量
除了找出問題之外,也希望系統可以直接告訴使用者總共有幾個缺失值。
因此先建立一個計數變數:
$missingCount = 0;
每發現一個缺失值,就讓它加 1:
$missingCount++;
最後再顯示總數:
echo '<p>缺失值總數:' . $missingCount . '</p>';
目前的測試資料只有 P002 的 gender 是空白,因此結果會是以下三行:
缺失值檢查結果
發現缺失值:P002 → gender
缺失值總數:1
五、今天完成的功能
今天完成了第一個資料品質檢查功能:
自動檢查CSV是否有空白欄位、找出有缺失值的資料、顯示有問題的病人編號、顯示缺失的欄位名稱、統計缺失值總數
雖然目前只檢查缺失值,但已經開始從單純「讀取資料」進入真正的資料品質檢查。
接下來還有很多不同類型的資料問題需要處理,例如年齡出現 abc、性別出現不同格式、日期格式不一致等。