Table of Contents

Preprocesarea Datelor

Până acum, am lucrat cu date sintetice care au sosit în tensori gata făcuți. Totuși, pentru a aplica deep learning în sălbăticie, trebuie să extragem date dezordonate stocate în formate arbitrare și să le preprocesăm pentru a se potrivi nevoilor noastre. Din fericire, biblioteca pandas poate face o mare parte din munca grea. Această secțiune vă va oferi un curs rapid despre unele dintre cele mai comune rutine.

Citirea Setului de Date

Fișierele cu valori separate prin virgulă (CSV) sunt omniprezente pentru stocarea datelor tabulare (asemănătoare foilor de calcul). În ele, fiecare linie corespunde unei înregistrări și constă din mai multe câmpuri separate prin virgule.

Pentru a demonstra cum să încărcăm fișiere CSV cu `pandas`, creăm un fișier CSV mai jos la `../data/house_tiny.csv`. Acest fișier reprezintă un set de date despre case cu coloane pentru numărul de camere (`NumRooms`), tipul acoperișului (`RoofType`) și prețul (`Price`).

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,RoofType,Price
NA,NA,127500
2,NA,106000
4,Slate,178100
NA,NA,140000''')

Acum să importăm `pandas` și să încărcăm setul de date cu `read_csv`.

import pandas as pd
 
data = pd.read_csv(data_file)
print(data)

Pregătirea Datelor

În învățarea supravegheată, antrenăm modele pentru a prezice o valoare țintă desemnată dată fiind un set de valori de intrare. Primul nostru pas este să le separăm. Putem selecta coloane după nume sau prin indexare bazată pe locația întreagă (`iloc`).

Gestionarea Valorilor Lipsă

S-ar putea să fi observat că `pandas` a înlocuit toate intrările `NA` cu `NaN` (not a number - nu este un număr). Acestea sunt valori lipsă. În funcție de context, valorile lipsă sunt gestionate prin imputare (înlocuirea lor) sau ștergere (eliminarea lor).

1. Imputarea Categorială Pentru câmpurile de intrare categoriale, putem trata `NaN` ca o categorie distinctă. Folosind codificarea one-hot, `pandas` convertește o coloană precum `RoofType` în mai multe coloane, cum ar fi `RoofType_Slate` și `RoofType_nan`.

inputs, targets = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)

2. Imputarea Numerică Pentru valorile numerice lipsă, o euristică comună este înlocuirea intrărilor `NaN` cu valoarea medie a coloanei corespunzătoare.

inputs = inputs.fillna(inputs.mean())
print(inputs)

Conversia la Formatul Tensor

Acum că toate intrările din `inputs` și `targets` sunt numerice, le putem încărca într-un format tensor pentru cadrul nostru de deep learning.

from mxnet import np
X, y = np.array(inputs.to_numpy(dtype=float)), np.array(targets.to_numpy(dtype=float))
import torch
X = torch.tensor(inputs.to_numpy(dtype=float))
y = torch.tensor(targets.to_numpy(dtype=float))
import tensorflow as tf
X = tf.constant(inputs.to_numpy(dtype=float))
y = tf.constant(targets.to_numpy(dtype=float))
from jax import numpy as jnp
X = jnp.array(inputs.to_numpy(dtype=float))
y = jnp.array(targets.to_numpy(dtype=float))

Discuție

Deși acest curs rapid a păstrat lucrurile simple, prelucrarea datelor din lumea reală implică o multitudine de tipuri de date dincolo de cele categoriale și numerice, cum ar fi șiruri de text, imagini și audio. Mai mult, seturile de date sunt adesea afectate de valori atipice și erori de înregistrare.

Instrumentele de vizualizare a datelor, cum ar fi seaborn, matplotlib sau Bokeh, vă pot ajuta să inspectați manual datele și să dezvoltați intuiții despre problemele pe care s-ar putea să trebuiască să le abordați.

Exerciții

1. Încercați să încărcați un set de date din depozitul de învățare automată UCI (de exemplu, Abalone) și inspectați-i proprietățile.
2. Încercați să indexați și să selectați coloane de date după nume, mai degrabă decât după numărul coloanei.
3. Cât de mare credeți că ați putea încărca un set de date în acest fel? Care sunt limitările în ceea ce privește amprenta de memorie?
4. Cum ați proceda cu datele care au un număr foarte mare de categorii?
5. Ce alternative la pandas există? Verificați **Pillow** pentru imagini sau încărcarea tensorilor **NumPy** direct dintr-un fișier.

Discuții Notebook