-
Notifications
You must be signed in to change notification settings - Fork 0
/
presentation.qmd
323 lines (240 loc) · 8.94 KB
/
presentation.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
---
title: "The Last Giants"
subtitle: "A data-driven safari into the savannah"
author: "Visual Virtuosos"
title-slide-attributes:
data-background-image: images/bg.jpeg
data-background-size: stretch
data-background-opacity: "0.7"
data-slide-number: none
format:
revealjs:
embed-resources: true
theme: simple
transition: slide
background-transition: fade
slide-number: true
editor: visual
execute:
echo: false
---
```{r}
if (!require("pacman"))
install.packages("pacman")
pacman::p_load(knitr,
tidyverse,
lubridate,
here,
dplyr,
ggplot2,
ggmap,
maps,
rnaturalearth,
rnaturalearthdata,
sf,
plotly,
caret,
glmnet,
viridis,
rcartocolor,
forcats,
tidymodels)
```
```{r}
elephant <- readxl::read_xlsx(here("data","elephant_data.xlsx"))
```
# The Data
## The Data source
- Chase, M. J., Schlossberg, S., Griffin, C. R., Bouché, P. J., Djene, S. W., Elkan, P. W., Ferreira, S., Grossman, F., Kohi, E. M., Landen, K., Omondi, P., Peltier, A., Selier, S. A., & Sutcliffe, R. (2016). Continent-wide survey reveals massive decline in African savannah elephants. PeerJ, 4, e2354. [doi:10.7717/peerj.2354](https://doi.org/10.7717/peerj.2354)
- [Convention on International Trade in Endangered Species of Wild Fauna and Flora](https://trade.cites.org)
# The 3D perspective
## The 3D plot {background-video="images/filename_movie3.mp4" background-video-loop="true" background-video-muted="true"}
# How has elephant population varied over the years in Africa?
## The Trend
```{r}
total_estimate_per_year <- elephant |>
group_by(Year) |>
summarise(Population = sum(Estimate))
total_estimate_per_year <- total_estimate_per_year |>
filter(Year != 2015)
# Fitting a linear regression model
lm_model <- lm(Estimate ~ Year, data = elephant)
# Defining a recipe
ols_recipe <- recipe(Population ~ Year, data = total_estimate_per_year) |>
step_center(Year, all_predictors()) |>
step_scale(Year, all_predictors())
# Defining the linear regression model
ols_model <- linear_reg() |>
set_engine("lm")
# Combining recipe and model into a workflow
ols_workflow <- workflow() |>
add_recipe(ols_recipe) |>
add_model(ols_model)
# Training the OLS model
ols_fit <- ols_workflow |>
fit(data = total_estimate_per_year)
# Creating a new data frame for prediction (between years 2015-2023)
new_years <- data.frame(Year = 2015:2023)
# Making predictions using the trained OLS model
ols_predictions <- predict(ols_fit, new_data = new_years)
# Combining the new years and predictions
ols_predictions_data <- data.frame(Year = new_years$Year, Population = ols_predictions$.pred)
# Specify the training control
train_control <- trainControl(method = "cv", number = 5)
# Train the OLS model using cross-validation
ols_model <- train(Population ~ Year, data = total_estimate_per_year, method = "lm", trControl = train_control)
# Plotting the estimated of elephant population between 1995 to 2014
p <- ggplot(total_estimate_per_year, aes(x = Year, y = Population, group = 1)) +
geom_line() +
stat_smooth(method = "loess", se = FALSE) +
ggtitle("Combined Data: Estimate Over Time") +
xlab("Year") +
ylab("Estimate") +
scale_y_continuous(limits = c(0, 500000), expand = c(0, 0), labels = comma_format(scale = 1e-3)) +
scale_color_manual(values = c("black", "red3"), guide = FALSE) +
labs(
x = "Year",
y = "Population (in Thousands)",
title = "Trend in Elephant Population from 1995-2014",
caption = "Source: PeerJ PeerJ Article
doi: 10.7717/peerj.2354 "
) +
theme_minimal()
# Convert ggplot to plotly
population_trend <- ggplotly(p)
population_trend
```
This matches with results in the reasearch article!!
## The Trend (Continued...)
Results of the prediction models
| Model | RMSE |
|-----------------|--------|
| OLS | 312.46 |
| Poly Regression | 326.09 |
| Random Forest | 333.23 |
## The Trend (Continued...)
```{r}
# Combining both the actual and predicted data using rowbind
combined_data <- rbind(total_estimate_per_year, ols_predictions_data)
# Plotting all the estimates of elephant population between 1995-2023
combined_prediction <- ggplot(combined_data, aes(x = Year, y = Population, group = 1)) +
geom_line(aes(color = ifelse(Year <= 2014, "Population Trend", "Prediction"))) +
stat_smooth(method = "loess", se = FALSE) +
scale_y_continuous(limits = c(0, 500000), expand = c(0, 0), labels = scales::comma_format(scale = 1e-3)) +
scale_color_manual(values = c("Population Trend" = "black", "Prediction" = "red3"), guide = FALSE) +
labs(
x = "Year",
y = "Population (in Thousands)",
title = "Trend in Elephant Population from 1995-2023",
caption = "Source: PeerJ PeerJ Article doi: 10.7717/peerj.2354 ",
) +
theme_minimal()
# Convert ggplot to plotly
combined_prediction_plot <- ggplotly(combined_prediction, tooltip = c("Year", "y"))
combined_prediction_plot
```
# What is the trend of ivory trade in Africa?
## The ivory trade
```{r}
# Loading ivory data
ivory_exports_data <- read_csv(here("data","cites_ivory_export.csv"))
```
```{r}
# Counting the number of instances for each year
export_count_per_year <- ivory_exports_data |>
group_by(Year) |>
summarise(export_count = n())
# Assuming `count_per_year` is your dataset
export_count_per_year <- export_count_per_year |>
filter(Year > 1994)
#glimpse(export_count_per_year)
```
```{r}
# Plotting the Ivory exports between 1990 to 2022
exports_barplot <- ggplot(export_count_per_year, aes(x = as.factor(Year), y = export_count, fill = as.factor(Year), text = paste("Export count: ", export_count))) +
geom_bar(stat = "identity", color = "black") +
scale_fill_viridis_d(option = "C") +
labs(
x = "Year",
y = "Number of exports",
title = "Ivory exports in Africa from 1995 to 2022",
caption = "Source: CITES (Convention of International Trade in Endangered Species of Wild Fauna and Flora)"
) +
guides(fill = FALSE) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1)
)
# Convert ggplot to plotly
exports_plotly <- ggplotly(exports_barplot, tooltip = "text")
# Display the interactive plot
exports_plotly
```
## The ivory trade (continued...)
```{r}
# Extracing data from ivory_exports dataset
country_export_count <- ivory_exports_data %>%
filter(Exporter %in% c("ZW", "ZM", "ZA", "BW", "MZ")) %>%
group_by(Exporter) %>%
summarise(count = n()) %>%
mutate(Country = case_when(
Exporter == "ZW" ~ "Zimbabwe",
Exporter == "ZM" ~ "Zambia",
Exporter == "ZA" ~ "South Africa",
Exporter == "BW" ~ "Botswana",
Exporter == "MZ" ~ "Mozambique",
TRUE ~ as.character(Exporter)
))
africa <- ne_countries(scale = "medium", continent = "Africa", returnclass = "sf")
export_country_map <- merge(africa, country_export_count, by.x = "name", by.y = "Country")
# Create a ggplot map
gg_export_countries <- ggplot() +
geom_sf(data = africa, fill = "white") +
geom_sf(data = export_country_map, aes(fill = count, text = paste("Country: ", country_export_count$Country,"<br>",
"Export count: ",count )), color = "#5D2606", size = 0.2) +
scale_fill_gradient(low = "#F2A64F", high = "#B61210", name = "Export count") +
theme_void() +
labs(title = "Ivory exports from 1995 to 2022 (Top 5 largest ecosystems)", caption = "Source: CITES (Convention of International Trade
in Endangered Species of Wild Fauna and Flora)")
# Convert ggplot to plotly
gg_export_countries_plotly <- ggplotly(gg_export_countries, tooltip = "text")
# Show the Plotly map
gg_export_countries_plotly
```
## The ivory trade (continued...)
```{r warning = FALSE,message=FALSE}
#| fig-alt: Visualizing the Type of Ivory exports in Africa
ivory_term_count <- ivory_exports_data |>
group_by(Year,Term) |>
summarise(instance_count = n()) |>
ungroup()
ivory_term_count <- ivory_term_count |>
mutate(Term = fct_reorder(Term, instance_count, .desc = TRUE))
carving_ggplot <- ivory_term_count |>
ggplot(aes( y = fct_rev(Term), size = instance_count, fill = Term)) +
geom_bar(alpha = 0.7, color = "black") +
scale_size(range = c(1.4, 10), name = "Population (M)") +
scale_fill_carto_d(palette = "Safe") +
theme_minimal() +
theme(legend.position = "none") +
labs(
x = "Count",
y = "Export Type",
title = "Type of ivory export",
caption = "Source: CITES (Convention of International Trade
in Endangered Species of Wild Fauna and Flora)"
)
# converting ggplot to plotly
carvings_plotly <- ggplotly(carving_ggplot, tooltip = "text")
# display the interactive plot
carvings_plotly
```
## The ivory trade (continued...)
::: {#fig-elephants layout-ncol="3"}
![](images/i_Jwellery.jpeg){width="150%"}
![](images/i_Pieces.jpeg){width="150%"}
![](images/Carving.jpeg){width="150%"}
Ivory Products
:::
# Wrapping Up
## ![](images/last.png){width="150%"}