iT邦幫忙

2026 iThome 鐵人賽

DAY 4
0
自我挑戰組

Medical Data Cleaner系列 第 14 篇

資料格式標準化

  • 分享至 

  • xImage
  •  

昨天開始進入資料清理的部分,先處理了缺失值。今天則繼續處理前幾天檢查出來的「資料格式不一致」問題。
同一種資料如果有不同的表示方式,之後在進行搜尋、統計或分析時可能會造成問題。因此今天希望讓系統可以將不同的格式自動轉換成統一的格式。
這次主要處理兩種資料:

  • gender:將「男性」、「M」統一成「男」
  • visit_date:將 2026/09/05 統一成 2026-09-05
    一、處理gender格式
    目前測試資料中,P003的gender是「男性」,P004的gender 是「M」。
    雖然這些資料都可以表示男性,但和系統原本設定的「男」、「女」格式不同,因此需要進行標準化。
    在原本會先找出這些不一致的資料,加入清理的功能:
if ($row[2] === '男性' || $row[2] === 'M') { 
$consistencyCount++; 
$affectedPatients[$row[0]] = true; 
echo '【格式不一致】' . $row[0] 
. ' → gender = ' . $row[2] 
. ' → 建議修正為:男<br>'; 
$cleanedRow[2] = '男'; }

這樣當系統遇到「男性」或「M」時,就會在清理後的資料中統一改成「男」。
二、處理日期格式
目前 P009 的日期是:2026/09/05
而其他資料使用的是:2026-09-05
因此今天也讓程式將日期統一成YYYY-MM-DD的格式。
在原本的程式會先判斷日期是否使用 /加入把標準化後的日期放進清理後資料:

if ($row[8] !== '' 
&& preg_match('/^\d{4}\/\d{2}\/\d{2}$/', $row[8])) { $consistencyCount++; 
$affectedPatients[$row[0]] = true; 
$standardDate = str_replace('/', '-', $row[8]); 
echo '【格式不一致】' . $row[0] 
. ' → visit_date = ' . $row[8] 
. ' → 建議修正為:' . $standardDate . '<br>'; 
$cleanedRow[8] = $standardDate; }

這次清理資料時沒有直接修改原本的$row而是修改$cleanedRow是因為這樣可以保留原始資料,另外建立一份清理後的資料。
之後如果要做「清理前/清理後」的比較功能就可以直接比較兩份資料。
四、執行結果
重新整理網頁後原本的問題仍會被列出:

【格式不一致】P003 → gender = 男性 → 建議修正為:男 【格式不一致】P004 → gender = M → 建議修正為:男 【格式不一致】P009 → visit_date = 2026/09/05 → 建議修正為:2026-09-05

這是因為系統仍然需要讓使用者知道原始資料存在什麼問題。但在下面的「清理後資料愈爛中」就會變成不會顯示建議修正的訊息,直接顯示修正後的樣子。


上一篇
處理缺失值與建立清理後資料
下一篇
處理重複資料
系列文
Medical Data Cleaner 共 16 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言