Data analyseren met Polars in Python: een introductie

Gepubliceerd op:
Korte handleiding voor data-analyse met **Polars** in **Python**. 1. **Installeer** de Polars-bibliotheek met pip. 2. **Importeer** Polars in je Python-scripts. 3. Laad je **dataset** met **Polars**' leesfuncties. 4. Gebruik **filtreren** en **groeperen** om je data te analyseren. 5. **Sla** je geanalyseerde data op als een nieuw bestand.

Inleiding

Ik heb al een tijdje met data gewerkt en dacht dat ik alles wel zo'n beetje had gezien, totdat ik Polars tegenkwam. Deze veelzijdige bibliotheek is een hoeksteen geworden in mijn data-analyse en kan grote datasets met verrassend gemak verwerken. Het is niet alleen snel, maar ook ongelooflijk efficiënt vergeleken met wat ik gewend was bij andere tools. Ik ben steeds weer onder de indruk van hoe het de complexe zaken vereenvoudigt, en ik merk dat ik er steeds vaker naar grijp. Laat me wat inzichten delen over waarom Polars mijn aanpak van data-analyse aan het veranderen is en misschien ook die van jou.

Inleiding tot Polars en de Betekenis ervan in Data-analyse

In de wereld van data-analyse, waar Python koning is, komt Polars naar voren als een veelbelovende nieuwkomer die grote datasets met snelheid en efficiëntie kan verwerken. Het is een dataverwerkingsbibliotheek geschreven in Rust, ontworpen om bliksemsnelle prestaties te leveren voor datamanipulatie. In tegenstelling tot Pandas, dat bijna synoniem is met Python data-analyse, maakt Polars gebruik van de geheugenveiligheid en snelheid van Rust en biedt een API die vertrouwd aanvoelt voor Pandas-gebruikers, maar betere prestaties belooft, vooral bij het werken met big data.

Toen ik voor het eerst over Polars hoorde, was ik sceptisch. Kan het echt beter presteren dan het beproefde Pandas? Het antwoord is niet simpel, maar wel spannend - voor grote datasets is Polars een game-changer.

import polars as pl

# Lezen van een CSV-bestand
df = pl.read_csv('grote_dataset.csv')
print(df.head())

Met dit voorbeeld stap je de wereld van Polars binnen. Met slechts een paar regels kon ik een grote dataset inlezen, terwijl Pandas hier vaak tegen geheugenlimieten aanloopt. Met Polars gaat dat echter moeiteloos.

De kracht van Polars zit in zijn twee typen DataFrame-representaties: DataFrame en LazyFrame. Het gaat niet alleen om eager versus lazy evaluatie; het is een paradigmawisseling die je data-analyse taken efficiënt achter de schermen optimaliseert.

Om LazyFrame uit te leggen: stel je voor dat je alleen geïnteresseerd bent in het eindresultaat en niet in de tussenstappen die daar naartoe leiden. LazyFrame belichaamt dit principe - door berekeningen uit te stellen tot het nodig is, wordt de algehele workflow geoptimaliseerd.

# Lazy evaluatie in Polars
lazy_df = df.lazy().filter(pl.col("some_column")  10)
result = lazy_df.collect()

Door lazy() op te roepen, schakelen we over naar een lazy context waar geen berekeningen worden gedaan totdat collect() wordt opgeroepen. Dit voorkomt onnodige berekeningen en versnelt dus het proces.

Maar Polars gaat niet alleen om snelheid. De betekenis ervan ligt in het toegankelijker en minder resource-intensief maken van data-analyse. In mijn ervaring heb ik ontdekt dat de syntaxis intuïtief is voor degenen die van Pandas overstappen.

# Eenvoudige kolombewerking in Polars
df = df.with_column((pl.col("column_a") * 2).alias("verdubbelde_column_a"))
print(df)

In dit voorbeeld is kolombewerking heel eenvoudig. Met Polars kan ik bewerkingen uitvoeren op DataFrame-kolommen met methoden die erg veel lijken op Pandas.

Bovendien opent Polars geavanceerde data-analysetechnieken door ondersteuning van functies zoals window functies, groupbys en joins, die cruciaal zijn bij het omgaan met complexe datasets. Het kan deze uitvoeren met een prestatie die traditionele Python-gebaseerde bibliotheken vaak overtreft.

# Gebruik van window functies in Polars
df = df.with_column(
    pl.col("sales").sum().over("group_column").alias("totale_sales_per_groep")
)
print(df)

Wat Polars onderscheidt, is hoe het geavanceerde dataverwerkingsmogelijkheden integreert met een API die zo gebruiksvriendelijk is. Van basis data-operaties tot geavanceerde analyses, het biedt een breed scala aan opties die zowel beginnende als ervaren data-analisten aanspreken.

Belangrijk is dat je voor het optimaal benutten van Polars geen diepgaande kennis van Rust of systeemprogrammering nodig hebt. Als Python-gebruiker vond ik de overstap naadloos, en kon ik een ongelooflijk krachtig hulpmiddel gebruiken zonder het comfort van Python te verlaten.

In het levendige ecosysteem van data-analysebibliotheken heeft Polars zijn eigen plekje gevonden door te laten zien dat je snelheid, efficiëntie en gebruiksgemak in één pakket kunt hebben. Hoewel deze introductie slechts een oppervlakkige blik biedt, vormt het een sterke basis voor het verder verkennen van meer diepgaande en geavanceerde Polars-functionaliteiten in de volgende secties.

Voor degenen die dieper willen duiken in de technische aspecten en de ontwikkeling van Polars, biedt de Github-repository (Polars Git Repository) voldoende bronnen, van gedetailleerde documentatie tot actieve issues en functieverzoeken. Voor een meer academisch begrip of onderzoek naar de implicaties van het gebruik van Rust voor datawetenschappen, vormen de snel groeiende verzameling artikelen en papers een uitstekende startpunt.

Aan de slag met Polars in Python

Beginnend aan mijn reis met Polars in Python, merkte ik al snel hoe intuïtief en snel het is om grote datasets te manipuleren en analyseren. Laten we meteen beginnen met de installatie van Polars en enkele basisoperaties uit te voeren die essentieel zijn voor elke data-analyse workflow.

Allereerst moeten we Polars installeren. Voer simpelweg uit:

pip install polars

Nu gaan we Polars importeren en onze eerste DataFrame maken. In tegenstelling tot Pandas, waar ik pd.DataFrame() zou gebruiken, heeft Polars een eigen, net zo eenvoudig, syntax.

import polars as pl

# Een eenvoudige DataFrame definiëren
df = pl.DataFrame({
    "id":[1, 2, 3, 4],
    "names":["Alice", "Bob", "Charlie", "Dave"],
    "scores":[9.5, 7.0, 8.3, 5.4]
})

Deze code heeft een DataFrame gemaakt - een fundamenteel object in Polars, vergelijkbaar met Excel-spreadsheets of SQL-tabellen. Vervolgens is het lezen en schrijven van data cruciaal. Polars blinkt hier uit met de mogelijkheid om efficiënt om te gaan met CSV's, Parquet, en andere bestandsformaten.

# DataFrame naar CSV schrijven
df.write_csv("my_data.csv")

# Lezen vanaf CSV
df = pl.read_csv("my_data.csv")

Ik beschouw het toevoegen van kolommen als kinderspel met Polars; selecteer gewoon de kolom, voer een actie uit of voeg een reeks toe. Kijk naar deze eenvoud:

# Een nieuwe kolom toevoegen
df = df.with_column((pl.col("scores") * 10).alias("score_x10"))

En, data selecteren in Polars? Dat is een fluitje van een cent, met een vloeiende API. Hier is een filteroperatie die typisch een WHERE-clausule in SQL vertegenwoordigt:

# Rij filteren waar scores boven de 8 zijn
high_scores = df.filter(pl.col("scores")  8)

Sorteren is kinderlijk eenvoudig. Kies de kolom en volgorde, en het is klaar.

# DataFrame sorteren op scores
sorted_df = df.sort("scores")

Bij aggregaties, die van essentieel belang zijn, komt 'groupby' in beeld. Ik som vaak scoredata op, gegroepeerd door een categorische variabele.

# Groepeer op "names" en sommeer "scores"
grouped_df = df.groupby("names").agg(
    [
        pl.col("scores").sum().alias("total_scores")
    ]
)

