Exploratory Data Analysis (EDA)

Introduction

In this example Example of exploratory data analysis (EDA), in this case we will deal with a dataset in csv format and we want to make a first exploratory with Python using the library Pandas, using a dataset of monthly average global temperatures for this example:

Pandas csv data extraction

import pandas as pd file_path = r'.\monthly_mean_global_temperatures.csv' temperatures_df = pd.read_csv(file_path) temperatures_df.info()



y como podemos ver, obtenemos información de alto nivel como:

  • tipo del objeto que contiene nuestro dataset: pandas dataframe

  • número de registros: 3288

  • lista de 3 atributos, con nombres: 'Source', 'Date' y 'Mean'

  • atributos numéricos: 'Mean' (tipo 'float64')

  • atributos no numéricos:  'Source' y 'Date' (tipo genérico 'object')

Una vez tenemos datos macroscópicos de nuestro dataset, podemos pasar a revisar algunos registros en más detalle para adquirir algo más de intuición sobre dichos datos, por ejemplo visualizando el contenido de los 10 primeros y últimos registros con todos sus atributos:

dataframe head rows

temperatures_df.head(6)



donde, según podemos apreciar en la columna 'Source', tenemos al parecer dos fuentes distintas de medición para el mismo valor de la temperatura media mensual (ya que el valor 'Date' se repite de dos en dos). Para confirmar esta apreciación, podemos comprobar los valores únicos que contiene nuestro atributo 'Source': 

column unique values

temperatures_df.Source.unique()

Una pregunta apropiada sería: ¿tenemos el mismo, o aproximadamente el mismo número de mediciones por parte de ambas fuentes? Para ello realizamos un conteo de los registros para cada valor de 'Source':

donde vemos que, como esperábamos, hay un número similar (en este caso igual) de mediciones procedentes de ambos sistemas de medición.

Una vez hemos realizado estas comprobaciones, cabe valorar qué queremos hacer con dichas mediciones de temperaturas globales; sea cual sea el objetivo (por ejemplo, realizar una predicción de temperaturas medias futuras) parece lógico escoger separar las medidas de las dos fuentes de medición en dos atributos distintos, o escoger la media de los sistemas de medición existentes para cada mes, o incluso una ponderación entre ellos si disponemos de más información sobre cada uno de dichos sistemas. En este caso, vamos a separar las medidas de cada fuente en dos atributos. Para realizar dicho filtro, vamos a hacer uso de un concepto muy útil en python, denominado máscara (conceptualmente similar a un filtro 'where'): 

mask_GCAG

mask_GISTEMP

Así pues, podemos crear una nueva versión del dataset que contenga como atributos las temperaturas mensuales medias de ambos sistemas de medición:

new_dataset

Si queremos revisar la estadística descriptiva de los atributos numéricos, podemos utilizar la expresión 'describe()':

dataframe describe

que indica que el valor medio de las temperaturas históricas grabadas se sitúa en torno a 0º, variando entre -0.78 y 1.35, indicando además su desviación estándar y los cuartiles.

Si queremos obtener un reporte genérico con pandas profiling, que nos ahorre gran parte del trabajo que tenemos que hacer en esta fase, podríamos aplicar el siguiente método:

pandas profiling

Así obtendríamos un reporte en formato html que se puede encontrar adjunto como el siguiente: