LoGravel
Data

資料塑形(Data Shaping)

資料塑形(Data Shaping) 是什麼? 這名詞在軟體業界上很少聽到,但其實在軟體開發中是一件很常做的事情。你聽過資料格式化、資料前處理、Data Transformation 等相關軟體術語,這些其實跟資料塑形(Data Shaping)是在做類似的動作,而這篇文章就來說說資料塑形(Data Shaping)是什麼。

更新於 發布於
資料塑形(Data Shaping)

前言

開發軟體中,時常不是一個人單幹全部的程式碼,雖然現在有 AI 協作下可以一個人完成大項目專案,這聽起來是不是像一個人? 可是你跟 AI 實際上還是兩個人,我就不繼續講屁話了。

資料塑形(Data Shaping) 這名詞其實很少見,過往文章上或是團隊開發中,比較常聽到的就是前面所提到資料格式化、資料前處理等其他相關名詞,然而為什麼會有這些名詞的存在? 主要是因為在開發中,你會碰到需要與後端工程師協作,或幫助其他公司開發產品使用,而 API Response 的資料不一定符合你系統當中所使用的格式,這時候就需要前置動作來讓資料符合你系統的樣子。

資料清理(Data Cleaning)

API Response 資料不保證全部都符合你需要使用的,此時在資料上面就需要做資料清理(Data Cleaning)

目的:清理骯髒及不合法資料

常見情形:

  • 空資料
  • null/undefined 資料
  • 型別錯誤
  • 不合理數值
  • 重複資訊

範例

範例資料出現兩筆相同資料,所以需要做清洗動作。

const dirtyData = [
  { id: 1, name: "Alice", age: 28, salary: 50000, city: "Taipei" },
  { id: 2, name: "BOB", age: 999, salary: "50000TWD", city: "taipei" },
  { id: 2, name: "BOB", age: 999, salary: "50000TWD", city: "taipei" },
];

const cleanData = dirtyData.filter(
  (item, index, array) => index === array.findIndex(t => t.id === item.id)
);

資料轉換(Data Transformation)

API Response 資料不保證全部都符合你需求格式,此時在資料上面就需要做資料轉換(Data Transformation)

目的:改變資料結構與型別

常見操作:

  • 轉換資料型別
  • 計算衍生欄位
  • 合併或拆分欄位

範例

延續清洗範例,資料中的 salary 欄位出現字串及數字,因此做轉換資料型別。

const transformationData = cleanData.map(item => ({
  ...item,
  salary: typeof item.salary === "string"
    ? parseInt(item.salary)
    : item.salary,
}));

資料標準化(Data Standardization)

目的:統一資料結構

常見問題:

  • 重新命名欄位
  • 轉換相同格式

範例

延續轉換範例,資料中的 name 名稱大小寫不相同及 city 中有首字母大小寫存在。

const standardizationData = transformationData.map(item => ({
  ...item,
  name: item.name.charAt(0).toUpperCase() + item.name.slice(1).toLowerCase(),
  city: item.city.charAt(0).toUpperCase() + item.city.slice(1).toLowerCase(),
}));

快速回顧