資料預處理 :
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 [某部件]

---
#### 將題目的資料丟進Data Frame

---
#### 定義數值管道器(Pipeline)
##### ***用於數值欄位的資料(data中的price和quantity)**

SimpleImputer:處理遺漏值
strategy='median(中位數)、mean(平均值)、most_frequent(眾數,出現最多次的數)
MinMaxScaler() : 最小最大值標準化(將min->0, max->1,故數據會縮到0~1之間)
*sklearn中常見資料預處理: StandardScaler,MinMaxScaler, MaxAbsScaler, and RobustScaler
---
#### 定義類別管道器categorical pipeline
##### ***用於非數值欄位的資料(data中的size和color)**

make_pipeline( [內容] ):製作(定義)管道器
SimpleImputer(strategy='most_frequent')使用眾數(最多次的值)填補遺漏值
OneHotEncoder()用獨熱編碼進行類別資料轉換
---
#### 定義ColumnTransformer水平合併器
##### 告訴電腦哪些資料用哪種管道器pipeline處理

---
#### 轉換數據(應用先前定義好的管道器,套用水平合併器便可直接使用兩個管道器)

[何種格式(管道器)].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)