Maar stel je voor, ik was te haastig en maakte een typefout in mijn kolomnaam. Normaal zou ik de code opnieuw moeten bekijken, maar met luie evaluatie laat Polars me transformaties stapelen en de uitvoering uitstellen, wat tijd bespaart bij gigantische datasets.

# Kolomnaam corrigeren met luie evaluatie
lazy_df = (df.lazy()
           .rename({"scores": "points"})
           .collect())

Granted, deze operaties lijken eenvoudig, maar ze zijn cruciaal in de data-analyse reis. Elke functie hier, van read_csv tot groupby, is essentieel in routinematige data-operaties. En in combinatie met de snelheid van Polars maken ze de dag van een analist opmerkelijk efficiënter.

Komend van het gebruik van Pandas, voelde de overstap naar Polars als het vervangen van een hatchback door een sportwagen—beide doen hun werk, maar de laatste doet het met een opwindende sneltreinvaart. Er is een ander soort kick bij het uitvoeren van data-manipulatie op bliksemsnelheden.

De verzameling van eenvoudige operaties hier markeert het begin van een data-analyse avontuur met Polars. Met deze tools kan ik data snijden, splitsen, aggregeren en evalueren met ongeëvenaarde efficiëntie, waardoor ik klaar ben voor ingewikkeldere manoeuvres in de toekomst.

DataFrames en LazyFrames in Polars

Polars is een snelle bibliotheek voor datamanipulatie, geschreven in Rust met een Python-interface die is ontworpen voor snelheid en efficiëntie. Toen ik Polars ontdekte, veranderde dat mijn kijk op hoe ik met grote datasets kon werken, vooral door de twee kernbegrippen: DataFrame en LazyFrame.

Ik werk vaak met enorme datasets en standaard DataFrame-bewerkingen verbruiken veel geheugen en rekenkracht. Met Polars kan ik soepel werken, zelfs als mijn datasets groot zijn, dankzij LazyFrame.

import polars as pl

# Maak een DataFrame
df = pl.DataFrame({
    "fruits": ["appel", "banaan", "peer", "ananas"],
    "baskets": [15, 32, <a href="/nl/routers-number-of-ports/10">10</a>, 5]
})

Een DataFrame voelt meteen vertrouwd aan als je Pandas hebt gebruikt. Het is een structuur die gegevens stuk in het geheugen houdt. Wanneer ik transformaties of berekeningen uitvoer, worden die direct gedaan. Voor kleine tot middelgrote datasets is deze directe feedback heel handig.

Maar de echte magie begint bij LazyFrame. Zodra datasets groter worden, kunnen de in-memory-bewerkingen van DataFrames lastig worden. Dit is waar Polars les heeft genomen van Dask en luie evaluatie toepast. Met LazyFrames werd mijn codering niet alleen efficiënter, maar verminderde ook het geheugenverbruik drastisch.

# Luie evaluatie met LazyFrame
lf = df.lazy()

# Definieer berekeningsgrafiek
lf = lf.with_column((pl.col("baskets") * 2).alias("verdubbelde_baskets"))

# Start de berekening
df_result = lf.collect()

In het voorbeeld hierboven maak ik een LazyFrame met df.lazy(). Dit start nog geen berekeningen. Het maakt gewoon een berekeningsgrafiek. Ik kan dan verschillende bewerkingen definiëren, zoals het verdubbelen van het aantal baskets voor elk fruit, en het een alias geven. De berekening wordt pas uitgevoerd als ik de methode collect() aanroep; dan worden de resultaten geëvalueerd en als een DataFrame teruggegeven.

Wat me vooral enthousiast maakt over LazyFrames is de queryoptimalisatie. Net als SQL-queryplanners optimaliseert Polars de berekeningen onder de motorkap, en vinden ze vaak een snellere manier om de reeks bewerkingen uit te voeren voordat ze worden uitgevoerd. Deze optimalisatie blijft grotendeels verborgen, daar hoef ik me niet druk om te maken, maar ik profiteer van de prestatievoordelen.

# Filter en sorteer met LazyFrame
lf = (
    df.lazy()
    .filter(pl.col("baskets")  10)
    .sort("baskets")
)

# Voer de berekeningsgrafiek uit
df_filtered_sorted = lf.collect()

In dit voorbeeld filter ik rijen en sorteer ik ze zonder dat er daadwerkelijk berekeningen beginnen totdat ik collect() aanroep. Deze functie is revolutionair bij het schakelen van meerdere transformaties. Het is alsof je een recept opstelt voordat je het fornuis aanzet.

Voor iedereen die net begint met Polars: onthoud dat LazyFrames niet alleen gaan over het uitstellen van berekeningen. Ze gaan ook over efficiëntie. Ik vermijd onnodige geheugenallocatie en maak gebruik van optimalisaties die ik normaal gesproken handmatig zou moeten maken.

Als je begint met data-analyse met Polars, gebruik zowel DataFrames als LazyFrames, gebruikmakend van elk waar het je uitkomt. Gebruik DataFrames voor snelle verkenning en directe resultaten, maar schakel over naar LazyFrames voor complexe workflows en grotere datasets, waardoor je middelen efficiënt benut, net zoals het ontwerp van de bibliotheek.

Hier is de link naar de GitHub-repository van Polars, waar je dieper kunt duiken in zijn mogelijkheden: Polars GitHub

Vergeet niet, slimme keuze van datastructuren is cruciaal, en Polars biedt je een krachtig arsenaal om prestaties en bruikbaarheid in balans te brengen, wat de manier waarop je met data werkt in Python revolutioneert.

Basisgegevensmanipulaties met Polars

Data manipuleren is net als het kneden van deeg; hoe beter je het doet, hoe beter je brood – of in dit geval, je analyse. Hier is hoe ik te werk ga met Polars, een razendsnelle DataFrame bibliotheek in Python, voor eenvoudige gegevensmanipulaties.

Allereerst, laten we data inlezen in een DataFrame. Met Polars is dat zo simpel als:

import polars as pl
df = pl.read_csv("pad_naar_je_bestand.csv")

Als je een eerste blik wilt werpen op de eerste paar rijen om te controleren of alles er goed uitziet:

print(df.head())

Volgende stap is kolommen selecteren. Vaak heb ik alleen een deel van de gegevens nodig, dus hier is hoe je eruit pikt wat je nodig hebt:

subset = df.select(['kolom_1', 'kolom_2'])

Wil je rijen filteren? Hier is een eenvoudig voorbeeld van entries eruit halen waar een bepaalde voorwaarde geldt:

filtered_data = df.filter(pl.col('een_kolom')  10)

Vaak moet ik kolommen maken of aanpassen. Polars schijnt hier met zijn expressieve syntax. Om een nieuwe kolom toe te voegen gebaseerd op bestaande:

df = df.with_column((pl.col('kolom_1') / pl.col('kolom_2')).alias('nieuwe_kolom'))

Groeperen en aggregeren van gegevens is essentieel in data-analyse. In Polars is aggregatie op basis van groepen niet alleen krachtig, maar ook intuïtief:

grouped_df = df.groupby('groep_kolom').agg([
    pl.col('salaris').sum().alias('totaal_salaris')
])

Omgaan met ontbrekende waarden is een realiteit waar we allemaal mee te maken hebben. Laten we ontbrekende waarden vullen met nullen:

df = df.fill_null(0)

Data sorteren kan patronen onthullen – oplopend of aflopend, bedenk het en Polars doet het:

sorted_df = df.sort(['kolom_om_te_sorteren'], reverse=True)

Tabelkoppelingen zijn vaak nodig, en de snelle koppelbewerkingen van Polars zijn hier erg handig. Hier is hoe ik een left join uitvoer:

left_join_df = df.join(
    other_df,
    on='sleutel_kolom',
    how='left'
)

Conclusie, deze basismanipulaties vormen de basis van data-analyse. Door ze onder de knie te krijgen met Polars, leg je de grondsteen voor meer verfijnde analyses en operaties in de toekomst.

En vergeet niet, de beste manier om bedreven te worden is om aan de slag te gaan met echte data, dus ga je gang en speel rond met deze snippets. Voor je het weet, ben je een pro in het snijden en schikken van data!

Geavanceerde Data-analysetechnieken met Polars

