1
resposta

[Projeto] 08 Desafio: criando uma animação para comparar diferentes dados

import pandas as pd
import plotly.graph_objects as go

1. Preparação dos dados

df = pd.read_csv('imigrantes_canada (2).csv')
df.set_index('País', inplace=True)

anos = list(map(str, range(1980, 2014)))

Extraindo dados e convertendo anos para inteiro conforme a dica

dados_brasil = df.loc['Brasil', anos]
dados_argentina = df.loc['Argentina', anos]

df_comparativo = pd.DataFrame({
'ano': list(map(int, anos)),
'Brasil': dados_brasil.values,
'Argentina': dados_argentina.values
})

2. Criando a figura inicial (ponto de partida: ano 1980)

fig = go.Figure(
data=[
go.Scatter(x=[df_comparativo['ano'][0]], y=[df_comparativo['Brasil'][0]],
name='Brasil', mode='lines', line=dict(width=2, color='green')),
go.Scatter(x=[df_comparativo['ano'][0]], y=[df_comparativo['Argentina'][0]],
name='Argentina', mode='lines', line=dict(width=2, color='blue'))
],
layout=go.Layout(
title='Imigração para o Canadá: Brasil vs Argentina',
xaxis=dict(range=[1980, 2013], title='Ano'),
yaxis=dict(range=[0, df_comparativo[['Brasil', 'Argentina']].max().max() + 500], title='Imigrantes'),
updatemenus=[dict(
type='buttons',
buttons=[dict(label='Play', method='animate', args=[None, {"frame": {"duration": 100, "redraw": False}}])]
)]
)
)

3. Criando os Frames (Onde a mágica acontece)

frames = []
for i in range(len(df_comparativo)):
# Cada frame contém uma lista com DOIS objetos Scatter
frames.append(go.Frame(
data=[
go.Scatter(x=df_comparativo['ano'][:i+1], y=df_comparativo['Brasil'][:i+1]),
go.Scatter(x=df_comparativo['ano'][:i+1], y=df_comparativo['Argentina'][:i+1])
]
))

fig.frames = frames

Exibindo o gráfico

fig.show()

1 resposta

Oi, Moacir! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Gostei bastante da forma como você estruturou a preparação dos dados e, principalmente, da criação dos frames, ficou bem claro como a animação evolui ano a ano. O uso do DataFrame comparativo também deixou a visualização mais organizada e fácil de manipular.

Uma dica interessante para o futuro é usar o método update_layout para ajustar elementos do gráfico de forma mais dinâmica após a criação da figura. Veja este exemplo:


fig.update_layout(title='Comparacao de dados')

Esse código altera o título do gráfico depois que ele já foi criado, o que ajuda a manter o código mais modular e fácil de ajustar sem recriar toda a estrutura.

Alura

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