Extraer propiedades de los datos .csv para saber cada dato si es string, entero, vacío, numérico, fecha, ip, ....

Clase en php para limpiar los valores y extraer sus propiedades dentro de un .csv (tipo string, entero, decimal, vacío, fecha, .....)

Hoy os traigo una clase en php que he realizado para extraer las propiedades de los datos de un fichero .csv. Esta clase es útil para el proceso de limpieza de datasets antes de utilizar las redes neuronales en machine learning.

La clase se llama row-math-ml-csv y se puede descargar desde github.com o desde phpclasses.org.

Con ella podemos extrar las siguientes características de cualquier valor de una fila de nuestro dataset:

  • 'empty': El campo está vacío. No tiene ningún valor o bien contiene '-'
  • 'empty_null': El campo contiene un valor NULL
  • 'empty_nan': El campo contiene un valor numérico no válido NA ó NAN
  • 'empty_anyway': Nos sirve para saber si está vació de cualquier manera anterior. Estos campos nos sirven para estar alerta si nuestro dataset contiene datos vacíos o nulos y poder actuar en ellos.
  • 'string': El valor en un string. En Machine Learning los campos string no se pueden manejar directamente. Hay que eliminarlos o transformarlos en características
  • 'ip': El valor es una IP. Podemos desglosarla si nos interesa
  • 'date': El valor es una fecha. Es un dato muy importante a conocer, ya que las fechas son muy importantes en Machine learning y se pueden descomponer en muchísimas características
  • 'numeric': El valor contiene un valor númerico. Es lo idóneo para poder utilizar en Machine learning
  • 'zero': El valor es un número 0. Hay que tener cuidado, ya que existen valores que pueden parecer que son correctos, pero un 0 podría indicar un valor erróneo o bien que no hay valor en ese campo
  • 'str_with_commas': El valor contiene un string con comas. Hay que tener cuidado por si hemos pasado números con ',' para separar los decimales en lugar de utilizar '.'
  • 'positive': El valor es un número positivo.
  • 'negative': El valor es un número negativo
  • 'float': El valor es un número de coma flotante
  • 'integer': El valor es un entero

Tenemos muchísima información valiosa con la que poder trabajar ahora con nuestros datos. Sabremos a la perfección el 'estado de salud' de nuestro dataset y si falta algo o hay que realizar algún cambio.

La clase además, limpia los datos de entrada, quitándole los espacios anteriores y posteriores y eliminado el entrecomillado simple o doble de los campos string.

También nos da el número de campos vacíos. Es útil para saber si tenemos demasiados valores que faltan en una fila y decidir si la eliminamos de nuestro dataset para que no cause problemas. Este valor también nos lo pasa el sistema en modo de porcentaje.

Cabe la posibilidad de deshabilitar todos estos cálculos y utilizar la clase únicamente para limpiar los datos de entrada, quitándole los espacios anteriores y posteriores y eliminado el entrecomillado simple o doble de los campos string. De esta manera podemos trabajar con los datos directamente sin necesidad de realizar ninguna operación sobre ellos. La misma clase realizará todas estas operaciones por nosotros.

Está preparada para ser reutilizada y evitar los tiempos de creación y eliminación de variables, ya que cuando la utilizamos en procesos largos en nuestros datasets, cualquier cálculo evitable se agradece y se nota en el tiempo final de ejecución.

Aunque la clase se ha creado para ser utilizada en los datasets .csv, se puede utilizar perfectamente en cualquier otro tipo de datos, ya sea consultas MySQL, arrays de datos, etc.... No hay que cambiar absolutamente nada. Simplemente hay que ir dándole los valores en formato array y la clase se encarga de todo.

Imaginad recopilar un millon de datos sin saber si todo está correcto y empezar a realizar el aprendizaje profundo directamente sin saber como están los datos internamente. Creedme. SIEMPRE hay que realizar una verificación de los mismos, ya que, aunque seamos nosotros mismos los que nos cuidemos de realizar una correcta importación y actualización de datos, normalmente hay ciertos valores que han saltado en el proceso de importación y nos hará ir mal en nuestra red neuronal. Pero ¿Cómo es posible que esos valores estén mal cuando he puesto muchísimo empeño en recopilarlos correctamente? Realmente están mal... los veo.... no son correctos... pero como han llegado hasta ahí?.... Pues si... todo un misterio. Hacedme caso. Revisadlos SIEMPRE antes de empezar a utilizarlos en las redes neuronales.

Los métodos están bien descritos y existe un fichero de ejemplo por si la queréis probar.

Comentarios

Artículos más populares

Clase en PHP para encender/apagar LED en Raspberry pi

Raspberry Pi. Encender/Apagar LED desde PHP. Acceso directo a los puertos GPIO ultrarápido.

Ja es poden veure els programes de 'REDES' de TVE2 per internet