Als je de basis van Polars onder de knie hebt, is het tijd om in te gaan op wat gevorderde technieken. De sprong van basis naar gevorderde data-analyse is als de stap van rekenen naar calculus – de logica blijft hetzelfde, maar de bewerkingen worden krachtiger en onthullen nieuwe inzichten.

Laten we eens kijken naar het uitvoeren van gegroepeerde bewerkingen. Stel je voor dat je een dataset met verkoopgegevens analyseert en je wilt de verkoop per productcategorie samenvoegen. In Polars gaat dat zonder moeite:

import polars as pl

# Stel dat 'df' je DataFrame is met kolommen 'category' en 'sales'
grouped_df = df.groupby("category").agg(
    [
        pl.col("sales").sum().alias("total_sales"),
        pl.col("sales").mean().alias("average_sales"),
    ]
)

Deze beknopte syntax met chaining is een uitkomst – snel te schrijven en het leest als een verhaal: "groepeer op categorie, en voeg dan verkoop samen met som en gemiddelde."

Dan hebben we joins. Je hebt twee datasets en je wilt ze samenvoegen om informatie te vergelijken.

# Andere DataFrame om mee te 'joinen', met bijvoorbeeld productdetails
df_products = pl.DataFrame({...})

# Uitvoeren van een 'left join' op 'product_id' kolom
df_joined = df.join(df_products, on="product_id", how="left")

Kijk hoe naadloos dat gaat, je geeft gewoon de 'how' en 'on' parameters op, en klaar ben je.

Vervolgens kunnen window functies cumulatieve statistieken berekenen, zoals voortschrijdend gemiddelde of rangen in een bepaalde periode van de dataset. Je kunt bijvoorbeeld een voortschrijdend gemiddelde berekenen:

# Bereken een 7-daags voortschrijdend gemiddelde voor verkoop
df.with_column(
    pl.col("sales").rolling_mean(window_size=7).alias("7_day_sales_avg")
)

Je code instrueert Polars niet alleen om het gemiddelde te berekenen, maar stelt moeiteloos de periode in.

Een andere sterke functie van Polars is het gebruik van expressies. Een expressie laat je een berekening maken die je later op een DataFrame toepast. Ze zijn herbruikbaar en combineren goed:

sales_above_average = pl.col("sales")  df.get_column("sales").mean()

# De expressie toepassen om data te filteren
df_filtered = df.filter(sales_above_average)

Door sales_above_average als een expressie te maken, kun je het overal toepassen zonder de logica opnieuw te schrijven.

Tenslotte, als je voorwaardelijke logica nodig hebt, biedt Polars een functie vergelijkbaar met CASE WHEN in SQL, namelijk when().then().otherwise(). Erg handig voor het maken van nieuwe kolommen op basis van voorwaarden:

df.with_column(
    pl.when(pl.col("sales")  10000)
    .then("Hoog")
    .otherwise("Laag")
    .alias("sales_category")
)

Zie je hoe dit natuurlijk taalgebruik spiegelt? Je hebt Polars verteld: Als de verkoop boven 10.000 is, label het als Hoog, anders Laag, en noem deze nieuwe vondst 'sales_category'.

Met gevorderde operaties in Polars ben je niet alleen bezig met het verschuiven van data – je creëert een verhaal met de data. Het verhaal dat je vertelt, wordt aangedreven door een samenspel van krachtige, bijna intuïtieve commando's. En vergeet niet, er is een levendige gemeenschap en een schat aan bronnen beschikbaar. Misschien wil je eens de Polars documentatie bekijken voor meer diepgaande voorbeelden en de Polars GitHub repository voor de laatste updates.

Polars blinkt uit als je het tot het uiterste rekt, en er zit een zekere spanning in het schrijven van code die zowel expressief als efficiënt is. Het is een toegangspoort tot het bekijken van je data vanuit hoeken en dieptes die je je eerder niet kon voorstellen, en het ligt allemaal binnen handbereik. Veel plezier met analyseren!

Prestatiebenchmarks: Polars vs Pandas vs Dask

In de wereld van data-analyse met Python zijn er drie belangrijke bibliotheken voor het werken met grote datasets: Pandas, Dask, en Polars. Elk heeft zijn eigen sterke punten en prestaties die je kunt vergelijken en analyseren, vooral als het gaat om schaalbaarheid en efficiëntie.

Pandas is de standaard keus voor veel data-analisten, maar het is bekend dat Pandas problemen kan hebben met grote datasets en veel geheugen en CPU-tijd kan verbruiken tijdens operaties.

Toen ik met grotere datasets aan de slag ging, ontdekte ik Dask. Dask breidt Pandas uit en maakt het mogelijk om met grotere datasets te werken door operaties te paralleliseren en geheugen over een cluster te beheren. Dit betekende dat ik grotere datavolumes aankon zonder mijn hardware te hoeven upgraden.

Maar de echte verandering kwam toen ik Polars ontdekte. Deze bibliotheek is geoptimaliseerd voor snelheid en geheugenefficiëntie en maakt gebruik van Apache Arrow als geheugenmodel, waardoor snelle data-toegang en berekeningen mogelijk zijn. Toen ik Polars op een dataset gebruikte die normaal mijn Pandas-workflow zou verstikken, was de snelheid indrukwekkend.

Laten we eens snel een DataFrame met willekeurige gegevens maken in Pandas:

import pandas as pd
import numpy as np

# Willekeurige data genereren met Pandas
df_pandas = pd.DataFrame({
    'a': np.random.rand(1000000),
    'b': np.random.rand(1000000)
})

Met Polars ziet de syntax er vergelijkbaar uit:

import polars as pl

# Willekeurige data genereren met Polars
df_polars = pl.DataFrame({
    'a': np.random.rand(1000000),
    'b': np.random.rand(1000000)
})

Bij Dask is de code iets anders door de luie evaluatie, waarmee je een parallel DataFrame maakt:

import dask.dataframe as dd

# Willekeurige data genereren met Dask
ddf = dd.from_pandas(df_pandas, npartitions=4)

Nu een eenvoudige operatie, zoals het berekenen van het gemiddelde van een kolom:

# Pandas
%timeit df_pandas['a'].mean()

# Polars
%timeit df_polars['a'].mean()

# Dask (Let op: Dask moet berekenen, omdat het lui is)
%timeit ddf['a'].mean().compute()

Uit mijn ervaring levert Polars vaak veel sneller resultaten dan Pandas en overtreft het Dask in bepaalde scenario's, vooral bij grote datasets op een enkele machine.

Stel je voor dat je twee grote DataFrames wilt samenvoegen. Hier blinkt Polars echt uit:

# Polars
%timeit df_larger = df_polars.join(df_polars, on='a')

# Pandas
%timeit df_larger_pandas = df_pandas.merge(df_pandas, on='a')

# Dask
%timeit df_larger_dask = ddf.merge(ddf, on='a').compute()

Hoewel Dask meerdere cores gebruikt en de berekening verdeelt, kan de overhead van het beheren van parallelle processen het minder efficiënt maken dan het sterk geoptimaliseerde Polars. Bovendien is Polars ontworpen om het geheugenverbruik te minimaliseren, wat cruciaal is bij het werken met grotere datasets.

Het is belangrijk om te beseffen dat prestaties kunnen variëren afhankelijk van de operaties, de grootte van de dataset en je hardware. Hoewel mijn ervaringen wijzen op de efficiëntie van Polars, is het essentieel om je eigen tests te draaien die passen bij jouw specifieke werk.

De keuze tussen Pandas, Dask en Polars hangt af van de grootte van je data, de complexiteit van de operaties, en de mogelijkheden van je systeem. Wisselen tussen deze bibliotheken is niet moeilijk, dankzij hun vergelijkbare API-designs. Voor een beginnende data-analist of datawetenschapper kan het ontdekken van Polars een groot verschil maken door snellere en efficiëntere dataverwerking mogelijk te maken.

Polars is in actieve ontwikkeling, met zijn repository op Polars GitHub vol met updates en communitybijdragen. Daar kun je meer uitgebreide benchmarks, discussies en voorbeelden vinden die Polars verder bevestigen als een veelbelovend hulpmiddel voor moderne data-analyse.

Case Study: Analyse van Real-world Data met Polars

