Lássuk a medvét! Avagy két adatmanipulációs erőművet vizsgálunk 

Az adatelemzés és -manipuláció világában a Python gyorsan vált a legnépszerűbb programnyelvvé, hiszen sokoldalúsága és folyamatosan bővülő könyvtárai ideális környezetet biztosítanak az adattudósok számára. Ezen könyvtárak közül a Pandas évek óta vitathatatlanul az első számú eszköz az adatok rendezéséhez, tisztításához és elemzéséhez. Azonban az utóbbi időben új kihívó tűnt fel: a Polars.

Gyorsabb teljesítményt és hatékonyabb memóriafelhasználást ígérve a Polars a Pandas hatalmát kívánja megkérdőjelezni. Itt és most összehasonlítjuk a Pandast és a Polarst különböző szempontok alapján, hogy segítsünk a megfelelő eszköz kiválasztásában adatok kezeléséhez.

Mit mond a szakirodalom? 

Teljesítmény
A Pandas sokáig kiszolgálta az adatközösséget, de az adatok mennyiségi növekedésével a teljesítmény egyre fontosabbá válik. A Polars állítása szerint ezen a területen kiemelkedik, mivel Rust-ot használ a háttérben, hogy gyorsabb adatfeldolgozást nyújtson.
 

Memóriahatékonyság
A memóriafelhasználás egy másik kulcsfontosságú tényező, különösen nagy adathalmazok kezelésekor. A Polars-t memóriahatékonysággal tervezték, lehetővé téve a nagyobb adathalmazok kezelését memóriaproblémák nélkül. Másrészről a Pandas memóriakorlátokkal szembesülhet, különösen nagy adathalmazok kezelésekor, mivel a Python memóriakezelése nem a leghatékonyabban megoldott. 

Szintaxis és API
A Pandas az adatelemzők kedvencévé vált kifejező és intuitív szintaxisa miatt. A DataFrame és Series szerkezete egyszerűen használható, és a könyvtár széles körű támogatást nyújt az adatmanipulációs műveletekhez. A Polars, bár a Pandas inspirálta, néhány változtatást vezetett be az API-ban, hogy javítsa a teljesítményt és tovább egyszerűsítse a szintaxist. Mindkét könyvtár hasonló funkcionalitást kínál, de a Polars tanulási görbéje hosszabbra nyúlhat azok számára, akik már megszokták a Pandas használatát. 

Kompatibilitás 
A Pandas jóval régebb óta létezik, és ennek következtében széles körű közösségi támogatást és integrációt élvez a különböző Python könyvtárakkal. Ez a széles körű elfogadás biztosítja, hogy a Pandas kompatibilis legyen különböző adatelemzési eszközökkel és keretrendszerekkel, ami megkönnyíti a meglévő projektekbe történő beillesztést. A Polarsnak, bár egyre népszerűbb, egyelőre kevesebb integrációja és közösségi támogatása van. 

Párhuzamos feldolgozás 
Amint az adatok növekednek, a párhuzamos feldolgozás a teljesítmény kulcsfontosságú eleme lesz. A Polars ezen a területen jeleskedik, beépített párhuzamos végrehajtási képességekkel, ami a Rust háttérnek köszönhető. Másrészről a Pandas elsősorban egyetlen processzorszálon fut, ami korlátozza a többmagos processzorok teljes kihasználását. 

A mi tapasztalatunk 

 
Természetesen minket sem hagyott nyugodni a gondolat, nekünk is ki kellett próbálnunk ezt az új csodafegyverként emlegetett eszközt. Egy egyszerű példán keresztül hasonlítottuk össze a Pandas és a Polars csomagok sebességét. Azt vizsgáltuk, hogy milyen gyorsan tudnak: 
 
  • fájlból adatot beolvasni, 
  • oszlop- és sorösszegeket számolni, 
  • szűrni egy adott tulajdonság szerint, 
  • aggregálni az adatot egy csoportosítás szerint, 
  • pivot tábla kimutatást készíteni. 
 
Mindegyik feladatot ötvenszer ismételtettük meg a rendszerrel, majd ezen futások átlagidejét hasonlítottuk különböző méretű adatokon: 1, 10, 100, 1000, 10 000, 100 000 és 1 000 000 soros véletlenszerű táblákat generáltunk a kísérlethez, melynek mindegyike 1 000 oszloppal bírt. Csak hogy el tudjuk képzelni, hogy ez mit jelenthet a valóságban, a legnagyobb táblánk egy közel 3,8 GB-os csv fájllá nőte ki magát, vagy mondhatjuk úgy is, hogy ez egy kb. félig teleírt Excel munkalapnak felel meg. A kiértékeléshez a Plotly csomagot használva készítettük el az adatvizualizációinkat.
(A cikk az ábrák után folytatódik!)

Ránézve az ábrákra könnyen láthatjuk, hogy az esetek többségében valóban jelentősen gyorsabban hajtotta végre a parancsokat a Polars, mint a Pandas. Ráadásul, mivel a függőleges tengelyek logaritmikus skálájúak, ezért a különbségek valójában jóval nagyobbak, mint azt első ránézésre gondolnánk: például az egymillió soros adat beolvasásának sebessége között egy majd’ háromszoros szorzó szerepel (Pandas: 152,5 sec, Polars: 52,2 sec).

Első blikkre úgy tűnik, hogy a most tesztelt feladatok közül egyedül a sorösszegek kiszámításánál maradt el a Polars sebessége a Pandasétól. Az eredményeinkből az is kiolvasható, hogy főként a nagyobb adattáblákkal birkózik meg gyorsabban a Polars. Természetesen nem állítjuk, hogy az itt bemutatott versenyeztetés egy teljeskörű benchmarknak minősül, de egy jó kiindulási pontot adhat az érdeklődő számára.
 

Most igyunk a medve bőrére! 

Összegezve a fentieket elmondhatjuk, hogy mind a Pandas, mind a Polars kiváló eszköz az adatmanipulációhoz Pythonban, és a választás közöttük a megoldandó projektek specifikus igényeitől függ.  Ha közepes méretű adathalmazokról van szó, és igényként felmerül a széles körű kompatibilitás a különböző Python könyvtárakkal, akkor a Pandas továbbra is remek választás. Azonban, ha az adathalmazok nagymértékben megnövekedtek, és elsősorban a teljesítményt és a memóriahatékonyságot kell szem előtt tartani, akkor a Polars lehet a jobb döntés. Bármelyikre is esik a választás, bizonyos, hogy mindkét könyvtár jelentősen fejleszti az adatok elemzésének képességeit, és hozzájárul az adat tudomány területén elért sikerekhez. Egészségünkre!

A képet természetesen mesterséges intelligencia generálta. A cikket írta: Bergmann Júlia