El primer pas per començar a treballar amb un nou conjunt de dades és entendre'l. Per fer-ho, cal, per exemple, conèixer els intervals de valors acceptats per les variables, els seus tipus, i també conèixer el nombre de valors que falten.
La biblioteca pandas ens proporciona moltes eines útils per realitzar anàlisis exploratòries de dades (EDA). Però abans d'utilitzar-los, normalment cal començar amb funcions més generals com ara df.describe(). Tanmateix, cal tenir en compte que les capacitats que ofereixen aquestes funcions són limitades i que les etapes inicials de treball amb qualsevol conjunt de dades quan es realitza EDA sovint són molt semblants entre si.
L'autor del material que publiquem avui diu que no és aficionat a fer accions repetitives. Com a resultat, a la recerca d'eines per realitzar de manera ràpida i eficient l'anàlisi exploratòria de dades, va trobar la biblioteca
Aquí veurem les característiques d'utilitzar la biblioteca de perfils de pandes utilitzant el conjunt de dades del Titanic com a exemple.
Anàlisi exploratòria de dades amb pandes
Vaig decidir experimentar amb el perfil de pandes al conjunt de dades del Titanic a causa dels diferents tipus de dades que conté i la presència de valors que hi falten. Crec que la biblioteca de perfils de pandas és especialment interessant en els casos en què les dades encara no s'han netejat i requereixen un processament posterior en funció de les seves característiques. Per dur a terme amb èxit aquest processament, cal saber per on començar i a què cal prestar atenció. Aquí és on les capacitats de perfil de pandas són útils.
Primer, importem les dades i fem servir pandas per obtenir estadístiques descriptives:
# импорт необходимых пакетов
import pandas as pd
import pandas_profiling
import numpy as np
# импорт данных
df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv')
# вычисление показателей описательной статистики
df.describe()
Després d'executar aquest fragment de codi, obtindreu el que es mostra a la figura següent.
Estadístiques descriptives obtingudes mitjançant eines estàndard pandas
Tot i que aquí hi ha molta informació útil, no conté tot el que seria interessant saber sobre les dades en estudi. Per exemple, es podria suposar que en un marc de dades, en una estructura DataFrame
, hi ha 891 files. Si cal comprovar-ho, cal una altra línia de codi per determinar la mida del marc. Tot i que aquests càlculs no són especialment intensius en recursos, repetir-los tot el temps suposarà perdre temps que probablement es podria dedicar millor a netejar les dades.
Anàlisi exploratòria de dades mitjançant l'elaboració de perfils de pandas
Ara fem el mateix utilitzant Pandas-profiling:
pandas_profiling.ProfileReport(df)
L'execució de la línia de codi anterior generarà un informe amb indicadors exploratoris d'anàlisi de dades. El codi que es mostra a dalt mostrarà les dades trobades, però podeu fer que emeti un fitxer HTML que podeu mostrar a algú, per exemple.
La primera part de l'informe inclourà un apartat de Visió general, que ofereix informació bàsica sobre les dades (nombre d'observacions, nombre de variables, etc.). També contindrà una llista d'alertes, notificant a l'analista les coses a les quals cal prestar especial atenció. Aquestes alertes poden proporcionar pistes sobre on podeu centrar els vostres esforços de neteja de dades.
Secció d'informe de visió general
Anàlisi de variables exploratòries
A sota de la secció Visió general de l'informe podeu trobar informació útil sobre cada variable. Inclouen, entre altres coses, petits gràfics que descriuen la distribució de cada variable.
Sobre la variable numèrica d'edat
Com podeu veure a l'exemple anterior, el perfil de pandas ens ofereix diversos indicadors útils, com ara el percentatge i el nombre de valors que falten, així com les mesures estadístiques descriptives que ja hem vist. Perquè Age
és una variable numèrica, la visualització de la seva distribució en forma d'histograma ens permet concloure que tenim una distribució esbiaixada cap a la dreta.
Quan es considera una variable categòrica, els resultats de sortida són lleugerament diferents dels trobats per a una variable numèrica.
Sobre la variable categòrica Sexe
És a dir, en comptes de trobar la mitjana, mínima i màxima, la biblioteca de perfils de pandes va trobar el nombre de classes. Perquè Sex
— una variable binària, els seus valors estan representats per dues classes.
Si us agrada examinar el codi com jo, potser us interessarà com calcula exactament aquestes mètriques la biblioteca de perfils de pandes. Esbrinar-ho, atès que el codi de la biblioteca està obert i disponible a GitHub, no és tan difícil. Com que no sóc un gran fan d'utilitzar caixes negres als meus projectes, vaig fer una ullada al codi font de la biblioteca. Per exemple, així és el mecanisme de processament de variables numèriques, representat per la funció
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)
Tot i que aquest fragment de codi pot semblar bastant gran i complex, en realitat és molt senzill d'entendre. La qüestió és que al codi font de la biblioteca hi ha una funció que determina els tipus de variables. Si resulta que la biblioteca ha trobat una variable numèrica, la funció anterior trobarà les mètriques que estàvem mirant. Aquesta funció utilitza operacions pandas estàndard per treballar amb objectes de tipus Series
, M'agrada series.mean()
. Els resultats del càlcul s'emmagatzemen en un diccionari stats
. Els histogrames es generen mitjançant una versió adaptada de la funció matplotlib.pyplot.hist
. L'adaptació té com a objectiu garantir que la funció pugui funcionar amb diferents tipus de conjunts de dades.
Indicadors de correlació i dades mostrals estudiades
Després dels resultats de l'anàlisi de les variables, Pandas-profiling, a la secció Correlacions, mostrarà les matrius de correlació de Pearson i Spearman.
Matriu de correlació de Pearson
Si cal, podeu, a la línia de codi que desencadena la generació de l'informe, establir els indicadors dels valors de llindar utilitzats per calcular la correlació. En fer això, podeu especificar quina força de correlació es considera important per a la vostra anàlisi.
Finalment, l'informe de perfils de pandas, a la secció Mostra, mostra, com a exemple, una dada presa des de l'inici del conjunt de dades. Aquest enfocament pot provocar sorpreses desagradables, ja que les primeres observacions poden representar una mostra que no reflecteix les característiques de tot el conjunt de dades.
Secció que conté dades de mostra en estudi
Com a resultat, no recomano parar atenció a aquesta darrera secció. En canvi, és millor utilitzar l'ordre df.sample(5)
, que seleccionarà aleatòriament 5 observacions del conjunt de dades.
Resultats de
En resum, la biblioteca de perfils de pandas ofereix a l'analista algunes capacitats útils que seran útils en els casos en què necessiteu fer-vos una idea aproximada de les dades o transmetre un informe d'anàlisi d'intel·ligència a algú. Al mateix temps, el treball real amb dades, tenint en compte les seves característiques, es realitza, com sense utilitzar el perfil de pandas, manualment.
Si voleu fer una ullada a com són totes les anàlisis de dades d'intel·ligència en un quadern de Jupyter, feu una ullada a
Benvolguts lectors! Per on comenceu a analitzar nous conjunts de dades?
Font: www.habr.com