iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0
AI & Data

預測惱人的人事物:跟我一起學習如何用資料分析來避開他們系列 第 6

結構化實作 Part 2:清洗雜質 & 加入必要符號

  • 分享至 

  • xImage
  •  

在將原始資料轉換成 JavaScript 的 array 之後,我們可以開始來寫程式了。

此段需求細節

  1. 希望可以將資料分成兩類
    1. 符合我們預期格式的
    2. 不符合的:因為量級的關係,為了幾筆特例寫判斷式是不符合效益的,寧願做為例外整筆被輸出,後續再進行手動更改
  2. 希望可以產生 csv 檔輸出以上兩類,以便可以達成手動調整的需求,以及後續利用的可能

定義

首先讓我們在 arr 底下加入以下三個全域變數:

/**
 * 能順利被處理的資料
 */
const formattedData = [];

/**
 * 不符合的資料
 */
const exceptions = [];

/**
 * csv 檔的 header
 */
const csvHeader = ['日期', '具體時間', '備註', '星期幾'];

其中,csvHeader 是我們依照 Day 04 希望呈現的樣貌所加上去的。

主流程

讓我們建立一個名為 main 的 function,並建立一個 for-of 迴圈來處理每筆 arr 中的資料:

/**
 * 主流程
 * 預計處理三件事:
 * 1. 移除多餘的英文句號並加上時間的分隔符號
 * 2. 判斷每筆資料是否符合資料預期的形態
 *  - 若是,歸類為能被處理的資料
 *  - 若否,歸類為例外,後續手動調整
 * 3. 將正常處理以及例外的資料轉成 csv 檔
 */
const main = () => {
  for (const str of arr) {
  }
};

處理步驟 1

讓我們建立另外一個 removeExtraPeriod 的 function 來專門處理「移除多餘的英文句號並加上時間的分隔符號」這件事。

/**
 * 移除多餘的英文句號並加上時間的分隔符號
 * @param {string} originalStr
 * @returns {string}
 */
const removeExtraPeriod = (originalStr) => {
  /**
   * 因為只有第一組時間需要一個分隔符號,所以我們採取反向的做法:亦即將所有英文的句號移除後,再把每串 string index = 1 的位置後面加上一個英文的冒號「:」。
   */
  let newStr = originalStr.replace(/\./g, '');

  /**
   * 時間加上冒號
   */
  newStr = `${newStr.slice(0, 2)}:${newStr.slice(2)}`;

  return newStr;
};

然後在我們的主流程迴圈中,加入這段實作:

const main = () => {
  for (const str of arr) {
    // step 1
    const newStr = removeExtraPeriod(str);

    /**
     * 以空格作為分隔點,將字串切割成 array 方便後續處理
     */
    const splittedStrArr = newStr.split(' ');

    // TODO: step 2

    // TODO: step 3
  }
};

最後我們 print 出來看看:

https://ithelp.ithome.com.tw/upload/images/20220921/20141357E7bdtg2Z1k.png

確實移除了所有英文句號,並且加入了時間分割符號。

今天收工!

參考資料

(待續)


上一篇
結構化實作 Part 1:將記錄從 Google Keep 輸出
下一篇
結構化實作 Part 3:透過 regex 處理資料 & 分類
系列文
預測惱人的人事物:跟我一起學習如何用資料分析來避開他們38
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言