What Is The Effect Of The Earth’s Temperature on Cyclonic Storms? Historic data indicates that the occurrence and intensity of cyclonic storms (Hurricanes, Typhoons and Tornados) increases with the increased earth temperature. For this assignment you will need to tell this story to a non-technical audience (eg: a high-school earth science class).
Notes:
Source historic data for a period of at least 25 years on a measure of the earth’s temperature.
Source data on the occurrence and intensity of hurricanes, typhoons and tornados for the same historic period.
Perform the data analysis to establish the correlations between earth temperature and storm occurrence and intensity.
Tell the story of this data and your analysis using data visualizations and other illustrations (eg: pictures of storm damage) in a presentation that will be accessible to a high-school earth science class.
Our planet’s climate is changing and one of the most noticeable signs is the steady increase in Earth’s temperature over the past century. Scientists call this global warming, and it refers to the long-term rise in the average temperature of the Earth’s surface due to human activities, such as burning fossil fuels and deforestation. This warming trend affects not only air and land temperatures but also the world’s oceans — and warm oceans are a key ingredient for cyclonic storms.
Cyclonic storms such as hurricanes, typhoons, and tornadoes draw their strength from warm ocean water. When the sea surface temperature rises, more heat and moisture enter the atmosphere, providing extra energy to fuel these storms. As a result, storms can become stronger, last longer, and cause more damage when they make landfall.
In this project, we explore the connection between the Earth’s rising temperature and the frequency and intensity of cyclonic storms. Using more than 25 years of historical data, we examine trends in global surface temperature alongside storm activity records. By combining visual data analysis with simple explanations, we aim to tell the story of how a warming planet influences the world’s most powerful natural phenomena in a way that is both scientifically accurate and easy to understand.
Import libraries
Load Earth Surface Temperature Data
library(rvest)
library(dplyr)
library(kableExtra)
library(tidyverse)
library(plotly)
library(readr)
library(ggplot2) Chart 1: Global
Temperature Trend
Over the past century, Earth’s surface has been steadily warming — a trend known as global warming. Scientists track this by looking at temperature anomalies, which measure how each year’s temperature differs from a long-term average.
The chart below uses annual temperature anomalies to show how the planet’s surface temperature has changed from 1880 to 2023. The red line represents the yearly values, while the blue dashed line shows the overall warming trend.
This visualization helps us understand the backdrop for the rest of our story: warmer oceans and atmosphere create the conditions for stronger and more frequent cyclones.
# Load temperature data
df <- read.csv("GLB_Ts_dSST.csv", skip = 1, header = TRUE, check.names = TRUE, na.strings = "***")
df <- df[complete.cases(df), ]
ggplot(df, aes(x = Year, y = `J.D`)) +
geom_line(color = "red", size = 1) +
geom_point(color = "darkred", size = 1) +
geom_smooth(method = "lm", formula = y ~ x, se = FALSE,
color = "darkblue", linetype = "dashed", size = 1.5) +
annotate("text", x = 1960, y = 0.8,
label = "Rising Temperatures Fuel Cyclones",
color = "blue", size = 5, fontface = "bold") +
geom_rect(aes(xmin = 2010, xmax = 2023, ymin = -Inf, ymax = Inf),
fill = "pink", alpha = 0.05) + # lighter highlight
scale_x_continuous(breaks = seq(1880, 2025, 20)) +
labs(
title = "Rising Global Temperatures: Setting the Stage for Stronger Cyclones",
subtitle = "Red line: Annual mean temperature anomaly | Blue dashed: Linear trend",
x = "Year", y = "Temperature Anomaly (°C)"
) +
theme_light(base_size = 14) +
theme(
plot.title = element_text(size = 20, face = "bold"),
plot.subtitle = element_text(size = 16)
)This graph illustrates the rise in global surface temperature from the long-term average spanning 1881 to 2023. The Earth has experienced its highest average surface temperatures on record since 2005 (source: NASA GISS). NASA’s findings align closely with independent analyses from the National Oceanic and Atmospheric Administration (NOAA) and other research organizations. Overall, Earth’s temperature in 2023 was approximately 2.45 °F (about 1.36 °C) above the late 19th-century (1850–1900) pre-industrial average. Notably, the past ten years have been the warmest on record.
Data Source: ACE (Accumulated Cyclone Energy) Information - Yearly (obtained from Wikipedia - https://en.wikipedia.org/wiki/Accumulated_cyclone_energy)
ACE Data - Yearly: Scraping from Wikipedia
To perform web scraping from Wikipedia, the rvest package was used. The first step entails reading the Wikipedia page and storing it in an object named wbpg using the read_html() function. Subsequently, any table information is extracted into the tbl object. Then, I’ll specifically parse the table related to the Accumulated Cyclone Energy - Atlantic using the grep function and store it in a data.frame.
# --- Step 1: Read Wikipedia page ---
url <- "https://en.wikipedia.org/wiki/Accumulated_cyclone_energy"
wbpg <- read_html(url)
tbls <- html_nodes(wbpg, "table")
tbl_list <- lapply(tbls, html_table, fill = TRUE)
# --- Step 2: Select the correct table (Table 5) ---
storms_df <- tbl_list[[5]]
# --- Step 3: Clean column names ---
storms_df <- storms_df %>%
rename(
Year = Season,
ACE = ACE,
TS = TS,
HU = HU,
MH = MH
) %>%
mutate(across(c(Year, ACE, TS, HU, MH), as.numeric)) %>%
filter(!is.na(Year))
# --- Step 4: Add derived variable (Minor Tropical Storms) ---
storms_df <- storms_df %>%
mutate(MTS = TS - HU - MH)
# --- Step 5: Keep years of data ---
storms_df <- storms_df %>%
arrange(desc(Year)) %>%
slice_head(n = 135) %>%
arrange(Year)
# --- Step 6: Show first 5 records ---
storms_df %>%
slice(1:5) %>%
kbl(caption = "Cyclonic Storms Intensity") %>%
kable_paper("hover", full_width = F, position = "center") %>%
row_spec(0, color = "black", background = "white")| Year | ACE | TS | HU | MH | Classification | MTS |
|---|---|---|---|---|---|---|
| 1891 | 116.1050 | 10 | 7 | 1 | Near normal | 2 |
| 1892 | 115.8375 | 9 | 5 | 0 | Near normal | 4 |
| 1893 | 231.1475 | 12 | 10 | 5 | Extremely active | -3 |
| 1894 | 135.4200 | 7 | 5 | 4 | Above normal | -2 |
| 1895 | 68.7650 | 6 | 2 | 0 | Below normal | 4 |
There are 144 observations and six variables such as Year, ACE
(Accumulated Cyclone Energy), TS (Tropical Cyclone), HU (Hurricane), MH
(Major Hurricane) and MTS (Minor Tropical Storm) in stroms_df data
frame.
Chart 2: Cyclone
Frequency Over Time
Cyclones vary in size and strength, from tropical storms to massive hurricanes. To understand trends in storm occurrence, we look at how many storms of each type occur each year.
The chart below plots the number of tropical storms (TS), hurricanes (HU), and major hurricanes (MH) . By visualizing these storm frequencies together, we can see whether there are patterns in storm activity and identify years with unusually high or low counts.
This sets the stage for connecting storm frequency to rising global temperatures in the next charts.
ggplot(storms_df, aes(x = Year)) +
# Shaded background for peak years
annotate("rect", xmin = 1994.5, xmax = 1995.5, ymin = -Inf, ymax = Inf, fill = "pink", alpha = 0.1) +
annotate("rect", xmin = 2004.5, xmax = 2005.5, ymin = -Inf, ymax = Inf, fill = "pink", alpha = 0.1) +
annotate("rect", xmin = 2019.5, xmax = 2020.5, ymin = -Inf, ymax = Inf, fill = "pink", alpha = 0.1) +
# Storm frequency lines
geom_line(aes(y = TS, color = "Tropical Storms"), size = 1.2, alpha = 0.6) +
geom_line(aes(y = HU, color = "Hurricanes"), size = 1.3, alpha = 0.8) +
geom_line(aes(y = MH, color = "Major Hurricanes"), size = 1.8, alpha = 1) +
# Highlight peak years
geom_vline(xintercept = c(1995, 2005, 2020), linetype = "dashed", color = "red", alpha = 0.5) +
geom_text(aes(x = 1995, y = 25, label = "1995 Peak"), color = "red", angle = 90, vjust = -0.5, size = 4) +
geom_text(aes(x = 2005, y = 25, label = "2005 Peak"), color = "red", angle = 90, vjust = -0.5, size = 4) +
geom_text(aes(x = 2020, y = 25, label = "2020 Peak"), color = "red", angle = 90, vjust = -0.5, size = 4) +
# Custom colors and labels
scale_color_manual(values = c(
"Tropical Storms" = "#1f77b4", # brighter blue
"Hurricanes" = "#ff7f0e", # bright orange
"Major Hurricanes" = "#d62728" # strong red
)) +
# Titles and theme
labs(
title = "Storm Activity Has Increased Over Time — Especially in Key Peak Years",
subtitle = "Red dashed lines mark years (1995, 2005, 2020) with unusually high storm counts",
x = "Year",
y = "Number of Storms",
color = "Storm Type"
) +
theme_light(base_size = 15) +
theme(
plot.title = element_text(size = 20, face = "bold"),
plot.subtitle = element_text(size = 15),
legend.position = "top"
)The pattern here is striking — the number of storms has generally
increased over the past few decades.
Years like 1995, 2005, and
2020 stand out as clear spikes, often following periods
of unusually high global temperatures.
This growing storm activity hints that our warming planet may be fueling
more frequent cyclonic disturbances.
Chart 3: Cyclone
Intensity Over Time
Not all storms are equal — some may last a few hours, while others persist for days and pack tremendous energy. Scientists combine strength and duration into a single measure called Accumulated Cyclone Energy (ACE).
The chart below shows how cyclone intensity has changed over time, with a smoothed red line to highlight long-term trends. Higher ACE values indicate years when cyclones were more energetic.
This visualization allows us to explore whether warmer years tend to produce stronger storms, providing a link between climate trends and extreme weather events.
# ---- Font Descriptions ----
t1 <- list(family = "Arial, sans-serif", size = 13, color = "black")
t2 <- list(family = "Arial, sans-serif", size = 12, color = "black")
# Remove missing values
storms_df <- storms_df[complete.cases(storms_df), ]
# Smooth ACE curve
ACE_smooth <- loess(ACE ~ Year, data = storms_df, span = 0.05)
ACE_pred <- predict(ACE_smooth)
# Merge with temperature data
combined_df <- merge(storms_df, df[, c("Year", "J.D")], by = "Year", all.x = TRUE)
# Normalize temperature for color mapping (optional but helps visually)
combined_df$J.D_scaled <- scales::rescale(combined_df$J.D, to = c(0, 1))
plot_ly(combined_df, x = ~Year) %>%
# Raw ACE points colored by temperature
add_trace(
y = ~ACE,
type = 'scatter',
mode = 'markers',
name = 'ACE by Temperature',
marker = list(
color = ~J.D,
colorscale = 'RdYlBu',
reversescale = TRUE,
size = 10,
showscale = TRUE,
colorbar = list(title = "Temperature (°C)", tickfont = t2)
),
hovertemplate = paste(
"Year: %{x}<br>",
"ACE: %{y:.1f}<br>",
"Temp (J.D): %{marker.color:.2f}°C"
)
) %>%
# Smoothed ACE trend line
add_trace(
y = ~ACE_pred,
type = 'scatter',
mode = 'lines',
name = 'Smoothed Trend',
line = list(color = 'red', width = 4)
) %>%
# Highlight peak years
add_trace(
data = combined_df[combined_df$Year %in% c(1995, 2005, 2017), ],
x = ~Year, y = ~ACE,
type = 'scatter', mode = 'markers+text',
marker = list(color = 'orange', size = 14, symbol = 'star'),
text = ~paste('Peak:', Year),
textposition = 'top center',
name = 'Peak Years'
) %>%
layout(
title = list(
text = "Cyclone Energy (ACE) Rises During Warmer Years",
font = list(size = 20, family = "Arial, sans-serif"),
y = 0.95
),
xaxis = list(title = "Year", dtick = 5, titlefont = t1),
yaxis = list(title = "ACE (10⁴ kn²)", titlefont = t1),
legend = list(orientation = 'h', x = 0.2, y = -0.3),
margin = list(b = 100)
)While storm counts tell part of the story, the
energy behind those storms reveals even more.
We can see that ACE values rise sharply during the same warm
years, confirming that not only are storms becoming more common
— they are also becoming more powerful.
This strengthens the link between rising ocean temperatures and the
intensification of cyclones.
Chart 4: Temperature
vs Storms
This chart brings together temperature and storm data to show the
relationship between global warming, storm frequency, and storm
intensity.
- The x-axis represents the number of tropical
storms in a year.
The y-axis represents storm energy (ACE).
Each point is a year, and the color shows the average global temperature: blue for cooler years, red for warmer years.
From this visualization, we can see a clear pattern: warmer years tend to have more storms that are also stronger. This chart tells the story of how rising global temperatures can influence the power and frequency of cyclones — a central message in our analysis of climate impacts.
# select Year and J.D temperature data from df
selected_df <- df[, c("Year", "J.D")]
# Merge temperature and storm data
combined_df <- merge(storms_df, df[, c("Year", "J.D")], by = "Year", all.x = TRUE)
plot_ly(combined_df, x = ~TS, y = ~ACE, color = ~J.D,
colors = colorRamp(c("blue", "red")),
type = "scatter", mode = "markers",
marker = list(size = 12, opacity = 0.8),
text = ~paste("Year:", Year, "<br>Temp:", round(J.D,2))) %>%
# Add diagonal trend line for guidance
add_lines(x = ~TS, y = ~TS*max(combined_df$ACE)/max(combined_df$TS),
line = list(dash = 'dash', color = 'black'), name = 'Trend line', inherit = FALSE) %>%
# Add annotation
add_annotations(
x = max(combined_df$TS)*0.7, y = max(combined_df$ACE)*0.9,
text = "Warmer years cluster here",
showarrow = TRUE, arrowhead = 2, ax = -40, ay = -40
) %>%
layout(
title = "Warmer Years Tend to Have More Frequent and Stronger Storms",
xaxis = list(title = "Number of Tropical Storms (TS)"),
yaxis = list(title = "Cyclone Intensity (ACE)"),
colorbar = list(title = "Temperature (°C)"),
legend = list(orientation = 'h', x = 0.1, y = -0.2)
)When the Earth’s surface temperature rises above about 26°C, the occurrence and intensity of tropical cyclones tend to increase. While individual cyclones cannot be directly attributed to global warming, warmer oceans provide more heat and moisture — the key ingredients that fuel stronger storms. As global temperatures continue to rise, scientists expect that the frequency of intense tropical cyclones will also increase, making these storms more powerful and potentially more destructive.
Imagine the Earth as a giant engine when it gets warmer, it powers up storms across the oceans. Our data shows that in years when global temperatures rise, tropical storms, hurricanes, and major hurricanes tend to become more frequent and stronger. The red line in our smoothed ACE plot shows just how storm energy spikes in warmer years.
While a single hurricane or typhoon isn’t caused by global warming alone, the overall trend is clear: a warmer planet fuels more intense and energetic cyclones. This means that as Earth continues to heat up, future storms could pack even more punch, posing bigger risks to coastal communities and ecosystems.
By looking at the colorful scatter plot, we can see the story: more storms, higher intensity, and hotter years—nature’s way of showing us that climate change has real, visible effects on extreme weather. Understanding these patterns helps us prepare, adapt, and take action to protect people and places from the growing power of cyclones.