A través de las siguientes sesiones interiorizaremos en las data pipelines, donde aprenderemos sobre:
Carga de bases de datos en diferentes formatos
Preprocesamiento de datos (limpieza y optimización)
Carga a Tensorflow mediante Keras
Manipulación con Dataset Generators
Carga personalizada de datos con TF.data
Distribución de la densidad de los datos en conjuntos de Train/Validation/Test
Cuál es la importancia de los datos
Reconocer la relevancia de los datos se debe a que estos son el motor de nuestros modelos de inteligencia artificial; es fundamental dedicar esfuerzos a la generación y limpieza de datos.
La calidad de los datos será directamente proporcional al desempeño del modelo, si los datos que entran no son tan buenos, entonces el modelo nunca será lo suficientemente efectivo; esto es el concepto GIGO (Garbage In, Garbage Out): Si alimentas tus modelos con basura, entonces saldrá basura.
El preprocesamiento de los datos es tan importante como su calidad, por lo que debes limpiar aquellos datos corruptos, incompletos o irrelevantes para el propósito del modelo.
Al final de todo el proceso de carga y limpieza tendremos un dataset compuesto de imágenes (o ejemplos) y etiquetas que representarán la clase a la que pertenecen.
Un pipeline es un código escrito en Python que generará un grafo (modelo) para resolver problemas de clasificación, de predicciones, para entrenar y probar datos, entre otros…
Los pasos previos a seguir para crear un pipeline son:
Cagar bases de datos
Preprocesar datos (limpieza, análisis)
Cargar dataset (base de datos) desde Keras
Dataset generators (cargar base de datos no en memory)
Cargar tus propios dataset
Distribuir los datos
# ESIMPORTANTECREARBUENASBASESDEDATOS# PARAQUELOSDATOSDESALIDASEANBUENOS# Por eso se debe preprocesar bien para crear un buen grafo(modelo).
¿Cómo se componen las base de datos de los proyectos a desarrollar?
Imágenes
Labels
excelente aporte!
Gracias compañero, buen aporte
tengo un proyecto deteccion de aglomeraciones de basura pero no ecnuentro un dataset , encontre data mas enfocada para distinguir que es plastico carton etc , a mi solo me interesa un dataset de aglomeracion de basura es dicir una clasifcacion binaria es o no es , me podrian ayudar con ideas como consigo o hago mi propio dataset?
Hola Ivan Josue, es una pregunta muy interesante porque depende mucho del contexto incluso del país y eso dificulta también la búsqueda, por ejemplo: en USA no se ven aglomeraciones de basuras, sino que hay unos contenedores especiales para eso, entonces muy posiblemente no ha existido la necesidad de crear ese dataset aca. En Colombia mi país si se ven, entonces una aplicación de ese estilo seria muy valiosa.
Te recomiendo buscar en las siguientes plataformas: (Intenta escribir en ingles, español, mandarín, etc), y de múltiples formas (Para intentar encontrar la mayor cantidad de datasets):
Esos tres se enfocan en basura pero quizás más suelta, algunas botellas tiradas en el piso, etc.
La clave es seguir buscando, estoy seguro de que lo encontraras.
Si ya ves que no se encuentra, si es necesario crearlo desde cero y aquí nacen múltiples opciones:
Tu mismo tomar imágenes de lugares donde se encuentren estas aglomeraciones de basura, ten presente que debes buscar generalizar la base de datos, teniendo en cuenta:
Resolución de la cámara, angulo, brillo (Hora en la que tomas las fotos, debes tener día, noche, lluvia, etc), muchas zonas con aglomeraciones. De esta forma lograras que tu modelo sea más robusto.
Crear tu base de datos con web scrapping (Haciendo búsqueda de imágenes en internet con un script en Python)
Comprar bases de datos en empresas terceras.
Y muchas más.
Te recomiendo también el curso Profesional de Computer vision con TensorFlow, ya que necesitaras un modelo de object detection y es un poco más avanzado.
https://platzi.com/cursos/computer-vision-tensorflow/
Te disfrutaras mucho esta ruta de procesamiento de imágenes, es un mundo muy grande y con mucho por aprender.
Espero poder ayudar, cualquier cosa estoy a un clic de distancia.
Saludos
Nunca había leido una respuesta tan especifica de un profesor que disipe la duda y vaya un poco más de ello. Siento que aprendi bastante solo con leer la respuesta del profe
Profe felicidades por tan buen curso, tomaré los cursos que recomandás para poder desarrollar este curso.
Excelente Germán, muchas gracias, y aquí estamos para cualquier duda, un saludo
Un poco impreciso la última parte sobre los componentes de dataset, pues resolver problemas que tengan que ver con imágenes es solo una aplicación de las redes neuronales, no siempre tendremos imágenes ¿o sí?
Hola Eber, muchas gracias por estar tan activo y ser de los primeros estudiantes. Es un excelente punto, las redes neuronales no solo se enfocan en imágenes, también tenemos caso de uso en donde la base de datos son texto, audio, etc. Sin embargo en el caso del curso estaremos trabajando sobre procesamiento de imágenes, es por eso que las imágenes y los labels(Etiquetas) para nuestro caso toman un valor muy importante.
Los **data pipelines** (o flujos de procesamiento de datos) son una serie de pasos o procesos que transforman y trasladan datos desde una o varias fuentes hasta un destino, donde pueden ser usados para análisis, modelos de machine learning, reportes y más. Los pipelines facilitan la automatización de tareas repetitivas y permiten gestionar grandes volúmenes de datos de manera eficiente, escalable y confiable.
### Componentes Básicos de un Data Pipeline
1. **Extracción (ETL/ELT)**: Se extraen datos de diferentes fuentes (bases de datos, APIs, archivos, etc.).
2. **Transformación**: Los datos se limpian, filtran, normalizan y agregan de acuerdo a las necesidades del proyecto.
3. **Carga**: Los datos se almacenan en un sistema de destino, como un data warehouse o una base de datos.
4. **Orquestación y Programación**: Define el flujo y los tiempos de ejecución de las tareas.
5. **Monitoreo y Alertas**: Supervisa el pipeline para asegurar su funcionamiento y envía alertas en caso de errores.
### Beneficios de los Data Pipelines
- **Automatización**: Disminuye la intervención manual, mejorando la eficiencia.
- **Escalabilidad**: Los pipelines están diseñados para manejar grandes volúmenes de datos.
- **Consistencia**: Se reduce el riesgo de errores manuales y se asegura que el proceso sea repetible.
- **Trazabilidad**: Permite rastrear los pasos de transformación en los datos, facilitando la auditoría y cumplimiento de normativas.
### Tipos de Data Pipelines
1. **ETL (Extract, Transform, Load)**: Los datos se transforman antes de cargar al destino. Común en almacenes de datos tradicionales.
2. **ELT (Extract, Load, Transform)**: Los datos se extraen y cargan al destino antes de la transformación, ideal para grandes volúmenes en sistemas que pueden manejar transformaciones internamente.
3. **Streaming**: Procesamiento en tiempo real, ideal para análisis en vivo y aplicaciones que requieren datos de manera instantánea.
4. **Batch**: Procesamiento por lotes, se ejecuta a intervalos regulares y es ideal para grandes volúmenes que no requieren datos en tiempo real.
### Herramientas Comunes para Crear Data Pipelines
1. **Apache Airflow**: Herramienta de orquestación y programación de flujos de datos basada en Python.
2. **Apache Kafka**: Sistema de mensajería para procesamiento de datos en tiempo real.
3. **Apache Spark**: Plataforma de procesamiento de grandes volúmenes de datos en tiempo real y por lotes.
4. **Luigi**: Herramienta de orquestación de flujos de trabajo, más ligera que Airflow, pero muy útil para pipelines de datos simples.
### Ejemplo de un Data Pipeline en Python con Pandas
En este ejemplo, se crea un pipeline sencillo en Python que extrae datos de un archivo CSV, los transforma y luego los guarda en un nuevo archivo.
#### Paso 1: Instalación de Paquetes Necesarios
Si aún no tienes pandas instalado, puedes hacerlo con:
pip install pandas
#### Paso 2: Definir Funciones del Pipeline
Vamos a definir funciones para cada paso del proceso: extracción, transformación y carga.
import pandas as pd
\# 1. Extracción
def extract\_data(file\_path):  data = pd.read\_csv(file\_path)  return data\# 2. Transformación
def transform\_data(data):  \# Limpiar y normalizar los datos  data = data.dropna() # Eliminar filas con valores nulos  data\['price'] = data\['price'].apply(lambda x: x \* 1.1) # Ajustar precios en 10%  data = data.rename(columns={"price": "adjusted\_price"})  return data\# 3. Carga
def load\_data(data, output\_path):  data.to\_csv(output\_path, index=False)
#### Paso 3: Ejecutar el Pipeline
Vamos a ejecutar cada función del pipeline de forma secuencial.
def run\_pipeline():  \# Ruta de archivos de entrada y salida  input\_path = 'data/input\_data.csv'  output\_path = 'data/output\_data.csv'     \# Ejecutar el pipeline  data = extract\_data(input\_path)  data = transform\_data(data)  load\_data(data, output\_path)  print("Pipeline completado y datos guardados en", output\_path)
\# Ejecutar el pipeline
run\_pipeline()
### Ejemplo de Data Pipeline con Airflow
Para un pipeline más complejo o automatizado, podemos usar Apache Airflow. Este ejemplo ilustra cómo usar Airflow para crear un pipeline ETL simple con Python.
#### Paso 1: Instalación de Apache Airflow
pip install apache-airflow
#### Paso 2: Configurar el DAG en Airflow
Airflow utiliza **DAGs** (Directed Acyclic Graphs) para definir flujos de trabajo. Un DAG en Airflow define las tareas y su orden de ejecución.
from airflow import DAG
from airflow.operators.python\_operator import PythonOperator
from datetime import datetime, timedelta
import pandas as pd
\# Funciones del pipeline
defextract():  data = pd.read\_csv('/path/to/input.csv')  return datadeftransform(data):  data\['price'] = data\['price'].apply(lambda x: x \* 1.1)  return datadefload(data):  data.to\_csv('/path/to/output.csv', index=False)
\# Crear el DAG
default\_args ={  'owner': 'airflow',  'retries': 1,  'retry\_delay': timedelta(minutes=5),}with DAG(  'simple\_etl\_pipeline',  default\_args=default\_args,  description='Un pipeline ETL simple',  schedule\_interval=timedelta(days=1),  start\_date=datetime(2023, 1, 1),  catchup=False,)as dag:     task\_extract = PythonOperator(  task\_id='extract\_data',  python\_callable=extract  )  task\_transform = PythonOperator(  task\_id='transform\_data',  python\_callable=transform  )  task\_load = PythonOperator(  task\_id='load\_data',  python\_callable=load  )  task\_extract >> task\_transform >> task\_load
### Conclusión
Los data pipelines son esenciales en la ingeniería de datos y el aprendizaje automático, ya que aseguran que los datos se transformen y entreguen de manera constante y confiable. En Python, se pueden construir data pipelines sencillos con pandas y numpy o más avanzados y escalables con Airflow y Spark, logrando así flujos de trabajo optimizados y escalables para datos en tiempo real o por lotes.
¿Qué son los data pipelines?
Un data pipeline es un proceso automatizado que extrae, transforma y carga datos de diferentes fuentes hacia un destino específico. Se puede pensar en él como una tubería por la cual fluyen los datos para ser preparados y utilizados en análisis o para entrenar modelos de aprendizaje automático.
¿Para qué sirven los data pipelines?
++Los data pipelines tienen diversas aplicaciones, pero algunas de las más importantes son++
Integración de datos:
Permiten recolectar datos de diversas fuentes (bases de datos, sensores, redes sociales, etc.) y unificarlos en un formato consistente.
Limpieza y transformación de datos
Los datos crudos suelen contener errores, inconsistencias o estar en un formato no procesable. Los pipelines limpian, filtran y transforman los datos para prepararlos para su análisis.
Entrega de datos a sistemas analíticos
Una vez limpios y transformados, los datos se entregan a herramientas de Business Intelligence (BI), motores de análisis o se almacenan en data lakes para su uso posterior.
Entrenamiento de modelos de IA
Los data pipelines son esenciales para alimentar los modelos de aprendizaje automático con datos de forma continua y automatizada.
Beneficios del uso de data pipelines
Ahorro de tiempo y recursos: Automatizan tareas manuales repetitivas, liberando tiempo de los analistas de datos para tareas más complejas.
Mejora de la calidad de los datos
Limpian y transforman los datos para garantizar su consistencia y precisión.
Aumenta la eficiencia de los procesos analíticos: Permiten un flujo continuo de datos hacia los sistemas analíticos, permitiendo análisis e informes actualizados.
Simplifica el entrenamiento de modelos de IA
Garantizan un suministro constante y confiable de datos para entrenar y mejorar los modelos.
👺👺
¡Hola!
Quería compartir con ustedes un webinar que se llevará a cabo este jueves 16 de marzo sobre el tema de machine learning aplicado en computer vision. Estoy segura de que será un excelente complemento para este curso.
El profe Adonai Vera estará dando una de las charlas!
Es muy importante el conocimiento de los formatos a la hora de cargar una base de datos, los cuales la mayoría los desconocemos tales como CSV, JSON, Base64, ETC