2025年7月7日 星期一

資料清洗 範例篇

 這是原始資料

員工編號姓名年齡入職日城市月薪(元)
1001王小明282021/5/10Taiepi35000
1002李小美2021/06/01Taipei38000
1003張大偉-52021/7/15台北42000
1004陳志強452021-08-20Taipei38000
1005王小明282021/5/10Taiepi35000
1006陳怡君332021/9/01taiepi40000
1007吳曉華292021/10/05Taipei
1008李小美2021/06/01Taipei38000
1009周志明1202021/11/15Taipei37000
1010黃大明312021/12/01Taiepi41000


1. 檢查資料格式與型別
檢查年齡欄位是否為數字,若不是數字就標黃

text
Sub 檢查年齡格式()
    Dim cell As Range
    For Each cell In Range("C2:C11")
        If Not IsNumeric(cell.Value) Or cell.Value = "" Then
            cell.Interior.Color = vbYellow
        End If
    Next
End Sub

處理前:

員工編號姓名年齡...
1001王小明28...
1002李小美...
1003張大偉-5...

處理後:
(年齡為空白的儲存格底色變黃)

員工編號姓名年齡(黃底)...
1002李小美  ...

2. 檢查資料完整性
標記缺失值(年齡、月薪欄位空白標紅)

text
Sub 標記缺失值()
    Dim rng As Range, cell As Range
    Set rng = Union(Range("C2:C11"), Range("F2:F11"))
    For Each cell In rng
        If cell.Value = "" Or IsEmpty(cell.Value) Then
            cell.Interior.Color = vbRed
        End If
    Next
End Sub

處理前:


員工編號姓名年齡...月薪(元)
1002李小美
...38000
1007吳曉華29...

處理後:
(年齡或月薪空白的儲存格底色變紅)

員工編號姓名年齡(紅底)...月薪(紅底)
1002李小美  ...38000
1007吳曉華29...  


3. 處理缺失值
將年齡欄位空白填入平均年齡

text
Sub 填補年齡缺失()
    Dim rng As Range, cell As Range
    Dim sum As Double, count As Long, avg As Double
    Set rng = Range("C2:C11")
    For Each cell In rng
        If IsNumeric(cell.Value) And cell.Value <> "" Then
            sum = sum + cell.Value
            count = count + 1
        End If
    Next
    If count > 0 Then avg = WorksheetFunction.Round(sum / count, 0)
    For Each cell In rng
        If cell.Value = "" Or Not IsNumeric(cell.Value) Then
            cell.Value = avg
        End If
    Next
End Sub

處理前:


員工編號姓名年齡
1002李小美
1008李小美

處理後:
(空白年齡被填上平均值,假設平均值為31)

員工編號姓名年齡
1002李小美31
1008李小美31




4. 處理重複值
以員工編號和姓名為主鍵,移除重複資料(只留第一筆)

text
Sub 移除重複資料()
    Range("A1:F11").RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
End Sub

處理前:

員工編號姓名...
1001王小明...
1005王小明...

處理後:
(1005這筆重複被移除)

員工編號姓名...
1001王小明...

5. 修正錯誤資料
修正城市拼寫錯誤(Taiepi、taiepi→Taipei,台北→Taipei)

text
Sub 修正城市拼寫()
    Dim cell As Range
    For Each cell In Range("E2:E11")
        If LCase(cell.Value) = "taiepi" Or cell.Value = "台北" Then
            cell.Value = "Taipei"
        End If
    Next
End Sub

處理前:

城市
Taiepi
taiepi
台北

處理後:

城市
Taipei
Taipei
Taipei

6. 檢查資料一致性與準確性
檢查年齡是否異常(小於0或大於100),異常值標橘色

text
Sub 標記異常年齡()
    Dim cell As Range
    For Each cell In Range("C2:C11")
        If IsNumeric(cell.Value) Then
            If cell.Value < 0 Or cell.Value > 100 Then
                cell.Interior.Color = RGB(255, 153, 0)
            End If
        End If
    Next
End Sub

處理前:

員工編號姓名年齡
1003張大偉-5
1009周志明120

處理後:
(-5、120 這兩格變橘色)

員工編號姓名年齡(橘底)
1003張大偉-5
1009周志明120

7. 資料轉換與標準化
將入職日全部轉為 yyyy-mm-dd 格式

text
Sub 統一入職日期格式()
    Dim cell As Range
    For Each cell In Range("D2:D11")
        If IsDate(cell.Value) Then
            cell.Value = Format(cell.Value, "yyyy-mm-dd")
        End If
    Next
End Sub

處理前:

入職日
2021/5/10
2021-08-20

處理後:

入職日
2021-05-10
2021-08-20

沒有留言:

張貼留言

指數變化(2025.08.29) 開始透過AI做整理

 指數變化(2025.08.29) 開始透過AI做整理 上周焦點: 8/19(二)   美國房屋開工率 5%月增  美國建築許可月增率 月增2.8% 8/20(三)   美國房貸綜合指數 月減0.5%  美國30年期房貸利率 6.69%  美國15年期房貸利率 5.8~5.71%...