Atividade 08: Visitando os Himalaias Programação funcional e gráficos

Autor

Lavínia Name - 127033 | Nathaly Aleixo - 127047

INTRODUÇÃO:

O objetivo dessa atividade é analisar expedições que ocorreram nos Himalaias, indicando se uma pessoa deveria ou não se arriscar na escalada das montanhas. O conjunto de dados possui 3 tabelas, chamadas “expeditions”, com 10365 linhas e 16 colunas, “peaks”, com 469 linhas e 8 colunas, e “members”, com 76.520 linhas e 21 colunas.

As fontes para reprodução deste código encontram-se na seção “Referências”, no final desta atividade.

ANÁLISE EXPLORATÓRIA E DESCRITIVA:

Importando os dados e as bibliotecas necessárias

O que é importante saber sobre a pessoa que pretende visitar uma das montanhas?

Sua idade, visto que pode indicar uma possível condição física, a época que pretende ir, para evitar que a pessoa vá em uma época que não seja adequada para a escalada, seu sexo, se é profissional, para sabermos se precisaria ou não de algum tipo de apoio, se ja visitou alguma montanha, para saber se a pessoa possui um certo tipo de conhecimento, e histórico de doenças, para ver se a pessoa tem condições físicas e mentais de realizar tal atividade.

Qual o perfil de pessoas que visitam os Himalaias? Utilize pelo menos três variáveis para responder a essa pergunta.

Analisando a idade:

dados$members <- dados$members %>%
  mutate(age = ifelse(str_detect(age, "^[0-9]+$"), age, NA))

idades <- as.numeric(dados$members$age)


faixas_etarias <- cut(idades, 
                      breaks = seq(0, 100, by = 10), 
                      right = FALSE)

table(faixas_etarias)
faixas_etarias
  [0,10)  [10,20)  [20,30)  [30,40)  [40,50)  [50,60)  [60,70)  [70,80) 
       1      558    18070    27219    17201     7566     2150      249 
 [80,90) [90,100) 
       8        0 

Gráfico para visualização da frequência de idades das pessoas que visitaram o Himalaia:

grafico_idade <- ggplot(dados$members, aes(x = as.numeric(age))) +
  geom_histogram(binwidth = 10, 
                 boundary = 0,      
                 closed = "left",   
                 fill = "steelblue", 
                 color = "white") +
  labs(title = "Distribuição por Faixa Etária",
       x = "Idade (Intervalos de 10 anos)",
       y = "Quantidade de Pessoas") +
  scale_x_continuous(breaks = seq(0, 90, by = 10)) +
  scale_y_continuous(breaks = seq(0, 30000, by = 5000)) +
  theme_minimal()

grafico_idade
Warning: Removed 3497 rows containing non-finite outside the scale range
(`stat_bin()`).
Figura 1: Frequência de idades das pessoas que visitaram o himalaia.

Analisando o sexo:

table(dados$members$sex)

    F     M    NA 
 7044 69473     2 
sexo_limpo <- dados$members %>% 
  filter(sex %in% c("M", "F"))

Construindo gráfico para visualização:

grafico_sexo <- ggplot(sexo_limpo, aes(x = sex, fill = sex)) +
  geom_bar(color = "white", width = 0.6) +
  labs(title = "Comparação de Quantidade por Sexo",
       x = "Sexo",
       y = "Quantidade de Pessoas") +
  
  scale_fill_manual(values = c("F" = "#e06666", "M" = "#4374a4")) +
  
  
  scale_y_continuous(labels = scales::comma, breaks = seq(0, 80000, by = 10000)) +
  
  theme_minimal() +
  theme(legend.position = "none")

grafico_sexo
Figura 2: Comparação da frequência de pessoas por sexo.

Analisando o hired:

tabela_hired <- table(dados$members$hired)
tabela_hired

FALSE  TRUE 
60788 15731 

Criando gráfico para visualização:

