Δημιουργήστε κινούμενα ιστογράμματα χρησιμοποιώντας το R

Δημιουργήστε κινούμενα ιστογράμματα χρησιμοποιώντας το R

Τα κινούμενα γραφήματα ράβδων που μπορούν να ενσωματωθούν απευθείας σε μια ανάρτηση σε οποιονδήποτε ιστότοπο γίνονται όλο και πιο δημοφιλή. Εμφανίζουν τη δυναμική των αλλαγών σε οποιαδήποτε χαρακτηριστικά σε ένα συγκεκριμένο χρονικό διάστημα και το κάνουν ξεκάθαρα. Ας δούμε πώς να τα δημιουργήσετε χρησιμοποιώντας R και γενικά πακέτα.

Το Skillbox προτείνει: Πρακτικό μάθημα "Προγραμματιστής Python από την αρχή".

Υπενθύμιση: για όλους τους αναγνώστες του "Habr" - έκπτωση 10 ρούβλια κατά την εγγραφή σε οποιοδήποτε μάθημα Skillbox χρησιμοποιώντας τον κωδικό προσφοράς "Habr".

Πακέτα

Χρειαζόμαστε πακέτα σε R:

Αυτά τα δύο είναι εξαιρετικά απαραίτητα. Επιπλέον, θα χρειαστούν τακτοποίηση, θυρωρός και ζυγαριά για τη διαχείριση των δεδομένων, τον καθαρισμό της συστοιχίας και τη διαμόρφωση ανάλογα.

Δεδομένα

Το αρχικό σύνολο δεδομένων που θα χρησιμοποιήσουμε σε αυτό το έργο έχει ληφθεί από τον ιστότοπο της Παγκόσμιας Τράπεζας. Εδώ είναι - Δεδομένα της Παγκόσμιας Τράπεζας. Τα ίδια δεδομένα, αν τα χρειάζεστε έτοιμα, μπορείτε να τα κατεβάσετε από φακέλους έργου.

Τι είδους πληροφορίες είναι αυτές; Το δείγμα περιέχει την αξία του ΑΕΠ των περισσότερων χωρών για αρκετά χρόνια (από το 2000 έως το 2017).

Επεξεργασία δεδομένων

Θα χρησιμοποιήσουμε τον κωδικό που δημοσιεύεται παρακάτω για να προετοιμάσουμε την απαιτούμενη μορφή δεδομένων. Διαγράφουμε τα ονόματα των στηλών, μετατρέπουμε τους αριθμούς σε μορφή αριθμού και μετατρέπουμε τα δεδομένα χρησιμοποιώντας τη συνάρτηση collect(). Αποθηκεύουμε ό,τι λαμβάνεται στο gdp_tidy.csv για περαιτέρω χρήση.

library(tidyverse)
library(janitor)

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

#select required columns

gdp <- gdp %>% select(3:15)

#filter only country rows

gdp <- gdp[1:217,]

gdp_tidy <- gdp %>%
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")

Κινούμενα ιστογράμματα

Η δημιουργία τους απαιτεί δύο στάδια:

  • Σχεδιάζοντας ένα πλήρες σύνολο πραγματικών ιστογραμμάτων χρησιμοποιώντας το ggplot2.
  • Ζητήστε στατικά ιστογράμματα με τις επιθυμητές παραμέτρους χρησιμοποιώντας το gganimate.

Το τελευταίο βήμα είναι να αποδώσετε το κινούμενο σχέδιο στην επιθυμητή μορφή, συμπεριλαμβανομένου του GIF ή του MP4.

Φόρτωση βιβλιοθηκών

  • βιβλιοθήκη (tidyverse)
  • βιβλιοθήκη (gganimate)

Διαχείριση δεδομένων

Σε αυτό το βήμα, πρέπει να φιλτράρετε τα δεδομένα για να λάβετε τις 10 κορυφαίες χώρες για κάθε έτος. Ας προσθέσουμε πολλές στήλες που θα μας επιτρέψουν να εμφανίσουμε ένα υπόμνημα για το ιστόγραμμα.

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

gdp_formatted <- gdp_tidy %>%
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 <=10) %>%
ungroup()

Κατασκευή στατικών ιστογραμμάτων

Τώρα που έχουμε ένα πακέτο δεδομένων στην απαιτούμενη μορφή, αρχίζουμε να σχεδιάζουμε στατικά ιστογράμματα. Βασικές πληροφορίες - 10 κορυφαίες χώρες με μέγιστο ΑΕΠ για το επιλεγμένο χρονικό διάστημα. Δημιουργούμε γραφήματα για κάθε χρόνο.

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

Η δημιουργία σχεδίων χρησιμοποιώντας το ggplot2 είναι πολύ απλή. Όπως μπορείτε να δείτε στην ενότητα κώδικα παραπάνω, υπάρχουν πολλά βασικά σημεία με τη συνάρτηση theme(). Είναι απαραίτητα ώστε όλα τα στοιχεία να ζωντανεύουν χωρίς προβλήματα. Ορισμένα από αυτά ενδέχεται να μην εμφανίζονται εάν είναι απαραίτητο. Παράδειγμα: Σχεδιάζονται μόνο οι κάθετες γραμμές πλέγματος και οι μύθοι, αλλά οι τίτλοι των αξόνων και πολλά άλλα στοιχεία αφαιρούνται από την περιοχή.

εμψύχωση

Η βασική συνάρτηση εδώ είναι η transition_states(), συρράπτει ξεχωριστά στατικά γραφήματα. Η view_follow() χρησιμοποιείται για τη σχεδίαση γραμμών πλέγματος.

anim = staticplot + transition_states(year, transition_length = 4, state_length = 1) +
view_follow(fixed_x = TRUE) +
labs(title = 'GDP per Year : {closest_state}',
subtitle = "Top 10 Countries",
caption = "GDP in Billions USD | Data Source: World Bank Data")

Απόδοση

Μόλις δημιουργηθεί το animation και αποθηκευτεί στο αντικείμενο anim, είναι καιρός να το αποδώσουμε χρησιμοποιώντας τη συνάρτηση animate(). Ο renderer που χρησιμοποιείται στο animate() μπορεί να είναι διαφορετικός ανάλογα με τον τύπο του αρχείου εξόδου που απαιτείται.

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

Όπως μπορείτε να δείτε, τίποτα περίπλοκο. Ολόκληρο το έργο είναι διαθέσιμο στο το GitHub μου, μπορείτε να το χρησιμοποιήσετε όπως σας ταιριάζει.

Το Skillbox προτείνει:

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο