1. 程式人生 > 其它 >動手學機器學習v2-05-資料預處理

動手學機器學習v2-05-資料預處理

資料預處理

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)