2022/07/25

S2 Limpiando Datos con Python

LIMPIANDO DATOS CON PYTHON

Como Data Scientist no se puede nada más para tomar y eliminar donde faltan datos.

Aquí hay un caso muy específico mencionamos que PoolQC era una columna problemática, ¿por qué? porque tenían 99% de datos faltantes.

Pero, ¿qué significa ese PoolQC? ¿qué es lo que se va a eliminar?

Bueno, abrir el archivo.

Van a dar cntrl+B para buscarlo, se llama PoolQC, y lo encuentra.

Pool Quality, que significan estas siglas, y lo que está diciendo es que van a tener un valor de Ex si es de excelente calidad, Gd si es buena la calidad, TA si es promedio, Fa si es pasable o decente y NA si la casa no tiene alberca, ¿qué es lo que significa para nosotros?

Al tirar toda la columna esa le esta quitando un valor indispensable o irreemplazable a las casas, esta quitando cualquier información de albercas, por lo tanto, las casas que sí tienen alberca están perdiendo un valor agregado, al menos los datos, por lo tanto no se puede eliminar nada más así la columna.

Entonces, lo que se puede hacer es en vez de eliminar los datos faltantes es rellenarlos con algún otro valor.

Se tiene la columna PoolQC, y la va a dar "dame los valores únicos", es así a cada uno de los valores que se encuentran en esa columna, nos va a dar "nan", que es "not a number", "Ex" que es "excelente", "FA" que es "Fair" y "Gd" que es "good".

Ok, está bien, no hubo ningún "TA", no hay problema, pero van a darles valores numéricos.

Van a decir que para Ex es un 4, Gd es 3, TA es 2, FA es 1 y los valores nulos, que lo van a representar con np.nan, van a ser ceros, de esta forma no eliminamos la información de la columna y esta respetándola correctamente como debería ser.

Para ello van a utilizar la función map, le van a decir: a la columna PoolQC le va a aplicar una función de mapeo, donde el mapeo es el que se acaba de construir.

Ahora van a verificar el número de NAs en la columna.

Va a verificar la columna QC dame los elementos nulos y súmalos, y da un valor de 0, y si hace un sample, un sample significa que van a ir a tomar cinco valores aleatorios y los va a imprimir.

Entonces ya hay valores de cero.

Recuerden que el 99% de los datos eran nulos o NA y ahorita ya tiene un valor de 0, es un valor agregado que le esta dando a la columna.

Y en valores únicos se tiene 0, 4, 1 y 3.

Entonces, con eso se puede decir que limpiamos correctamente la columna PoolQC.

Como ese hay otros muchos casos en la base de datos, entonces hay que tener mucho cuidado con qué es lo que esta eliminando.

Se ve otro caso específico.

Se ve la columna "CentralAir".

Esta columna dice si la casa tiene un sistema de aire acondicionado central.

El caso específico es que esto no más tiene dos valores: "sí" o "no", pero en nuestra base de datos lo maneja como "N" y "Y".

Esto no es bueno cuando se quiere hacer modelado, siempre se quiere tener un valor numérico en vez de texto.

¿Para qué? Para que los algoritmos los puedan analizar correctamente Ok, entonces va a volver a mapear los valores se tiene N que le van a asignar un valor de cero, "Y" que le van a dar un valor de 1, entonces hace algo muy similar donde se mapea la columna CentralAir con el diccionario que se acaba de crear "centralAirvalues" y observe tiene el sample, y se tiene los datos correctamente modificados.

Otro caso muy específico.

Se tiene la columna "Electrical".

Esto indica el sistema eléctrico o qué tipo de sistema eléctrico tiene la casa.

Ahora podríamos decir simplemente cambiar los números como fue en el caso de la alberca como 0, 1, 2, 3 y 4.

El problema es que aquí hay una relación directa que relaciona un número con la calidad de la alberca.

Sabemos que el 0, representa lo peor, que es "no hay alberca" y 4 representa la excelencia, una alberca increíble.

En el caso de "Electrical" representa increíble.

Esto, si se recuerda de tipos de variables, se llaman datos ordinales.

A medida que crece el número, incrementa la calidad o incrementa la calidad de la variable.

En el caso de "Electrical" esto no es necesariamente lo mismo.

¿Por qué? Porque "Mix" no representa un valor de 0 o el peor caso, y el "SBrkr", que representa un circuito standard, no representa la excelencia.

No hay un orden en el cual los se puede ordenar en el que se puede decir que va de mejor a peor.

Este tipo de problemas donde se puede asignar directamente un número a un sistema de calidad se lo va a ver más adelante ya cuando este viendo modelado.

Esos se llaman "dummy variables" o "variables dummy".

Por el momento va a usar el mismo tratamiento pero se tiene que recordar en un futuro que esto es un problema y hay que tratarlo.

Para ello va primero a verificar cuántos datos faltan en la columna.

Y hay un dato faltante.

Entonces, hay que rellenarlo de alguna forma.

¿Cómo se lo puede hacer? Bueno, para ello se puede obtener la moda de nuestra columna.

La mayoría de los datos van a ser circuitos estándar, entonces la moda seguramente van a ser de circuitos estándar.

Aquí está, entonces les esta diciendo "dame la moda" de "eléctrico", de la columna "Electrical e imprímela".

Pandas tiene una función muy agradable llamada "fillna" que le van a decir "en vez de eliminar los na, rellénalos con algo", y en el caso específico lo van a rellenar con la moda.

Se puede tomar el promedio o se puede también tomar la mediana.

Cambia un poco dependiendo el tipo de columna que se tenga.

Esta es una columna de tipo de texto, entonces no se puede sacar el promedio de un texto.

Sólo se puede sacar la moda.

Entonces por eso esta utilizando eso aquí.

Se utiliza la moda, se reemplazamos los valores faltantes y ahora si se verifica cuántos números faltan o cuántas celdas faltan, 0.

Si lo hace se saca el valor único, están los cinco valores que marcaba en la descripción, se puede imprimirlos para ver.

Se ve todo correcto.

Entonces, en vez de asignar un número de 0 o 4 lo que se puede hacer es utilizar esta función llamada "astype".

Astype va a convertir una celda, perdón una columna de texto a categorías, y de esas categorías se puede obtener un valor numérico de ellas para no estar usando la función map.

Esto es una forma diferente de hacerlo.

La desventaja es que no se tiene control directo de qué números se asignan a las categorías pero recordemos que eso por el momento no importa, ¿por qué? porque en un futuro van a utilizar variables dummy.

Se ejecuta y se imprime, y ahora sí, le dio un valor de 4 al circuito estándar.

Entonces ya lo sabe tiene un valor numérico, ya se puede procesar más adelante.

En el siguiente tema se va a continuar con la limpieza de datos en este mismo cuaderno de Python.

Va a hablar sobre cuartiles y datos atípicos, que son ¿cómo se distribuye la información de las columnas y los valores que salen de la normal o del conjunto grueso de los datos, los que se podrían considerar datos raros o extraños o mal medidos.
 

No hay comentarios:

Publicar un comentario

S4 Cierre

Cierre Semana 4 Muchos de los problemas actuales a los que se enfrenta un científico de datos involucran el manejo de grandes cantidades de ...