Questões sendo respondidas: todas (uma por seção)


Como o título sugere, estamos interessados em entender um pouco melhor o clima em três cidades que usaremos como referência para analisar a Paraíba (João pessoa, Campina Grande e Patos), justamente por estarem localizadas em zonas bem distintas (Litoral, Serra da borborema e Sertão). Podemos vê-las melhor no mapa abaixo:



Fonte da imagem original: britannica

Para a análise climática, usaremos dados de estações convencionais do instituto nacional de meteorologia (INMET). Os quais são compostos por 1803 medições no grão de semanas (601 por cidade) do final de 2009 até junho de 2021, e incluem velocidades média e máximas dos ventos, temperaturas mínimas, médias e máximas, umidade e chuva. Iremos nos concentraremos primeiro no ano de 2019.

Como bônus, tentaremos entender quão calorosos 🥵 (usando um índice de calor) os dias de verão realmente foram e, para descontrair, quais as temperaturas registradas nas festas juninas dos últimos anos (2017 - 2020) 🎉


library(tidyverse)
library(here)
library(lubridate)
library(gridExtra)

theme_set(theme_bw())
clima_tudo = read_csv(
    here("data/tempo-jp-cg-pt.csv"),
    col_types = cols(
        .default = col_double(),
        cidade = col_character(),
        semana = col_date(format = ""),
        ano = col_integer(),
        mes = col_integer()
    )
)

clima2019 = clima_tudo %>% 
    filter(ano == 2019)

Como foi o vento nessas 3 cidades no ano de 2019 ?

Primeiro, estou curioso acerca de como o vento se comportou nessas cidades. Qual será a distribuição de suas intensidades ? (a) Qual cidade teve  os maiores ventos ? (b) Será que houve mudança de intensidade com o passar das semanas ? (c) Será que em alguma delas a intensidade desse vento não varia significativamente  ou, pelo contrário, varia bastante ? (d) Além disso seria interessante comparar esse cenário com o de temperatura, chuvas e umidade para termos uma melhor visão geral.

Para atingir esse objetivo, começaremos utilizando dados de intensidade médias e máximas semanais dos ventos. Eles vêm em m/s, mas como somos mais acostumados com a unidade de Km/h, farei a conversão. Logo abaixo está um gráfico de pontos com cada medição e suas intensidades:

# It converts from m/s to Km/h
to_kmh <- function (ms) {
    ms * 3.6
}

# Converting wind velocity units
clima2019 <- clima2019 %>% 
                mutate(vento_medio = to_kmh(vento_medio),
                       vento_max = to_kmh(vento_max))

colors <- c("Ventos Médios" = "dodgerblue", "Ventos Máximos" = "salmon")

clima2019 %>% 
    ggplot(mapping = aes(y = cidade)) + 
    geom_jitter(height = .2, alpha = .4, aes(x = vento_medio, color = "Ventos Médios"), size = 3) + 
    geom_jitter(height = .2, alpha = .4, aes(x = vento_max, color = "Ventos Máximos"), size = 3) + 
    labs(
         y = "", 
         x = "Intensidade do vento (Km/h)",
         color = "Legenda",
         title = "Ventos médios e máximos"
    ) +
    scale_color_manual(values = colors)

Esses resultados são bem interessantes, com eles vemos que CG teve os maiores ventos (pelo menos um) dentre todas as outras cidades (tanto pelas medições das intensidades máximas, como também as médias), o que responde a nossa questão (b). E que os ventos de JP tem intensidades tão baixas, que até mesmo o maior deles de intensidade média não é maior que o menor de CG.

Outro achado é que, em comparação, a faixa de valores de intensidade presentes em JP é bem menor que a das demais, isto é, as velocidades dos ventos são mais concentradas. Já em Patos, a variação é alta e em tamanho é próxima de CG, porém apresentando ventos de baixíssima intensidade média até ventos de intensidades altas. Respondendo a pergunta (d).

Esse gráfico, entretanto, não nos informa como esses ventos se distribuem no tempo. Para isso, vamos usar um gráfico dessas medições em relação às semanas e tentar enxergar tendências através da utilização de uma técnica de suavização não paramétrica de sigla LOESS, que a grosso modo traça uma “linha suave” sobre a nuvem de pontos e nos ajuda a enxergar a sua “forma” (Na real é mais complicado do que isso, mas é suficiente saber que mostrará possíveis tendências nos nossos dados).

ventosMedios <- clima2019 %>% 
    ggplot(aes(x = semana, y = vento_medio, color = cidade)) + 
    geom_point() +
    geom_smooth() +
    theme(legend.position="none") +
    labs(
        x="Tempo (semanas)",
        y="Intensidade Média (Km/h)",
        title="Ventos Médios"
    )

ventosMaximos <- clima2019 %>% 
    ggplot(aes(x = semana, y = vento_max, color = cidade)) + 
    geom_point() +
    geom_smooth() +
    theme(legend.position="none") +
    labs(
        x="Tempo (semanas)",
        y="Intensidade Máxima (Km/h)",
        title="Ventos Máximos"
    )

# Auxiliar plot being used to extract the bottom legend
aux <- clima2019 %>% 
            ggplot(aes(x = semana, y = vento_medio, color = cidade)) + 
            geom_point() +
            theme(legend.position="bottom")

# It extracts legends from ggplots
extract_legend <- function(my_ggp) {
  step1 <- ggplot_gtable(ggplot_build(my_ggp))
  step2 <- which(sapply(step1$grobs, function(x) x$name) == "guide-box")
  step3 <- step1$grobs[[step2]]
  return(step3)
}

shared_legend <- extract_legend(aux)

grid.arrange(arrangeGrob(ventosMedios, ventosMaximos, ncol = 2),
             shared_legend, nrow = 2, heights = c(10, 1))

Como podemos ver, os ventos médios e máximos em CG foram aumentando progressivamente. Enquanto os de JP permaneceram relativamente constantes, com uma tendência de queda próximo a janeiro de 2020. Já em Patos houve um grande pico em outubro de 2019 e queda subsequente, o que curiosamente não aconteceu com os seus ventos máximos. O que responde a pergunta (c).

E apesar de termos todas essas informações, ainda não sabemos sobre a frequência desses ventos. Para isso usaremos histogramas dos ventos médios das três cidades (os ventos máximos têm um comportamento bem semelhante) e também suavizações sobrepostas a eles que vai nos ajudar a enxergar melhor o formato geral da distribuição:

clima2019 %>%
    ggplot(aes(x = vento_medio)) + 
    facet_wrap(~cidade)+ 
    geom_histogram(binwidth = 1.2, aes(y = stat(density)), col = "black", fill="white") +
    geom_density(alpha=0.5, aes(fill = cidade, col = cidade)) +
    labs(
        x = "Vento médio (Km/h)",
        y = "Densidade",
        title = "Distribuição das intensidades dos ventos por cidade"
    )

Como suspeitávamos, JP tem os ventos mais concentrados e baixos (<10Km/h). Enquanto CG vem logo atrás e Patos aparece com os mais distribuídos - ventos fortes e fracos ocorrem com frequência mais próximas. Tanto CG como Patos apresentam uma certa bimodalidade (duas regiões de maior frequência, isto é, dois picos no gráfico) e são relativamente simétricos em relação a JP, que parece inclinado à esquerda - tendendo a ventos de mais baixa intensidade. Respondendo a nossa primeira questão (a).

Resumindo: Em JP ocorreram os ventos mais concentrados e de baixa intensidade, já em CG ocorreram os maiores ventos. Em Patos, eles variaram bastante (de leves brisas a ventos de alta intensidade). Por fim, em Patos e CG houve tendência de aumento nos ventos durante o ano (decaindo os médios em Patos no fim do segundo semestre).

