En la preparación de datos, una etapa clave en la ciencia de datos, las tareas de ingeniería de datos pueden ser complejas. Este artículo demuestra cómo modelos de lenguaje grandes como ChatGPT, combinados con Python, pueden automatizar operaciones comunes, ilustrando la sinergia entre la ingeniería de datos y la ingeniería de prompts.
Generación de un DataFrame con Pandas
Comenzamos pidiendo a ChatGPT que cree un DataFrame de Pandas a partir de datos de muestra. Por ejemplo, usando un conjunto con regiones y métricas económicas.
Prompt enviado:
Crea un DataFrame de Pandas con las siguientes columnas: Región, País, Año, Tipo, Indicador, Valor. Incluye datos para América del Norte, Europa y Asia con métricas de PIB y población para 2023.
Respuesta de ChatGPT (código adaptado):
import pandas as pd
# Datos de ejemplo estructurados
info = {
'Región': ['Norte América', 'Norte América', 'Europa', 'Europa', 'Asia', 'Asia'],
'Nación': ['Estados Unidos', 'Estados Unidos', 'Francia', 'Francia', 'Japón', 'Japón'],
'Año': [2023, 2023, 2023, 2023, 2023, 2023],
'Tipo': ['Economía', 'Demografía', 'Economía', 'Demografía', 'Economía', 'Demografía'],
'Indicador': ['PIB', 'Población', 'PIB', 'Población', 'PIB', 'Población'],
'Valor': [21.4, 332, 2.8, 68, 4.2, 125]
}
df = pd.DataFrame(info)
print(df)
Al ejecutar esto, se genera un DataFrame válido con los datos especificados.
Transformación del DataFrame mediante Pivoteo
Para análisis más eficiente, convertimos la estructura a formato "ancho", donde cada idnicador es una columna. Esto requiere operaciones de pivoteo.
Prompt para transformar:
Convierte el DataFrame anterior a un formato con columnas separadas para PIB y Población, manteniendo Región, Nación y Año como índices.
Código generado con corrección iterativa:
import pandas as pd
info = {
'Región': ['Norte América', 'Norte América', 'Europa', 'Europa', 'Asia', 'Asia'],
'Nación': ['Estados Unidos', 'Estados Unidos', 'Francia', 'Francia', 'Japón', 'Japón'],
'Año': [2023, 2023, 2023, 2023, 2023, 2023],
'Tipo': ['Economía', 'Demografía', 'Economía', 'Demografía', 'Economía', 'Demografía'],
'Indicador': ['PIB', 'Población', 'PIB', 'Población', 'PIB', 'Población'],
'Valor': [21.4, 332, 2.8, 68, 4.2, 125]
}
df = pd.DataFrame(info)
# Pivoteo para estructurar los datos
df_pivot = df.pivot_table(index=['Región', 'Nación', 'Año'], columns='Indicador', values='Valor').reset_index()
df_pivot.columns.name = None
df_pivot.columns = ['Región', 'Nación', 'Año', 'PIB', 'Población']
print(df_pivot)
El resultado es un DataFrame con columnas PIB y Población, adecuado para análisis directo.
Enriquecimiento del Conjunto de Datos
Para añadir contexto, enriquecemos el DataFrame con códigos de país ISO, una tarea típica de integración de datos.
Prompt: "Incluye códigos ISO de dos letras para cada nación en el DataFrame."
ChatGPT generó código que mapea naciones a códigos ISO:
import pandas as pd
info = {
'Región': ['Norte América', 'Norte América', 'Europa', 'Europa', 'Asia', 'Asia'],
'Nación': ['Estados Unidos', 'Estados Unidos', 'Francia', 'Francia', 'Japón', 'Japón'],
'Año': [2023, 2023, 2023, 2023, 2023, 2023],
'Indicador': ['PIB', 'Población', 'PIB', 'Población', 'PIB', 'Población'],
'Valor': [21.4, 332, 2.8, 68, 4.2, 125]
}
df = pd.DataFrame(info)
# Diccionario para códigos ISO
codigos_iso = {
'Estados Unidos': 'US',
'Francia': 'FR',
'Japón': 'JP'
}
df['Código ISO'] = df['Nación'].map(codigos_iso)
df_pivot = df.pivot_table(index=['Región', 'Nación', 'Código ISO', 'Año'], columns='Indicador', values='Valor').reset_index()
df_pivot.columns.name = None
df_pivot.columns = ['Región', 'Nación', 'Código ISO', 'Año', 'PIB', 'Población']
print(df_pivot)
Esto agrega una columna de códigos ISO al DataFrame pivotado.
Derivación de Columnas Calculadas
A continuación, derivamos una nueva métrica: el PIB per cápita, calculado dividiendo el PIB por la población.
Prompt: "Calcula el PIB per cápita añadiendo una nueva columna al DataFrame."
Código modificado:
import pandas as pd
info = {
'Región': ['Norte América', 'Norte América', 'Europa', 'Europa', 'Asia', 'Asia'],
'Nación': ['Estados Unidos', 'Estados Unidos', 'Francia', 'Francia', 'Japón', 'Japón'],
'Año': [2023, 2023, 2023, 2023, 2023, 2023],
'Indicador': ['PIB', 'Población', 'PIB', 'Población', 'PIB', 'Población'],
'Valor': [21.4, 332, 2.8, 68, 4.2, 125]
}
df = pd.DataFrame(info)
codigos_iso = {'Estados Unidos': 'US', 'Francia': 'FR', 'Japón': 'JP'}
df['Código ISO'] = df['Nación'].map(codigos_iso)
df_pivot = df.pivot_table(index=['Región', 'Nación', 'Código ISO', 'Año'], columns='Indicador', values='Valor').reset_index()
df_pivot.columns.name = None
df_pivot.columns = ['Región', 'Nación', 'Código ISO', 'Año', 'PIB', 'Población']
# Cálculo del PIB per cápita
df_pivot['PIB per cápita'] = df_pivot['PIB'] / df_pivot['Población']
print(df_pivot)
El DataFrame resultante incluye ahora una columna con el PIB per cápita.
Análisis de Correlación entre Vraiables
Finalmente, realizamos un análisis estadístico simple para evaluar la correlación entre PIB y población.
Prompt: "Usa el DataFrame para calcular el coeficiente de correlación entre PIB y población."
Código proporcionado por ChatGPT:
import pandas as pd
info = {
'Región': ['Norte América', 'Norte América', 'Europa', 'Europa', 'Asia', 'Asia'],
'Nación': ['Estados Unidos', 'Estados Unidos', 'Francia', 'Francia', 'Japón', 'Japón'],
'Año': [2023, 2023, 2023, 2023, 2023, 2023],
'Indicador': ['PIB', 'Población', 'PIB', 'Población', 'PIB', 'Población'],
'Valor': [21.4, 332, 2.8, 68, 4.2, 125]
}
df = pd.DataFrame(info)
df_pivot = df.pivot_table(index=['Región', 'Nación', 'Año'], columns='Indicador', values='Valor').reset_index()
df_pivot.columns.name = None
df_pivot.columns = ['Región', 'Nación', 'Año', 'PIB', 'Población']
# Cálculo de la correlación
coef_correlacion = df_pivot['PIB'].corr(df_pivot['Población'])
print(f"Coeficiente de correlación: {coef_correlacion:.3f}")
Este enfoque permite extraer insights estadísticos sin escribir código manualmente, destacando el potencial de la ingeniería de prompts en flujos de trabajo de datos.