grafico_hired <- ggplot(as.data.frame(table(dados$members$hired)), 
                        aes(x = "", y = Freq, fill = Var1)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar(theta = "y") +
  theme_void() +
  labs(title = "Proporção de Membros Contratados (Hired)", fill = "Contratado?")

grafico_hired
Figura 3: Proporção de pessoas contratadas.

RESPOSTA: Pessoas que visitam o Himalaia costumam ser homens, pessoas não contratadas e na faixa etária de 30-40 anos.

Utilize pelo menos três variáveis para responder quais os perfis das excursões. Faça um gráfico com facetas.

Analisando a estação do ano:

tabela_season <- table(dados$expeditions$season)
tabela_season

 Autumn  Spring  Summer Unknown  Winter 
   5064    4875     108       2     315 
# Selecionando as 10 montanhas com mais expedições
top_montanhas <- dados$expeditions %>%
  count(peak_name, sort = TRUE) %>%
  slice_head(n = 10) %>%
  pull(peak_name)

top_montanhas
 [1] "Everest"      "Ama Dablam"   "Cho Oyu"      "Manaslu"      "Lhotse"      
 [6] "Dhaulagiri I" "Makalu"       "Baruntse"     "Pumori"       "Annapurna I" 
# Filtrando os dados
expedicoes_filtradas <- dados$expeditions %>%
  filter(
    peak_name %in% top_montanhas,
    season != "Unknown",
    !is.na(members)
  ) # Contando os registros de cada montanha em cada estação

Criando o gráfico com facetas para visualização:

grafico_season <- ggplot(expedicoes_filtradas, aes(
  x = reorder(peak_name, members, FUN = median),
  y = members
)) +
  geom_boxplot(
    fill = "steelblue",
    alpha = 0.7,
    outlier.alpha = 0.3
  ) +
  facet_wrap(~season) +
  coord_flip() +
  labs(
    title = "Perfil das expedições por estação do ano",
    subtitle = "Distribuição do número de integrantes nas 10 montanhas mais escaladas",
    x = "Montanha escalada",
    y = "Número de integrantes"
  ) +
  theme_minimal() +
  theme(
    legend.position = "none",
    strip.text = element_text(face = "bold"),
    plot.title = element_text(face = "bold")
  )

grafico_season
Figura 4: Perfil das expedições por estação do ano.

Análise: O gráfico indica que a maioria das expedições possui equipes pequenas, geralmente com até 10 integrantes. O Everest se destaca pela maior variação no tamanho das equipes, especialmente na primavera. No inverno, as equipes apresentam distribuições mais concentradas. Já o verão possui poucos registros, dificultando comparações.

Faça uma análise comparando as montanhas escaladas e as montanhas não escaladas.

Vendo quantas montanhas foram escaladas e quantas ainda não:

tabela_montanhas <- table(dados$peaks$climbing_status)
tabela_montanhas

  Climbed Unclimbed 
      341       127 

Gráfico para visualização:

tabela_status <- as.data.frame(
  table(dados$peaks$climbing_status)
)

colnames(tabela_status) <- c("Status", "Freq")

grafico_climbing <- ggplot(tabela_status, aes(
  x = Status,
  y = Freq,
  fill = Status
)) +
  geom_col() +
  labs(
    title = "Montanhas escaladas e não escaladas",
    x = "Situação",
    y = "Quantidade de montanhas"
  ) +
  theme_minimal()

grafico_climbing
Figura 5: Frequência das montanhas escaladas e não escaladas

Análise: Vemos, então, que a maioria das montanhas no dataset foram escaladas.

Agora, criando um gráfico comparando as altitudes das montanhas escaladas e das que não são:

grafico_altitude <- ggplot(dados$peaks, aes(
  x = climbing_status,
  y = height_metres,
  fill = climbing_status
)) +
  geom_boxplot() +
  labs(
    title = "Altitude das montanhas escaladas e não escaladas",
    x = "Status de escalada",
    y = "Altitude (metros)"
  ) +
  theme_minimal()

grafico_altitude
Figura 6: Altitude das montanhas escaladas e não escaladas.

Análise: A partir desse gráfico, vemos que as montanhas não escaladas não são necessariamente as mais altas, mostrando que a dificuldade de uma escalada depende de outros fatores além da altitude.

Qual o perfil das excursões que costumam ter mortes?

Fazendo a analise para as duas visualizações considerando número de mortos, montanha escalada, altura alcançada e se foi utilizado oxigênio:

1º Visualização:

expedicoes_tratadas <- expeditions |> 
  mutate(
    highpoint_metres = as.numeric(as.character(highpoint_metres)),
    total_mortes = as.numeric(member_deaths) + as.numeric(hired_staff_deaths),
    teve_morte = if_else(total_mortes > 0, "Com Mortes", "Sem Mortes")
  ) |> 
  drop_na(highpoint_metres, oxygen_used)
Warning: There was 1 warning in `mutate()`.
ℹ In argument: `highpoint_metres = as.numeric(as.character(highpoint_metres))`.
Caused by warning:
! NAs introduzidos por coerção
grafico_mortes <- ggplot(expedicoes_tratadas, 
  aes(x = highpoint_metres, color = teve_morte, fill = teve_morte)) +
  geom_density(alpha = 0.4, adjust = 1.5) +
  facet_wrap(~ oxygen_used) +
  labs(
    title = "Perfil de Altitude e Ocorrência de Mortes",
    subtitle = "Segmentado pelo uso de oxigênio suplementar",
    x = "Ponto Mais Alto Atingido (metros)",
    y = "Densidade",
    fill = "Status",
    color = "Status"
  ) +
  theme_minimal() +
  scale_fill_viridis_d(option = "plasma", begin = 0.3, end = 0.9) +
  scale_color_viridis_d(option = "plasma", begin = 0.3, end = 0.9)

grafico_mortes
Figura 7: Perfil de Altitude e Ocorrência de Mortes.

2º Visualização:

grafico_montanhas_obitos <- expedicoes_tratadas |> 
  mutate(
    total_mortes = as.numeric(member_deaths) + as.numeric(hired_staff_deaths),
    total_equipe = as.numeric(members) + as.numeric(hired_staff)
  ) |> 
  group_by(peak_name) |> 
  summarize(
    soma_mortes = sum(total_mortes, na.rm = TRUE),
    media_equipe = mean(total_equipe, na.rm = TRUE)
  ) |> 
  slice_max(soma_mortes, n = 10) |> 
  ggplot(aes(x = reorder(peak_name, soma_mortes), y = soma_mortes, 
             fill = media_equipe)) +
  geom_col() +
  coord_flip() +
  labs(
    title = "Top 10 Montanhas com Mais Óbitos Registrados",
    subtitle = "Colorido pelo tamanho médio da equipe (membros + staff)",
    x = "Nome da Montanha",
    y = "Total de Óbitos (Membros + Staff)",
    fill = "Média de Pessoas"
  ) +
  theme_minimal() +
  scale_fill_viridis_c(option = "viridis")

grafico_montanhas_obitos
Figura 8: Montanhas com mais óbitos registrados.

Análise: Na análise dos gráficos, vemos que as fatalidades concentram-se drasticamente em expedições que buscam altitudes extremas (acima de 8.000 metros) utilizando oxigênio suplementar. Além disso, o risco não se distribui igualmente entre as montanhas: o Everest lidera o total de óbitos e caracteriza-se por excursões de grande porte, com médias superiores a 12 pessoas entre membros e staff. Ou seja, o perfil mais crítico de mortalidade envolve expedições estruturadas de grande escala em picos de elevada altitude.

Indique qual a melhor época do ano para ir aos Himalaias, considerando:

1. O período mais seguro;

2) O período em que teremos mais condições de chegar ao topo.