Relação com temperatura, chuva e umidade

Omitimos da análise, por questão de espaço, a interpretação dos gráficos acerca dessas outras características. Entretanto, deixo aqui alguns deles disponíveis:

Gráficos extras de pontos
Gráfico de pontos de temperaturas médias
clima2019 %>% 
    ggplot(mapping = aes(y = cidade, x = temp_media)) + 
    geom_jitter(height = .1, alpha = .6, color = "coral") + 
    labs(
         y = "", 
         x = "Temperatura Média Semanal (C)"
    )

Gráfico de pontos das chuvas
clima2019 %>% 
    ggplot(aes(x = semana, y = chuva, color = cidade)) + 
    facet_wrap(~ cidade, ncol = 1) + 
    geom_point() +
    labs(
         y = "Chuva (mm)", 
         x = "Semana"
    )

Gráfico de pontos da umidade
clima2019 %>% 
    ggplot(mapping = aes(y = cidade, x  = umidade)) + 
    geom_jitter(height = .1, color = "steelblue", alpha = .5) +
    labs(
         y = "", 
         x = "Umidade (%)"
    )

João Pessoa

JP parece ter as menores faixas de valores (bem concentrados) em quase todas as medições. Seus ventos foram de baixa intensidade todo o ano, com temperaturas variando em torno de 25ºC à 30ºC e com umidade alta, variando de 65% à 90% em algumas semanas. Quanto as chuvas, choveu até agosto, registrando algumas chuvas extremas - que até mesmo causaram transtornos, como visto nesse artigo que confirma o que vimos nos dados: notícia sobre às chuvas.

Resumindo: No geral é a mais úmida, choveu frequentemente até o começo do  segundo semestre. Sua temperatura no geral é maior que as de campina, mas em média semanal não  ultrapassou os 30ºC e seus ventos são os menos intensos.

Campina Grande

CG teve os maiores ventos em média e também os máximos ventos, alguns ultrapassando 30Km/h com tendência crescente durante o ano. Com temperaturas relativamente mais baixas que as das outras cidades, tanto pelo fato de ter as semanas mais frias, mas também por sua frequência ser maior. Quanto a sua umidade, ela também é bastante úmida, com poucas de suas semanas médias sendo menos úmidas que JP. As chuvas aconteceram também até agosto, com intensidade mais baixa que em JP.

Resumindo: Registrou umidades altas, choveu frequentemente até o começo do  segundo semestre. Sua temperatura no geral é a menor das três e seus ventos são  os mais fortes no geral.

Patos

Por fim, Patos é uma das cidades que apresenta mais variação em seu clima. Sua temperatura é relativamente mais alta que a das outras cidades com uma mínima de 26ºC e chegando à 32ºC. Próximas das encontradas em JP, mas com mais frequência ultrapassando os 30ºC. Já seus ventos variam desde as brisas encontradas em JP até os maiores ventos médios de CG, com máximos próximos também dos de CG. Já sua umidade é bem mais baixa do que a das outras cidades, variando bastante de 40% até 75%, com uma frequência bem alta de valores abaixo de 60%. E chovendo até cerca de maio.

Resumindo: Registrou baixas umidades, choveu significantemente só no começo do ano, com frequência ultrapassou os 30ºC. Seus ventos variaram bastante.

Como a umidade das 3 cidades varia ao longo do ano ?

Também estou curioso acerca de como a umidade variou nessas cidades ao longo do ano de 2019, já que já discutimos acima sobre os valores de umidades nas cidades. Será que há alguma tendência ? Ou variam demais para se ver algo claro ? Qual será  a distribuição dessas umidades nas cidades ? Para responder isso vamos usar os dados das umidades semanais médias e visualizá-los por mês:

