Creiamo istogrammi animati utilizzando R

Creiamo istogrammi animati utilizzando R

Gli istogrammi animati, che possono essere integrati direttamente in una pubblicazione su qualsiasi sito web, stanno diventando sempre più popolari. Mostrano la dinamica delle variazioni di qualsiasi caratteristica nel tempo in modo visivo. Vediamo come crearli utilizzando R e pacchetti universali.

Skillbox consiglia: Corso pratico «Sviluppatore Python da zero».

Ricordiamo: per tutti i lettori di «Habr» — sconto di 10.000 rubli per l'iscrizione a qualsiasi corso Skillbox con il codice promozionale «Habr».

Pacchetti

Abbiamo bisogno di pacchetti in R:

Questi due sono assolutamente necessari. Inoltre, saranno richiesti tidyverse, janitor e scales per la gestione dei dati, la pulizia del dataset e il formato rispettivamente.

Dati

Il set di dati originale che utilizzeremo in questo progetto viene caricato dal sito della Banca Mondiale. Ecco qui — WorldBank Data. Gli stessi dati, se ti servono in un formato pronto, possono essere scaricati dalla cartella del progetto.

Che tipo di informazioni sono? Il campione contiene il valore del PIL della maggior parte dei paesi per diversi anni (dal 2000 al 2017).

Elaborazione dei dati

Useremo il codice riportato di seguito per preparare il formato di dati necessario. Pulisciamo i nomi delle colonne, trasformiamo i numeri in formato numerico e convertiamo i dati utilizzando la funzione gather(). Tutto ciò che otteniamo lo salviamo in gdp_tidy.csv per un uso successivo.

library(tidyverse)
library(janitor)

gdp <- read_csv("./data/GDP_Data.csv")

#select required columns

gdp % select(3:15)

#filter only country rows

gdp <- gdp[1:217,]

gdp_tidy %
mutate_at(vars(contains("YR")), as.numeric) %>%
gather(year, value, 3:13) %>%
janitor::clean_names() %>%
mutate(year = as.numeric(stringr::str_sub(year, 1, 4)))

write_csv(gdp_tidy, "./data/gdp_tidy.csv")

Istogrammi animati

La loro creazione richiede due fasi:

  • Costruire un insieme completo di istogrammi aggiornati utilizzando ggplot2.
  • Animare gli istogrammi statici con i parametri desiderati utilizzando gganimate.

L'ultimo passo è il rendering dell'animazione nel formato desiderato, inclusi GIF o MP4.

Caricamento delle librerie

  • library(tidyverse)
  • library(gganimate)

Gestione dei dati

In questo passaggio dobbiamo filtrare i dati per ottenere le top 10 nazioni di ogni anno. Aggiungeremo alcune colonne che permetteranno di visualizzare la legenda per l'istogramma.

gdp_tidy <- read_csv("./data/gdp_tidy.csv")

gdp_formatted %
group_by(year) %>%
# The * 1 makes it possible to have non-integer ranks while sliding
mutate(rank = rank(-value),
Value_rel = value/value[rank==1],
Value_lbl = paste0(" ", round(value/1e9))) %>%
group_by(country_name) %>%
filter(rank %
ungroup()

Costruzione di istogrammi statici

Ora che abbiamo un pacchetto di dati nel formato corretto, iniziamo a disegnare gli istogrammi statici. Le informazioni di base sono le prime 10 nazioni con il PIL più alto nell'intervallo di tempo selezionato. Creiamo i grafici per ogni anno.

staticplot = ggplot(gdp_formatted, aes(rank, group = country_name,
fill = as.factor(country_name), color = as.factor(country_name))) +
geom_tile(aes(y = value/2,
height = value,
width = 0.9), alpha = 0.8, color = NA) +
geom_text(aes(y = 0, label = paste(country_name, " ")), vjust = 0.2, hjust = 1) +
geom_text(aes(y=value,label = Value_lbl, hjust=0)) +
coord_flip(clip = "off", expand = FALSE) +
scale_y_continuous(labels = scales::comma) +
scale_x_reverse() +
guides(color = FALSE, fill = FALSE) +
theme(axis.line=element_blank(),
axis.text.x=element_blank(),
axis.text.y=element_blank(),
axis.ticks=element_blank(),
axis.title.x=element_blank(),
axis.title.y=element_blank(),
legend.position="none",
panel.background=element_blank(),
panel.border=element_blank(),
panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),
panel.grid.major.x = element_line( size=.1, color="grey" ),
panel.grid.minor.x = element_line( size=.1, color="grey" ),
plot.title=element_text(size=25, hjust=0.5, face="bold", colour="grey", vjust=-1),
plot.subtitle=element_text(size=18, hjust=0.5, face="italic", color="grey"),
plot.caption =element_text(size=8, hjust=0.5, face="italic", color="grey"),
plot.background=element_blank(),
plot.margin = margin(2,2, 2, 4, "cm"))

Costruire grafici con ggplot2 è molto semplice. Come puoi vedere nel codice sopra, ci sono alcuni punti chiave con la funzione theme (). Sono necessari affinché tutti gli elementi vengano animati senza problemi. Alcuni di essi possono anche non essere visualizzati se necessario. Esempio: vengono disegnate solo le linee verticali della griglia e le legende, mentre i titoli degli assi e altri componenti vengono rimossi dal grafico.

Animazione

La funzione chiave qui è transition_states(), che unisce i singoli grafici statici. view_follow () viene utilizzata per disegnare le linee della griglia.

anim = staticplot + transition_states(anno, transition_length = 4, state_length = 1) +
view_follow(fixed_x = TRUE) +
labs(title = 'PIL in un anno : {closest_state}',
subtitle = "Le 10 nazioni migliori",
caption = "PIL in miliardi di USD | Fonte dati: Banca Mondiale")

Rendering

Dopo che l'animazione è stata creata e salvata nell'oggetto anim, è il momento di visualizzarla con la funzione animate (). Il renderer utilizzato in animate () può variare a seconda del tipo di file di output richiesto.

GIF

# For GIF

animate(anim, 200, fps = 20, width = 1200, height = 1000,
renderer = gifski_renderer("gganim.gif"))

MP4

# For MP4

animate(anim, 200, fps = 20, width = 1200, height = 1000,
renderer = ffmpeg_renderer()) -> for_mp4

anim_save("animation.mp4", animation = for_mp4 )

Risultato

Creiamo istogrammi animati utilizzando R

Come puoi vedere, non c'è nulla di complicato. L'intero progetto è disponibile su my GitHub, puoi utilizzarlo come ritieni opportuno.

Skillbox consiglia:

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster