Créons des histogrammes animés avec R

Créons des histogrammes animés avec R

Les histogrammes animĂ©s, qui peuvent ĂȘtre intĂ©grĂ©s directement dans des publications sur n'importe quel site, deviennent de plus en plus populaires. Ils affichent dynamiquement l'Ă©volution de diverses caractĂ©ristiques sur une pĂ©riode donnĂ©e de maniĂšre visuelle. Voyons comment les crĂ©er avec R et des packages universels.

Skillbox recommande : Cours pratique « Développeur Python depuis zéro ».

Rappelons-le : pour tous les lecteurs de « Habr » — une rĂ©duction de 10 000 roubles lors de l'inscription Ă  tout cours Skillbox avec le code promo « Habr ».

Packages

Nous avons besoin des packages dans R :

Ces deux sont absolument nécessaires. En outre, nous aurons besoin de tidyverse, janitor et scales pour gérer les données, nettoyer le tableau et formater respectivement.

Données

L'ensemble de donnĂ©es original que nous allons utiliser dans ce projet est tĂ©lĂ©chargĂ© depuis le site de la Banque mondiale. Les voici : WorldBank Data. Les mĂȘmes donnĂ©es, si vous en avez besoin dans un format prĂȘt Ă  l'emploi, peuvent ĂȘtre tĂ©lĂ©chargĂ©es depuis le dossier du projet.

Qu'est-ce que c'est que ces informations ? L'échantillon contient les valeurs du PIB de la plupart des pays sur plusieurs années (de 2000 à 2017).

Traitement des données

Nous allons utiliser le code ci-dessous pour préparer le format de données nécessaire. Nous nettoyons les noms de colonnes, convertissons les chiffres au format numérique et transformons les données à l'aide de la fonction gather(). Tout ce qui est obtenu est sauvegardé dans gdp_tidy.csv pour un usage ultérieur.

bibliothĂšque(tidyverse)
bibliothĂšque(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")

Histogrammes animés

La création de ces derniers nécessite deux étapes :

  • Construire un ensemble complet d'histogrammes pertinents en utilisant ggplot2.
  • Animer les histogrammes statiques avec les paramĂštres souhaitĂ©s Ă  l'aide de gganimate.

L'étape finale consiste à rendre l'animation dans le format souhaité, y compris GIF ou MP4.

Chargement des bibliothĂšques

  • bibliothĂšque(tidyverse)
  • library(gganimate)

Gestion des données

À cette Ă©tape, il faut filtrer les donnĂ©es pour obtenir le top 10 des pays de chaque annĂ©e. Nous allons ajouter quelques colonnes qui permettront d'afficher la lĂ©gende pour l'histogramme.

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()

Construction des histogrammes statiques

Maintenant que nous avons un ensemble de données au format requis, nous commençons à dessiner les histogrammes statiques. Les informations de base concernent le top 10 des pays ayant le PIB le plus élevé pour la période choisie. Nous construisons des graphiques pour chaque année.

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"))

Construire des graphiques avec ggplot2 est assez simple. Comme vous pouvez le voir dans le code ci-dessus, il y a plusieurs points clĂ©s avec la fonction theme(). Ils sont nĂ©cessaires pour que tous les Ă©lĂ©ments s'animent sans problĂšme. Certains d'entre eux peuvent ĂȘtre masquĂ©s si nĂ©cessaire. Par exemple : seules les lignes verticales de la grille et les lĂ©gendes sont affichĂ©es, tandis que les titres des axes et quelques autres composants sont retirĂ©s du graphique.

Animation

La fonction clé ici est transition_states(), qui unit des graphiques statiques distincts. view_follow() est utilisée pour dessiner les lignes de la grille.

anim = staticplot + transition_states(year, transition_length = 4, state_length = 1) +
view_follow(fixed_x = TRUE) +
labs(title = 'PIB par an : {closest_state}',
subtitle = "Top 10 des pays",
caption = "PIB en milliards USD | Source des données : Banque Mondiale")

Rendu

AprÚs que l'animation ait été créée et enregistrée dans l'objet anim, il est temps de la visualiser à l'aide de la fonction animate(). Le rendu utilisé dans animate() peut varier selon le type de fichier de sortie requis.

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)

Résultat

Créons des histogrammes animés avec R

Comme nous le voyons, rien de compliqué. Tout le projet est disponible sur mon GitHub, vous pouvez l'utiliser comme bon vous semble.

Skillbox recommande :

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster