Versnel verkennende data-analyse met behulp van de panda-profileringsbibliotheek

De eerste stap als u met een nieuwe dataset gaat werken, is deze begrijpen. Om dit te doen, moet u bijvoorbeeld het bereik van de waarden achterhalen die door de variabelen worden geaccepteerd, hun typen, en ook het aantal ontbrekende waarden achterhalen.

De pandabibliotheek biedt ons veel nuttige hulpmiddelen voor het uitvoeren van verkennende data-analyse (EDA). Maar voordat u ze gebruikt, moet u meestal beginnen met meer algemene functies zoals df.describe(). Er moet echter worden opgemerkt dat de mogelijkheden van dergelijke functies beperkt zijn, en dat de beginfasen van het werken met datasets bij het uitvoeren van EDA vaak erg op elkaar lijken.

Versnel verkennende data-analyse met behulp van de panda-profileringsbibliotheek

De auteur van het materiaal dat we vandaag publiceren, zegt dat hij geen fan is van het uitvoeren van repetitieve acties. Als gevolg hiervan vond hij, op zoek naar tools om snel en efficiënt verkennende data-analyses uit te voeren, de bibliotheek panda's-profilering. De resultaten van zijn werk worden niet uitgedrukt in de vorm van bepaalde individuele indicatoren, maar in de vorm van een vrij gedetailleerd HTML-rapport met de meeste informatie over de geanalyseerde gegevens die u mogelijk moet weten voordat u er nauwer mee gaat werken.

Hier zullen we kijken naar de kenmerken van het gebruik van de panda-profileringsbibliotheek met de Titanic-dataset als voorbeeld.

Verkennende data-analyse met panda's

Ik besloot te experimenteren met panda-profilering op de Titanic-dataset vanwege de verschillende soorten gegevens die het bevat en de aanwezigheid van ontbrekende waarden daarin. Ik ben van mening dat de panda-profileringsbibliotheek vooral interessant is in gevallen waarin de gegevens nog niet zijn opgeschoond en verdere verwerking vereisen, afhankelijk van de kenmerken ervan. Om een ​​dergelijke verwerking succesvol uit te voeren, moet u weten waar u moet beginnen en waar u op moet letten. Dit is waar de mogelijkheden voor panda-profilering van pas komen.

Eerst importeren we de gegevens en gebruiken we panda's om beschrijvende statistieken te verkrijgen:

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

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

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

Nadat u dit stukje code hebt uitgevoerd, krijgt u wat in de volgende afbeelding wordt weergegeven.

Versnel verkennende data-analyse met behulp van de panda-profileringsbibliotheek
Beschrijvende statistieken verkregen met behulp van standaard panda-tools

Hoewel er hier veel nuttige informatie staat, bevat deze niet alles wat interessant zou zijn om te weten over de onderzochte gegevens. Je zou dat bijvoorbeeld kunnen aannemen in een dataframe, in een structuur DataFrame, zijn er 891 rijen. Als dit gecontroleerd moet worden, is er nog een regel code nodig om de grootte van het frame te bepalen. Hoewel deze berekeningen niet bijzonder arbeidsintensief zijn, leidt het voortdurend herhalen ervan tot tijdverspilling die waarschijnlijk beter besteed zou kunnen worden aan het opschonen van de gegevens.

Verkennende data-analyse met behulp van panda-profilering

Laten we nu hetzelfde doen met behulp van panda's-profilering:

pandas_profiling.ProfileReport(df)

Door de bovenstaande coderegel uit te voeren, wordt een rapport gegenereerd met verkennende indicatoren voor gegevensanalyse. De hierboven getoonde code zal de gevonden gegevens uitvoeren, maar u kunt van het resultaat een HTML-bestand maken dat u bijvoorbeeld aan iemand kunt laten zien.

Het eerste deel van het rapport bevat een sectie Overzicht, waarin basisinformatie over de gegevens wordt gegeven (aantal waarnemingen, aantal variabelen, enz.). Bovendien zal het een lijst met waarschuwingen bevatten, waarin de analist op de hoogte wordt gesteld van zaken waar hij speciale aandacht aan moet besteden. Deze waarschuwingen kunnen aanwijzingen geven over waar u uw inspanningen op het gebied van gegevensopruiming op kunt richten.

Versnel verkennende data-analyse met behulp van de panda-profileringsbibliotheek
Overzicht rapportsectie

Verkennende variabelenanalyse

Onder het gedeelte Overzicht van het rapport vindt u nuttige informatie over elke variabele. Ze bevatten onder meer kleine diagrammen die de verdeling van elke variabele beschrijven.

Versnel verkennende data-analyse met behulp van de panda-profileringsbibliotheek
Over de numerieke variabele leeftijd

Zoals je uit het vorige voorbeeld kunt zien, geeft panda-profilering ons verschillende nuttige indicatoren, zoals het percentage en het aantal ontbrekende waarden, evenals de beschrijvende statistische metingen die we al hebben gezien. Omdat Age een numerieke variabele is, stelt visualisatie van de verdeling ervan in de vorm van een histogram ons in staat te concluderen dat we een verdeling naar rechts hebben.

Wanneer we een categorische variabele beschouwen, wijken de uitvoerresultaten enigszins af van de resultaten die voor een numerieke variabele worden gevonden.

Versnel verkennende data-analyse met behulp van de panda-profileringsbibliotheek
Over de categorische variabele Geslacht

In plaats van het gemiddelde, het minimum en het maximum te vinden, heeft de panda-profileringsbibliotheek namelijk het aantal klassen gevonden. Omdat Sex — een binaire variabele, de waarden ervan worden weergegeven door twee klassen.

Als je graag code onderzoekt zoals ik, ben je misschien geïnteresseerd in hoe de panda-profileringsbibliotheek deze statistieken precies berekent. Hierachter komen, gezien het feit dat de bibliotheekcode open en beschikbaar is op GitHub, is niet zo moeilijk. Omdat ik geen grote fan ben van het gebruik van zwarte dozen in mijn projecten, heb ik de broncode van de bibliotheek bekeken. Zo ziet het mechanisme voor het verwerken van numerieke variabelen er bijvoorbeeld uit, weergegeven door de functie beschrijven_numeriek_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)

Hoewel dit stuk code vrij groot en complex lijkt, is het eigenlijk heel eenvoudig te begrijpen. Het punt is dat er in de broncode van de bibliotheek een functie is die de soorten variabelen bepaalt. Als blijkt dat de bibliotheek een numerieke variabele is tegengekomen, zal de bovenstaande functie de metrieken vinden waar we naar keken. Deze functie maakt gebruik van standaard Panda-bewerkingen voor het werken met objecten van het type Series, leuk vinden series.mean(). Berekeningsresultaten worden opgeslagen in een woordenboek stats. Histogrammen worden gegenereerd met behulp van een aangepaste versie van de functie matplotlib.pyplot.hist. Aanpassing is erop gericht ervoor te zorgen dat de functie met verschillende soorten datasets kan werken.

Correlatie-indicatoren en steekproefgegevens bestudeerd

Na de resultaten van de analyse van de variabelen zal Panda-profilering in de sectie Correlaties de correlatiematrices van Pearson en Spearman weergeven.

Versnel verkennende data-analyse met behulp van de panda-profileringsbibliotheek
Pearson-correlatiematrix

Indien nodig kunt u in de coderegel die het genereren van het rapport activeert, de indicatoren instellen van de drempelwaarden die worden gebruikt bij het berekenen van de correlatie. Door dit te doen, kunt u specificeren welke correlatiesterkte belangrijk wordt geacht voor uw analyse.

Ten slotte toont het panda-profileringsrapport, in de sectie Voorbeeld, als voorbeeld een stukje gegevens uit het begin van de dataset. Deze aanpak kan tot onaangename verrassingen leiden, aangezien de eerste paar waarnemingen een steekproef kunnen vertegenwoordigen die niet de kenmerken van de gehele dataset weerspiegelt.

Versnel verkennende data-analyse met behulp van de panda-profileringsbibliotheek
Sectie met voorbeeldgegevens die worden bestudeerd

Daarom raad ik af om op dit laatste gedeelte te letten. In plaats daarvan is het beter om de opdracht te gebruiken df.sample(5), die willekeurig 5 waarnemingen uit de dataset selecteert.

Resultaten van

Samenvattend geeft de panda-profileringsbibliotheek de analist een aantal nuttige mogelijkheden die van pas zullen komen in gevallen waarin u snel een globaal idee van de gegevens moet krijgen of een intelligentieanalyserapport aan iemand moet doorgeven. Tegelijkertijd wordt het echte werk met gegevens, rekening houdend met de kenmerken ervan, handmatig uitgevoerd, zonder gebruik te maken van panda's-profilering.

Als je wilt zien hoe alle analyses van intelligentiegegevens eruit zien in één Jupyter-notebook, kijk dan eens naar deze mijn project gemaakt met nbviewer. En in deze Je kunt de bijbehorende code vinden in GitHub-repository's.

Beste lezers! Waar begin je met het analyseren van nieuwe datasets?

Versnel verkennende data-analyse met behulp van de panda-profileringsbibliotheek

Bron: www.habr.com

Voeg een reactie