2
respostas

Desafio: criando uma animação para comparar diferentes dados

import pandas as pd

df = pd.read_csv('/content/sample_data/imigrantes_canada.csv')
df.head()

df.set_index('País', inplace = True)
df

arg_br_imigrates = df.loc[['Brasil', 'Argentina']].drop(['Continente', 'Região', 'Total'], axis = 1).T
arg_br_imigrates.head()

arg_br_dict = {'ano':arg_br_imigrates['Argentina'].index.tolist(), 'imigrantes_arg':arg_br_imigrates['Argentina'].values.tolist(),
               'imigrantes_br':arg_br_imigrates['Brasil'].values.tolist()}
dados_arg_br = pd.DataFrame(arg_br_dict)
dados_arg_br

dados_arg_br['ano'] = dados_arg_br['ano'].astype(int)

import plotly.graph_objs as go

fig = go.Figure()

for i in dados_arg_br.columns[1:3]:
   fig.add_trace(
    go.Scatter(x=[dados_arg_br['ano'].iloc[0]], y=[dados_arg_br[i].iloc[0]], mode='lines', name='Imigrantes da Argentina', line=dict(width=4))
)


fig.update_layout(
    title=dict(
        text='<b>Imigração do Brasil para o Canadá no período de 1980 a 2013</b>',
        x=0.12,
        xanchor='left',
        font=dict(size=20)
    ),
    xaxis=dict(range=[1980, 2013], autorange=False, title='<b>Ano</b>'),
    yaxis=dict(range=[0, 3000], autorange=False, title='<b>Número de imigrantes</b>'),
    updatemenus=[dict(
        type='buttons',
        showactive=False,
        buttons=[dict(
            label='Play',
            method='animate',
            args=[None, {'frame': {'duration': 100, 'redraw': True}, 'fromcurrent': True, 'transition': {'duration': 300}}]
        )]
    )],
    width=1000,
    height=500
)
  

frames = []

for i in range(len(dados_arg_br)):
    frames.append(go.Frame(
        data=[
            go.Scatter(x=dados_arg_br['ano'].iloc[:i+1], y=dados_arg_br['imigrantes_br'].iloc[:i+1], mode='lines', name='Imigrantes Brasil'),
            go.Scatter(x=dados_arg_br['ano'].iloc[:i+1], y=dados_arg_br['imigrantes_arg'].iloc[:i+1], mode='lines', name='Imigrantes Argentina')
        ]
    ))
fig.frames = frames


fig.show()
2 respostas

Olá, Márcia! Como vai?

Sua solução está muito boa! Você filtrou corretamente os países de interesse (Brasil e Argentina) e utilizou o Plotly para criar uma animação incrível da imigração ao longo dos anos. Continue compartilhando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para a comunidade.

Só um pequeno detalhe para aprimorar ainda mais seu código, repara que o título da legenda está sendo fixado como "Imigrantes da Argentina" para ambas as séries, mesmo quando está desenhando a do Brasil. Nesse trecho aqui:

for i in dados_arg_br.columns[1:3]:
   fig.add_trace(
    go.Scatter(x=[dados_arg_br['ano'].iloc[0]], y=[dados_arg_br[i].iloc[0]], mode='lines', name='Imigrantes da Argentina', line=dict(width=4))
)

Uma alternativa seria:

for col in dados_arg_br.columns[1:3]:
   fig.add_trace(
       go.Scatter(
           x=[dados_arg_br['ano'].iloc[0]],
           y=[dados_arg_br[col].iloc[0]],
           mode='lines',
           name=f'Imigrantes {col[-2:].upper()}',  # Resultado: "Imigrantes AR" e "Imigrantes BR"
           line=dict(width=4)
       )
   )

Essa pequena correção vai tornar a legenda inicial mais precisa e ajudar na interpretação do gráfico animado.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Olá, Daniel ! Tudo bem ?

Obrigado pelo feedback. Farei o ajuste necessário.