A feltáró adatelemzés felgyorsítása a panda-profilozó könyvtár segítségével

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 feltáró adatelemzés felgyorsítása a panda-profilozó könyvtár segítségével

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 panda-profilozás. Munkájának eredményeit nem bizonyos egyedi mutatók formájában fejezik ki, hanem egy meglehetősen részletes HTML-jelentés formájában, amely tartalmazza a legtöbb információt az elemzett adatokról, amelyeket tudnia kell, mielőtt elkezdené a velük való szorosabb együttműködést.

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.

A feltáró adatelemzés felgyorsítása a panda-profilozó könyvtár segítségével
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.

A feltáró adatelemzés felgyorsítása a panda-profilozó könyvtár segítségével
Á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.

A feltáró adatelemzés felgyorsítása a panda-profilozó könyvtár segítségével
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 feltáró adatelemzés felgyorsítása a panda-profilozó könyvtár segítségével
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 leírás_numerikus_1d:

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.

A feltáró adatelemzés felgyorsítása a panda-profilozó könyvtár segítségével
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 feltáró adatelemzés felgyorsítása a panda-profilozó könyvtár segítségével
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 ezt az nbviewer segítségével létrehozott projektem. És be ezt A megfelelő kódot a GitHub-tárolókban találhatja meg.

Kedves olvasók! Hol kezdi az új adatkészletek elemzését?

A feltáró adatelemzés felgyorsítása a panda-profilozó könyvtár segítségével

Forrás: will.com

Hozzászólás