Saltar a contenido

5. LIMPIEZA DE DATOS

Limpieza de datos

La limpieza de datos (data cleaning o data scrubbing) consiste en el descubrimiento y corrección o eliminación de datos erróneos en una tabla, base de datos o dataframe. El proceso de limpieza de datos permite identificar datos incompletos, incorrectos, inexactos, no pertinentes, etc y luego substituir, modificar o eliminar estos datos sucios ("data duty").

Los datos de una fuente, a la hora de consumirlos suelen ser:

  • Inconsistentes: con información relevante y no relevante.
  • Imprecisos: contienen datos incorrectos, valores perdidos, etc.
  • Repetitivos: duplicidad de datos.

Exploración

Una vez que tenemos descargado el dataset, lo primero que hay que hacer es reconocer con qué nos estamos enfrentando. Para ello visualizamos el dataset.

df = pd.read_csv('https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv')
df.head()
También podemos visualizar desde abajo con tail.

Para obtener datos rápidos de lo que hay dentro, utilizamos el método describe.

df.describe()

La función describe nos muestra los datos relevantes para columnas que contengan números.

Para obtener datos de columnas que contienen valores de otro tipo como por ejemplo cadenas, debemos agregar un parámetro para que tome en cuenta a todo el dataset y no solo a los valores numéricos.

df.describe(include='all')

Las tres categorías que se incluyen son:

  • unique: cantidad de valores únicos.
  • top: valor único con más repeticiones.
  • freq: cantidad de veces que aparece el valor más repetido.

Eliminar las columnas irrelevantes

Las columnas que no sean interesantes para el desarrollo de nuestro problema las podemos eliminar.

En nuestro ejemplo vamos a eliminar la columna nombre pero como luego nos va a hacer falta para continuar con los ejemplos, vamos a asignar el dataframe a df1 y sobre éste eliminamos el campo nombre.

df1=df
df1.drop('nombre', inplace=True, axis=1)

Tipos de datos

Obtener los tipos de datos de las diferentes columnas para ver si son correctos.

df.dtypes
Si comprobamos que hay algún tipo de dato erróneo podemos cambiarlo, por ejemplo el campo edad que es entero queremos cambiarlo a float:

df[['edad']]=df[['edad']].astype(float)
df.dtypes

Tratar con los datos perdidos

Otro paso en la limpieza de datos es averiguar si el dataset está completo o tiene datos perdidos.

missing_data=df.isnull()
for column in missing_data.columns.values.tolist():
  print(column)
  print(missing_data[column].value_counts())
  print('')

Los valores perdidos los podemos reemplazar, para ello hay que averiguar qué tipo de dato es y cómo tratarlo.

  • Strings: la mejor práctica es reemplazar el dato perdido por el que se repite con más frecuencia.

  • Integers: el dato perdido debe reemplazarse por el promedio de su misma columna.

En el caso de que sea strings:

Primero comprobamos el valor que más se repite que vendrá indicado en la etiqueta top.

import numpy as np
df.describe(include=[np.object])
En el caso del ejemplo, como no hay ningún valor vacío en el campo nombre, vamos a eliminar el nombre de Rosa Díaz Díaz para luego poder reemplazarlo:

df.replace('Rosa Díaz Díaz',np.nan, inplace=True)
Luego lo reemplazamos:

df['nombre'].replace(np.nan,'José Luis Martinez Izquierdo', inplace=True
En el caso de que sea integer:

Se obtiene la media:

media=df['colesterol'].astype(float).mean(axis=0)
print(media)
Reemplazamos el valor:

df['colesterol'].replace(np.nan, media, inplace=True)

Reemplazar usando Media, Mediana o Moda

df = pd.read_csv('https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv')
x = df["colesterol"].mean()
df["colesterol"].fillna(x, inplace = True)

Reemplazar el valor de las filas si es necesario

Para aplicar mecanismos de inteligencia artificial, necesitamos que todos los datos sean numéricos y nos podría interesar modificar los valores de algún campo a numérico. En el caso del ejemplo, queremos cambiar el campo sexo y asignarle un 1 si es hombre y un 0 si es mujer.

replace={'H':1, 'M':0}
df=df.replace({"sexo":replace})

Outliers

Outlier es cualquier dato que difiere significativamente del promedio o rango observado del resto de nuestros datos. Estos valores se pueden detectar a simple vista revisando todos los datos de la columna o también mediante gráficos.

Datos categóricos

Los datos categóricos toman un número limitado y generalmente fijo de valores posibles. Por ejemplo: género, clase social, tipo de sangre, etc.

Existen dos tipos de variables categóricas:

  • Variables ordinales: sus valores pueden ser ordenados jerárquicamente, como, por ejemplo, el nivel de educación de una persona (sin estudios, primaria, secundaria o superiores).
  • Variables nominales: no se puede establecer un orden en sus categorías. Algunos ejemplos son el sexo de una persona (hombre o mujer), el color del pelo (castaño, rubio, negro o rojo) o el país de nacimiento (España, Italia, Francia, etc.).

Realiza los siguientes ejercicios:

Limpieza y preparación I

Limpieza y preparación II