Data Nurturing con pandas. Procedimientos básicos

Patricia Carmona
Ironhack
Published in
5 min readMar 16, 2020
Photo by Michael Payne on Unsplash

Unas de las posibilidades que pandas brinda para el análisis de datos es el enriquecimiento de los mismos con información de diferentes fuentes.

¿Qué es el Data Nurturing?

Data Nurturing es un procedimiento para complementar un DataFrame con información procedente de otras fuentes. En ocasiones, nos encontramos con un DataFrame al que se le puede añadir información para tener datos de mayor valor o más útiles, o simplemente con más información para tomar una decisión adecuada o para filtrar con mayor criterio. Ampliar la información de un DataFrame con datos útiles es el objetivo de Data Nurturing.

Diferentes procedimientos para Data Nurturing

Los datos que necesitas para ampliar, complementar y nutrir el DataFrame original pueden proceder de diferentes fuentes: el propio DataFrame, una variable, otro DataFrame o una fuente externa como una API o una web.

Si ya tienes un DataFrame, el primer paso es limpiarlo y filtrarlo. En los posts Data Cleaning. Parte 1 y Data Cleaning. Parte 2 puedes consultar más información para este procedimiento inicial.

Data Nurturing interno

El Data Nurturing es un procedimiento para enriquecer los datos con la propia información de la que ya dispones desde el propio DataFrame, es decir, puedes generar más información desde los datos que ya tienes. En este caso trabajo con un dataset de Kaggle de vídeos de YouTube. Al descargar el .zip te darás cuenta de que hay diferentes archivos .csv. Yo he trabajado con el data set GBvideos.

df = pd.read_csv('GBvideos.csv', error_bad_lines=False)#He incluido error_bad_lines para evitar un ParserErrordf.head()
DataFrame de vídeos

En este caso no he realizado nada de Data Cleaning porque el DataFrame es muy usable y no tiene registros nulos ni duplicados.

Para comenzar el Data Nurturing, podemos contemplar qué información puede extraerse de los propios datos que el DataFrame ya contiene. Se conoce como Data Nurturing interno porque se complementa con información que ya contiene el DataFrame realizando operaciones.

En este caso voy a incorporar una columna con el engagement que ha generado cada vídeo. El engagement es una ponderación de las interacciones de una acción. Para cada vídeo pondero las interacciones sobre las visualizaciones que tiene de la siguiente forma:

  • Engagement = ((Likes) + (Dislikes * -1) + (Comments * 2)) / Views
df['engagement'] = ((df['likes'] + (df['dislikes']*-1) + (df['comment_total']*2)) / df['views']) * 100

Se incluye esta nueva serie al final del DataFrame.

DataFrame al que he añadido la serie engagement

Al igual que he complementado el DataFrame con una operación con datos del propio set, pueden realizarse otras operaciones como una categorización o etiquetado en función de otra serie del DataFrame.

Ten en cuenta que el Data Nurturing ofrece muchas posibilidades, pero lo ideal es recopilar solo la información necesaria para no perderte con muchos datos.

Data Nurturing desde un iterable

Saliendo del propio DataFrame para complementar la información de la que ya disponemos, otra opción es recurrir a una variable que contenga información. Puede ser una lista, un diccionario, una tupla o un set. En cualquier caso, información almacenada en un iterable de Python.

La información es externa al DataFrame y en este caso el procedimiento es clasificar cada fila comparando el valor de una o más series y un valor del array. Para ello hay que iterar sobre el DataFrame.

categories = {1:'Film & Animation', 2:'Autos & Vehicles', 10:'Music', 15:'Pets & Animals', 
17:'Sports', 19:'Travel & Events', 20:'Gaming', 22:'People & Blogs', 23:'Comedy',
24:'Entertainment', 25:'News & Politics', 26:'Howto & Style', 27:'Education',
28:'Science & Technology', 29:'Nonprofits & Activism' }
for index, row in df.iterrows():
if row["category_id"] in categories.keys():
df.loc[index, 'category'] = categories[row["category_id"]]

Encontré un listado de categorías e ids de YouTube con el que monté un diccionario. Para crear una nueva serie en el DataFrame, iteré sobre el DataFrame con el método .iterrows() y si el valor de ‘category_id’ coincidía con una key del diccionario, le asignaba a la nueva serie df[‘category’], el valor correspondiente.

De esta forma se puede complementar y enriquecer muy fácilmente el DataFrame para obtener información útil para el análisis.

Data Nurturing desde otro DataFrame

Y por último, otro procedimiento para completar la información de un DataFrame es desde otro DataFrame. En este caso hay dos opciones:

  • Incorporar una serie haciendo una comparativa, a un modo muy similar al que he presentado en el iterable.
  • Unir varios DataFrames.

Para unir varios DataFrames hay diferentes opciones en pandas. Lo principal a tener en cuenta es que los DataFrames a unir deben estar relacionados, si no, no tiene sentido.

En Kaggle hay otro dataset disponible de vídeos de YouTube en el que se registran los comentarios de los vídeos del otro dataset de vídeos.

df2 = pd.read_csv('GBcomments.csv', error_bad_lines=False)#He incluido error_bad_lines para evitar un ParserError

Este DataFrame registra los comentarios en diferentes vídeos de YouTube. La diferencia entre ambos DataFrames es que el primero, cada registro es un vídeo con una id única y en el segundo, cada registro es un comentario, correspondiente a un vídeo y que la misma id tiene diferentes comentarios en este DataFrame.

¿Cómo unir dos DataFrames?

Pandas tiene varios métodos para unir DataFrames. Éstos pueden unirse en el axis 0 o en el axis 1, es decir en una siguiente fila o en una columna contigua.

Los métodos que pandas dispone para unir DataFrames son concat, merge y join. La diferencia entre los tres métodos está en el “control” que tenemos sobre la unión de los datos.

Para unir los DataFrames de vídeos y de comentarios, he recurrido al método merge(), indicando en qué columna coinciden ambos sets.

df3 = df.merge(df2, on='video_id')

Reduzco el número de series a las necesarias:

col = ['video_id', 'title', 'date', 'category', 'views', 'likes_x', 'dislikes', 'comment_total', 'engagement', 'comment_text']df3 = df3[col]
DataFrame de vídeos y comentarios

Puedes ver que el DataFrame resultante ha duplicado la información del set de vídeos de YouTube ya que es la misma información para cada comentario que pertenece a ese vídeo. De esta forma se ve cada comentario en una fila del DataFrame en la serie ‘comment_text’.

Con estos tres métodos es muy fácil enriquecer un DataFrame con datos internos, con variables externas o con otro DataFrame, obteniendo información de valor para el análisis. Recuerda que aunque tengas muchas posibilidades de ampliar el DataFrame, la información más útil es aquella que aporta valor a tu trabajo. ¡Seguimos!

--

--

Patricia Carmona
Ironhack

Data Analyst. Improving the relation brands-users.