iT邦幫忙

2026 iThome 鐵人賽

DAY 4
0
自我挑戰組

Medical Data Cleaner系列 第 17 篇

建立清理前後的變更紀錄

  • 分享至 

  • xImage
  •  

如果只顯示最後的清理後資料,使用者可能不知道哪些資料曾經被修改。
因此今天加入「資料清理變更紀錄」,讓系統記錄每一筆被修改的資料。
一、建立變更紀錄列
首先建立$changes:
$changes = [];
這個陣列會用來儲存每次資料清理的結果。
每筆變更會記錄:Patient ID、被修改的欄位、原始資料、清理後資料
二、紀錄缺失值的處理
例如P002的gender原本是空白。
在清理資料的同時,加入變更紀錄:

if ($header[$index] === 'gender') {

    $cleanedRow[$index] = 'Unknown';

    $changes[] = [
        'patient_id' => $row[0],
        'field' => $header[$index],
        'original' => $value,
        'cleaned' => 'Unknown'
    ];
}

這樣系統就會記住:P002|gender|原始:空白|清理後:Unknown
三、紀錄格式標準化
性別格式不一致時,例如P003的男性,系統會將它統一成「男」。
除了修改資料之外,也加入變更紀錄:

$changes[] = [
    'patient_id' => $row[0],
    'field' => 'gender',
    'original' => $row[2],
    'cleaned' => '男'
];
$cleanedRow[2] = '男';

因此使用者可以知道原本的資料是什麼,以及系統修改成什麼。
四、紀錄日期格式的變更
日期格式也使用相同的方式。
例如 2026/09/05 會被標準化成 2026-09-05
程式如下:

$changes[] = [
    'patient_id' => $row[0],
    'field' => 'visit_date',
    'original' => $row[8],
    'cleaned' => $standardDate
];
$cleanedRow[8] = $standardDate;

五、紀錄數值異常的處理
例如 age = -5:

$changes[] = [
    'patient_id' => $row[0],
    'field' => 'age',
    'original' => $row[1],
    'cleaned' => 'Unknown'
];
$cleanedRow[1] = 'Unknown';

而heart_rate = 999:

$changes[] = [
    'patient_id' => $row[0],
    'field' => 'heart_rate',
    'original' => $row[6],
    'cleaned' => 'Unknown'
];
$cleanedRow[6] = 'Unknown';

六、顯示資料清理變更紀錄
完成資料處理後,再把$changes顯示在網頁上。

echo '<h3>資料清理變更紀錄</h3>';
if (count($changes) > 0) {
    echo '<table border="1" cellpadding="5">';
    echo '<tr>';
    echo '<th>Patient ID</th>';
    echo '<th>欄位</th>';
    echo '<th>原始資料</th>';
    echo '<th>清理後資料</th>';
    echo '</tr>';
    foreach ($changes as $change) {
        echo '<tr>';
        echo '<td>' . $change['patient_id'] . '</td>';
        echo '<td>' . $change['field'] . '</td>';
        echo '<td>' . ($change['original'] === '' ? '[空白]' : $change['original']) . '</td>';
        echo '<td>' . $change['cleaned'] . '</td>';
        echo '</tr>';
    }
    echo '</table>';
} else {
    echo '沒有資料被修改。<br>';
}

這樣系統就會在網頁上顯示所有清理過的資料。
七、執行結果
PatientID 欄位 原始資料 清理後資料
P002 gender [空白] Unknown
P003 gender 男性 男
P004 gender M 男
P009 visit_date 2026/09/05 2026-09-05
P007 age -5 Unknown
P008 heart_rate 999 Unknown


上一篇
處理數值異常資料
下一篇
實作清理後 CSV 匯出功能
系列文
Medical Data Cleaner 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言