clima2019 %>% 
    ggplot(mapping = aes(x = semana, y = umidade)) +
    facet_wrap(~cidade, ncol=3) +
    geom_point(alpha = .3, color = "blue", size=3) +
    geom_smooth(color = "blue") +
    labs(
         y = "Umidade (%)",
         x = "Mês",
         title = "Umidades semanais médias no tempo"
    ) +
    scale_x_date(date_labels = "%b")

Como vemos, por coincidência ou não, a umidade em todas as cidades começa subindo, em CG e JP indo até julho, enquanto em Patos até abril e depois começam a despencar. Em JP, o cenário, como de costume, é menos variável e esse efeito é menor. Já em CG, ele é bem drástico, descendo cerca de 25% do meio ao fim do ano. Em Patos esse efeito é tão forte quanto em CG, mas a umidade é ainda mais baixa.

Essa queda coincide com o fim das chuvas frequentes em todas as cidades, o que faz sentido.

Para complementar a nossa visão da umidade, podemos ver como é a distribuição da frequência dessas umidades através de um histograma das umidades semanais médias:

clima2019 %>% 
    ggplot(aes(x = umidade)) + 
    facet_grid(ano~cidade)+ 
    geom_histogram(binwidth = 4, aes(y = stat(density)), col = "black", fill="white") +
    geom_density(alpha=.5, aes(fill = cidade, col = cidade)) +
    labs(
        x = "Umidade (%)",
        y = "Densidade"
    )

Os gráficos de CG e JP são bem simétricos com ambas as caudas menos frequentes, em contraste com o de Patos que parece mais inclinado à esquerda, apresentando mais frequentemente umidades baixas, como vimos no gráfico superior, e parece ter uma bimodalidade entre valores abaixo de 60% e a acima. JP também possui uma leve bimodalidade.

Resumindo: Todas as umidades tem uma tendência de aumentar no começo do ano. Em CG e JP até julho, enquanto em Patos até abril. E logo após despescam, Provavelmente pelo período de chuva ter passado.


No verão, como foi o calor das 3 cidades nos últimos anos?

Agora iremos tentar entender o quão calorosos estão os últimos verões (janeiro e fevereiro), mas como sabemos, a sensação de calor não é tão direta como uma medida simples de temperatura, depende de nós mesmos e de outras variáveis do ambiente, como vento, radiação solar e umidade. Não levaremos tudo isso em consideração, mas tomaremos como base a temperatura e a umidade para calcular um índice de calor - chamaremos de temperatura aparente, que é dado pela seguinte fórmula:

Essa formula é uma simplificação de um modelo bem mais complexo que leva em consideração muito mais características do que temos disponíveis. Nessa versão, essa equação supõe valores padrão para quase todos os parâmetros do modelo, menos para a umidade e temperatura.

Primeiro, iremos usar os dados dos anos de 2017 à 2020 (temperatura média e umidade) e visualizar as medições que temos em um gráfico de pontos para cada mês:

# Celsius to fahrenheit
c_to_f <- function(c) {
    (c * (9/5)) + 32
}

# Fahrenheit to celsius
f_to_c <- function(f) {
    (f - 32) * (5/9)
}

# Heat index formula
hi <- function(temp, umidade) {
    -42.379 + 2.04901523 * c_to_f(temp) + 10.14333127 * umidade - 0.22475541 * c_to_f(temp) * umidade -     
    6.83783 * 10^-3 * c_to_f(temp)^2 - 5.481717 * 10^-2 * umidade^2 + 1.22874 * 10^-3 * c_to_f(temp)^2 * 
    umidade + 8.5282 * 10^-4 * c_to_f(temp) * umidade^2 - 1.99 * 10^-6 * c_to_f(temp)^2 * umidade^2
}

# Creating heat index columns for all the temperatures
clima_tudo_hi <- clima_tudo %>%
    mutate(hi_media = f_to_c(hi(temp_media, umidade)), 
           hi_max = f_to_c(hi(temp_max, umidade)),
           hi_min = f_to_c(hi(temp_min, umidade)))

