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()
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
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])
df.replace('Rosa Díaz Díaz',np.nan, inplace=True)
df['nombre'].replace(np.nan,'José Luis Martinez Izquierdo', inplace=True
Se obtiene la media:
media=df['colesterol'].astype(float).mean(axis=0)
print(media)
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: