動手學機器學習v2-05-資料預處理
阿新 • • 發佈:2021-10-03
資料預處理
1 讀取資料集
- 判斷路徑下是否有data命名的資料夾,沒有的話,建立檔案house_tiny.csv,開啟檔案並進行寫操作
import os os.makedirs(os.path.join('..', 'data'), exist_ok=True) data_file = os.path.join('..', 'data', 'house_tiny.csv') with open(data_file, 'w') as f: f.write('NumRooms,Alley,Price\n') # 列名 f.write('NA,Pave,127500\n') # 每行表示一個數據樣本 f.write('2,NA,106000\n') f.write('4,NA,178100\n') f.write('NA,NA,140000\n')
- 讀檔案
# 如果沒有安裝pandas,只需取消對以下行的註釋:
# !pip install pandas
import pandas as pd
data = pd.read_csv(data_file)
print(data)
2 處理缺失值
- 通過位置索引iloc,我們將data分成inputs和outputs,其中前者為data的前兩列,而後者為data的最後一列。對於inputs中缺少的數值,我們用同一列的均值替換“NaN”項
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2] inputs = inputs.fillna(inputs.mean()) print(inputs)
- 對於inputs中的類別值或離散值,我們將“NaN”視為一個類別。由於“巷子”(“Alley”)列只接受兩種型別的類別值“Pave”和“NaN”,pandas可以自動將此列轉換為兩列“Alley_Pave”和“Alley_nan”
有值的置為1,沒有值的置為0
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)
3 轉換為張量格式
import torch
X, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
X, y
4 小結
- pandas可以與張量相容。
- 插值和刪除可用於處理缺失的資料
- nputs.isnull().sum() 返回每一列缺失值得個數。
- inputs.isnull().sum().idxmax() 得到缺失值最多的那一列的索引值。
- 把缺失值最多的那一列刪除
Max_Nan_Num=inputs.isnull().sum().idxmax()
inputs=inputs.drop(Max_Nan_Num,axis=1)