data cleaning python stappen uitleg in pandas

Cleaning data, oftewel het opschonen van data, is een belangrijke bezigheid voor data scientists. Op deze pagina gaan we in op de stappen die je kunt doorlopen in Python wanneer je een dataset op wilt schonen. We maken veel gebruik van het package Pandas.

Data cleaning kunnen we definiëren als het proces om missende of onjuiste data te identificeren en mogelijk aan te passen of te verwijderen.

Binnen veel data science vraagstukken is het opschonen van data hetgeen waar het meeste tijd in gaat zitten. Immers, machine learning modellen geven alleen waardevolle bevindingen wanneer de input voor het model kwalitatief is.

In dit blog gaan we in op vier stappen die je kunt doorlopen:

  1. Ga op zoek naar missende data
  2. Bekijk of er outliers zijn
  3. Vraag je af welke data onnodig zijn
  4. Zitten er inconsistenties in de dataset?

We zullen in deze tutorial gebruik maken van deze dataset met boekings-informatie van verschillende hotels. De dataset bevat informatie over bijvoorbeeld wanneer een boeking werd gemaakt, de duur van het verblijf, het aantal gasten, etc.

Om een snelle indruk te krijgen van de dataset bekijken we de omvang van de dataset en de verschillende data types per kolom.

We zien dat er meer dan 100.000 rijen in de dataset zitten en 32 kolommen. Daarnaast krijgen we een goede indruk van de beschikbare informatie in de dataset.

Met vertrouwen waardevolle inzichten halen uit data? Schrijf je in voor een van onze trainingen.


Data cleaning stap 1: zoek de missende data

Data cleaning in Python start vaak met het identificeren van missende data. Deze stap wordt bijna nooit overgeslagen, simpelweg omdat de meeste machine learning modellen niet werken op het moment dat er missende data als input wordt gegeven. Je kunt het identificeren van missende data op verschillende manieren aanpakken.

We leren uit bovenstaande heatmap dat er relatief weinig missing values in deze dataset zitten. We missen enkele waarden van de 'country' feature en we missen vooral veel onder 'agent' en 'company'.

We kunnen het aantal missende waarden ook overzichtelijk onder elkaar zetten op de volgende manier.

We leren hieruit dat voor de feature 'children' ook enkele waarden missen. Dat zagen we eerder in de heatmap niet omdat het zo weinig waarden betreft.

Wat doe je met missende waarden?

Per situatie kan verschillen wat het juiste is om te doen. Soms zul je de hele feature niet nodig hebben, soms kun je enkele rijen verwijderen om het probleem op te lossen, en soms kun je de missende waarden vrij nauwkeurig inschatten. We zullen verschillende technieken toepassen op onze dataset.

Enkele rijen verwijderen

We hebben slechts enkele rijen waarbij we data missen over kinderen. Omdat het slechts enkele rijen betreft identificeren we welke rijen dit zijn en verwijderen we de observaties uit de dataset. We zien dat dit leidt tot slechter vier observaties minder.

Hele feature verwijderen

De feature 'company' mist in 94% van de observaties. We vinden dit te veel binnen onze analyse en zullen daarom de hele feature droppen.

We zien dat we na deze handeling nog 31 features over hebben.

Missende waarden vervangen

In veel gevallen kun je missende waarden vervangen met een bepaalde waarde. Zo zouden we voor onze feature 'agent' kunnen weten dat alle missende waarden uit deze column te maken hebben met het feit dat de boeking niet door een agent is gedaan maar door een particulier. We kunnen deze particuliere boekingen bijvoorbeeld het nummer 9999 meegeven.

Missende waarden schatten

Voor veel features kun je missende waarden schatten. Zo kun je ervoor kiezen om bijvoorbeeld het gemiddelde, de modus, of de mediaan te gebruiken voor missende waarden van een feature. Verder is het altijd aan te raden of je op een of andere manier de missende waarde logisch kunt achterhalen.

In onze dataset missen we alleen nog 488 waarden voor 'country'. We weten dus niet van alle boekingen uit welk land deze afkomstig is. Wellicht kun je dit makkelijk achterhalen door te kijken naar door welke 'agent' deze boekingen gedaan zijn. Of wellicht komen alle boekingen vanuit dezelfde 'company'. Zo kun je wellicht het land van herkomst achterhalen.

Omdat bijna de helft van de boekingen uit onze dataset komen uit Portugal kiezen we er in dit geval voor de missende 'country' waarden te vullen met de meestvoorkomende 'country', namelijk 'PRT'.

We zien dat de impact van deze handeling op de dataset meevalt.

Data cleaning stap 2: bekijk of er outliers zijn

