17th Mar 2023 Lectura de 10 minutos Limpieza de datos en SQL Nicole Darnley SQL aprender SQL data cleaning Índice ¿Qué es la limpieza de datos? Técnicas de limpieza de datos Cómo y Cuándo Eliminar Datos Ejemplo 1. Eliminar datos duplicados Eliminación de datos duplicados Ejemplo 2: Ordenar los datos antes de eliminarlos Ejemplo 3: Eliminación de valores nulos Cómo actualizar datos Ejemplo 1: Poner una etiqueta significativa a los valores NULL Ejemplo 2: Corregir las mayúsculas de los valores Recuerde siempre limpiar sus datos La limpieza de datos es una parte importante de cualquier análisis de datos. Aquí discutiremos las técnicas que puedes usar para hacer limpieza de datos en SQL. Me resulta casi imposible concentrarme en el trabajo cuando mi escritorio está desordenado. Si está lleno de papeles, tazas de café o juguetes que mi hija ha colado en mi despacho, no hay ninguna posibilidad de que pueda hacer nada hasta que mi mesa vuelva a estar en orden. Por alguna razón, es como si el desorden de mi mesa se hubiera colado en mi mente. Esta misma idea es aplicable a la limpieza de datos. Muchas veces he dedicado horas a un análisis y he sacado mis conclusiones sólo para descubrir una incoherencia en los datos que invalida todo mi informe. Como analistas, solemos lanzarnos directamente a analizar los datos sin tomarnos el tiempo necesario para asegurarnos de que están limpios. Esto puede dar lugar a muchas horas de tiempo perdido o, lo que es peor, a informes inexactos. ¿Qué es la limpieza de datos? El proceso de limpieza de datos (también denominado depuración de datos) consiste en identificar cualquier imprecisión en un conjunto de datos y, a continuación, corregirla. Es el primer paso en cualquier análisis e incluye la eliminación de datos, la actualización de datos y la búsqueda de incoherencias o cosas que simplemente no tienen sentido. Puede aprender todas las funciones SQL necesarias para limpiar datos en SQL en nuestro Curso completo de SQL curso. La pista contiene 7 cursos interactivos de SQL que le enseñarán SQL completo, desde lo más básico, pasando por temas intermedios y hasta conceptos avanzados de SQL como funciones de ventana y consultas recursivas. Es el conjunto de cursos de SQL más completo disponible en Internet. Técnicas de limpieza de datos Ahora que ya te has hecho una idea, vamos a echar un vistazo a las técnicas SQL que puedes utilizar para limpiar datos. Para cada ejemplo, utilizaremos la tabla de empresas que se muestra a continuación. Muestra información sobre varias empresas: idnameindustryyear_foundedemployeesstatecity 1Over-HexSoftware200625TXFranklin 2UnimattaxIT Services200936TXNewtown Square 3LexilaReal Estate203238ILTinley Park 4GreenfaxRetail2012320scGreenville 5SaoaceEnergy200924WINew Holstein 6DonplusAdvertising & Marketing200926caLos Angeles 7BlacklaneIT Services20119CAOrange 8ToughtamLogistics & Transportation201120ALBirmingham 9ToughtamLogistics & Transportation201120ALBirmingham 10QuotelaneAdvertising & MarketingNULL4SCGreenville 11GanzzapAdvertising & Marketing2011133CASan Francisco 12YearflexNULL201345WIMadison Cómo y Cuándo Eliminar Datos A veces se encontrará con situaciones en las que necesitará eliminar datos de su conjunto de datos. Esto puede deberse a que los datos no son pertinentes para lo que está analizando o están duplicados o son inexactos. En los siguientes ejemplos, exploraremos estos diferentes escenarios y cómo abordarlos. Ejemplo 1. Eliminar datos duplicados Eliminación de datos duplicados Lo primero que haremos será buscar datos que deban eliminarse. Esto puede deberse a duplicados o a que los datos no son relevantes. En esta tabla, podemos ver rápidamente que la fila de la empresa Toughtam está duplicada. Esto no será tan fácil de identificar en un conjunto de datos grande. Antes de eliminar esa fila, veamos cómo encontrarla. En este conjunto de datos, cada empresa debería tener sólo una fila, así que vamos a utilizar las cláusulas GROUP BY y HAVING para identificar los nombres duplicados. Esta consulta va a contar el número de veces que cada nombre existe en la base de datos utilizando GROUP BY. A continuación, utiliza la cláusula HAVING para filtrar los resultados sólo para los nombres que existen más de una vez. SELECT name, COUNT(name) as count FROM companies GROUP BY name HAVING(count > 1) Esta consulta devolverá el siguiente resultado: namecount Toughtam2 ¡Genial! Ahora sabemos que la empresa llamada Toughtam está duplicada, pero ¿cómo eliminamos una de las filas? Utilizaremos una combinación de ROW_NUMBER() y DELETE. En primer lugar, vamos a añadir un número de fila para cada fila basado en la columna nombre: SELECT name, ROW_NUMBER() OVER(PARTITION BY name) AS rn FROM companies idnameindustryyear_foundedemployeesstatecityrn 1Over-HexSoftware200625TXFranklin1 2UnimattaxIT Services200936TXNewtown Square1 3LexilaReal Estate203238ILTinley Park1 4GreenfaxRetail2012320scGreenville1 5SaoaceEnergy200924WINew Holstein1 6DonplusAdvertising & Marketing200926caLos Angeles1 7BlacklaneIT Services20119CAOrange1 8ToughtamLogistics & Transportation201120ALBirmingham1 9ToughtamLogistics & Transportation201120ALBirmingham2 10QuotelaneAdvertising & MarketingNULL4SCGreenville1 11GanzzapAdvertising & Marketing2011133CASan Francisco1 12YearflexNULL201345WIMadison1 Lo que hemos hecho es añadir una nueva columna que muestra el número de fila de cada nombre. Como puedes ver, ahora hay un 1 y un 2 para las filas de Toughtam. Ahora ejecutaremos una sentencia DELETE para eliminar cualquier fila en la que la columna rn sea mayor que 1. DELETE FROM ( SELECT name, ROW_NUMBER() OVER(PARTITION BY name) AS rn FROM companies ) WHERE rn > 1 Ahora nuestro conjunto de datos tiene este aspecto: idnameindustryyear_foundedemployeesstateCity 1Over-HexSoftware200625TXFranklin 2UnimattaxIT Services200936TXNewtown Square 3LexilaReal Estate203238ILTinley Park 4GreenfaxRetail2012320scGreenville 5SaoaceEnergy200924WINew Holstein 6DonplusAdvertising & Marketing200926caLos Angeles 7BlacklaneIT Services20119CAOrange 8ToughtamLogistics & Transportation201120ALBirmingham 10QuotelaneAdvertising & MarketingNULL4SCGreenville 11GanzzapAdvertising & Marketing2011133CASan Francisco 12YearflexNULL201345WIMadison Ejemplo 2: Ordenar los datos antes de eliminarlos En este ejemplo, las filas de Toughtam son las mismas (con la excepción de id), por lo que no estamos ordenando las filas por otra cosa que no sea cómo aparecen en la base de datos. Muchas veces, encontrará que las filas están duplicadas, pero puede que los campos no sean idénticos. Si este es el caso, puede añadir una cláusula ORDER BY después de PARTITION BY. Por ejemplo, supongamos que los datos tuvieran este aspecto: idnameindustryyear_foundedemployeesstatecreated 8ToughtamLogistics & Transportation201120AL1/3/2023 9ToughtamLogistics & Transportation201130AL1/10/2023 Parece que este registro se actualizó para esta empresa el 20/01/2023 y el número de empleados aumentó. Si quisiéramos mantener el registro más reciente, ejecutaríamos: DELETE FROM ( SELECT name, ROW_NUMBER() OVER(PARTITION BY name ORDER BY created DESC) AS rn FROM companies ) WHERE rn > 1 Como puede ver, ahora estamos ordenando la sentencia ROW_NUMBER() por el campo created en orden descendente, sacando primero el registro creado más recientemente. A continuación, eliminamos los registros posteriores al primero. Para obtener más información sobre la búsqueda de valores duplicados en SQL, consulte nuestro artículo Cómo buscar valores duplicados en SQL. Ejemplo 3: Eliminación de valores nulos Ahora echemos un vistazo a NULLs. NULL indica un valor que falta; puede leer más sobre ellos aquí. Dependiendo de las implicaciones de los valores de NULL en sus datos, puede eliminar esas filas o puede actualizarlas. En nuestro ejemplo, vemos dos valores NULL. Una fila tiene un valor NULL para la industria y la otra para el year_founded. Vamos a manejar cada uno de una manera diferente. Una empresa debe tener un año de fundación. Vamos a utilizar DELETE para eliminar esa fila en la que falta, ya que parece ser un dato erróneo. SELECT FROM companies WHERE year_founded IS NULL idnameindustryyear_foundedemployeesstatecity 10QuotelaneAdvertising & MarketingNULL4SCGreenville En la consulta anterior, estamos utilizando la cláusula IS NULL. Esta cláusula busca en la columna year_founded y devuelve cualquier fila en la que aparezca IS NULL. Una vez que verifiquemos que esta es la fila que queremos eliminar, podemos borrarla ejecutando: DELETE FROM companies WHERE year_founded IS NULL En este punto, hemos terminado de eliminar los datos erróneos y estamos listos para pasar a la sentencia UPDATE. Usemos esto para arreglar nuestro otro valor NULL. Cómo actualizar datos La sentencia UPDATE se utiliza para modificar datos existentes. Usted utilizaría esta técnica de limpieza de datos cuando corrige datos inexactos o para formatear sus datos (haciéndolos más legibles). En los siguientes ejemplos, recorreremos estos tipos de escenarios para entender cómo manipular datos utilizando UPDATE. Ejemplo 1: Poner una etiqueta significativa a los valores NULL Como ya hemos visto, hay una empresa que tiene un valor NULL para industria. Estamos de acuerdo con esto porque, en nuestra situación hipotética, sabemos que no todas las industrias están disponibles en nuestra base de datos. Lo que tenemos que hacer en esta situación es actualizar el NULL para que sea "Otro". Otra opción sería sustituir NULLs por "NA" o "No aplicable". En primer lugar, vamos a utilizar SELECT para extraer la fila con la industria NULL: SELECT * FROM companies WHERE industry IS NULL idnameindustryyear_foundedemployeesstatecity 12YearflexNULL201345WIMadison Ahora que sabemos que hemos extraído la fila correcta, podemos UPDATE la columna de la industria. Para ello, ejecutaremos UPDATE companies SET industry = ‘Other’ WHERE industry IS NULL Al utilizar UPDATE, lo primero que tenemos que hacer es identificar la tabla que queremos modificar. En nuestro ejemplo, esta tabla es companies. A continuación, tenemos que decir qué columna estamos actualizando y a qué la estamos actualizando. Identificamos la columna utilizando SET [column name]. Luego definimos a qué queremos cambiar la columna usando = [ valor ]. La cláusula WHERE es la misma que si escribiéramos una sentencia SELECT. Sólo queremos cambiar el sector a "Otros" si el sector IS NULL. Ejemplo 2: Corregir las mayúsculas de los valores En este punto nuestros datos se ven mejor, pero a la columna state le vendría bien un poco de limpieza. Algunos de los valores están en mayúsculas y otros en minúsculas. Normalmente, la abreviatura del estado se escribe en mayúsculas, así que actualicemos todos los valores en minúsculas a mayúsculas. idnameindustryyear_foundedemployeesstatecity 1Over-HexSoftware200625TXFranklin 2UnimattaxIT Services200936TXNewtown Square 3LexilaReal Estate203238ILTinley Park 4GreenfaxRetail2012320scGreenville 5SaoaceEnergy200924WINew Holstein 6DonplusAdvertising & Marketing200926caLos Angeles 7BlacklaneIT Services20119CAOrange 8ToughtamLogistics & Transportation201120ALBirmingham 11GanzzapAdvertising & Marketing2011133CASan Francisco 12YearflexOther201345WIMadison Como queremos asegurarnos de que todos los valores de estado están en mayúsculas, podemos ejecutar: UPDATE companies SET state = UPPER(state) Cuando rodea el nombre de una columna con la sentencia UPPER(), está cambiando todas las letras a mayúsculas. (Con la sentencia LOWER(), se hace lo contrario - cambiar todas las letras a minúsculas). Ahora nuestra tabla tiene este aspecto: idnameindustryyear_foundedemployeesstatecity 1Over-HexSoftware200625TXFranklin 2UnimattaxIT Services200936TXNewtown Square 3LexilaReal Estate203238ILTinley Park 4GreenfaxRetail2012320SCGreenville 5SaoaceEnergy200924WINew Holstein 6DonplusAdvertising & Marketing200926CALos Angeles 7BlacklaneIT Services20119CAOrange 8ToughtamLogistics & Transportation201120ALBirmingham 11GanzzapAdvertising & Marketing2011133CASan Francisco 12Yearflex‘Other’201345WIMadison Ejemplo 3: Corregir errores lógicos Una última cosa que querrá buscar en su conjunto de datos son los errores lógicos. En nuestros datos, vemos que una empresa tiene un valor year_founded de 2032. Esto no es posible, ya que una empresa no puede fundarse en el futuro. Podemos identificar los registros con fecha futura ejecutando SELECT * FROM companies WHERE year_founded > CURRENT_TIMESTAMP() CURRENT_TIMESTAMP() devuelve la fecha y hora actuales. En la sentencia anterior, estamos extrayendo todos los registros en los que year_founded es posterior a la hora en que se ejecuta la consulta. También se puede introducir una fecha, como la de hoy. Después de indagar un poco, vemos que se trata de un error tipográfico y que la empresa se fundó en 2012, por lo que seguiremos adelante y modificaremos ese registro: UPDATE companies SET year_founded = 2012 FROM companies WHERE id = 3 idnameindustryyear_foundedemployeesstatecity 1Over-HexSoftware200625TXFranklin 2UnimattaxIT Services200936TXNewtown Square 3LexilaReal Estate201238ILTinley Park 4GreenfaxRetail2012320SCGreenville 5SaoaceEnergy200924WINew Holstein 6DonplusAdvertising & Marketing200926CALos Angeles 7BlacklaneIT Services20119CAOrange 8ToughtamLogistics & Transportation201120ALBirmingham 11GanzzapAdvertising & Marketing2011133CASan Francisco 12Yearflex‘Other’201345WIMadison En este caso, especificamos un id concreto en la cláusula WHERE. Esto se debe a que lo más probable es que no desee actualizar todos los valores de year_founded para que sean del mismo año para cualquier empresa que tenga un año de fundación en el futuro. Conocemos el año de fundación de esta empresa en concreto, así que sólo actualizaremos ese registro. Recuerde siempre limpiar sus datos Nuestros datos parecen ahora mucho más claros que el conjunto de datos original. La limpieza de datos, aunque tediosa, es una parte imprescindible del proceso de análisis de datos. Nunca dé por sentado que los datos con los que trabaja están limpios. Explore los datos buscando duplicados, NULLs y cualquier falacia lógica. Ahora ya conoce varias técnicas SQL que puede utilizar para modificar sus datos, como DELETE y UPDATE. Un gran paso siguiente es tomar la Curso completo de SQL curso. Contiene 7 cursos interactivos de SQL, incluyendo un curso completo sobre las cláusulas DELETE, UPDATE, y INSERT. Este curso te ayudará a reforzar todo lo que has aprendido en este artículo y te dará la oportunidad de practicar más. ¡Feliz limpieza de datos! Tags: SQL aprender SQL data cleaning