O primeiro paso ao comezar a traballar cun novo conxunto de datos é entendelo. Para iso, cómpre, por exemplo, coñecer os intervalos de valores aceptados polas variables, os seus tipos e tamén coñecer o número de valores que faltan.
A biblioteca de pandas ofrécenos moitas ferramentas útiles para realizar análises exploratorias de datos (EDA). Pero antes de usalos, normalmente cómpre comezar con funcións máis xerais como df.describe(). Non obstante, hai que ter en conta que as capacidades proporcionadas por tales funcións son limitadas e que as etapas iniciais de traballar con calquera conxunto de datos ao realizar EDA adoitan ser moi similares entre si.
O autor do material que publicamos hoxe di que non lle gusta realizar accións repetitivas. Como resultado, na procura de ferramentas para realizar de forma rápida e eficiente análise de datos exploratorios, atopou a biblioteca
Aquí veremos as características do uso da biblioteca de perfiles de pandas usando o conxunto de datos Titanic como exemplo.
Análise exploratoria de datos utilizando pandas
Decidín experimentar co perfil de pandas no conxunto de datos Titanic debido aos diferentes tipos de datos que contén e á presenza de valores que faltan nel. Creo que a biblioteca de perfiles de pandas é especialmente interesante nos casos nos que os datos aínda non foron limpados e requiren un procesamento posterior dependendo das súas características. Para realizar con éxito tal procesamento, cómpre saber por onde comezar e a que prestar atención. Aquí é onde son útiles as capacidades de creación de perfiles de pandas.
En primeiro lugar, importamos os datos e usamos pandas para obter estatísticas descritivas:
# импорт необходимых пакетов
import pandas as pd
import pandas_profiling
import numpy as np
# импорт данных
df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv')
# вычисление показателей описательной статистики
df.describe()
Despois de executar este anaco de código, obterá o que se mostra na seguinte figura.
Estatísticas descritivas obtidas mediante ferramentas estándar de pandas
Aínda que aquí hai moita información útil, non contén todo o que sería interesante saber sobre os datos en estudo. Por exemplo, pódese supoñer que nun marco de datos, nunha estrutura DataFrame
, hai 891 liñas. Se é necesario verificar isto, é necesaria outra liña de código para determinar o tamaño do cadro. Aínda que estes cálculos non son especialmente intensivos en recursos, repetilos todo o tempo está obrigado a perder tempo que probablemente se podería gastar mellor na limpeza dos datos.
Análise exploratoria de datos mediante a elaboración de perfiles de pandas
Agora imos facer o mesmo usando pandas-profiling:
pandas_profiling.ProfileReport(df)
Ao executar a liña de código anterior xerarase un informe con indicadores exploratorios de análise de datos. O código que se mostra arriba mostrará os datos atopados, pero podes facer que saia un ficheiro HTML que podes mostrar a alguén, por exemplo.
A primeira parte do informe conterá un apartado Visión xeral, que ofrece información básica sobre os datos (número de observacións, número de variables, etc.). Tamén conterá unha lista de alertas, notificando ao analista as cousas ás que debe prestar especial atención. Estas alertas poden proporcionar pistas sobre onde pode centrar os seus esforzos de limpeza de datos.
Sección de informe xeral
Análise de variables exploratorias
Debaixo da sección Visión xeral do informe podes atopar información útil sobre cada variable. Inclúen, entre outras cousas, pequenos gráficos que describen a distribución de cada variable.
Sobre a variable numérica da idade
Como podedes ver no exemplo anterior, a elaboración de perfiles de pandas ofrécenos varios indicadores útiles, como a porcentaxe e o número de valores que faltan, así como as medidas estatísticas descritivas que xa vimos. Porque Age
é unha variable numérica, a visualización da súa distribución en forma de histograma permítenos concluír que temos unha distribución sesgada cara á dereita.
Cando se considera unha variable categórica, os resultados de saída son lixeiramente diferentes dos atopados para unha variable numérica.
Sobre a variable categórica Sexo
É dicir, en lugar de atopar a media, o mínimo e o máximo, a biblioteca de perfiles de pandas atopou o número de clases. Porque Sex
— unha variable binaria, os seus valores están representados por dúas clases.
Se che gusta examinar o código coma min, quizais che interese saber como calcula exactamente estas métricas a biblioteca de perfiles de pandas. Descubrir isto, dado que o código da biblioteca está aberto e dispoñible en GitHub, non é tan difícil. Como non son un gran fan de usar caixas negras nos meus proxectos, boteille un ollo ao código fonte da biblioteca. Por exemplo, así é o mecanismo para procesar variables numéricas, representado pola función
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)
Aínda que este anaco de código pode parecer bastante grande e complexo, en realidade é moi sinxelo de entender. A cuestión é que no código fonte da biblioteca hai unha función que determina os tipos de variables. Se resulta que a biblioteca atopou unha variable numérica, a función anterior atopará as métricas que estabamos mirando. Esta función usa operacións pandas estándar para traballar con obxectos de tipo Series
, como series.mean()
. Os resultados do cálculo gárdanse nun dicionario stats
. Os histogramas xéranse usando unha versión adaptada da función matplotlib.pyplot.hist
. A adaptación ten como obxectivo garantir que a función poida funcionar con distintos tipos de conxuntos de datos.
Indicadores de correlación e datos mostrais estudados
Despois dos resultados da análise das variables, pandas-profiling, na sección Correlacións, mostrará as matrices de correlación de Pearson e Spearman.
Matriz de correlación de Pearson
Se é necesario, pode, na liña de código que desencadea a xeración do informe, establecer os indicadores dos valores límite utilizados ao calcular a correlación. Ao facelo, pode especificar que forza de correlación se considera importante para a súa análise.
Finalmente, o informe de perfil de pandas, na sección Mostra, mostra, a modo de exemplo, un dato tomado desde o inicio do conxunto de datos. Este enfoque pode dar lugar a sorpresas desagradables, xa que as primeiras observacións poden representar unha mostra que non reflicte as características de todo o conxunto de datos.
Sección que contén datos de mostra en estudo
Como resultado, non recomendo prestar atención a esta última sección. Pola contra, é mellor usar o comando df.sample(5)
, que seleccionará aleatoriamente 5 observacións do conxunto de datos.
Resultados de
En resumo, a biblioteca de perfiles de pandas ofrécelle ao analista unhas capacidades útiles que lle resultarán útiles nos casos en que necesites facerte rapidamente unha idea aproximada dos datos ou transmitir un informe de análise de intelixencia a alguén. Ao mesmo tempo, realízase un traballo real con datos, tendo en conta as súas características, como sen usar o perfilado de pandas, manualmente.
Se queres botar unha ollada ao aspecto de todas as análises de datos de intelixencia nun caderno de Jupyter, bótalle unha ollada a
Queridos lectores! Por onde comezas a analizar novos conxuntos de datos?
Fonte: www.habr.com