El manejo eficiente de los datos es crucial para cualquier proyecto de análisis o modelado. A menudo, esto implica no solo la gestión básica, sino también el enriquecimiento para obtener más información valiosa de los modelos. Abordaremos cómo enriquecer los datos, gestionar notebooks y explorar fuentes externas para obtener un entorno de datos más robusto.
¿Cómo se utiliza un nuevo notebook para datos enriquecer?
Para empezar a enriquecer los datos en un entorno estructurado, es común trabajar dentro de un notebook. En este caso, creamos un nuevo notebook y lo titulamos tres_guion_bajo_enriquecimiento. Usamos Pandas para importar nuestros datos y Matplotlib para la visualización. Con estos elementos, explicamos sistemáticamente los procesos que enriquecen la data.
import pandas as pd
import matplotlib.pyplotas plt
# Cargar el dataset
compras_df = pd.read_csv('data_clean_compras.csv')
¿Cómo se expande una columna de fecha?
Las fechas, generalmente almacenadas como texto, pueden ser transformadas para obtener insights temporales. La expansión de columnas de fecha implica desglosar una fecha en sus componentes: día, mes y año, lo cual puede ser útil para tareas de modelado.
Proyectar variables es una técnica para relacionar una variable con otra, generando así insights valiosos. Por ejemplo, al analizar el número de ventas por beneficiario, podemos construir un diccionario que nos dé las cuentas de cada beneficiario.
El uso de fuentes externas enriquece significativamente los datos. Una herramienta conveniente es Phantom Buster, que permite la recuperación de información externa, como por ejemplo, si un beneficiario tiene página de LinkedIn.
# Cargar los resultados de LinkedInlinkedin_data = pd.read_csv('data_linkedin.csv')has_site = linkedin_data.notna()compras_df['has_linkedin']= compras_df['beneficiario'].apply(lambda x: has_site[x]if x in has_site elseFalse)
¿Cómo asegurarse de que las variables estén correctamente convertidas?
Después de incorporar esta información, es esencial asegurarse de que no hemos introducido errores en el conjunto de datos. Verificar conversions y el manejo adecuado de NaNs garantiza la integridad de la información.
En resumen, el proceso de enriquecer datos implica limpiar, transformar y extraer información significativa utilizando tanto recursos internos como externos. Esta metodología no solo amplifica el potencial analítico, sino que también da lugar a modelos predictivos más precisos y robustos.
Pueden utilizar herramientas como Featuretools para automatizar el proceso de enriquecimiento de datos
Así es, bienvenido el automl!
Muchas gracias por el dato 👏🏻🥇
En mi proyecto yo aplique feature engineering:
Crearemos una nueva categoria, para denotar el objetivo del ejercicio (por ejemplo, perder peso, aumentar masa muscular, mejorar la resistencia, etc.).
Posible clasificación de los tipos de ejercicios y sus objetivos principales correspondientes realizada por CHATGPT:
# Creamos las nuevas columnas "TrainingGoal" en el DataFramedf_data_processing["TrainingGoal_Strength"]=""df_data_processing["TrainingGoal_Hypertrophy"]=""df_data_processing["TrainingGoal_Power"]=""df_data_processing["TrainingGoal_Functional Training"]=""df_data_processing["TrainingGoal_Flexibility"]=""df_data_processing["TrainingGoal_Mobility"]=""df_data_processing["TrainingGoal_Rehabilitation"]=""df_data_processing["TrainingGoal_Stress Reduction"]=""df_data_processing["TrainingGoal_Agility"]=""df_data_processing["TrainingGoal_Explosive Strength"]=""df_data_processing["TrainingGoal_Cardiovascular Endurance"]=""df_data_processing["TrainingGoal_FatBurning"]=""# Asignamos un valor correspondiente a cada columna "TrainingGoal" para cada valor de la columna "Type"for idx, value in df_data["Type"].iteritems():if value in["Strength",'Powerlifting','Olympic Weightlifting','Strongman']: df_data_processing.loc[idx,"TrainingGoal_Strength"]=1.0else: df_data_processing.loc[idx,"TrainingGoal_Strength"]=0.0if value in["Strength",'Powerlifting','Olympic Weightlifting','Strongman']: df_data_processing.loc[idx,"TrainingGoal_Hypertrophy"]=1.0else: df_data_processing.loc[idx,"TrainingGoal_Hypertrophy"]=0.0if value in["Strength",'Powerlifting','Olympic Weightlifting','Strongman','Plyometrics']: df_data_processing.loc[idx,"TrainingGoal_Power"]=1.0else: df_data_processing.loc[idx,"TrainingGoal_Power"]=0.0if value in["Plyometrics",'Powerlifting','Olympic Weightlifting','Strongman']: df_data_processing.loc[idx,"TrainingGoal_Functional Training"]=1.0else: df_data_processing.loc[idx,"TrainingGoal_Functional Training"]=0.0if value in["Stretching"]: df_data_processing.loc[idx,"TrainingGoal_Flexibility"]=1.0else: df_data_processing.loc[idx,"TrainingGoal_Flexibility"]=0.0if value in["Stretching"]: df_data_processing.loc[idx,"TrainingGoal_Mobility"]=1.0else: df_data_processing.loc[idx,"TrainingGoal_Mobility"]=0.0if value in["Stretching"]: df_data_processing.loc[idx,"TrainingGoal_Rehabilitation"]=1.0else: df_data_processing.loc[idx,"TrainingGoal_Rehabilitation"]=0.0if value in["Stretching"]: df_data_processing.loc[idx,"TrainingGoal_Stress Reduction"]=1.0else: df_data_processing.loc[idx,"TrainingGoal_Stress Reduction"]=0.0if value in["Plyometrics"]: df_data_processing.loc[idx,"TrainingGoal_Agility"]=1.0else: df_data_processing.loc[idx,"TrainingGoal_Agility"]=0.0if value in["Plyometrics"]: df_data_processing.loc[idx,"TrainingGoal_Explosive Strength"]=1.0else: df_data_processing.loc[idx,"TrainingGoal_Explosive Strength"]=0.0if value in["Cardio"]: df_data_processing.loc[idx,"TrainingGoal_Cardiovascular Endurance"]=1.0else: df_data_processing.loc[idx,"TrainingGoal_Cardiovascular Endurance"]=0.0if value in["Cardio"]: df_data_processing.loc[idx,"TrainingGoal_FatBurning"]=1.0else: df_data_processing.loc[idx,"TrainingGoal_FatBurning"]=0.0
Excelente trabajo! Qué genial uso de ChatGPT
Si, es un enriquecimiento de datos que la ia, al conocer tanta data de internet, puede categorizar de mejor manera, y eso que yo soy asiduo a hacer ejercicio por lo cual se que realizo un trabajo que con creces supera las categorias que yo pense antes de usar la IA (aunque se las pase como promt a CHATGPT para ayudarlo).
A modo de ejemplo para que se vea graficamente lo que se realizo, fue esto:
Observacion que agregue al cuaderno de mi proyecto para dar contexto.
Saludos, tengo un dataset en CSV, hay un par de columnas de datos que a su vez son un diccionario, por ejemplo {"id":252,"name":"Graphic Novels"...} ¿Cómo podría sacarlas de ahí? supongo que en Python se puede hacer de forma más o menos sencilla, diciéndole que lea el diccionario y que vaya llenando distintos arrays que se convertirían en nuevas columnas, por ejemplo, eliminaríamos la columna categorías y la sustituiríamos por cat_id, cat_name... pero no hallo cómo podría hacerlo
Hay dos maneras mi Rene:
Puedes consultar la columna en la que estas y aplicar un apply:
df['columna'].apply(lambda x: x.get('llavequequierestraer')
La otra que puedes usar es un flatten al json, hay una libreria que hace eso: json_flatten y creo que en pandas tambien la funcion de json_normalize() te puede ayudar con el tema que tienes actualmente.
Yo soy mas fan de Los apply. <3
Que hace la linea %matplotlib inline ?
Es una configuración que se usa para hacer que los gráficos de matplotlib se impriman en la mima notebook
Hola; cuando corro el código;
has_site = {}
for i, ele in linkedin_mty.fillna(True).iterrows():
has_site[ele['query']] = True if ele['error'] == True else False
File ~\anaconda3\Lib\site-packages\pandas\_libs\index.pyx:138, in pandas._libs.index.IndexEngine.get_loc()
File ~\anaconda3\Lib\site-packages\pandas\_libs\index.pyx:165, in pandas._libs.index.IndexEngine.get_loc()
File pandas\_libs\hashtable_class_helper.pxi:5745, in pandas._libs.hashtable.PyObjectHashTable.get_item()
File pandas\_libs\hashtable_class_helper.pxi:5753, in pandas._libs.hashtable.PyObjectHashTable.get_item()
KeyError: 'error'
The above exception was the direct cause of the following exception:
KeyError Traceback (most recent call last)
Cell In[49], line 3
1 has_site = {}
2 for i, ele in linkedin_mty.fillna(True).iterrows():
----> 3 has_site[ele['query']] = True if ele['error'] == True else False
File ~\anaconda3\Lib\site-packages\pandas\core\series.py:981, in Series.__getitem__(self, key)
978 return self._values[key]
980 elif key_is_scalar:
--> 981 return self._get_value(key)
983 if is_hashable(key):
984 # Otherwise index.get_value will raise InvalidIndexError
985 try:
986 # For labels that don't resolve as scalars like tuples and frozensets
File ~\anaconda3\Lib\site-packages\pandas\core\series.py:1089, in Series._get_value(self, label, takeable)
1086 return self._values[label]
1088 # Similar to Index.get_value, but we do not fall back to positional
-> 1089 loc = self.index.get_loc(label)
1090 return self.index._get_values_for_loc(self, loc, label)
File ~\anaconda3\Lib\site-packages\pandas\core\indexes\base.py:3804, in Index.get_loc(self, key, method, tolerance)
3802 return self._engine.get_loc(casted_key)
3803 except KeyError as err:
-> 3804 raise KeyError(key) from err
3805 except TypeError:
3806 # If we have a listlike key, _check_indexing_error will raise
3807 # InvalidIndexError. Otherwise we fall through and re-raise
3808 # the TypeError.
3809 self._check_indexing_error(key)
index.pyx in pandas._libs.index.IndexEngine.get_loc()
index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
KeyError: 'error'
The above exception was the direct cause of the following exception:
KeyError Traceback (most recent call last)
3 frames/usr/local/lib/python3.11/dist-packages/pandas/core/indexes/base.py in get_loc(self, key)
3810 ):
3811 raise InvalidIndexError(key)
-> 3812 raise KeyError(key) from err
3813 except TypeError:
3814 # If we have a listlike key, _check_indexing_error will raise
KeyError: 'error'
Hay alguna manera de a través de una función traer siempre las librerias utilizadas o el dataset?
el dataset sin duda, puedes generar la captura de datos y guardarla en una variable. Sobre las librerias, no te recomiendo dejarlo en una sola funcion. pero puedes tener una libreria base o un requirements.txt preparado!
Profe a que herramienta hacías referencia para traer la info de LinkedIn, nos podrías dar mas información?
hay forma de que al momento de cargar el dataset, pandas te ponga la columna FECHA en formato datetime64.