Fremskynd undersøgende dataanalyse ved hjælp af pandas-profileringsbibliotek

Det første skridt, når du begynder at arbejde med et nyt datasæt, er at forstå det. For at gøre dette skal du for eksempel finde ud af de værdiområder, der accepteres af variablerne, deres typer og også finde ud af antallet af manglende værdier.

Panda-biblioteket giver os mange nyttige værktøjer til at udføre eksplorativ dataanalyse (EDA). Men før du bruger dem, skal du normalt starte med mere generelle funktioner såsom df.describe(). Det skal dog bemærkes, at mulighederne for sådanne funktioner er begrænsede, og de indledende faser af arbejdet med datasæt, når der udføres EDA, er meget ofte meget lig hinanden.

Fremskynd undersøgende dataanalyse ved hjælp af pandas-profileringsbibliotek

Forfatteren til det materiale, vi udgiver i dag, siger, at han ikke er fan af at udføre gentagne handlinger. Som et resultat, på jagt efter værktøjer til hurtigt og effektivt at udføre sonderende dataanalyse, fandt han biblioteket pandas-profilering. Resultaterne af dets arbejde udtrykkes ikke i form af bestemte individuelle indikatorer, men i form af en ret detaljeret HTML-rapport, der indeholder de fleste af de oplysninger om de analyserede data, som du måske skal vide, før du begynder at arbejde tættere med dem.

Her vil vi se på funktionerne ved at bruge pandas-profileringsbiblioteket ved at bruge Titanic-datasættet som eksempel.

Udforskende dataanalyse ved hjælp af pandaer

Jeg besluttede at eksperimentere med panda-profilering på Titanic-datasættet på grund af de forskellige typer data, det indeholder, og tilstedeværelsen af ​​manglende værdier i det. Jeg mener, at pandas-profileringsbiblioteket er særligt interessant i tilfælde, hvor dataene endnu ikke er blevet renset og kræver yderligere behandling afhængigt af dets karakteristika. For at kunne udføre en sådan behandling med succes, skal du vide, hvor du skal starte, og hvad du skal være opmærksom på. Det er her, panda-profileringsmulighederne er nyttige.

Først importerer vi dataene og bruger pandaer til at opnå beskrivende statistik:

# импорт необходимых пакетов
import pandas as pd
import pandas_profiling
import numpy as np

# импорт данных
df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv')

# вычисление показателей описательной статистики
df.describe()

Efter at have udført dette stykke kode, vil du få det, der er vist i den følgende figur.

Fremskynd undersøgende dataanalyse ved hjælp af pandas-profileringsbibliotek
Beskrivende statistik opnået ved hjælp af standard pandas værktøjer

Selvom der er meget nyttig information her, indeholder den ikke alt, hvad der ville være interessant at vide om de data, der undersøges. For eksempel kan man antage, at i en dataramme, i en struktur DataFrame, der er 891 linjer. Hvis dette skal kontrolleres, kræves der en anden kodelinje for at bestemme størrelsen på rammen. Selvom disse beregninger ikke er særlig ressourcekrævende, er gentagelse af dem hele tiden bundet til spildtid, som sandsynligvis kunne bruges bedre på at rense dataene.

Udforskende dataanalyse ved hjælp af panda-profilering

Lad os nu gøre det samme ved at bruge pandas-profilering:

pandas_profiling.ProfileReport(df)

Udførelse af ovenstående kodelinje genererer en rapport med undersøgende dataanalyseindikatorer. Koden vist ovenfor vil udlæse de fundne data, men du kan få den til at udskrive en HTML-fil, som du for eksempel kan vise til nogen.

Den første del af rapporten vil indeholde en oversigtssektion, der giver grundlæggende oplysninger om dataene (antal observationer, antal variable osv.). Den vil også indeholde en liste over advarsler, der giver analytikeren besked om ting, man skal være særlig opmærksom på. Disse advarsler kan give fingerpeg om, hvor du kan fokusere din dataoprydningsindsats.

Fremskynd undersøgende dataanalyse ved hjælp af pandas-profileringsbibliotek
Oversigtsrapportsektion

Udforskende variabelanalyse

Under afsnittet Oversigt i rapporten kan du finde nyttige oplysninger om hver variabel. De omfatter blandt andet små diagrammer, der beskriver fordelingen af ​​hver variabel.

Fremskynd undersøgende dataanalyse ved hjælp af pandas-profileringsbibliotek
Om den numeriske aldersvariabel

Som du kan se fra det foregående eksempel, giver pandas-profilering os flere nyttige indikatorer, såsom procentdelen og antallet af manglende værdier, såvel som de beskrivende statistiske mål, som vi allerede har set. Fordi Age er en numerisk variabel, giver visualisering af dens fordeling i form af et histogram os mulighed for at konkludere, at vi har en fordeling skævt til højre.

Når man overvejer en kategorisk variabel, er outputresultaterne lidt forskellige fra dem, der findes for en numerisk variabel.

Fremskynd undersøgende dataanalyse ved hjælp af pandas-profileringsbibliotek
Om den kategoriske kønsvariabel

Nemlig, i stedet for at finde gennemsnit, minimum og maksimum, fandt pandas-profileringsbiblioteket antallet af klasser. Fordi Sex - en binær variabel, dens værdier er repræsenteret af to klasser.

Hvis du kan lide at undersøge kode som jeg gør, er du måske interesseret i, hvordan pandas-profileringsbiblioteket præcist beregner disse målinger. At finde ud af dette, da bibliotekskoden er åben og tilgængelig på GitHub, er ikke så svært. Da jeg ikke er en stor fan af at bruge sorte bokse i mine projekter, tog jeg et kig på bibliotekets kildekode. Sådan ser mekanismen til behandling af numeriske variable ud, repræsenteret ved funktionen beskriv_numerisk_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)

Selvom dette stykke kode kan virke ret stort og komplekst, er det faktisk meget nemt at forstå. Pointen er, at der i bibliotekets kildekode er en funktion, der bestemmer typerne af variable. Hvis det viser sig, at biblioteket har stødt på en numerisk variabel, vil ovenstående funktion finde de metrikker, vi kiggede på. Denne funktion bruger standard panda-operationer til at arbejde med objekter af typen Series, synes godt om series.mean(). Beregningsresultater gemmes i en ordbog stats. Histogrammer genereres ved hjælp af en tilpasset version af funktionen matplotlib.pyplot.hist. Tilpasning har til formål at sikre, at funktionen kan arbejde med forskellige typer af datasæt.

Korrelationsindikatorer og stikprøvedata undersøgt

Efter resultaterne af analysen af ​​variablerne vil panda-profilering i afsnittet Korrelationer vise Pearson- og Spearman-korrelationsmatricerne.

Fremskynd undersøgende dataanalyse ved hjælp af pandas-profileringsbibliotek
Pearson korrelationsmatrix

Hvis det er nødvendigt, kan du i den kodelinje, der udløser genereringen af ​​rapporten, indstille indikatorerne for de tærskelværdier, der bruges ved beregning af korrelationen. Ved at gøre dette kan du angive, hvilken korrelationsstyrke der anses for vigtig for din analyse.

Endelig viser pandas-profileringsrapporten, i prøveafsnittet, som et eksempel et stykke data taget fra begyndelsen af ​​datasættet. Denne tilgang kan føre til ubehagelige overraskelser, da de første par observationer kan repræsentere en stikprøve, der ikke afspejler egenskaberne for hele datasættet.

Fremskynd undersøgende dataanalyse ved hjælp af pandas-profileringsbibliotek
Afsnit, der indeholder prøvedata under undersøgelse

Som et resultat anbefaler jeg ikke at være opmærksom på dette sidste afsnit. I stedet er det bedre at bruge kommandoen df.sample(5), som tilfældigt vil vælge 5 observationer fra datasættet.

Resultaterne af

For at opsummere giver pandas-profileringsbiblioteket analytikeren nogle nyttige funktioner, der vil være nyttige i tilfælde, hvor du hurtigt har brug for at få en nogenlunde idé om dataene eller videregive en efterretningsanalyserapport til nogen. Samtidig udføres ægte arbejde med data, under hensyntagen til dets funktioner, som uden brug af panda-profilering, manuelt.

Hvis du vil tage et kig på, hvordan al intelligensdataanalyse ser ud i en Jupyter-notesbog, så tag et kig på dette mit projekt oprettet ved hjælp af nbviewer. Og i dette Du kan finde den tilsvarende kode i GitHub repositories.

Kære læsere! Hvor begynder du at analysere nye datasæt?

Fremskynd undersøgende dataanalyse ved hjælp af pandas-profileringsbibliotek

Kilde: www.habr.com

Tilføj en kommentar