close
close

first Drop

Com TW NOw News 2024

Hoe om te gaan met ontbrekende gegevens met behulp van interpolatietechnieken in Pandas
news

Hoe om te gaan met ontbrekende gegevens met behulp van interpolatietechnieken in Pandas

Hoe om te gaan met ontbrekende gegevens met behulp van interpolatietechnieken in Pandas
Afbeelding door auteur | DALLE-3 & Canva

Ontbrekende waarden in real-world datasets zijn een veelvoorkomend probleem. Dit kan om verschillende redenen gebeuren, zoals gemiste observaties, fouten in de gegevensoverdracht, sensorstoringen, enz. We kunnen ze niet zomaar negeren, omdat ze de resultaten van onze modellen kunnen verdraaien. We moeten ze uit onze analyse verwijderen of ermee omgaan, zodat onze dataset compleet is. Het verwijderen van deze waarden leidt tot informatieverlies, wat we niet willen. Daarom hebben wetenschappers verschillende manieren bedacht om met deze ontbrekende waarden om te gaan, zoals imputatie en interpolatie. Mensen verwarren deze twee technieken vaak; imputatie is een meer gebruikelijke term die beginners kennen. Voordat we verdergaan, wil ik een duidelijke grens trekken tussen deze twee technieken.

Imputatie is in principe het vullen van de ontbrekende waarden met statistische metingen zoals gemiddelde, mediaan of modus. Het is vrij eenvoudig, maar het houdt geen rekening met de trend van de dataset. Interpolatie schat echter de waarde van ontbrekende waarden op basis van de omringende trends en patronen. Deze aanpak is haalbaarder om te gebruiken wanneer uw ontbrekende waarden niet te veel verspreid zijn.

Nu we het verschil tussen deze technieken kennen, bespreken we een aantal interpolatiemethoden die beschikbaar zijn in Pandas. Daarna zal ik je door een voorbeeld leiden. Daarna zal ik wat tips delen om je te helpen de juiste interpolatietechniek te kiezen.

Soorten interpolatiemethoden in Pandas

Pandas biedt verschillende interpolatiemethoden (‘lineair’, ‘tijd’, ‘index’, ‘waarden’, ‘pad’, ‘dichtstbijzijnde’, ‘nul’, ‘slineair’, ‘kwadratisch’, ‘kubiek’, ‘barycentrisch’, ‘krogh’, ‘polynoom’, ‘spline’, ‘stukgewijs_polynoom’, ‘van_derivaten’, ‘pchip’, ‘akima’, ‘kubieke_spline’) die u kunt openen via de interpolate() functie. De syntaxis van deze methode is als volgt:

DataFrame.interpolate(method='linear', **kwargs, axis=0, limit=None, inplace=False, limit_direction=None, limit_area=None, downcast=_NoDefault.no_default, **kwargs)

Ik weet dat dit veel methoden zijn, en ik wil je niet overweldigen. Daarom bespreken we er een paar die veelgebruikt worden:

  • Lineaire interpolatie: Dit is de standaardmethode, die rekenkundig snel en eenvoudig is. Het verbindt de bekende datapunten door een rechte lijn te tekenen, en deze lijn wordt gebruikt om de ontbrekende waarden te schatten.
  • Tijdinterpolatie: Tijdgebaseerde interpolatie is handig wanneer uw gegevens niet gelijkmatig verdeeld zijn in termen van positie, maar lineair verdeeld zijn over de tijd. Hiervoor moet uw index een datetime-index zijn, en vult deze de ontbrekende waarden in door rekening te houden met de tijdsintervallen tussen de datapunten.
  • Indexinterpolatie: Dit is vergelijkbaar met tijdinterpolatie, waarbij de indexwaarde wordt gebruikt om de ontbrekende waarden te berekenen. Hier hoeft het echter geen datetime-index te zijn, maar moet het zinvolle informatie overbrengen, zoals temperatuur, afstand, etc.
  • Pad (voorwaartse vulling) en achterwaartse vullingmethode: Dit verwijst naar het kopiëren van de reeds bestaande waarde om de ontbrekende waarde in te vullen. Als de voortplantingsrichting voorwaarts is, zal het de laatste geldige observatie voorwaarts invullen. Als het achterwaarts is, wordt de volgende geldige observatie gebruikt.
  • Dichtstbijzijnde interpolatie: Zoals de naam al doet vermoeden, worden de lokale variaties in de data gebruikt om de waarden in te vullen. De waarde die het dichtst bij de ontbrekende waarde ligt, wordt gebruikt om deze in te vullen.
  • Polynomiale interpolatie: We weten dat real-world datasets voornamelijk niet-lineair zijn. Deze functie past dus een polynomiale functie toe op de datapunten om de ontbrekende waarde te schatten. U moet ook de volgorde hiervoor opgeven (bijv. order=2 voor kwadratisch).
  • Spline-interpolatie: Laat u niet intimideren door de complexe naam. Een splinecurve wordt gevormd met behulp van stukgewijze polynomiale functies om de datapunten te verbinden, wat resulteert in een uiteindelijke gladde curve. U zult opmerken dat de interpolatiefunctie ook piecewise_polynomial als een aparte methode. Het verschil tussen de twee is dat de laatste geen continuïteit van de afgeleiden op de grenzen garandeert, wat betekent dat het meer abrupte veranderingen kan ondergaan.

Genoeg theorie. Laten we de dataset Airline Passengers gebruiken, die maandelijkse passagiersgegevens van 1949 tot en met 1960 bevat, om te zien hoe interpolatie werkt.

Code-implementatie: dataset met luchtvaartpassagiers

We voeren een aantal ontbrekende waarden in de dataset met luchtvaartpassagiers in en interpoleren deze vervolgens met behulp van een van de bovenstaande technieken.

Stap 1: Importeren en dataset laden

Importeer de basisbibliotheken zoals hieronder vermeld en laad het CSV-bestand van deze dataset in een DataFrame met behulp van de pd.read_csv functie.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# Load the dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv"
df = pd.read_csv(url, index_col="Month", parse_dates=('Month'))

parse_dates zal de kolom ‘Maand’ omzetten naar een datetime object, en index_col stelt het in als de index van het DataFrame.

Stap 2: Introduceer ontbrekende waarden

Nu selecteren we willekeurig 15 verschillende instanties en markeren de kolom ‘Passagiers’ als np.nandie de ontbrekende waarden weergeven.

# Introduce missing values
np.random.seed(0)
missing_idx = np.random.choice(df.index, size=15, replace=False)
df.loc(missing_idx, 'Passengers') = np.nan

Stap 3: Gegevens met ontbrekende waarden plotten

We gebruiken Matplotlib om te visualiseren hoe onze gegevens eruitzien nadat we 15 ontbrekende waarden hebben ingevoerd.

# Plot the data with missing values
plt.figure(figsize=(10,6))
plt.plot(df.index, df('Passengers'), label="Original Data", linestyle="-", marker="o")
plt.legend()
plt.title('Airline Passengers with Missing Values')
plt.xlabel('Month')
plt.ylabel('Passengers')
plt.show()

Grafiek na interpolatieGrafiek na interpolatie
Grafiek van originele dataset

U ziet dat de grafiek is opgesplitst, wat aangeeft dat er op die locaties geen waarden zijn.

Stap 4: Interpolatie gebruiken

Hoewel ik later wat tips zal delen om je te helpen de juiste interpolatietechniek te kiezen, laten we ons concentreren op deze dataset. We weten dat het tijdreeksgegevens zijn, maar aangezien de trend niet lineair lijkt te zijn, past eenvoudige tijdgebaseerde interpolatie die een lineaire trend volgt hier niet goed. We kunnen enkele patronen en oscillaties samen met lineaire trends binnen een kleine buurt alleen waarnemen. Gezien deze factoren zal spline-interpolatie hier goed werken. Laten we dat dus toepassen en kijken hoe de visualisatie eruitziet na interpolatie van de ontbrekende waarden.

# Use spline interpolation to fill in missing values
df_interpolated = df.interpolate(method='spline', order=3)

# Plot the interpolated data
plt.figure(figsize=(10,6))
plt.plot(df_interpolated.index, df_interpolated('Passengers'), label="Spline Interpolation")
plt.plot(df.index, df('Passengers'), label="Original Data", alpha=0.5)
plt.scatter(missing_idx, df_interpolated.loc(missing_idx, 'Passengers'), label="Interpolated Values", color="green")
plt.legend()
plt.title('Airline Passengers with Spline Interpolation')
plt.xlabel('Month')
plt.ylabel('Passengers')
plt.show()

Grafiek na interpolatieGrafiek na interpolatie
Grafiek na interpolatie

We kunnen uit de grafiek zien dat de geïnterpoleerde waarden de datapunten compleet maken en ook het patroon behouden. Het kan nu worden gebruikt voor verdere analyse of voorspelling.

Tips voor het kiezen van de interpolatiemethode

Dit bonusgedeelte van het artikel richt zich op een aantal tips:

  1. Visualiseer uw data om de distributie en het patroon ervan te begrijpen. Als de data gelijkmatig verdeeld is en/of de ontbrekende waarden willekeurig verdeeld zijn, werken eenvoudige interpolatietechnieken goed.
  2. Als u trends of seizoensgebondenheid in uw tijdreeksgegevens waarneemt, kunt u beter spline- of polynomiale interpolatie gebruiken om deze trends te behouden en tegelijkertijd de ontbrekende waarden in te vullen, zoals in het bovenstaande voorbeeld wordt gedemonstreerd.
  3. Polynomen van hogere graad kunnen flexibeler worden aangepast, maar zijn gevoelig voor overfitting. Houd de graad laag om onredelijke vormen te voorkomen.
  4. Voor ongelijk verdeelde waarden gebruikt u geïndexeerde methoden zoals index en time om gaten te vullen zonder de schaal te vervormen. U kunt hier ook backfill of forward-fill gebruiken.
  5. Als uw waarden niet vaak veranderen of een patroon van stijgingen en dalingen vertonen, kunt u ook het beste de dichtstbijzijnde geldige waarde gebruiken.
  6. Test verschillende methoden op een steekproef van de gegevens en evalueer hoe goed de geïnterpoleerde waarden passen bij de werkelijke datapunten.

Als u andere parameters van de `dataframe.interpolate`-methode wilt verkennen, kunt u het beste de Pandas-documentatie raadplegen: Pandas-documentatie.

Kanwal Mehreen Kanwal is een machine learning engineer en een technisch schrijver met een grote passie voor data science en de kruising van AI met geneeskunde. Ze is medeauteur van het e-book “Maximizing Productivity with ChatGPT”. Als Google Generation Scholar 2022 voor APAC is ze een voorvechter van diversiteit en academische excellentie. Ze is ook erkend als Teradata Diversity in Tech Scholar, Mitacs Globalink Research Scholar en Harvard WeCode Scholar. Kanwal is een fervent voorstander van verandering en heeft FEMCodes opgericht om vrouwen in STEM-velden te versterken.