Big Data Fundamentals Javier Di Deco Sampedro
Taller S3
Dinámica y objetivo I • Recibirás un conjunto de datos repartido en 3 tablas, más algunos listados de información auxiliar. • Dichos datos presentarán diversas casuísticas de entre las que vimos en el ABP y otras. • Tendrás que ir siguiendo los pasos del proceso de limpieza y preparación de datos: • Identificando la situación que abordas (ej: comprobando la semántica de las variables). • Anotando el resultado o los problemas encontrados, si los hay, y cómo has dado con ellos (ej: en el campo XXX, que debería haber DNIs, hay algunos nombres, en las filas 16, 19 y 25). • Explicando la decisión tomada para tratarlo (ej: sustituyo los datos incorrectos por otro valor, o elimino la fila entera o la columna, o genero tal/es columna/s a partir de otra u otras…). • Si en algún caso se te ocurre qué pudo haber ocasionado el error o la inconsistencia, coméntalo.
Dinámica y objetivo II Para que sea manejable, el conjunto de datos que se te proporcionará es muy pequeño. Esto quiere decir que los problemas los podrás identificar a simple vista y resolverlos a mano pero lo que se te pide es la fórmula o el método utilizado para la detección y la solución, de tal forma que también lo pudieras aplicar a un gran conjunto de datos. Deberás entregar:
Un documento (Word o PowerPoint) con la descripción de todos los pasos que hayas ido llevando a cabo. En cada uno: ¿qué estoy comprobando?, ¿qué detecto?, ¿qué hago para tratarlo y por qué?, ¿qué lo pudo haber ocasionado? El fichero o ficheros, con la tabla o tablas de datos resultantes de aplicar los pasos descritos.
Algunos consejos • Es muy importante en todo proceso de datos, conservar siempre una copia de su estado original, por si ocurre cualquier incidencia, poder recuperarlos. • Cada vez que hagas un cambio o conjunto de cambios significativos a los datos, también es muy recomendable guardar una versión del estado en el que se encuentran en dichos puntos del tratamiento. Puede ser en diversos documentos anotados con nombres representativos o al menos con v1, v2, etc… o en varias hojas dentro del mismo Excel, también dándoles un nombre apropiado. Así, si en sucesivos pasos te equivocas, no tienes que volver al principio. • No hay una receta mágica para llevar a cabo la fase de limpieza y preparación de datos. En estas sesiones hemos visto las indicaciones fundamentales y algunas pistas que suelen aplicar en la mayoría de los casos. Sin embargo, según el conjunto de datos tomado (o incluso sobre un mismo conjunto de datos pero tratado para usos diferentes), habrá que tomar unas decisiones u otras y te podrás encontrar situaciones de lo más variopintas.
Pasos de inventario/limpieza/preparación de datos • ¿Te he dicho ya que guardes copia original de los datos y versiones tras cambios importantes? ;) • Detectar campos de relación entre tablas y comprobar en qué medida cruzan adecuadamente. ¿Duplicados? • Comprobación de tipos de datos e identificación para cada campo de los registros (filas) que no cumplan. Detección de “missing values” y cómo tratarlos. • Semántica de los datos y formatos asociados: ej. DNI, teléfonos, fechas, etc… • Comprobación de si los valores son correctos (ej: distancias o pesos que no sean negativos) • Detección de outliers. Sobre valores de cada variable por separado o de forma multivariante. • Transformación de variables categóricas. • Otras transformaciones, normalizaciones, interpolaciones de datos…
Algunas observaciones • En las siguientes transparencias os iré dando algunas indicaciones y pistas de qué buscar, junto a algunas de las funciones Excel que se pueden utilizar. • En este enlace podéis encontrar una tabla de correspondencia de los nombres de las funciones de Excel entre inglés y español, por si tenéis la versión inglesa, ya que os dejaré los nombres en español: http://www.piuha.fi/excel-function-name-translation/index.php?page=english-spanish.html • No se indicarán en el enunciado explícitamente todas las circunstancias que podrás encontrar en los datos ni todas las alternativas para abordarlas. • No te preocupes tanto por encontrar todo lo que está mal o podría mejorarse (hay bastantes cosas y algunas más sutiles que otras), como por explicar bien lo que sí detectes y trates. No obstante, si ves algo que no te da tiempo a resolver y explicar con detalle, lo puedes dejar señalado brevemente. • Los datos “personales” empleados son completamente inventados. No debería existir ninguna relación entre nombres, dni’s, direcciones, etc... Aunque cada campo por separado sí contenga valores que existen o pueden existir para reflejar casuísticas reales.
Datos • Clientes: datos asociados a un cliente (personales y relativos a Todo Juegos) • Compras: el detalle de quién compró qué producto y cuándo, así como el importe. • Twitter/Externos: datos que pueden servir para enriquecer los datos de un cliente ya registrado o, para tener datos de otros potenciales clientes. • Auxiliares: otros listados de datos que te servirán para categorizar, comprobar o cruzar con campos existentes. Puedes asumir que lo que ahí aparece es exhaustivo, es decir, representa todo el universo posible de valores (aunque evidentemente es una muestra acotada para esta práctica).
Presentar
el Excel y explicar un ejemplo de BUSCARV.
A por ello
Comprobar número de campos • No hemos hablado de ello hasta ahora pero lo primero que se puede hacer es comprobar que el número de campos existentes en las tablas es el que se esperaría según la cabecera de datos. • Si no coinciden y no lo compruebas al inicio, es fácil darse cuenta más adelante porque a la hora de comprobar los tipos de las columnas, seguramente muchas no coincidan para los registros con número incorrecto de campos, ya que pueden estar “desplazados” una o varias columnas respecto a la posición que debieran. No obstante, es preferible detectarlo cuanto antes. Comprueba que las tablas tienen el número de campos esperados y corrige, si se puede el contenido de dichos campos “desplazados”. Si no se puede determinar en qué campo debería ir cada pieza de información, quizás haya que eliminar el registro (fila) completo. ¿Por qué crees que se puede producir esta circunstancia? Pista: en formatos tipo CSV (Comma Separated Value) los campos se separan por comas (‘,’) y el indicador de número decimal es un punto (‘.’). Si un campo de texto no está bien delimitado (por ejemplo entrecomillado), ¿qué pasa si aparece un carácter separador de campos? • El formato CSV2 usa de separador de campos el punto y coma (‘;’) y de decimales la coma (‘,’). Si en alguna migración/carga de datos se malinterpreta con el CSV, pueden alterarse los registros de números decimales. Estate atenta/o durante la práctica a este hecho.
Cruzar tablas I • Para que dos tablas crucen por un campo, ¿realmente tienen que llamarse exactamente igual los campos o basta con que el contenido sea el apropiado? ¿Cuáles son los campos de la tabla ‘Clientes’ y la tabla ‘Compras’ que nos permiten cruzarlas? Todo registro de la tabla ‘Compras’ debería estar asociado a un cliente. Inserta una columna al lado del campo de cruce en la tabla ‘Compras’ identificado en la pregunta anterior. Y escribe la función =BUSCARV(B2;‘Clientes’!$C$2:$C$26;1;0) en la celda 2 de la columna insertada (debería ser la C ;) ) arrastra la fórmula hasta la última fila de datos. Dicha fórmula, si encuentra el valor en la tabla de clientes, debería devolver el mismo valor y si no, un error.
Debería aparecerte alguna compra “errónea”, que no cruza con ningún cliente. Si revisas el caso, verás que en realidad podría cruzar y se debe a un error en el dato del campo de cruce de la tabla de ‘Clientes’. ¿En qué consisten los errores? (Pista: el sistema de guardar datos en ‘Clientes’ es manual y en ‘Compras’ está más automatizado)
Cruzar tablas II ¿Cuáles son los campos de la tabla ‘Clientes’ y la tabla ‘DatosTwitter’ que nos permiten cruzarlas? Añade a la tabla de ‘Clientes’ los 5 campos de la tabla ‘DatosTwitter’ diferentes al campo de cruce.
Pista: usar la función BUSCARV en columnas vacías a la derecha de la tabla ‘Clientes’. BUSCARV tiene 4 argumentos: -El primero es el valor a buscar, el campo de cruce de la propia tabla clientes. -El segundo es la matriz donde buscarlo. Deben ser todos los datos de la tabla ‘DatosTwitter’: $A$1:$F$31 (los símbolos $ son para fijar la columna y/o la fila para cuando arrastres o copies y pegues la fórmula a otras celdas se mantenga el mismo rango de búsqueda). Para referenciar otra hoja del Excel, debes poner antes del rango el nombre de la hoja y una exclamación. Por tanto el rango sería: ‘DatosTwitter’!$A$1:$F$31 -El tercero es la columna del rango de búsqueda de la que se devolverá el valor de la fila encontrada. En este caso 1 corresponde a la columna A, 2 a la B y así sucesivamente. -El cuarto se debe poner a 0 para que dé igual si los datos a buscar están ordenados o no. Resumen: insertar la función =BUSCARV($J2, ‘DatosTwitter’!$A$1:$F$31, 2, 0) en la fila 2 de la primera columna vacía a la derecha de la tabla ‘Clientes’. Copiar en las 4 columnas de al lado cambiando el tercer argumento (2) por 3, 4, 5 y 6, resp. y copiar esas 5 celdas hasta la última fila de datos de ‘Clientes’.
Tipos de datos de cada columna Identifica para todas las columnas el tipo de dato que contiene (o debería contener): • Cadenas de caracteres (texto) • Números (entero/decimal) • Fechas (¿formato?) Indica en cada caso cuántos valores (en términos absolutos o en porcentaje) de cada columna no cumplen con el tipo de dato detectado, junto con el método/fórmula que usas para detectarlo. OBS: Ten en cuenta que algunos pueden ser valores “missing”, que se tratan en el siguiente punto. ¿Encuentras alguna variable categórica? En caso afirmativo, ¿cuáles y por qué lo son?
Missing values Identifica los “missing values” que aparecen en los datos. ¿Qué porcentaje de valores perdidos tiene cada columna? ¿Y ciertas filas? ¿Las eliminarías (filas y/o columnas)? ¿Por qué? Pista: Pueden aparecer codificados de distinta forma (desde una celda vacía, ‘NULL’, ‘NA’, ‘?’, …) Pista: Usa filtros de datos para localizarlos y la función CONTAR.SI para contabilizarlos. La función CONTAR.SI toma dos argumentos: -El primero indica el rango de celdas donde buscar. -El segundo indica el criterio para contabilizar o no una celda. Ej: Contar apariciones de “SI” en las primeras 20 filas de la columna B: =CONTAR.SI(B1:B20, “SI”) De las filas y columnas que no hayas eliminado (o si no has eliminado ninguna)… ¿qué vas a hacer con los missing values que siguen apareciendo? ¿Sustituirlos por un promedio o moda? ¿Darles un valor propio para representar explícitamente que esa falta de información es un dato más? ¿Por qué?
Semántica de los datos I • Adicionalmente al tipo de dato básico de cada columna, conviene entender la semántica de las mismas, es decir, lo que significan y representan. Esto suele introducir restricciones a los posibles valores que puede tomar el campo (ej: DNIs o teléfonos). Explica las restricciones que puedan añadir los significados de las columnas. Algunas como el DNI son algo más complejas (se deja para el “extra” de la práctica) y Excel no permite un manejo sencillo directo de expresiones regulares. Aplica alguna de tipo “tiene que tomar un valor positivo”, mediante filtros condicionales, el validador de datos de Excel o insertando en una nueva columna al lado alguna fórmula tipo =SI(A2>0;1;0), de tal forma que donde haya 0’s significa que está su celda adyacente. Señala los valores incorrectos que veas aunque no hagas la comprobación formal. • OBS: Puede haber campos sobre los que no sepas mucho acerca de su formato y significado, como puede ser SKU. En tales casos, si no tienes un criterio fundado, lo mejor suele ser respetar el campo tal y como está.
Semántica de los datos II • En algunas ocasiones, el uso de algunos campos no es todo lo limpio que debiera y pueden darse circunstancias en las que los valores del campo representen en realidad entidades diferentes. Investiga la columna de localización y describe lo que ocurre. Desglosa dicha columna en dos y asigna los valores pertinentes basándote en las listas de ‘DatosAuxiliares’ de municipios y países. Pista: usa la función =SI.ERROR(BUSCARV($C2;DatosAuxiliares!$A$2:$A$7;1;0);"") adaptada a las columnas y celdas que corresponda para buscar en la lista de municipios. Cambiando la columna ‘A’ de DatosAuxiliares por la ‘C’ y ampliando hasta $C$9 realizará la búsqueda sobre la lista de países. Calcula una nueva columna en la tabla de Clientes que obtenga la fecha de nacimiento aproximada a partir de la fecha de registro y la edad (asumiendo que esa edad que figura era en el momento del registro). Pista: usa la función =FECHA(AÑO;MES;DIA) para crear una nueva fecha a partir de esas tres componentes. ‘AÑO’, ‘MES’ y ‘DIA’ son también funciones que aplicadas sobre una celda que ya contenga una fecha te devuelven la componente correspondiente, ej: AÑO(A2) = 2008 si en A2 hay una fecha dd/mm/2008. A la hora de construir la nueva fecha puedes restar a la componente ‘año’ la edad del cliente.
Comprobación de valores Calcula las tablas de frecuencias de (al menos) las columnas de municipios y países que creaste en el apartado anterior. Pista: puedes obtenerla bien creando una tabla dinámica o bien con funciones “CONTAR.SI” para cada uno de los posibles valores del campo. Explica cómo lo has hecho y deja constancia (en el propio Excel que luego entregues o con algún pantallazo). Calcula los valores mínimo, medio, máximo y la desviación típica de (al menos) los campos ‘Importe’ de la tabla ‘Compras’ y ‘Núm_seguidores’ de la tabla ‘DatosTwitter’. Pista: funciones MIN, MAX, PROMEDIO y DESVEST.
Detección de outliers • Analiza los rangos de valores y distribución que toman los campos ‘Importe’ y ‘Núm_seguidores’ que calculaste antes. ¿Dirías que hay outliers? ¿Son valores correctos o incorrectos? Si son incorrectos, ¿a qué crees que se debe? ¿Qué harías con ellos?
Transformación de variables categóricas • Normalmente una variable categórica no es interpretada adecuadamente por modelos de Data Science por lo que conviene transformarla. Tampoco suele bastar con asignar números 1, 2, 3, etc. a cada uno de los posibles valores del campo, porque implica relaciones de orden y distancia que típicamente no tienen sentido. La solución suele ser crear una nueva columna por cada uno de los posibles valores de la variable categórica. • Sin embargo, tampoco suele ser bueno crear un excesivo número de columnas, ya que son más variables que tendrá que aprender e interpretar el modelo. Por lo tanto, se pueden agrupar ciertos valores que tengan sentido. A partir de la columna de país, crea 4 columnas según el idioma: español, inglés, alemán y portugués. En cada una asigna a cada fila el valor ‘1’ si en el país correspondiente se habla el idioma de la columna en cuestión.
Pista: Crea antes una columna intermedia para agrupar los hablantes de español. Después usa la función =SI(A2=“español”;1;0) para la columna español. Adapta la celda concreta y el idioma para las otras columnas. OBS: Se podría simplificar aún más en una variable que sea “hablaEspañol”: 1/0
Extra*** • Elabora una tabla intermedia en DatosAuxiliares que relacione los municipios que aparecen con los códigos postales. A partir de la misma, enriquece la tabla DatosTwitter con una nueva columna con la renta per cápita correspondiente a la localización (cuando proceda) ---------• Haz la comprobación completa de que un DNI es correcto (incluyendo que se le asigna la letra correcta). ----------
• Aplica alguna otra transformación a los datos que podría ayudar a la aplicación futura que se lleve a cabo. Por ejemplo, numéricamente para los modelos estadísticos suele ser útil que la variable esté normalizada (media 0 y desv. Típica 1). Puedes implementar dicha transformación para la columna importe. ---------• Si se te ocurre cómo mejorar alguno de los cruces o agregaciones entre las tablas presentadas, puedes indicarlo, o proponer otros nuevos.