Egy új adatkészlettel való munka megkezdésekor az első lépés annak megértése. Ehhez például meg kell találnia a változók által elfogadott értéktartományokat, azok típusait, és meg kell tudnia a hiányzó értékek számát is.
A pandák könyvtára számos hasznos eszközt biztosít számunkra a feltáró adatelemzés (EDA) végrehajtásához. Használata előtt azonban általában általánosabb függvényekkel kell kezdenie, mint például a df.describe(). Meg kell azonban jegyezni, hogy az ilyen funkciók által biztosított képességek korlátozottak, és az adatkészletekkel való munka kezdeti szakaszai az EDA végrehajtása során nagyon gyakran nagyon hasonlóak egymáshoz.
A ma közzétett anyag szerzője azt mondja, hogy nem rajong az ismétlődő cselekvések végrehajtásáért. Ennek eredményeként a feltáró adatelemzés gyors és hatékony elvégzéséhez szükséges eszközöket keresve megtalálta a könyvtárat
Itt megnézzük a panda-profilozó könyvtár használatának jellemzőit a Titanic adatkészlettel példaként.
Feltáró adatelemzés pandák segítségével
Úgy döntöttem, hogy a Titanic adatkészletén kísérletezek a panda-profilozással a benne található különböző típusú adatok és a hiányzó értékek miatt. Úgy gondolom, hogy a panda-profilozó könyvtár különösen érdekes olyan esetekben, amikor az adatokat még nem tisztították meg, és jellemzőitől függően további feldolgozást igényel. Az ilyen feldolgozás sikeres végrehajtásához tudnia kell, hol kezdje el, és mire kell figyelnie. Itt jönnek jól a pandák profilozási képességei.
Először is importáljuk az adatokat, és pandákat használunk leíró statisztikák készítéséhez:
# импорт необходимых пакетов
import pandas as pd
import pandas_profiling
import numpy as np
# импорт данных
df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv')
# вычисление показателей описательной статистики
df.describe()
A kódrészlet végrehajtása után a következő ábrán láthatót kapja.
Szabványos pandaeszközökkel nyert leíró statisztikák
Bár sok hasznos információ található itt, nem tartalmaz mindent, amit a vizsgált adatokról érdekes lenne tudni. Például feltételezhetjük, hogy egy adatkeretben, egy struktúrában DataFrame
, 891 sor van. Ha ezt ellenőrizni kell, akkor egy másik kódsor szükséges a keret méretének meghatározásához. Bár ezek a számítások nem különösebben erőforrás-igényesek, a folyamatos ismétlésük időveszteséggel jár, amelyet valószínűleg jobban el lehetne tölteni az adatok tisztításával.
Feltáró adatelemzés panda-profilozással
Most tegyük ugyanezt a panda-profilozással:
pandas_profiling.ProfileReport(df)
A fenti kódsor végrehajtása egy jelentést generál feltáró adatelemzési mutatókkal. A fent látható kód kiírja a talált adatokat, de megteheti, hogy egy HTML-fájlt adjon ki, amelyet például megmutathat valakinek.
A jelentés első része tartalmaz egy Áttekintés részt, amely alapvető információkat ad az adatokról (megfigyelések száma, változók száma stb.). Tartalmazni fogja a riasztások listáját is, értesítve az elemzőt azokról a dolgokról, amelyekre különös figyelmet kell fordítani. Ezek a riasztások támpontokat adhatnak arra vonatkozóan, hogy hova összpontosíthatja az adattisztítási erőfeszítéseket.
Áttekintő jelentés szakasz
Feltáró változóelemzés
A jelentés Áttekintés része alatt az egyes változókról talál hasznos információkat. Többek között kis grafikonokat is tartalmaznak, amelyek leírják az egyes változók eloszlását.
Az életkor numerikus változóról
Amint az előző példából is látható, a panda-profilozás számos hasznos mutatót ad nekünk, például a hiányzó értékek százalékos arányát és számát, valamint a már látott leíró statisztikai mérőszámokat. Mert Age
egy numerikus változó, eloszlásának hisztogram formájában való megjelenítése lehetővé teszi, hogy arra következtessünk, hogy jobbra ferdített eloszlásunk van.
Ha egy kategorikus változót veszünk figyelembe, a kimeneti eredmények kissé eltérnek a numerikus változóknál tapasztaltaktól.
A Nem kategorikus változóról
Ugyanis a panda-profilozó könyvtár az átlag, minimum és maximum keresése helyett az osztályok számát találta meg. Mert Sex
— bináris változó, értékeit két osztály képviseli.
Ha szereti megvizsgálni a kódot, mint én, akkor érdekelheti, hogy a panda-profilozó könyvtár pontosan hogyan számítja ki ezeket a mutatókat. Ennek megismerése, mivel a könyvtár kódja nyitva van és elérhető a GitHubon, nem olyan nehéz. Mivel nem vagyok nagy rajongója a fekete dobozok használatának a projektjeimben, megnéztem a könyvtár forráskódját. Például így néz ki a numerikus változók feldolgozásának mechanizmusa, amelyet a függvény ábrázol
def describe_numeric_1d(series, **kwargs):
"""Compute summary statistics of a numerical (`TYPE_NUM`) variable (a Series).
Also create histograms (mini an full) of its distribution.
Parameters
----------
series : Series
The variable to describe.
Returns
-------
Series
The description of the variable as a Series with index being stats keys.
"""
# Format a number as a percentage. For example 0.25 will be turned to 25%.
_percentile_format = "{:.0%}"
stats = dict()
stats['type'] = base.TYPE_NUM
stats['mean'] = series.mean()
stats['std'] = series.std()
stats['variance'] = series.var()
stats['min'] = series.min()
stats['max'] = series.max()
stats['range'] = stats['max'] - stats['min']
# To avoid to compute it several times
_series_no_na = series.dropna()
for percentile in np.array([0.05, 0.25, 0.5, 0.75, 0.95]):
# The dropna() is a workaround for https://github.com/pydata/pandas/issues/13098
stats[_percentile_format.format(percentile)] = _series_no_na.quantile(percentile)
stats['iqr'] = stats['75%'] - stats['25%']
stats['kurtosis'] = series.kurt()
stats['skewness'] = series.skew()
stats['sum'] = series.sum()
stats['mad'] = series.mad()
stats['cv'] = stats['std'] / stats['mean'] if stats['mean'] else np.NaN
stats['n_zeros'] = (len(series) - np.count_nonzero(series))
stats['p_zeros'] = stats['n_zeros'] * 1.0 / len(series)
# Histograms
stats['histogram'] = histogram(series, **kwargs)
stats['mini_histogram'] = mini_histogram(series, **kwargs)
return pd.Series(stats, name=series.name)
Bár ez a kódrészlet meglehetősen nagynak és összetettnek tűnhet, valójában nagyon egyszerű megérteni. A lényeg az, hogy a könyvtár forráskódjában van egy függvény, amely meghatározza a változók típusát. Ha kiderül, hogy a könyvtár numerikus változóval találkozott, a fenti függvény megkeresi azokat a mérőszámokat, amelyeket néztünk. Ez a funkció szabványos panda-műveleteket használ a típusú objektumokkal való munkához Series
, mint series.mean()
. A számítási eredményeket egy szótár tárolja stats
. A hisztogramok a függvény adaptált változatával jönnek létre matplotlib.pyplot.hist
. Az adaptáció célja annak biztosítása, hogy a függvény különböző típusú adatkészletekkel működjön.
Vizsgált korrelációs mutatók és mintaadatok
A változók elemzésének eredménye után a Panda-profiling a Korrelációk részben megjeleníti a Pearson és Spearman korrelációs mátrixokat.
Pearson korrelációs mátrix
Szükség esetén a jelentés generálását kiváltó kódsorban beállíthatja a korreláció kiszámításakor használt küszöbértékek mutatóit. Ezzel megadhatja, hogy milyen erősségű korrelációt tartson fontosnak az elemzése szempontjából.
Végül a panda-profilozási jelentés a Minta szakaszban példaként megjelenít egy, az adatkészlet elejétől vett adatot. Ez a megközelítés kellemetlen meglepetésekhez vezethet, mivel az első néhány megfigyelés olyan mintát jelenthet, amely nem tükrözi a teljes adatsor jellemzőit.
A vizsgált mintaadatokat tartalmazó szakasz
Ennek eredményeként nem javaslom, hogy figyeljen erre az utolsó szakaszra. Ehelyett jobb a parancsot használni df.sample(5)
, amely véletlenszerűen választ ki 5 megfigyelést az adathalmazból.
Eredményei
Összefoglalva, a pandák profilozó könyvtára néhány hasznos képességet ad az elemzőnek, amelyek jól jöhetnek olyan esetekben, amikor gyorsan hozzávetőleges képet kell kapnia az adatokról, vagy át kell adnia valakinek egy intelligenciaelemzési jelentést. Ugyanakkor az adatokkal való valódi munka, figyelembe véve azok jellemzőit, manuálisan történik, mint a panda-profilozás használata nélkül.
Ha meg szeretné tekinteni, hogyan néz ki az összes intelligenciaadat-elemzés egyetlen Jupyter-füzetben, vessen egy pillantást
Kedves olvasók! Hol kezdi az új adatkészletek elemzését?
Forrás: will.com