epoca_analise <- expeditions |> 
  mutate(
    sucesso = if_else(str_detect(termination_reason, "Success"), 1, 0),
    total_mortes = member_deaths + hired_staff_deaths
  ) |> 
  filter(season != "Unknown") |>
  group_by(season) |> 
  summarize(
    Sucessos = sum(sucesso, na.rm = TRUE),
    Mortes = sum(total_mortes, na.rm = TRUE)
  ) |> 
  drop_na(season)
grafico_sucesso <- epoca_analise |> 
  ggplot(aes(x = reorder(season, Sucessos), y = Sucessos, fill = season)) +
  geom_col(show.legend = FALSE, alpha = 0.85) +
  coord_flip() +
  labs(
    title = "Condições de Chegar ao Topo",
    subtitle = "Total de expedições bem-sucedidas (pico principal e subpico) por estação",
    x = "Estação",
    y = "Número de Sucessos"
  ) +
  theme_minimal() +
  scale_fill_viridis_d(option = "viridis")

grafico_sucesso
Figura 9: Condições de Chegar ao Topo
grafico_falha <- epoca_analise |> 
  ggplot(aes(x = reorder(season, Mortes), y = Mortes, fill = season)) +
  geom_col(show.legend = FALSE, alpha = 0.85) +
  coord_flip() +
  labs(
    title = "Análise de Segurança por Estação",
    subtitle = "Total de óbitos (membros + staff) por estação",
    x = "Estação",
    y = "Total de Óbitos"
  ) +
  theme_minimal() +
  scale_fill_viridis_d(option = "plasma")

grafico_falha
Figura 10: Análise de Segurança por Estação.

Análise: A análise por estação mostra que a primavera é o período ideal para chegar ao topo, concentrando o maior volume de picos bem-sucedidos por causa das melhores condições climáticas. Porém, por ser a época de maior movimento, é também a que registra mais óbitos. O outono serve como uma boa alternativa, enquanto o inverno e o verão são muito restritivos. Ou seja, a Primavera garante as melhores chances de sucesso, mas exige atenção redobrada aos riscos da alta lotação.

DISCUSSÃO E CONCLUSÕES:

Se a pessoa tiver uma grande vontade de viver essa aventura, ela poderá, porém com todos os cuidados possíveis. Em épocas como a primavera ou outono, saber que são as que possuem a maior quantidade de membros por equipe, e conhecendo seus próprios limites físicos e mentais, não tentando forçar ultrapassa-los pra alcançar o objetivo. Além disso, é adequado pesquisar não só sobre as expedições e sobre a quantidade de profissionais e pessoas com experiência que geralmente elas possuem, mas também sobre o número de mortes.

REFERÊNCIAS:

O banco de dados pode ser encontrado no site https://www.himalayandatabase.com.

Os dados utilizados nessa atividade se encontram no link a seguir: https://docs.google.com/spreadsheets/d/1-hi4jg_zrslYya8LSrSSykgGPTthHQK2NFN1bG3ulVA/edit?usp=sharing