Data cleaning in Python gaat gepaard met het zoeken naar outliers. Outliers zijn observaties die significant anders zijn dan andere observaties. Een outliers kan op een fout in de dataset wijzen, maar het kan ook een echte waarde zijn die afwijkt. Dan is het aan de data scientist om te bepalen of de waarde in de dataset opgenomen blijft.

Er zijn verschillende manieren om outliers te ontdekken als je data opschoont. De meest geschikte manier verschilt voor numerieke en categorische features. We behandelen diverse methoden.

Descriptive statistics

Descriptive statistics zijn een goede manier om voor numerieke features outliers te identificeren. Met .describe() verkrijg je per feature verschillende beschrijvende informatie m.b.t. de data.

Hier kunnen we direct de volgende observaties doen:

  • stays_in_weekend_nights heeft een max van 19. Het is de vraag of je 19 nachten in een weekend kunt blijven. Wellicht is iemand veel weken gebleven, maar waarschijnlijk is dit een foutje.
  • Er is een boeking gemaakt met 55 volwassenen. Moest dit niet 5 zijn?
  • Er is iemand met 10 babies gekomen, klopt dat?

Boxplots voor identificeren outliers

Met boxplots kun je missende waarden mooi visualiseren. Zo kunnen we de features die ons opvielen visualiseren.

Met vertrouwen waardevolle inzichten halen uit data? Schrijf je in voor een van onze trainingen.


Histogram voor detectie outliers

Ook een histogram kun je goed gebruiken voor het identificeren van outliers. In een histogram kun je vooral goed zien welke verdeling de data volgt en of daar mogelijkerwijs oneffenheden inzitten.

Voor categorische variabele kun je het best een bar chart gebruiken voor visualisatie.

Qua data cleaning kun je ook voor outliers verschillende werkwijzen hanteren. Je kunt outliers in de dataset laten zitten, je kunt ze vervangen door passender schattingen, of je kunt ze verwijderen. Wat de juiste aanpak is verschilt wederom per situatie en per analyse.

Data cleaning stap 3: welke data zijn onnodig?

Een volgende stap in Python data cleaning kan zijn om te kijken welke data onnodig zijn. Wederom kun je dit op verschillende manieren doen. Zo kun je bijvoorbeeld onderzoeken of:

  • Er rijen zijn met bijna alleen maar dezelfde waarde. Als er nauwelijks variatie in een feature zit neemt logischerwijs ook de voorspellende waarde af.
  • Er irrelevante features zijn opgenomen in de dataset. Zo zouden we in onze dataset over hotelboekingen niet zo veel hebben aan het aantal opa's en oma's van de kinderen die nog leven. Irrelevante features kunnen verwijderd worden.
  • Er dubbelingen in de dataset voorkomen. Veel datasets hebben een unieke feature (bijvoorbeeld klant id) waardoor je gemakkelijk op basis van één column kunt ontdubbelen. Voor de dataset in deze tutorial hebben we niet zo'n feature en is dit dus lastiger.

Data cleaning stap 4: zijn er inconsistenties?

Tenslotte is het altijd goed om jezelf tijdens data cleaning af te vragen of er zich inconsistenties bevinden in de dataset. Verschillende veelvoorkomende inconsistenties zijn:

  • Python is hoofdlettergevoelig en daarom kunnen inconsistenties in het gebruik van hoofdletters problemen veroorzaken. Dit kan makkelijk opgelost worden met .str.lower() voor features die uit tekst bestaan.
  • Columns die data of tijden bevatten zijn dikwijls opgeslagen als data type 'string'. Deze kunnen het best omgezet worden naar DateTime format met pd.to_datetime()
  • Binnen categorische variabelen kunnen typfouten voorkomen als de input niet gestandaardiseerd is. Er zijn verschillende manieren om typfouten te ontdekken. Het meest logisch is om te kijken welke entries erg op elkaar lijken, dit kan met Fuzzy logic.

Conclusie

Data cleaning in Python kost veel tijd, maar is essentieel voor iedereen die tot waardevolle inzichten wilt komen. Veelal start je met het identificeren van missende waarden en outliers. Als je observaties waarin dit voorkomt onder handen hebt genomen kun je verder duiken in het nut van de opgenomen features en de consistentie van de features die je wilt behouden. Zo kom je tot kwalitatieve input voor jouw modellen.

Wil je nog veel meer leren over Python en de mogelijkheden voor data analyse? Schrijf je dan in voor onze Python cursus voor data science, onze machine learning training, of voor onze data science opleiding en leer met vertrouwen te programmeren en analyseren in Python. Nadat je een van onze trainingen hebt gevolgd kun je zelfstandig verder aan de slag. Je kunt ook altijd even contact opnemen als je een vraag hebt.

Download één van onze opleidingsbrochures voor meer informatie

by: