---
# System prepended metadata

title: 資料前處理
tags: [NTU Master Thesis]

---

###### tags: `NTU Master Thesis`

# 資料前處理
以下講述論文中較重要的資料前處理方法，包括 Dataframe、統一時間格式、抓取特定時間區域內的資料等三項。若要看完整的前處理，可以見實驗室雲端資料中的 plot.ipynb 這個程式檔

## Dataframe
Dataframe 是 Pandas 的其中一種資料型態，也是資料處理中相當重要的知識點。將資料 (常常是 CSV ) 轉成 Dataframe 的格式後，有許多相對應的語法，能做增加、減少、刪除、最大最小值運算...等動作，比 Python 自帶的 List 好用許多。以下介紹 Dictionary 資料轉成 dataframe 的語法，pd.DataFrame
```python
df = pd.DataFrame(Dictionnary_Type)
df = pd.DataFrame({"A":List_Type_1, "B":List_Type_2})
```

## 統一時間格式
統一時間格式十分重要，能讓不同 VMSM 和 I2PDM 收到的資料能互相比較。為達成統一時間格式，可以利用 pandas 內建的函數，省下自己撰寫程式的時間。見下方程式碼，首先，要先將 CSV 檔案中的時間字串轉成 datetime 格式。接著，再用 groupby、Grouper 等函數或物件，將時間統一成每十分鐘一筆。值得注意的是，該統一方法是無條件捨去。譬如，10:15 和 10:11 的資料都會被歸類在 10:10 這個時間點。並且，若以 .mean() 來處理的話，最後呈現的資料值會是 10:15 和 10:11 的資料相加後除以二的結果值
```python
df['Time'] = pd.to_datetime(df.Time, format="%Y-%m-%d %H:%M:%S", errors = 'coerce')
df.index = df['Time']
df = df.drop(columns=['Time'])
df = df.groupby(pd.Grouper(freq='10min')).mean()
df = df.asfreq(freq="10min")
```

## 抓取特定時間區域內的資料
當資料轉成 dataframe 和 datatime 的格式後，能直接用下方程式碼，取得特定時間範圍內的資料
```python
df_new = df["2023-01-01":"2023-01-31"]
```