Primer, cridem les funcions que necessitem per fer el que demana la pregunta 1.

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.2.3
## Warning: package 'tibble' was built under R version 4.2.3
## Warning: package 'dplyr' was built under R version 4.2.3
## Warning: package 'lubridate' was built under R version 4.2.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.0
## ✔ purrr     1.0.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(tidytext)

A continuació, llegim el document Excel que necessitem per fer l’anàlisi.

patrimoni_UNESCO <- readxl::read_excel("whc-sites-2025.xls")

Tot seguit, complim amb la pregunta 1, concretament amb el primer gràfic que ens demana: comparació de nombre de llocs al patrimoni de la UNESCO per regió.

ggplot(patrimoni_UNESCO, aes(x = region_en)) +
  geom_bar() +
  labs(title = "Nombre de llocs UNESCO per regió",
       x = "Regió",
       y = "Nombre de llocs") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Seguidament, complim amb la pregunta 1, concretament amb el segon gràfic que ens demana: evolució cronològica d’inscripcions al patrimoni de la UNESCO.

llocs_any <- count(patrimoni_UNESCO, date_inscribed)

ggplot(llocs_any, aes(x = date_inscribed, y = n)) +
  geom_line() +
  ggtitle("Evolució cronològica d'inscripcions a la UNESCO") +
  xlab("Any") +
  ylab("Llocs afegits a la UNESCO") +
  theme_classic()

A continuació, complim amb la pregunta 1, concretament amb el tercer gràfic que ens demana: tipologies de llocs al patrimoni de la UNESCO.

llocs_tipus <- count(patrimoni_UNESCO, category)

pie(llocs_tipus$n, main = "Distribució per categories de patrimoni", labels = llocs_tipus$category)

Segon, cridem la funció que necessitem per fer el que demana la pregunta 2.

library(maps)
## Warning: package 'maps' was built under R version 4.2.3
## 
## Attaching package: 'maps'
## The following object is masked from 'package:purrr':
## 
##     map

A continuació, complim amb la pregunta 2, concretament amb el primer mapa que ens demana: mapa de punts dels llocs al patrimoni de la UNESCO.

world <- map_data("world")

ggplot() +
  geom_polygon(data = world,
               aes(x = long, y = lat, group = group),
               fill = "lightgray", color = "white") +
  geom_point(data = patrimoni_UNESCO,
             aes(x = longitude, y = latitude),
             color = "blue", size = 1) +
  theme_void() +
  labs(title = "Distribució dels llocs del patrimoni UNESCO al món")
## Warning: Removed 1 rows containing missing values (`geom_point()`).

Seguidament, complim amb la pregunta 2, concretament amb el segon mapa que ens demana: mapa de punts també, perquè els noms dels països no coincideixen, així que no podem fer un altre tipus de gràfic. En aquest cas, però, els punts reflecteixen la tipologia de patrimoni (cultural, natural o mixt).

world <- map_data("world")

ggplot() +
  geom_polygon(data = world,
               aes(x = long, y = lat, group = group),
               fill = "lightgray", color = "white") +
  geom_point(data = patrimoni_UNESCO,
             aes(x = longitude,
                 y = latitude,
                 color = category),
                 size = 1.5) +
  theme_void() +
  labs(title = "Distribució dels llocs del patrimoni UNESCO al món",
       color = "Tipus de patrimoni")
## Warning: Removed 1 rows containing missing values (`geom_point()`).

Tercer, cridem la funció que necessitem per fer el que demana la pregunta 3.

library(readr)

A continuació, fem l’anàlisi de text del camp “short_description_en”.

textos <- patrimoni_UNESCO %>%
  select(short_description_en)

paraules <- textos %>%
  unnest_tokens(word, short_description_en)

paraules_net <- paraules %>%
  anti_join(stop_words)
## Joining with `by = join_by(word)`

Tot seguit, llistem les paraules de més utilitzades a menys.

freq.paraules <- paraules_net %>%
  count(word, sort = TRUE)

Finalment, fem el núvol de paraules, tot cridant prèviament la funció corresponent.

library(wordcloud2)
## Warning: package 'wordcloud2' was built under R version 4.2.3
wordcloud2(freq.paraules)