# Overwriting the month names from R
month.name <- c("Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", 
                "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro")

colors <- c("Índices mínimos" = "green", "Índices médios" = "coral", "Índices máximos" = "red")

clima_tudo_hi %>% 
    filter(ano > 2016, ano < 2021, month(semana) == 2 | month(semana) == 1) %>% 
    mutate(month = month.name[month(semana)]) %>%
    ggplot(aes(y = reorder(month, desc(month)))) + 
        geom_jitter(height=.2, aes(x = hi_min, color="Índices mínimos"), alpha=0.4, size = 3) +
        geom_jitter(height=.2, aes(x = hi_media, color="Índices médios"), alpha=0.4, size = 3) +
        geom_jitter(height=.2, aes(x = hi_max, color="Índices máximos"), alpha=0.4, size = 3) +
        facet_grid(ano~cidade) + 
        labs(
            x = "Temperatura semanal média aparente (C)",
            y = "Mês",
            title = "Temperaturas aparentes no verão dos últimos anos nas 3 cidades",
            color = "Legenda"
        ) +
        scale_color_manual(values = colors)

Temos algumas temperaturas faltantes (10 mínimas, 1 média e outra máxima), não registradas no site do INMET. Entretanto, ainda temos o suficiente para interpretar os resultados. Como vemos, as temperaturas aparentes (médias, mínimas e máximas) são um pouco menores em CG - sem a informação das mínimas registradas em 2020. E interessantemente, as temperaturas médias aparentes em JP parecem ser um pouco maiores que em Patos, entretanto as temperaturas máximas são significativamente maiores em Patos.

Quanto a esses valores, tantos os médios quanto os máximos que estamos observando são bem altos, e em todas as cidades é necessário cuidado ao se expor. Temperaturas acima de 32ºC já necessitam de extremo cuidado, por risco de hipertermia e caimbras de calor, entre outros. Patos é o caso extremo, com temperaturas máximas ultrapassando os 50ºC.

Outra coisa que se nota é que parece haver uma tendência leve de aumento de temperaturas aparentes máximas em 2020 em todas as cidades. Vamos dar uma olhada nos histogramas:

clima_tudo_hi %>% 
    filter(ano > 2016, ano < 2021, month(semana) == 1 | month(semana) == 2) %>% 
    ggplot(aes(x = hi_max)) + 
    facet_grid(ano~cidade)+ 
    geom_histogram(binwidth = .6, aes(y = stat(density)), col = "black", fill="white") +
    geom_density(alpha=.5, aes(fill = cidade, col = cidade)) +
    labs(
        x = "Temperatura média aparente (C)",
        y = "Densidade"
    )

Realmente, os histogramas estão se deslocando um pouco para a direita, podemos notar isso por esses gráficos de densidade (que cobrem o gráfico de barras). Mas será que isso está acontecendo com as médias aparentes ?

clima_tudo_hi %>% 
    filter(ano > 2016, ano < 2021, month(semana) == 1 | month(semana) == 2) %>% 
    ggplot(aes(x = hi_media)) + 
    facet_grid(ano~cidade)+ 
    geom_histogram(binwidth = .6, aes(y = stat(density)), col = "black", fill="white") +
    geom_density(alpha=.5, aes(fill = cidade, col = cidade)) +
    labs(
        x = "Temperatura média aparente (C)",
        y = "Densidade"
    )

Esse gráfico em parte confirma o que suspeitávamos, realmente as temperaturas médias aparentes parecem estar aumentando - lado direito dos histogramas mais proeminentes. Todavia, essa fórmula não é exata e deixa de considerar a variação de vários parâmetros importantes, então essa tendência de aumento pode ser fruto dessa inexatidão.

Todavia, por curiosidade, como será que se comporta só a temperatura média, sem avaliar a umidade ou outros fatores ? Podemos ver isso abaixo:

