---
# System prepended metadata

title: '資料預處理 : ColumnTransformer水平合併器'
tags: [Pipeline, Data Frame, ColumnTransformer, python]

---

資料預處理 : 
ColumnTransformer水平合併器
===
王辰禎, DCT, NTCU(Taiwan)
---
###### tags:  `ColumnTransformer` `Pipeline`  `Data Frame` `python` 
**資料科學與問題解決week08HW(4/11)**
[Colab 程式碼](https://colab.research.google.com/drive/1JmcRya5zUkS_22DyndjHNTlNcbRxm3ou?usp=sharing)

---
#### import(匯入)套件
##### 由於Sklearn有六大部分，from Sklearn.[某部分] import [某部件]
![image](https://hackmd.io/_uploads/BkKbbp5gll.png)


---
#### 將題目的資料丟進Data Frame
![image](https://hackmd.io/_uploads/BkOG-6cxlx.png)


---
#### 定義數值管道器(Pipeline)
##### ***用於數值欄位的資料(data中的price和quantity)**
![image](https://hackmd.io/_uploads/BJPXbp5exl.png)

SimpleImputer:處理遺漏值
strategy='median(中位數)、mean(平均值)、most_frequent(眾數，出現最多次的數)

MinMaxScaler() : 最小最大值標準化(將min->0, max->1，故數據會縮到0~1之間)
*sklearn中常見資料預處理: StandardScaler,MinMaxScaler, MaxAbsScaler, and RobustScaler

---
#### 定義類別管道器categorical pipeline
##### ***用於非數值欄位的資料(data中的size和color)**
![image](https://hackmd.io/_uploads/HJLNW65glx.png)

make_pipeline( [內容] ):製作(定義)管道器
SimpleImputer(strategy='most_frequent')使用眾數(最多次的值)填補遺漏值
OneHotEncoder()用獨熱編碼進行類別資料轉換

---
#### 定義ColumnTransformer水平合併器
##### 告訴電腦哪些資料用哪種管道器pipeline處理
![image](https://hackmd.io/_uploads/r1XBZ6ceex.png)


---
#### 轉換數據(應用先前定義好的管道器，套用水平合併器便可直接使用兩個管道器)
![image](https://hackmd.io/_uploads/Bk1LZT5gxg.png)

[何種格式(管道器)].fit_transform([原資料])
.round(2) : 由於小數點太多看著不舒服，故四捨五入至小數點第二位，但實際處理數據不應該隨意四捨五入，避免數據不精確。

---
#### 將資料擺進Dataframe並印出
```python
processed_df = pd.DataFrame(processed_data, columns=['price', 'quantity', 'size_M', 'size_S', 'size_XL', 'color_black', 'color_blue', 'color_red'])
print(processed_df)
```

---
#### 參考資料
1. [(scikit-learn.org)sklearn.impute.SimpleImputer](https://scikit-learn.org/stable/modules/generated/sklearn.impute.SimpleImputer.html)
2. [(scikit-learn.org)sklearn.preprocessing](https://scikit-learn.org/stable/api/sklearn.preprocessing.html)
*[MinMaxScaler](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html#sklearn.preprocessing.MinMaxScaler)
3. [(scikit-learn.org)sklearn.preprocessing.OneHotEncoder獨熱編碼](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html#sklearn.preprocessing.OneHotEncoder)
4. [(iT邦幫忙)Day 18 : 模型前的資料處理 (2)](https://ithelp.ithome.com.tw/articles/10272964)
5. [(medium.com) (機器學習)Pipelines。Ben Hu(2020)](https://medium.com/@hupinwei/%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92-pipelines-1967209a5c7a)
6. [(scikit-learn.org)sklearn.preprocessing: Normalization](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.normalize.html#sklearn.preprocessing.normalize)