Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
0
respuestas

08 Desafío: creando una animación para comparar diferentes datos

Tu tarea es crear un gráfico animado con Plotly que muestre estos datos. El gráfico debe tener las siguientes características:

  • Dos líneas: una para Brasil y otra para Argentina.
  • Un botón "Play" para iniciar la animación, mostrando el aumento o disminución del número de inmigrantes a lo largo de los años.
  • Las configuraciones de animación deben hacer que las dos líneas se muestren y animen al mismo tiempo.

Consejos:

  • Crea un DataFrame con los datos de Argentina y no olvides dejar la columna de años como tipo int (entero).
  • Utiliza el código proporcionado para Brasil como base y adáptalo para incluir los datos de Argentina.
  • Para configurar las animaciones, puedes hacer un bucle for para recorrer el DataFrame datos_brasil y, para cada iteración, crear una nueva lista que contenga dos objetos del tipo go.Scatter, uno para cada país. Luego, cada lista puede ser utilizada para crear un objeto go.Frame, que se agrega a la lista de frames. Finalmente, la lista de frames puede ser asignada al objeto fig, que es la figura del gráfico que se animará. Con esto, cuando se inicie la animación, el gráfico mostrará las dos líneas en movimiento, una para Brasil y otra para Argentina.

import pandas as pd
import plotly.graph_objects as go

# Creación de datos sintéticos (Simulando tendencias 2018-2023)
data = {
'Año': [2018, 2019, 2020, 2021, 2022, 2023] * 4,
'Inmigrantes': [
                12000, 15000, 8000, 11000, 14000, 16000, # Brasil
                10000, 11500, 6000, 9500, 12000, 13000, # Argentina
                8000, 9000, 4500, 7000, 8500, 10000, # Perú
                15000, 18000, 9500, 13000, 17000, 20000 # Colombia
              ],
'País': (['Brasil'] * 6) + (['Argentina'] * 6) + (['Perú'] * 6) + (['Colombia'] * 6)
}

df_migracion = pd.DataFrame(data)

# Filtramos solo para Brasil y Argentina
df_brasil = df_migracion[df_migracion['País'] == 'Brasil'].copy()
df_argentina = df_migracion[df_migracion['País'] == 'Argentina'].copy()

# Aseguramos que el año sea entero
df_brasil['Año'] = df_brasil['Año'].astype(int)
df_argentina['Año'] = df_argentina['Año'].astype(int)

# Estado en el primer año: 2018
fig = go.Figure(
    data=[
        go.Scatter(x=[df_brasil.iloc[0]['Año']], y=[df_brasil.iloc[0]['Inmigrantes']],
                   name='Brasil', mode='lines+markers', line=dict(width=3)),
        go.Scatter(x=[df_argentina.iloc[0]['Año']], y=[df_argentina.iloc[0]['Inmigrantes']],
                   name='Argentina', mode='lines+markers', line=dict(width=3))
    ],
    layout=go.Layout(
        title="Animación de Inmigración: Brasil vs Argentina",
        xaxis=dict(range=[2017, 2024], title="Año"),
        yaxis=dict(range=[0, 17000], title="Número de Inmigrantes"),
        updatemenus=[{
            "type": "buttons",
            "buttons": [{
                "label": "Play",
                "method": "animate",
                "args": [None, {"frame": {"duration": 500, "redraw": True}, "fromcurrent": True}]
            }]
        }]
    )
)

# Creación de los Frames para la animación
frames = []

# Recorremos los datos para Brasil
for i in range(len(df_brasil)):
    lista_scatter = [
        go.Scatter(x=df_brasil.iloc[:i+1]['Año'], y=df_brasil.iloc[:i+1]['Inmigrantes']),
        go.Scatter(x=df_argentina.iloc[:i+1]['Año'], y=df_argentina.iloc[:i+1]['Inmigrantes'])
    ]
    
    # Creamos el objeto Frame y lo añadimos a la lista
    frames.append(go.Frame(data=lista_scatter, name=str(df_brasil.iloc[i]['Año'])))

# Asignamos la lista de frames a la figura
fig.frames = frames

fig.update_layout(template="plotly_white", hovermode="x unified")

fig.show()

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad