Accelerera utforskande dataanalys med hjälp av pandas-profileringsbibliotek

Det första steget när man börjar arbeta med en ny datamängd är att förstå den. För att göra detta behöver du till exempel ta reda på värdeintervallen som accepteras av variablerna, deras typer och även ta reda på antalet saknade värden.

Pandabiblioteket ger oss många användbara verktyg för att utföra utforskande dataanalys (EDA). Men innan du använder dem behöver du vanligtvis börja med mer allmänna funktioner som df.describe(). Det bör dock noteras att funktionerna som tillhandahålls av sådana funktioner är begränsade, och de inledande stadierna av att arbeta med alla datamängder när man utför EDA är mycket ofta väldigt lika varandra.

Accelerera utforskande dataanalys med hjälp av pandas-profileringsbibliotek

Författaren till materialet vi publicerar idag säger att han inte är ett fan av att utföra repetitiva handlingar. Som ett resultat, på jakt efter verktyg för att snabbt och effektivt utföra utforskande dataanalys, hittade han biblioteket pandor-profilering. Resultaten av dess arbete uttrycks inte i form av vissa individuella indikatorer, utan i form av en ganska detaljerad HTML-rapport som innehåller det mesta av informationen om de analyserade data som du kan behöva känna till innan du börjar arbeta närmare med den.

Här kommer vi att titta på funktionerna i att använda pandas-profileringsbiblioteket med hjälp av Titanic-dataset som exempel.

Undersökande dataanalys med hjälp av pandor

Jag bestämde mig för att experimentera med pandor-profilering på Titanic-datauppsättningen på grund av de olika typerna av data den innehåller och närvaron av saknade värden i den. Jag tror att pandas-profileringsbiblioteket är särskilt intressant i fall där data ännu inte har rensats och kräver ytterligare bearbetning beroende på dess egenskaper. För att framgångsrikt utföra sådan bearbetning måste du veta var du ska börja och vad du ska vara uppmärksam på. Det är här pandas-profileringsmöjligheterna kommer väl till pass.

Först importerar vi data och använder pandor för att få beskrivande 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 att ha kört denna kodbit får du det som visas i följande figur.

Accelerera utforskande dataanalys med hjälp av pandas-profileringsbibliotek
Beskrivande statistik erhållen med vanliga pandasverktyg

Även om det finns mycket användbar information här, innehåller den inte allt som skulle vara intressant att veta om de data som studeras. Till exempel kan man anta att i en dataram, i en struktur DataFrame, det finns 891 rader. Om detta måste kontrolleras krävs ytterligare en kodrad för att bestämma storleken på ramen. Även om dessa beräkningar inte är särskilt resurskrävande, är att upprepa dem hela tiden slöseri med tid som förmodligen skulle kunna användas bättre för att rensa data.

Undersökande dataanalys med hjälp av pandas-profilering

Låt oss nu göra samma sak med pandas-profilering:

pandas_profiling.ProfileReport(df)

Om du kör ovanstående kodrad genereras en rapport med utforskande dataanalysindikatorer. Koden som visas ovan kommer att mata ut data som hittas, men du kan få den att mata ut en HTML-fil som du till exempel kan visa för någon.

Den första delen av rapporten kommer att innehålla en översiktsdel som ger grundläggande information om data (antal observationer, antal variabler, etc.). Den kommer också att innehålla en lista över varningar, som informerar analytikern om saker att vara särskilt uppmärksam på. Dessa varningar kan ge ledtrådar om var du kan fokusera dina datasaneringsinsatser.

Accelerera utforskande dataanalys med hjälp av pandas-profileringsbibliotek
Översiktsrapportsektion

Undersökande variabelanalys

Under avsnittet Översikt i rapporten kan du hitta användbar information om varje variabel. De innehåller bland annat små diagram som beskriver fördelningen av varje variabel.

Accelerera utforskande dataanalys med hjälp av pandas-profileringsbibliotek
Om den numeriska åldersvariabeln

