A Alla fine della prima settimana di marzo 2024, la notizia ha rivelato che il PIL del Brasile è cresciuto di quasi il 3% nel 2023 rispetto all’anno precedente, raggiungendo un valore totale di 2.17 trilioni di dollari. Questo progresso ha collocato il paese al nono posto tra le maggiori economie del mondo, superando il Canada. L'analisi indica specificamente che una parte significativa di questo aumento è attribuita al settore agricolo, che ha registrato una crescita impressionante del 15,1%. Questo scenario suscita interesse non solo da parte degli investitori ma anche da parte di ricercatori, specialisti e analisti governativi che cercano di comprendere non solo la performance del settore agricolo, ma anche la produzione industriale, il settore dei servizi, le esportazioni e le importazioni, tra gli altri elementi cruciali che compongono il Sistema dei Conti Nazionali (NAS)
Il NAS, gestito dall’Istituto brasiliano di geografia e statistica (IBGE), è una fonte vitale di informazioni sulla generazione, distribuzione e utilizzo del reddito nel paese. Sebbene l'Istituto offra una piattaforma online per l'accesso ai dati NAS, inclusi filtri e grafici di base, molti utenti incontrano difficoltà nella navigazione e nell'analisi a causa della mancanza di moderne risorse per la visualizzazione dei dati. I grafici forniti, pur essendo utili per una rapida comprensione delle tendenze, spesso non hanno la qualità necessaria per essere inclusi in report o articoli dettagliati e coprono un’ampiezza di informazioni che può essere eccessiva per determinate esigenze.
Alla luce di questi limiti è nata l'iniziativa di sviluppare un cruscotto specifico sui conti nazionali, pensato per rispondere alle richieste degli utenti meno familiari con la struttura SCN. Questa dashboard consente query e analisi semplificate, presentando grafici che affrontano una serie selezionata di questioni relative all'evoluzione del PIL e delle sue componenti nel corso dei trimestri e degli anni a partire dal 1996. Se riconosci l'importanza dei dati di contabilità nazionale nel tuo lavoro o ricerca e desideri per esplorare come costruire una dashboard utilizzando il linguaggio R, comprendere le principali sfide tecniche e aziendali legate all'implementazione di questa soluzione, ti invito a goderti i paragrafi seguenti, provare la dashboard utilizzando questo collegamentoed esplorare il codice fornito.
L'origine dei dati
I dati che alimentano la nostra dashboard vengono consumati direttamente da un'API fornita da IBGE tramite il pacchetto R {sidrar}. Questa API consente l'accesso a una varietà di tabelle associate ai conti nazionali, aggiornate trimestralmente. Per la nostra analisi, ci concentriamo su due di queste tabelle: “Prezzi correnti” (tabella 1846) e “Tasso di variazione dell'indice di volume trimestrale” (tabella 5932). Questi set di dati forniscono una solida base per comprendere non solo i valori assoluti dei conti nazionali ma anche i loro trend di crescita e le loro variazioni nel tempo. È importante notare che utilizzando l'API, la dashboard garantisce che i dati presentati siano sempre aggiornati.
Per coloro che sono interessati al linguaggio di programmazione R, un'opportunità per esplorarlo ulteriormente è presente nell'analisi del codice responsabile del consumo dei dati dall'API. Come al solito nei miei testi, condivido estratti rilevanti del codice per arricchire la tua comprensione. Tuttavia, se la programmazione non è il tuo obiettivo, puoi saltare i blocchi di codice senza compromettere la comprensione del testo.
cnt_vt_precos_correntes<-
get_sidra(x = 1846,
period = lista_trimestres)cnt_vt_precos_correntes <- janitor::clean_names(cnt_vt_precos_correntes)
cnt_taxa_variacao<-
get_sidra(x = 5932,
period = lista_trimestres
)
cnt_taxa_variacao<- janitor::clean_names(cnt_taxa_variacao)
La funzione get_sidra estrae i dati dal Sistema dei conti nazionali (SNA). Per utilizzarlo è sufficiente indicare il nome della tabella (1846 per la prima chiamata e 5932 per la seconda) e il periodo desiderato, specificato come vettore di trimestri dal 1996 all'ultimo trimestre disponibile. Vedi l'esempio qui sotto.
lista_trimestres
(1) "199601" "199602" "199603" "199604" "199701" "199702" "199703" "199704" "199801" "199802" "199803" "199804" "199901"
(14) "199902" "199903" "199904" "200001" "200002" "200003" "200004" "200101" "200102" "200103" "200104" "200201" "200202"
(27) "200203" "200204" "200301" "200302" "200303" "200304" "200401" "200402" "200403" "200404" "200501" "200502" "200503"
(40) "200504" "200601" "200602" "200603" "200604" "200701" "200702" "200703" "200704" "200801" "200802" "200803" "200804"
(53) "200901" "200902" "200903" "200904" "201001" "201002" "201003" "201004" "201101" "201102" "201103" "201104" "201201"
(66) "201202" "201203" "201204" "201301" "201302" "201303" "201304" "201401" "201402" "201403" "201404" "201501" "201502"
(79) "201503" "201504" "201601" "201602" "201603" "201604" "201701" "201702" "201703" "201704" "201801" "201802" "201803"
(92) "201804" "201901" "201902" "201903" "201904" "202001" "202002" "202003" "202004" "202101" "202102" "202103" "202104"
(105) "202201" "202202" "202203" "202204" "202301" "202302" "202303" "202304" "202401" "202402" "202403" "202404"
Progettazione tecnologica
Gli sviluppatori R si rivolgono spesso a Shiny per creare dashboard interattive. Si tratta di un prodotto affermato che offre ampie possibilità di personalizzazione, sfruttando funzionalità avanzate di esperienza utente (UX). Tuttavia, per coloro che cercano una produttività iniziale più agile, l’utilizzo di Flexdashboard insieme a Shiny è una valida alternativa. Sebbene questo approccio possa comportare interfacce più semplici e meno personalizzate, è una scelta che offre una rapida implementazione. Per migliorare l'aspetto visivo e professionale delle applicazioni sviluppate con Flexdashboard, un'opzione è incorporare la libreria {thematic}. Abbiamo scelto di seguire questo approccio nella nostra dashboard, garantendo un aspetto raffinato e accattivante per gli utenti.
Di seguito è riportato uno screenshot che mostra il layout del prodotto utilizzando la combinazione flexdashboard + Shiny + tematica.
E di seguito è riportato uno snippet di codice in cui è possibile vedere la combinazione di librerie che consente all'utente di interagire con i componenti dell'applicazione
library(flexdashboard)
library(plotly)
library(shiny)
library(purrr)# Install thematic and un-comment for themed static plots (i.e., ggplot2)
thematic::thematic_rmd(bg= "#101010", fg="#ffda00", accent = NA )
La scelta di Plotly è mostrata sopra nell'elenco delle librerie richiamate dall'applicazione. Questa decisione deriva dalle sue caratteristiche distintive, soprattutto per quanto riguarda l'interazione con l'utente. Plotly facilita un'esperienza di visualizzazione dei dati fluida, evidenziata dalla funzionalità che consente all'utente di esplorare i dati del grafico spostando il mouse. Inoltre, questa libreria offre la comodità di poter scaricare la figura in formato PNG, nonché la possibilità di contrassegnare parti specifiche del grafico per lo zoom, fornendo maggiore utilità all'esperienza interattiva degli utenti dell'applicazione.
Dovremmo evidenziare:
- Per tutti i grafici lo è
- Per tutti i grafici è possibile selezionare più di una serie storica per la visualizzazione simultanea
- Per rendere i grafici più facili da comprendere per il pubblico che li fruirà tramite testo stampato, è possibile evidenziare punti che potrebbero avere senso per ulteriori analisi. Nell’esempio seguente, vediamo l’impatto della pandemia nel 2020, che ha fatto sì che il PIL tornasse ai livelli del 2016.
- I dati di ciascun grafico possono essere facilmente scaricati nell'ambiente dell'utente utilizzando i pulsanti di download.
Di seguito sono riportati alcuni codici che si riferiscono a ciò di cui ci occupiamo in questo argomento.
- Selezione di più serie temporali e periodi da evidenziare utilizzando gli oggetti input$account_year e input$year
# Preparação dos dados
dados_grafico_corrente_ano <<- cnt_vt_precos_correntes %>%
filter(setores_e_subsetores %in% input$conta_ano) %>%
inner_join(dados_pib) %>%
mutate(data_nominal = gera_meses_trimestre(trimestre_codigo), # Essa função precisa ser definida ou alterada conforme o contexto
setores_e_subsetores = str_wrap(setores_e_subsetores,20)) %>%
group_by(ano = format(data_nominal, "%Y"),
setores_e_subsetores) %>%
summarize(data_nominal = min(data_nominal),
valor = sum(valor),
valor_pib = sum(valor_pib)) %>%
ungroup() %>%
mutate(valor_perc = ((valor/valor_pib))*100)sel_data <- dados_grafico_corrente_ano %>%
filter(year(data_nominal) %in% input$ano)
- Scaricamento dei dati. Da notare la funzione write.table, che scrive su un file il contenuto dell'oggetto globale dati_grafico_anno_corrente generato nel blocco di codice sopra.
# Create placeholder for the downloadButton
uiOutput("downloadUI_conta_perc_ano")
# Create the actual downloadButton
output$downloadUI_conta_perc_ano <- renderUI( {
downloadButton("download_conta_perc_ano","Download", style = "width:100%;")
})
output$download_conta_perc_ano<- downloadHandler(
filename = function() {
paste('dados_grafico_perc_ano', '.csv', sep='')
},
content = function(file) {
#dados_conta_trimestre_corrente <- graph_mapa_regic$data
write.table(dados_grafico_corrente_ano, file, sep = ";",row.names = FALSE,fileEncoding = "UTF-8",dec=",")
}
)
Progettazione aziendale
L'applicazione offre una scelta tra sette diversi tipi di grafici, consentendo agli utenti di selezionare la rappresentazione più adatta per analizzare e interpretare le informazioni rilevanti per le loro decisioni. Questa varietà consente un approccio flessibile, adattabile alle diverse esigenze e preferenze di visualizzazione.
Per facilitare la navigazione e l'organizzazione dei grafici, l'applicazione li divide in due schede ben definite. La scheda “Dati annuali” si concentra sul fornire una visione panoramica dell'evoluzione nel tempo, con grafici che evidenziano le variazioni annuali dei conti. Qui gli utenti possono analizzare l'evoluzione annuale dei conti a valori costanti per il 2010, l'evoluzione annuale dei conti in percentuale del valore aggiunto a valori correnti e l'evoluzione annuale dei conti in percentuale del valore aggiunto a valori costanti per il 2010.
D'altra parte, la scheda “Variazioni” si concentra nel fornire approfondimenti sui cambiamenti relativi tra diversi periodi di tempo. Gli utenti possono esaminare nel dettaglio le variazioni trimestrali rispetto allo stesso periodo dell'anno precedente, le variazioni trimestrali trimestre per trimestre, il tasso cumulato nell'anno e la variazione cumulata su quattro trimestri. Questo approccio dettagliato e con varianti temporali consente un'analisi più granulare delle tendenze e dei modelli nei dati.
Trasformare i dati economici
In generale, i grafici nella scheda Variazioni sono filtri sul risultato della query iniziale utilizzando l'API. Le variabili vengono selezionate dalla tabella Tasso di variazione dell'indice di volume trimestrale e il set di dati dei risultati viene utilizzato nella struttura di visualizzazione. Per coloro a cui piace R, è qualcosa come quello qui sotto..
dados_grafico_taxa_acum_ano<<-
cnt_taxa_variacao %>%
filter(setores_e_subsetores %in% input$conta_var,
variavel_codigo == "6562") %>%
mutate(data_nominal = gera_meses_trimestre(trimestre_codigo),
setores_e_subsetores = str_wrap(setores_e_subsetores,20))
Notare sopra la selezione della variabile 6562, che contiene i dati di variazione accumulati su quattro trimestri. IL data_graphic_rate_accum_year L'oggetto viene utilizzato nella funzione plot_ly come dati di riferimento per il grafico.
I grafici visualizzati nella scheda “Dati Annuali” subiscono varie trasformazioni prima di essere visualizzati sullo schermo. Di particolare rilievo è il calcolo dei valori costanti per l'anno 2010, che viene utilizzato in due delle tre visualizzazioni annuali dei dati. Questo processo richiede che i dati delle serie storiche per il 2010 siano aggiornati con l'effettiva variazione del conto selezionato, sia per gli anni precedenti che per quelli successivi. Tale esigenza ha comportato la necessità di sviluppare complesse funzioni per il calcolo dei valori antecedenti al 2010, utilizzando una logica inversa rispetto a quella utilizzata per gli anni successivi a tale riferimento, garantendo la coerenza dei valori costanti. Per una comprensione più approfondita della procedura adottata si suggerisce l'analisi del codice di seguito presentato.
calcula_serie_constante<- function(tabela_taxa, tabela_precos, trimestres_filtro, conta, ano_referencia){# Preparação dos dados
dados_grafico_acumulado_lab <- tabela_taxa %>%
filter(setores_e_subsetores %in% conta, variavel_codigo == "6563", trimestre_codigo %in% trimestres_filtro) %>%
mutate(data_nominal = gera_meses_trimestre(trimestre_codigo), setores_e_subsetores = str_wrap(setores_e_subsetores, 20), ano = year(data_nominal)) %>%
select(ano, setores_e_subsetores, valor) %>%
rename(variacao = valor)
tabela_base <- tabela_precos %>%
filter(setores_e_subsetores %in% conta) %>%
mutate(data_nominal = gera_meses_trimestre(trimestre_codigo), setores_e_subsetores = str_wrap(setores_e_subsetores, 20), ano = as.numeric(format(data_nominal, "%Y"))) %>%
summarise(valor = sum(valor), .by = c(setores_e_subsetores, ano)) %>%
ungroup() %>%
inner_join(dados_grafico_acumulado_lab, by = c("ano", "setores_e_subsetores"))
dados_grafico_constante_ano <- unique(tabela_base$setores_e_subsetores) %>%
map_dfr(function(setor) {
tabela_anterior <- calcular_valor_referencia(tabela_base, setor, ano_referencia, "anterior")
tabela_posterior <- calcular_valor_referencia(tabela_base, setor, ano_referencia, "posterior")
bind_rows(tabela_anterior, tabela_posterior(-1, )) %>%
arrange(ano) %>%
mutate(valor_constante = valor_referencia/10^3)})
}
# Função para otimizar a criação de tabelas e cálculo de valor_referencia
calcular_valor_referencia <- function(tabela_base, setor, ano_referencia, direcao) {
if (direcao=="anterior"){
tabela_filtrada <-
tabela_base %>%
filter(setores_e_subsetores == setor,
ano <= ano_referencia) %>%
arrange(desc(ano))
} else{
tabela_filtrada <-
tabela_base %>%
filter(setores_e_subsetores == setor,
ano >= ano_referencia) %>%
arrange(ano)
}
if(nrow(tabela_filtrada) > 1) {
tabela_filtrada$valor_referencia <- NA
tabela_filtrada$valor_referencia(1) <- tabela_filtrada$valor(1)
ajuste <- if_else(direcao == "anterior", -1, 1)
for(i in 2:nrow(tabela_filtrada)){
if (ajuste==-1){
tabela_filtrada$valor_referencia(i) <- tabela_filtrada$valor_referencia(i-1) * (1 + ajuste * (tabela_filtrada$variacao(i-1)/100))
} else{
tabela_filtrada$valor_referencia(i) <- tabela_filtrada$valor_referencia(i-1) * (1 + ajuste * (tabela_filtrada$variacao(i)/100))
}
}
}
return(tabela_filtrada)
}
Lo script sopra ha due funzioni che insieme manipolano le tabelle dei prezzi e delle variazioni correnti per generare valori costanti prima e dopo l'anno di riferimento 2010.
Alcuni casi d'uso.
Per concludere l'articolo, un breve elenco di tre casi d'uso associati alla dashboard. Le ispirazioni arrivano direttamente da Twitter.
Il tweet di LCA Consultores riguarda la partecipazione dell'agricoltura e dell'industria estrattiva all'espansione del PIL. Nella dashboard possiamo facilmente identificare l'evoluzione del volume di questi elementi nel PIL e verificarne anche le variazioni annuali.
Ecco un altro tweet, questa volta del ministro Esther Dweck.
Il PIL dell’agroalimentare è già stato esplorato nel tweet precedente. La novità è l'enfasi sui consumi delle famiglie. Questo è un altro account tracciato anche sulla dashboard. Vedi sotto.
Infine, vale la pena evidenziare questo tweet di Ricardo Bezerra di seguito.
Ricardo Bezerra mostra l’importanza di monitorare la quota dell’industria manifatturiera nel PIL (o valore aggiunto). Sottolinea le differenze significative che emergono quando si utilizzano rapporti basati sui prezzi correnti rispetto a quelli costanti. Il cruscotto presenta in modo accurato e fedele entrambe le curve disegnate da Ricardo, fornendo una rappresentazione dettagliata e chiara di queste variazioni.
Hai il tuo caso d'uso? Perché non provi a navigare nella dashboard utilizzando questo collegamento e poi raccontami la tua esperienza?
Fonte: towardsdatascience.com