Ir al contenido principal

Diagrama de temas

      • Consideraciones sobre la carga de datos


        La carga de datos en este contexto no solo significa insertar datos sin procesar en un entorno de trabajo. Se refiere a poner los datos limpios en un destino final donde el resto del proceso de análisis y modelado puede realizarse. En otras palabras, este es el conjunto de datos preparado que usará para analizar su problema de IA y desarrollar modelos para abordar dicho problema.

        Antes de comenzar a cargar datos en un destino, debe tener en cuenta algunas cosas, como las siguientes:

        - Elección del formato de datos. El conjunto de datos debe almacenarse de alguna forma, ya sea un archivo, un servidor de bases de datos o algún otro repositorio. La elección del formato depende de las herramientas que tenga disponibles, las tecnologías de base de datos con las que está familiarizado y las soluciones que ya están en uso en su entorno.

        - Capacidad de almacenamiento. Los grandes conjuntos de datos, en especial los que califican como big data, deben cargarse en un destino que tenga una alta capacidad de almacenamiento. También debe tener en cuenta que sus necesidades de almacenamiento pueden ser flexibles, lo que significa que se reducen o crecen con el tiempo. Por ejemplo, si agrega datos adicionales al conjunto de datos con posterioridad, necesitará más capacidad de almacenamiento.

        - Capacidad de memoria. Al igual que cualquier otra operación de computador, el análisis y modelado de datos tiene lugar dentro de la memoria de la máquina. Sin embargo, estas tareas tienden a consumir mucha memoria y pueden usar rápidamente toda la memoria disponible en un computador o grupo de estos. Debe asegurarse de que tiene suficiente memoria para ajustarse al conjunto de datos. Esto incluye memoria como RAM que se accede directamente por la CPU, pero también puede incluir memoria de GPU, que es un cuello de botella común al entrenar modelos de aprendizaje automático. Es posible que pueda evitar errores de memoria insuficiente en conjuntos de datos grandes dividiendo los datos generales en fragmentos más pequeños que cargue y analice de manera individual.

        - Integración de canalizaciones. Si tiene una canalización que le ayuda a automatizar las tareas de datos, debe asegurarse de que el conjunto de datos de destino sea compatible con esa canalización. Debe poder cargar datos en el formato deseado sin una gran cantidad de orientación manual.

        - Colaboración. Como miembro de un equipo de proyecto, debe poder compartir datos entre varios miembros del mismo equipo. Aunque puede sentirse cómodo con un determinado proceso de carga de datos, es posible que sus colegas no. Necesita trabajar con su equipo para desarrollar una solución que beneficie a todos, no solo a usted.


        Almacenamiento en la nube frente a almacenamiento local

        Elegir entre almacenar datos en servidores locales o en la nube no siempre es una tarea fácil. Hay algunos factores importantes que el equipo del proyecto debe tener en cuenta al tomar esta decisión. Si eligen servidores locales, la organización es responsable del costo de instalar y mantener sus propios recursos de hardware. En la nube, la organización no es responsable del costo de mantenimiento del hardware; solo del costo del espacio de almacenamiento flexible que puede aumentar o disminuir en un momento dado. Aun así, en una configuración de almacenamiento local, los miembros del equipo pueden acceder a los datos de la red local sin necesidad de conectividad a Internet. Si por cualquier razón la conectividad a Internet no está disponible cuando sus datos están en la nube, los miembros de su equipo no podrán acceder a los datos que necesitan.

      • Repositorio de datos en base de datos

        Un destino común para un conjunto de datos preparado es una base de datos. Podría ser una base de datos SQL para datos relacionales o una base de datos NoSQL para datos no relacionales. En todo caso, las bases de datos suelen ser la opción preferida para los proyectos de IA y AA que tratan con grandes volúmenes de datos. Las bases de datos están diseñadas para ser lo más eficientes posible tanto en el almacenamiento de datos como en la manipulación de esos datos a través de consultas. El proceso real de carga de datos en una base de datos suele tener la forma de una o varias consultas que pueden seleccionar todos los datos relevantes del área de trabajo y actualizarlos o insertarlos en la base de datos de destino. Esto puede ser relativamente fácil si los datos están bien preparados, pero puede enfrentar dificultades si la estructura de datos actual no coincide con la de la base de datos de destino.

        La mayoría de las bases de datos se ejecutan en uno o más servidores para garantizar que los datos estén disponibles de forma confiable. Por lo general, los datos se centralizan y monitorean de forma continua, de modo que se puede garantizar el acceso dentro de una red. Compare esto con el almacenamiento de datos en archivos, que puede separar esos datos entre varios equipos host y es difícil de monitorear. Los servidores de bases de datos también admiten controles de seguridad como mecanismos de autenticación y autorización, de modo que solo los usuarios que necesitan acceso a los datos tienen permiso. Del mismo modo, los estrictos controles de acceso ayudan a mantener la integridad de los datos, evitando la manipulación indebida o la modificación accidental. Los servidores de bases de datos también suelen implementar servicios de cifrado para mantener la confidencialidad de los datos.

        Es importante que trabaje con los miembros de TI del equipo del proyecto para configurar bases de datos en las que pueda cargar los datos. Cuando realice la solicitud de configuración, explique claramente sus necesidades en cuanto a capacidad, derechos de acceso y la estructura o tecnología general de la base de datos.

      • Repositorio de datos en DataFrame

        No todos los proyectos requieren una arquitectura de base de datos para cargar datos. De hecho, es posible que la mejor opción sea mantener los datos en un formato que se integre por completo con su entorno de programación. No es necesario emitir consultas y enviar datos a través de la red a un servidor de bases de datos, debido a que todos los datos ya están en un formato aceptable. Por ejemplo, en un entorno Python, puede hacer una gran cantidad de limpieza y uso de los datos durante el proceso ETL con la biblioteca pandas en una memoria llamada objeto DataFrame. Puede mantener los datos en ese formato de objeto si se adapta a sus necesidades.
        Deberá evitar mantener esos datos solo en la memoria. De lo contrario, los errores del sistema o los cortes de energía pueden hacer que se pierdan los datos. Afortunadamente, las bibliotecas como pandas le permiten guardar su objeto DataFrame como un archivo binario. Por ejemplo, Python tiene un formato de archivo binario llamado archivo pickle. Puede alojar el archivo en la unidad local o trasladarlo a alguna otra ubicación de almacenamiento. 

        Cuando esté listo para trabajar con los datos de nuevo, simplemente cargue el archivo binario en su entorno de programación y DataFrame aparecerá exactamente como lo dejó. Esa es en realidad una de las ventajas que tiene un archivo binario sobre un archivo de texto simple: es una representación exacta del DataFrame en el momento de guardado. No es necesario analizar los datos ni hacer nada más para que vuelvan al estado deseado.

        Por supuesto, cargar datos en DataFrame también tiene sus desventajas. En comparación con una base de datos, la dificultad es que los datos están fracturados y son difíciles de administrar. Si comparte los archivos binarios con otros miembros del equipo, no necesariamente habrá una fuente autorizada de datos como la habría al conectarse a un servidor de base de datos. Los archivos binarios como los archivos pickle también pueden suponer un riesgo para la seguridad si provienen de una fuente no confiable, por lo que debe tener cuidado con los archivos que abre. Además, no existen mecanismos centralizados de autenticación o autorización para evitar que los usuarios no deseados accedan a un archivo binario.

        En comparación con los archivos de texto, los archivos binarios presentan problemas de compatibilidad. Por ejemplo, un objeto binario creado a partir DataFrame de pandas en Python no se abrirá en un entorno de programación diferente sin cierto esfuerzo adicional. Los archivos de texto, por otro lado, son extremadamente portátiles y casi cualquier herramienta de ciencia de datos puede leerlos.

      • Repositorio de datos basado en archivos


        Cargar datos en archivos de texto o exportar datos es una alternativa al uso de las bases de datos y los archivos binarios. Es menos común cuando se trata de grandes volúmenes de datos o de datos muy complejos. Los archivos de texto se generalizan para que contengan cualquier tipo de valor codificado con caracteres y, por lo tanto, no están diseñados para incluir ninguna estructura de datos específica. Sin embargo, puede implementar una estructura aparente en un archivo de texto separando los valores con delimitadores, como con un archivo CSV que utiliza comas para delimitar valores.

        La flexibilidad de un archivo de texto puede ser una fortaleza debido a que son legibles para casi cualquier persona o programa y se pueden compartir en muchos sistemas operativos y entornos diferentes. Sin embargo, existen muchas desventajas que están claras.

        -La falta de una estructura verdadera significa que los archivos de texto se pueden buscar, pero no consultar.
        -No le resultará fácil extraer partes específicas de datos de un archivo de texto sin procesar.
        -A diferencia de una base de datos o un archivo binario, los valores de un archivo de texto no tienen un formato deliberado. Para un archivo de texto, todos los datos son planos, por lo que si desea que el valor de una fecha sea del tipo datetime, debe analizarlo en algún otro entorno.
        -Los archivos de texto no son la mejor opción para almacenar grandes conjuntos de datos de manera eficiente. Los editores de texto, por ejemplo, pueden enfrentar dificultades para abrir archivos de texto con decenas de miles de registros o más. Las bibliotecas de programación hacen un mejor trabajo al leer datos de archivos de texto, pero los datos todavía no se leen de manera muy eficaz.
        -Desde el punto de vista de la seguridad, los archivos de texto pueden presentar riesgos similares a los archivos binarios. No tienen mecanismos inherentes de autenticación y autorización, y es probable que estén dispersos y no centralizados en muchos equipos.
        -En última instancia, debe evitar cargar datos en archivos de texto plano a menos que los datos sean relativamente simples, de bajo volumen y no incluyan información confidencial.

        Nota: Los formatos de archivo como XML y JSON también se pueden considerar archivos de texto, pero se diferencian de los archivos de texto plano en que tienen una estructura mejor definida que la que está destinada a ser interpretada por un programa de software.
      • Extremos de ETL

        Uno de los desafíos del proceso ETL es mantener una fuente autorizada para el conjunto de datos preparado sin interrumpir otras operaciones o crear problemas internos del proyecto. Como se mencionó anteriormente, el equipo de TI puede aprovisionar el acceso a una base de datos en la que almacene los datos. Sin embargo, rara vez el proceso ETL va del punto A al punto B en línea recta sin ningún problema en el camino. Usted puede cometer errores, o simplemente puede querer experimentar diferentes maneras de hacer las cosas. Por lo tanto, es común probar las tareas de ETL en un entorno de desarrollo, especialmente si esas tareas se pueden repetir mediante el uso de scripts. Leer y escribir directamente en una base de datos única no es una buena forma de analizarlo. En su lugar, debe considerar la posibilidad de aprovechar un extremo de ETL.

        Un extremo de ETL hace referencia a un entorno de desarrollo que puede configurar y aprovisionar sobre la marcha para su uso con tareas de ETL. El extremo actúa como una especie de intermediario entre el área de trabajo de programación y la base de datos real. Puede alimentarle los datos de la base de datos para que pueda ejecutar los scripts de forma iterativa, sin tener acceso directo al servidor de backend. Esto le permite ajustar las tareas de ETL y ejecutarlas en muchos tipos diferentes de escenarios. Por ejemplo, puede ejecutar los scripts de limpieza de datos en diferentes representaciones de los mismos datos generales para ver cuál es más compatible. Usted y sus compañeros de equipo no necesitan acceder y actualizar el mismo origen de datos autorizado para trabajar en el proyecto.

      • Consideraciones en materia de acceso y seguridad


        Las soluciones de IA y AA, como todas las soluciones informáticas, y las soluciones que requieren datos, deben protegerse para proteger los datos, el proyecto y la solución. Los diversos componentes deben estar protegidos para mitigar el riesgo y abordar los requisitos legales y de cumplimiento. Eso significa permitir que solo las personas autorizadas accedan a los datos, interactúen con las soluciones y se aseguren de que los resultados creados se usen para el propósito previsto.

        Además, al igual que con todas las soluciones informáticas, las implementaciones de IA y AA son potencialmente vulnerables a los ataques y los arreglos de los malos actores que pueden intentar realizar cualquiera de las siguientes acciones:

        Acceso no autorizado a los datos utilizados por la solución. Una vez accedidos, se pueden proteger y rescatar los datos un ataque de ransomware, utilizado para exponer información privada o para el robo de identidad. Estos tipos de ataques se llaman ataques a la privacidad y a menudo ocurren durante el entrenamiento del modelo, antes de que la solución se implemente y proteja por completo.

        Ataques a la integridad de la solución. Esto podría hacerse para influir en los resultados producidos por la solución. Las razones de este ataque podrían ser cualquier cosa, desde la eliminación de imágenes del software de reconocimiento facial para permitir que ciertas personas permanezcan sin identificar, o para ajustar los resultados a favor o en contra de grupos específicos. Los ataques de evasión pueden introducir datos sesgados para hacer que los modelos produzcan resultados incorrectos. Los ataques de envenenamiento alteran los datos de entrenamiento para cambiar los puntos de decisión que cambian los límites del modelo de destino.

        Ataques a la disponibilidad de la solución. Estos tipos de ataques están destinados a hacer que la solución sea difícil de usar, potencialmente como una declaración directiva o por alguna otra razón.

        Para evitar estos tipos de ataques, todos los sistemas y datos utilizados en todas las fases del flujo de trabajo de aprendizaje automático deben protegerse mediante un enfoque de varias capas para proteger los datos, los sistemas informáticos y otros recursos digitales y electrónicos para que solo las personas autorizadas puedan obtener acceso. Este enfoque se llama comúnmente defensa en profundidad. Los miembros del equipo de seguridad deben auditar el acceso y los registros de seguridad con regularidad para comprobar que no se han producido infracciones y para asegurarse de que las soluciones se utilizan correctamente.

      • Protección y carga de datos


        Antes de empezar

        Se abrirá Accessing and Managing Data for AI.ipynbI en Jupyter Notebook.
        Nota: Si cerró Jupyter Notebook desde que completó la actividad anterior, deberá reiniciar Jupyter Notebook y volver a abrir el archivo. Para asegurarse de que todos los objetos y la salida de Python están en el estado correcto para comenzar esta actividad:

        1. Seleccione Kernel→Reiniciar & y Borrar salida.
        2. Seleccione Reiniciar y borrar todas las salidas.
        3. Desplácese hacia abajo y seleccione la celda con la etiqueta Cargar datos en una base de datos SQL.
        4. Seleccione Celda→ Ejecutar todo lo anterior.


        Escenario

        Ahora que los datos de vivienda están en un estado relativamente limpio, usted desea comenzar a empaquetarlos para las próximas tareas de análisis y modelado. Hay muchos formatos en los que puede cargar estos datos. En lugar de elegir solo uno, probará varios formatos para tener una idea de cómo difieren en términos de almacenamiento e integración.


        -------------------------------------------------------------------------------------------------------------------------------------------------------------

        1. Cargar datos en una base de datos SQL.
        1. Desplácese hacia abajo y vea la celda titulada Cargar datos a una base de datos SQL y examine la lista de código debajo de ella.

        Este código crea un archivo de base de datos SQLite y guarda los datos de houses_cleaned_final en el archivo de base de datos abierto.

        2. Ejecute la celda de código.

        -------------------------------------------------------------------------------------------------------------------------------------------------------------
        2.Confirme que los datos se cargaron en la base de datos.
        1. Desplácese hacia abajo y vea la celda titulada Confirmar que los datos se cargaron en la base de datos y examine la lista de código debajo de ella.

        Este código leerá los datos que acaba de guardar en el archivo de base de datos y mostrará las primeras 5 filas.


        2. Ejecute la celda de código.

        3. Examine el resultado.

        Aparecerán las primeras filas del conjunto de datos limpiado, lo que indica que los datos se cargaron correctamente en la base de datos SQLite.

        ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        3.Cierre la conexión a la base de datos.
        1.Desplácese hacia abajo y vea la celda titulada Cerrar la conexión a la base de datos y examine la lista de código debajo de ella.

        Este código cierra la conexión al archivo de base de datos houses_data_cleaned.db.

        2. Ejecute la celda de código.

        ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        4. Escriba el DataFrame como un archivo pickle.
        1. Desplácese hacia abajo y vea la celda titulada Escribir el DataFrame como un archivo pickle y examine la lista de código debajo de ella.

        Este código guardará los datos de houses_cleaned_final en el archivo houses_data_cleaned.pickle.


        2. Ejecute la celda de código.

        Los archivos pickle están en un formato binario y conservan el contenido y la estructura de un archivo de DataFrame.


        -------------------------------------------------------------------------------------------------------------------------------------------------------------
        5. Confirme que los datos se escribieron en el archivo pickle.
        1. Desplácese hacia abajo y vea la celda titulada Confirmar que los datos se escribieron en el archivo pickle y examine la lista de código debajo de ella.

        Este código leerá los datos que acaba de guardar en el archivo pickle y mostrará las primeras 5 filas.


        2. Ejecute la celda de código.


        3. Examine el resultado.
        Como era de esperar, el DataFrame se cargó desde el archivo pickle con su estructura intacta.


        4. En la siguiente celda de código, examine el código.

        Este código mostrará todas las columnas y sus tipos de datos para el archivo houses_data_cleaned.pickle.


        5. Ejecute la celda de código.


        6. Examine el resultado.

        Como puede ver, la columna date todavía está en formato datetime. No es necesario realizar análisis o consultas adicionales cuando se carga un archivo de DataFrame directamente desde un archivo pickle.

        ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        6. Escribir los datos en un archivo CSV.
        1. Desplácese hacia abajo y vea la celda titulada Escribir los datos en un archivo CSV y examine la lista de código debajo de ella.

        Este código guardará los datos de houses_cleaned_final en el archivo houses_data_cleaned.csv.


        2. Ejecute la celda de código.


        -------------------------------------------------------------------------------------------------------------------------------------------------------------
        7. Confirme que los datos se escribieron en un archivo CSV.
        1. Desplácese hacia abajo y vea la celda titulada Confirmar que los datos se escribieron en un archivo CSV y examine la lista de código debajo de ella.

        Este código leerá los datos que acaba de guardar en el archivo CSV y mostrará las primeras 5 filas.


        2. Ejecute la celda de código.


        3. Examine el resultado.

        La estructura del DataFrame parece estar intacta, a pesar de cargarse desde un archivo de texto. Sin embargo, puede haber algunos cambios más sutiles que requerirán que analice los datos para ponerlos en un estado ideal.


        4. En la siguiente celda de código, examine el código.
        Este código mostrará todas las columnas y sus tipos de datos para el archivo houses_data_cleaned.csv.


        5. Ejecute la celda de código.


        6. Examine el resultado.

        Como puede ver, la columna date está ahora en un formato de objeto en lugar de datetime. Tenga en cuenta que los archivos de texto pueden requerir análisis adicionales al volver a cargarlos en el entorno de programación.


        ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        8. Confirme que los archivos de base de datos, pickle y CSV se guardaron en la unidad local.
        1.En Firefox, seleccione la pestaña ITSAI/ETL/ para ver la estructura de archivos.
        2. Compruebe que los siguientes archivos están presentes:
        - houses_data_cleaned.csv
        - houses_data_cleaned.db
        - houses_data_cleaned.pickle


        ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        9.Cierre este kernel de Jupyter Notebook y la máquina virtual.
        1.En Firefox, seleccione la pestaña Accessing and Managing Data for AI.ipynb.
        2. En el menú, seleccione Kernel→Cerrar.
        3. En el cuadro de diálogo ¿Cerrar kernel?, seleccione Cerrar.
        4. Cierre Firefox.
        5. Cierre la ventana Terminal que ejecuta el programa Jupyter Notebook.
        6. En el menú VirtualBox VM en la parte superior de la pantalla, seleccione Equipo→Apagar ACPI y, si es necesario, seleccione Apagar. Compruebe que la ventana de la VM se cierre.
        7. Cierre la ventana Oracle VM VirtualBox Manager.