clima_tudo_hi %>% 
    filter(ano > 2016, ano < 2021, month(semana) == 1 | month(semana) == 2) %>% 
    ggplot(aes(x = temp_media)) + 
    facet_grid(ano~cidade)+ 
    geom_histogram(binwidth = .6, aes(y = stat(density)), col = "black", fill="white") +
    geom_density(alpha=.5, aes(fill = cidade, col = cidade)) +
    labs(
        x = "Temperatura média (C)",
        y = "Frequência"
    )

Hmmm, a temperatura parece realmente ter aumentado em CG e JP - os histogramas tendem mais à direta - mas em Patos esse não parece ser o caso.

Resumindo: As temperaturas estiveram bem altas nesses últimos verões e o índice de calor mostrou que todos devem ter cuidado ao sair de suas casas, pelas altas temperaturas. Uma leve tendência de aumento da temperatura aparente parece ter se mostrado, mas uma análise mais detalhada deveria ser feita para confirmá-la

Como foram as temperaturas das festas juninas das 3 cidades nos últimos anos?

Por fim, iremos observar as temperaturas das festas juninas 🔥 dos últimos anos. Será que CG continua com o título da mais fria ? Houve aumento ou diminuição  da temperatura nas cidades ? Patos continua tão quente quanto é conhecida por ser?

Para responder a essas perguntas, vamos usar as temperaturas mínimas, médias e máximas do mês de junho nos últimos anos e visualizá-las em relação as semanas do mês:

colors <- c("Temperaturas mínimas" = "green", 
            "Temperaturas médias" = "coral", 
            "Temperaturas máximas" = "red")

clima_tudo_hi %>% 
    filter(ano > 2016, ano < 2021, month(semana) == 6) %>% 
    mutate(month = week(semana) - 21) %>%
    ggplot(aes(y = month)) + 
        geom_jitter(aes(x = temp_min, color="Temperaturas mínimas"), alpha=0.4, size = 3) +
        geom_jitter(aes(x = temp_media, color="Temperaturas médias"), alpha=0.4, size = 3) +
        geom_jitter(aes(x = temp_max, color="Temperaturas máximas"), alpha=0.4, size = 3) +
        facet_grid(ano~cidade) + 
        labs(
            x = "Temperatura semanal média (C)",
            y = "Semana",
            title = "Temperaturas no mês de junho",
            color = "Legenda"
        ) +
        scale_color_manual(values = colors)

Importante ressaltar que alguns dados estão faltantes, não temos nenhum dado de Patos em 2020 e nem as mínimas de campina grande também desse ano (inexistentes no INMET). Mas com o que temos, vemos que CG continua tendo as menores temperaturas no geral e Patos continua com suas temperaturas máximas assolantes. JP parece que teve suas mínimas diminuindo com o passar dos anos, mas não as suas médias.

Para ter uma ideia melhor da distribuição da temperatura média, aqui embaixo estão os histogramas:

clima_tudo %>% 
    filter(ano > 2016, ano < 2021, month(semana) == 6) %>% 
    ggplot(aes(x = temp_media)) + 
    facet_grid(ano~cidade)+ 
    geom_histogram(binwidth = .2, aes(y = stat(density)), col = "black", fill="white") +
    geom_density(alpha=.5, aes(fill = cidade, col = cidade)) +
    labs(
        x = "Temperatura média (C)",
        y = "Densidade"
    )

De qualquer forma, parece que não ajudou muito, porque temos poucas observações em um mês. De qualquer forma, reconfirmamos que CG tem as menores temperaturas, logo depois Patos e por fim JP parece que apresenta as maiores temperaturas médias.

Resumindo: Campina ainda continua com as menores temperaturas nas festas juninas e JP parece ter as temperaturas médias mais altas. Patos continua com as temperaturas máximas mais altas de todas.