In de wereld van data-analyse horen we vaak succesverhalen over het verkrijgen van inzichten en het nemen van impactvolle beslissingen. Laten we duiken in een praktisch scenario waarin ik gebruik maakte van Polars, een snel DataFrame-bibliotheek voor Python, om echte data te analyseren.

Stel je voor dat we een dataset hebben, sales_data.csv, die een jaar aan verkoopgegevens van een internationaal retailbedrijf bevat. Ons doel is om betekenisvolle patronen te ontdekken, zoals bestverkopende producten, trends over maanden en prestaties per regio.

Eerst moeten we de data laden. Polars maakt dit moeiteloos met de read_csv functie. Ik begin met het importeren van de bibliotheek en het inlezen van de dataset in een DataFrame:

import polars as pl

# Load de verkoopdata in een DataFrame
df = pl.read_csv('sales_data.csv')

Met de data geladen, merk ik dat er wat schoonmaakwerk nodig is. Polars is handig voor data-voorbewerking dankzij de intuïtieve en beknopte syntax. Stel dat we de datumkolom moeten parseren en rijen met ontbrekende waarden moeten verwijderen:

# Zet de 'date' kolom om naar datetime en verwijder ontbrekende waarden
df = df.with_column(
    pl.col('date').str.strptime(pl.Datetime, '%Y-%m-%d')
).drop_nulls()

Analyse vereist aggregatie, en Polars voert dat efficiënt uit. Om de bestverkopende producten te vinden, gebruik ik de groupby en agg functies:

# Groepeer op 'product' en som de 'sales' kolom
top_products = df.groupby('product').agg(
    pl.col('sales').sum().alias('total_sales')
).sort('total_sales', reverse=True).limit(5)

Nu is het tijd voor een meer complexe analyse: ontdekking van trends over maanden. We kijken vaak naar seizoensgebondenheid in verkoop, en Polars behandelt dat soepel. Laten we de maand uit de datum halen en verkopen per maand optellen:

# Haal maand uit 'date' en bereken maandelijkse verkoop
monthly_trends = df.with_column(
    pl.col('date').dt.month().alias('month')
).groupby('month').agg(
    pl.col('sales').sum().alias('total_sales')
).sort('month')

Kijken naar regionale prestaties omvat een combinatie van filteren, groeperen en sorteren van data. De expressieve API van Polars maakt zulke taken eenvoudig. Hieronder filter ik naar een specifieke regio, zeg 'Europa', groepeer op 'country', en sorteer op verkoop:

# Analyse voor Europese landen
europe_sales = df.filter(
    pl.col('region') == 'Europe'
).groupby('country').agg(
    pl.col('sales').sum().alias('total_sales')
).sort('total_sales', reverse=True)

Het visualiseren van de resultaten kan net zo moeiteloos zijn met Polars door gebruik te maken van andere bibliotheken zoals matplotlib. Echter, zelfs zonder visuals kan je de resultaten in tabelvorm direct in de console waarderen.

Hoewel deze analyse slechts een klein deel van de mogelijkheden van Polars laat zien, benadrukt het de snelheid en het gebruiksgemak van de bibliotheek. Niet alleen presteert het beter dan traditionele tools qua prestaties, maar de syntax is ook prachtig Pythonisch, waardoor data-analyse taken minder omslachtig en plezieriger worden.

Zoals we hebben gezien, van eenvoudige opschoningsacties tot geavanceerde aggregaties, biedt Polars een reeks krachtige methoden om data efficiënt te beheren en te analyseren. Of je nu werkt met kleine datasets of duikt in enorme hoeveelheden data, Polars is een uitstekende keuze, vooral voor degenen die prestaties willen zonder leesbaarheid of gebruiksgemak op te offeren. Hoewel we in dit gedeelte niet ingingen op prestatiebenchmarks (dat wordt elders in dit artikel behandeld), getuigt mijn persoonlijke ervaring van de superieure snelheid van Polars, vooral vergeleken met Pandas.

Door Polars op te nemen in je data-analyse toolkit, kun je ook je werkstromen stroomlijnen en inzichten ontdekken die je data-verhaal naar goed onderbouwde conclusies sturen.


Delen

Opmerkingen (0)

Een reactie plaatsen

© 2023 - 2025 — TensorScience. Alle rechten voorbehouden.