World Bank Data: WDI

Die Daten stammen von The World Bank: World Development Indicators, WDI.

Bequem geladen mit dem WDI-Paket.

country year air_pollution life_expectancy region capital
United Arab Emirates 2017 40.91751 77.647 Middle East & North Africa Abu Dhabi
Afghanistan 2017 56.91081 64.130 South Asia Kabul
Antigua and Barbuda 2017 18.62234 76.752 Latin America & Caribbean Saint John’s
Albania 2017 18.20060 78.333 Europe & Central Asia Tirane
Armenia 2017 32.52812 74.797 Europe & Central Asia Yerevan
Angola 2017 32.38850 60.379 Sub-Saharan Africa Luanda

Heute geht es um Luftverschmutzung (air pollution), definiert als durchschnittliche jährliche Menge in Mikrogramm pro Kubikmeter, der Menschen ausgesetzt sind, sowie Lebenserwartung (life expectancy) in Jahren zum Geburtszeitpunkt.

ggplot2 und ggplotly

Column

Column

Mögliche Verbesserung: Facets.

Heute geht es jedoch um eine andere Möglichkeit …

plotly und crosstalk: Regionen und Länder interaktiv auswählen

Anmerkungen

crosstalk ist eine leistungsfähige Ergänzung zu plotly: Man kann damit zwei Diagramme interaktiv verknüpfen.

Beide Pakete wurden von Carson Sievert initiiert. help(package = “plotly”) / help(package = “crosstalk”), um Mitstreiter abzurufen.

Wir benötigen ein Shared Data Object für die Verknüpfung der Kontrollelemente mit dem Diagramm. Die Kernfunktionalität basiert auf dem R6-Paket und dem gleichnamigen System für objektorientiertes Programmieren in R.

---
title: "Plotly: Kontroll-Elemente wie in Shiny Apps - ohne Shiny!"
output:
  flexdashboard::flex_dashboard:
    orientation: columns
    vertical_layout: fill
    theme: spacelab
    source_code: embed
    fontsize: 16pt
---

World Bank Data: WDI
=======================

Die Daten stammen von **The World Bank**: *World Development Indicators*, WDI.

Bequem geladen mit dem **WDI-Paket**.

```{r setup}

library(knitr)
library(kableExtra)
library(flexdashboard)
library(WDI)
library(tidyverse)
library(plotly)
library(crosstalk)
library(ggthemes)

knitr::opts_chunk$set(echo = FALSE)

# cache <- WDIcache()

# Noteworthy indicators, but with many missings:
# renewable_energy_consumption = "EG.FEC.RNEW.ZS",
# GDP_per_cap = "6.0.GDPpc_constant",
# GDP_usd = "6.0.GDP_usd",
# GNI_per_cap = "6.0.GNIpc"
# obesity_pct = "HF.STA.OB18.ZS",
# overweight_pct = "HF.STA.OW18.ZS"

# data_org <- WDI(country = "all",
#             indicator = c(survival_15_60 = "HD.HCI.AMRT",
#                           life_expectancy = "SP.DYN.LE00.IN",
#                           air_pollution = "EN.ATM.PM25.MC.M3"),
#             extra = TRUE,
#             cache = cache)
 
# saveRDS(data_org, "WDI_data.rds")

data_org <- readRDS("WDI_data.rds")

data <- data_org %>% 
  filter(region != "Aggregates") %>% 
  filter(!is.na(air_pollution) & !is.na(life_expectancy)) %>% 
  filter(year == 2017)

data %>% 
  select(country, year, air_pollution, life_expectancy, region, capital) %>% 
  head() %>% 
  kbl() %>% 
  kable_paper("hover", full_width = FALSE,
              lightable_options = "striped",
              font_size = 18)

```

Heute geht es um **Luftverschmutzung** *(air pollution)*, definiert als durchschnittliche jährliche Menge in Mikrogramm pro Kubikmeter, der Menschen ausgesetzt sind, sowie **Lebenserwartung** *(life expectancy)* in Jahren zum Geburtszeitpunkt.


ggplot2 und ggplotly
====================

Column
------

```{r static-plot, fig.width = 9, fig.height = 6}

p <- data %>% 
  ggplot(aes(x = air_pollution, y = life_expectancy, group = country, color = region)) +
  geom_point(size = 3, alpha = 0.8) +
  theme_economist_white(base_family = "Verdana") +
  # scale_color_economist() +
  # scale_colour_viridis_d() +
  scale_color_brewer(palette = "Dark2") +
  labs(title = "Life Expectancy vs. Air Pollution 2017",
       x = "Air Pollution
       Mean Annual Exposure in micrograms per cubic meter",
       y = "Life Expectancy\nat birth in years",
       caption = "Data Source: World Bank, World Development Indicators (WDI),
                  obtained via the WDI R package, version 2.7.1") +
  theme(legend.position = "right",
        legend.text = element_text(size = 14),
        legend.title = element_blank())

p

```


Column
------

```{r ggplotly, fig.width = 9, fig.height = 6}

ggplotly(p)

# ggplotly(p) %>% 
#   layout(annotations = list(
#     x = 2016, y = 250, xanchor = 'right', 
#     showarrow = FALSE, 
#     # xshift = 0, yshift = 0, xref = 'paper', yref = 'paper',
#     text = "Data Source: World Bank, World Development Indicators (WDI),
#                          obtained via the WDI R package, version 2.7.1"),
#     font = list(size = 11)
#     )

```

Mögliche Verbesserung: Facets.

Heute geht es jedoch um eine andere Möglichkeit ...

plotly und crosstalk: Regionen und Länder interaktiv auswählen
==============================================================

```{r plotly-crosstalk}

shared_data <- data %>%
  select(country, air_pollution, life_expectancy, region) %>%
  na.omit() %>%
  mutate(region = stringr::str_replace(region, "&", "and"),
          air_pollution = round(air_pollution, 1),
          life_expectancy = round(life_expectancy, 1)) %>%
  SharedData$new()

p <- shared_data %>%
  plot_ly(x = ~air_pollution, y = ~life_expectancy, color = ~region,
              hoverinfo = "text",
              text = ~paste("Country:", country,
                            "
Region:", region, "
Air Pollution:", air_pollution, "
Life Expectancy:", life_expectancy)) %>% group_by(region) %>% add_markers(size = 3) %>% layout(xaxis = list(title = "Air Pollution
Mean Annual Exposure in micrograms per cubic meter"), yaxis = list(title = "Life Expectancy
at birth in years"), legend = list(font = list(size = 16))) # Combining several selectors bscols(widths = c(3, 9), list( filter_checkbox(id = "region", label = "Region", sharedData = shared_data, group = ~region), filter_select(id = "country", label = "Country", sharedData = shared_data, group = ~country), filter_slider(id = "slider_ap", label = "Air Pollution", sharedData = shared_data, column = ~air_pollution), filter_slider(id = "slider_le", label = "Life Expectancy", sharedData = shared_data, column = ~life_expectancy) ), p) ``` Anmerkungen =========== **crosstalk** ist eine leistungsfähige Ergänzung zu **plotly**: Man kann damit zwei Diagramme interaktiv verknüpfen. Beide Pakete wurden von **Carson Sievert** initiiert. *help(package = "plotly")* / *help(package = "crosstalk")*, um Mitstreiter abzurufen. Wir benötigen ein **Shared Data Object** für die Verknüpfung der Kontrollelemente mit dem Diagramm. Die Kernfunktionalität basiert auf dem **R6**-Paket und dem gleichnamigen System für objektorientiertes Programmieren in R.