Som du kan se från det tidigare exemplet ger pandas-profilering oss flera användbara indikatorer, såsom procent och antal saknade värden, såväl som de beskrivande statistikmått som vi redan har sett. Därför att Age är en numerisk variabel, visualisering av dess fördelning i form av ett histogram gör att vi kan dra slutsatsen att vi har en fördelning sned åt höger.

När man överväger en kategorisk variabel skiljer sig utdataresultaten något från de som finns för en numerisk variabel.

Accelerera utforskande dataanalys med hjälp av pandas-profileringsbibliotek
Om den kategoriska variabeln Sex

Nämligen, istället för att hitta medel, minimum och maximum, hittade pandas-profileringsbiblioteket antalet klasser. Därför att Sex — en binär variabel, dess värden representeras av två klasser.

Om du gillar att undersöka kod som jag, kanske du är intresserad av hur exakt pandas-profileringsbiblioteket beräknar dessa mätvärden. Att ta reda på detta, med tanke på att bibliotekskoden är öppen och tillgänglig på GitHub, är inte så svårt. Eftersom jag inte är ett stort fan av att använda svarta lådor i mina projekt, tog jag en titt på bibliotekets källkod. Så här ser till exempel mekanismen för att bearbeta numeriska variabler ut, representerad av 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)

Även om denna kodbit kan verka ganska stor och komplex, är den faktiskt väldigt enkel att förstå. Poängen är att det i bibliotekets källkod finns en funktion som bestämmer typerna av variabler. Om det visar sig att biblioteket har stött på en numerisk variabel kommer ovanstående funktion att hitta måtten vi tittade på. Den här funktionen använder vanliga pandasoperationer för att arbeta med objekt av typen Series, tycka om series.mean(). Beräkningsresultat lagras i en ordbok stats. Histogram genereras med hjälp av en anpassad version av funktionen matplotlib.pyplot.hist. Anpassning syftar till att säkerställa att funktionen kan arbeta med olika typer av datamängder.

Korrelationsindikatorer och provdata studerade

Efter resultaten av analysen av variablerna kommer pandor-profilering, i avsnittet Korrelationer, att visa Pearson- och Spearman-korrelationsmatriserna.

Accelerera utforskande dataanalys med hjälp av pandas-profileringsbibliotek
Pearson korrelationsmatris

Om det behövs kan du, i kodraden som utlöser genereringen av rapporten, ställa in indikatorerna för de tröskelvärden som används vid beräkning av korrelationen. Genom att göra detta kan du specificera vilken korrelationsstyrka som anses vara viktig för din analys.

Slutligen visar pandas-profileringsrapporten, i avsnittet Sample, som ett exempel en bit data hämtad från början av datamängden. Detta tillvägagångssätt kan leda till obehagliga överraskningar, eftersom de första observationerna kan representera ett urval som inte återspeglar egenskaperna hos hela datamängden.

Accelerera utforskande dataanalys med hjälp av pandas-profileringsbibliotek
Avsnitt som innehåller provdata som studeras

Som ett resultat rekommenderar jag inte att du uppmärksammar det här sista avsnittet. Istället är det bättre att använda kommandot df.sample(5), som slumpmässigt väljer 5 observationer från datamängden.

Resultat av

För att sammanfatta, pandas-profileringsbiblioteket ger analytikern några användbara funktioner som kommer att komma väl till pass i de fall där du snabbt behöver få en grov uppfattning om data eller skicka vidare en underrättelseanalysrapport till någon. Samtidigt utförs verkligt arbete med data, med hänsyn till dess funktioner, som utan att använda pandas-profilering, manuellt.

Om du vill ta en titt på hur all intelligensdataanalys ser ut i en Jupyter-anteckningsbok, ta en titt på detta mitt projekt skapat med nbviewer. Och i detta Du kan hitta motsvarande kod i GitHub-repositories.

Kära läsare! Var börjar man analysera nya datamängder?

Accelerera utforskande dataanalys med hjälp av pandas-profileringsbibliotek

Källa: will.com

Lägg en kommentar