Inhoudsopgave
1 – Wat is data preprocessing?
Het voorbereiden van data op algritmes en modellen
“Machine learning bestaat voor 80% uit data preprocessing en voor 20% uit modellen trainen”
Voordat je een data science model (lees: machine learning) kan toepassen, moet je eerst jouw data voorbereiden. Gelukkig zijn er een aantal handige Python functies die de standaard handelingen een stuk makkelijker maken. Hier vind je drie handige Python tips voor de belangrijkste preprocessing stappen.
2 – Python functies voor data preprocessing
2.1 – Missende waardes (NaN) in je dataset aanvullen
Je dataset is haast nooit compleet. Als een veld niet gevuld is, krijgt het de waarde NaN. Dit betekent NotANumber en geeft aan dat een numeriek veld leeg is.

Check daarom altijd hoeveel waarden elke kolom bevat.
Dat doe je eenvoudig met:
df.isna().sum()
Uitleg: df is de naam van het dataframe. Gebruik je een andere naam voor je dataset, vervang df dan door die desbetreffende naam.
Missende waardes kunnen je analyse of model aardig in de war schoppen. Toch is een hele rij weggooien ook zonde. Gelukkig zijn er slimme methodes om missende waardes aan te vullen.
SimpleImputer van (wederom) sklearn is een veel gebruikte functie:
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(fill_value=np.nan, strategy='mean')
X = imputer.fit_transform(df)
Uitleg: In de eerste regel importeer je de functie, waarna je in regel 2 een strategie bepaald. In dit geval is gekozen voor ‘mean’, wat betekent dat je de missende waardes aanvult door het gemiddelde van de kolom. Je kan ook kiezen voor de mediaan, de meest voorkomende waarde of een zelf gekozen waarde.
Meer over deze functies lees je hier: https://scikit-learn.org/stable/modules/generated/sklearn.impute.SimpleImputer.html
De laatste regel van dit script geeft aan dat het dataframe genaamd ‘df’ getransformeerd moet worden. De uitkomst ‘X’ is standaard een Numpy array en klaar voor gebruik in een model.
Wil je van X weer een dataframe maken voor verder analyse? Gebruik dan de volgende code:
X = pd.DataFrame(X, columns=df.columns)
print(X)
Let op: Heeft je dataframe een andere naam dan df, pas deze dan aan de scripts.
Wil je missende waardes weggooien in plaats van vervangen? Dan kun je eenvoudig een nieuw dataframe maken door middel van:
df_compleet = df.dropna()
Uitleg: df_compleet bevat alle waarden van dataframe ‘df’, maar de rijen met lege waarden zijn gedropt, oftewel weggelaten. Gebruik vervolgens het nieuwe dataframe in je verder analyse.
2.2 – Velden met categorieën of tekst omzetten naar numerieke velden
Datasets bevatten vaak kolommen met categorieën. Voor veel algoritmes is het noodzakelijk dat hier numerieke velden van gemaakt worden. Deze handeling heet OneHotEncoding.
Voorbeeld dataset (df):
Kosten | Land |
1500 | Nederland |
2000 | Belgie |
1895 | Nederland |
Dat kun je op de volgende manier doen met Pandas:
df = pd.get_dummies(data=df)
Uitleg: De Pandas functie get_dummies zet alle velden om in nulletjes en eentjes. Vervolgens wordt het dataframe (df) overschreven met deze nieuwe waarden.
Het resultaat is dan:
Kosten | Land_Nederland | Land_Belgie |
1500 | 1 | 0 |
2000 | 0 | 1 |
1895 | 1 | 0 |
Let op: Heb je een kolom met bijvoorbeeld 50 categorieën, dan maakt deze functie ook 50 nieuwe velden aan. Bepaal daarom van te voren of het handig is om OneHotEncoder toe te passen!

Extra tip: Label Encoding
Een andere manier om categorieën om te zetten naar aantallen is Label Encoding. Deze functie heeft als resultaat dat Nederland omgezet wordt naar waarde ‘1’, België naar ‘2’ enzovoorts. Het voordeel is dat er dan geen extra kolommen aangemaakt worden. Helaas heeft deze methode als nadeel dat er niet mee te rekenen valt, aangezien de waardes niet in verhouding van elkaar zijn.
2.3 – Data splitsen in een training-set en een test-set
Voordat je data aan een algoritme gaat voeren, is het slim om een data-split te maken. Deze vorm van data-preprocessing is noodzakelijk voor machine learning.

Je deelt de data dan op in twee delen:
– Training data waarmee het model getraind wordt
– Test data om het getrainde model te testen
Meestal is de verhouding 80% trainingsdata en 20% testdata. Om deze split te maken kun je gebruik maken van een functie uit SciKit Learn (sklearn).
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)
Uitleg: Van te voren moet je de X en de y hebben bepaald. De X bevat alle kolommen van onafhankelijke variabelen en de y is de target variabele; De variabele die je wil voorspellen.
Test_size = 0.2 bepaalt de grootte van de testdata-set. In dit geval dus 20% van de gehele data.
Achter test_size kan je nog meer input meegeven aan de split, door simpelweg een komma te plaatsen en een extra parameters in te voeren. Alle parameters vind je hier: https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html
Gebruik vervolgens X_train en y_train bij het trainen van je model. Veel algoritmes vragen bij voorhand al om een test- en train-set
3 – Wanneer pas je Data Preprocessing toe?
De bovenstaande functies pas je toe in de data preparation stap van het CRISP-DM proces. Data preparation bestaat o.a. uit:
- Data selection
- Data cleaning
- Data formatting
- Feature Engineering
- Data transformation
Kort samengevat moet je dus eerst de data kiezen en op orde maken. Vervolgens kies je welke velden je wilt gebruiken voor het beoogde model. De laatste stap is het passend maken van de data aan het gewenste systeem of algoritme. Hierna kan het model worden ontwikkeld en getraind.
De eerste twee tips van deze post hebben betrekking op de eerste stap; Het op orde maken van je data.
De derde tip gebruik in het laatste stadium van de data preparation. Het maken van een datasplit doe je als de data helemaal klaar is voor gebruik.
Meer Python tips?
Leave a Reply