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. This assignment is due at the end of the week ten of the semester.
# Reference: https://www.ncei.noaa.gov/access/monitoring/climate-at-a-glance/global/time-series/globe/land_ocean/12/9/1998-2022?trend=true&trend_base=100&begtrendyear=1998&endtrendyear=2022
df1 = read.csv("https://raw.githubusercontent.com/Meccamarshall/Data608/main/Story5/Global%20Land%20and%20Ocean%20Temp.csv")
df1
## Global.Land.and.Ocean.October...September.Temperature.Anomalies X
## 1 Units: Degrees Celsius
## 2 Base Period: 1901-2000
## 3 Missing: -999
## 4 Year Anomaly
## 5 1997 0.42
## 6 1998 0.67
## 7 1999 0.44
## 8 2000 0.45
## 9 2001 0.48
## 10 2002 0.63
## 11 2003 0.6
## 12 2004 0.57
## 13 2005 0.67
## 14 2006 0.67
## 15 2007 0.69
## 16 2008 0.53
## 17 2009 0.64
## 18 2010 0.75
## 19 2011 0.63
## 20 2012 0.64
## 21 2013 0.68
## 22 2014 0.76
## 23 2015 0.83
## 24 2016 1.08
## 25 2017 0.94
## 26 2018 0.86
## 27 2019 0.95
## 28 2020 1.04
## 29 2021 0.86
## 30 2022 0.93
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
df_row<- df1[-c(1, 2, 3, 4), ]
df_row
## Global.Land.and.Ocean.October...September.Temperature.Anomalies X
## 5 1997 0.42
## 6 1998 0.67
## 7 1999 0.44
## 8 2000 0.45
## 9 2001 0.48
## 10 2002 0.63
## 11 2003 0.6
## 12 2004 0.57
## 13 2005 0.67
## 14 2006 0.67
## 15 2007 0.69
## 16 2008 0.53
## 17 2009 0.64
## 18 2010 0.75
## 19 2011 0.63
## 20 2012 0.64
## 21 2013 0.68
## 22 2014 0.76
## 23 2015 0.83
## 24 2016 1.08
## 25 2017 0.94
## 26 2018 0.86
## 27 2019 0.95
## 28 2020 1.04
## 29 2021 0.86
## 30 2022 0.93
colnames(df_row) <- c("YEAR", "ANOMALY TEMP")
df_row
## YEAR ANOMALY TEMP
## 5 1997 0.42
## 6 1998 0.67
## 7 1999 0.44
## 8 2000 0.45
## 9 2001 0.48
## 10 2002 0.63
## 11 2003 0.6
## 12 2004 0.57
## 13 2005 0.67
## 14 2006 0.67
## 15 2007 0.69
## 16 2008 0.53
## 17 2009 0.64
## 18 2010 0.75
## 19 2011 0.63
## 20 2012 0.64
## 21 2013 0.68
## 22 2014 0.76
## 23 2015 0.83
## 24 2016 1.08
## 25 2017 0.94
## 26 2018 0.86
## 27 2019 0.95
## 28 2020 1.04
## 29 2021 0.86
## 30 2022 0.93
str(df_row)
## 'data.frame': 26 obs. of 2 variables:
## $ YEAR : chr "1997" "1998" "1999" "2000" ...
## $ ANOMALY TEMP: chr "0.42" "0.67" "0.44" "0.45" ...
#install.packages('weathermetrics')
library('weathermetrics')
df_row$`ANOMALY TEMP` <- as.numeric(df_row$`ANOMALY TEMP`)
str(df_row)
## 'data.frame': 26 obs. of 2 variables:
## $ YEAR : chr "1997" "1998" "1999" "2000" ...
## $ ANOMALY TEMP: num 0.42 0.67 0.44 0.45 0.48 0.63 0.6 0.57 0.67 0.67 ...
df_f <- df_row
df_f$`ANOMALY TEMP` <- celsius.to.fahrenheit(df_f$`ANOMALY TEMP`)
df_f
## YEAR ANOMALY TEMP
## 5 1997 32.76
## 6 1998 33.21
## 7 1999 32.79
## 8 2000 32.81
## 9 2001 32.86
## 10 2002 33.13
## 11 2003 33.08
## 12 2004 33.03
## 13 2005 33.21
## 14 2006 33.21
## 15 2007 33.24
## 16 2008 32.95
## 17 2009 33.15
## 18 2010 33.35
## 19 2011 33.13
## 20 2012 33.15
## 21 2013 33.22
## 22 2014 33.37
## 23 2015 33.49
## 24 2016 33.94
## 25 2017 33.69
## 26 2018 33.55
## 27 2019 33.71
## 28 2020 33.87
## 29 2021 33.55
## 30 2022 33.67
df_index <- df_f
rownames(df_index) <- 1:nrow(df_index)
df_index
## YEAR ANOMALY TEMP
## 1 1997 32.76
## 2 1998 33.21
## 3 1999 32.79
## 4 2000 32.81
## 5 2001 32.86
## 6 2002 33.13
## 7 2003 33.08
## 8 2004 33.03
## 9 2005 33.21
## 10 2006 33.21
## 11 2007 33.24
## 12 2008 32.95
## 13 2009 33.15
## 14 2010 33.35
## 15 2011 33.13
## 16 2012 33.15
## 17 2013 33.22
## 18 2014 33.37
## 19 2015 33.49
## 20 2016 33.94
## 21 2017 33.69
## 22 2018 33.55
## 23 2019 33.71
## 24 2020 33.87
## 25 2021 33.55
## 26 2022 33.67
df_rank <- df_index
df_rank$RANK <- rank(-df_rank$`ANOMALY TEMP`)
df_rank
## YEAR ANOMALY TEMP RANK
## 1 1997 32.76 26.0
## 2 1998 33.21 14.0
## 3 1999 32.79 25.0
## 4 2000 32.81 24.0
## 5 2001 32.86 23.0
## 6 2002 33.13 18.5
## 7 2003 33.08 20.0
## 8 2004 33.03 21.0
## 9 2005 33.21 14.0
## 10 2006 33.21 14.0
## 11 2007 33.24 11.0
## 12 2008 32.95 22.0
## 13 2009 33.15 16.5
## 14 2010 33.35 10.0
## 15 2011 33.13 18.5
## 16 2012 33.15 16.5
## 17 2013 33.22 12.0
## 18 2014 33.37 9.0
## 19 2015 33.49 8.0
## 20 2016 33.94 1.0
## 21 2017 33.69 4.0
## 22 2018 33.55 6.5
## 23 2019 33.71 3.0
## 24 2020 33.87 2.0
## 25 2021 33.55 6.5
## 26 2022 33.67 5.0
library(DT)
df_table <- datatable(df_rank)
df_table
df_rank$`ANOMALY TEMP` <- as.numeric(df_rank$`ANOMALY TEMP`)
str(df_rank)
## 'data.frame': 26 obs. of 3 variables:
## $ YEAR : chr "1997" "1998" "1999" "2000" ...
## $ ANOMALY TEMP: num 32.8 33.2 32.8 32.8 32.9 ...
## $ RANK : num 26 14 25 24 23 18.5 20 21 14 14 ...
library(plotly)
## Loading required package: ggplot2
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
x <- df_rank$YEAR
y <- df_rank$`ANOMALY TEMP`
rank <- df_rank$'RANK'
hover_text <- paste("ANOMALY TEMP: ", y, "°F<br>YEAR: ", x, "<br>RANK: ", rank)
fig <- plot_ly(data = df_rank, x = ~x, y = ~y, type = 'bar',
text = hover_text, # Include the hover text with all information
hoverinfo = 'text', # Specify hoverinfo to show the text
marker = list(color = '#b0ffd0',
line = list(color = '#ffebe0', width = 1.5)))
fig <- fig %>% layout(
xaxis = list(title = "Year"),
yaxis = list(title = "Number of Temperature °F", range = c(32, max(y))),
bargap = 0.05,
height = 500,
width = 800
)
## Warning: Specifying width/height in layout() is now deprecated.
## Please specify in ggplotly() or plot_ly()
fig <- fig %>% add_annotations(
text = "<b>GLOBAL LAND AND OCEAN TEMPERATURE</b>",
x = 0, xref = "paper",
y = 1.05, yref = "paper",
showarrow = FALSE,
font = list(size = 20),
align = "left"
)
fig <- fig %>% add_annotations(
text = "YEARLY TEMPERATURE ANOMALIES 1997 to 2022",
x = 0, xref = "paper",
y = 0.97, yref = "paper",
showarrow = FALSE,
font = list(size = 16),
align = "left"
)
fig
x <- df_rank$YEAR
y <- df_rank$`ANOMALY TEMP`
rank <- df_rank$'RANK'
hover_text <- paste("Year: ", x, "<br>ANOMALY TEMP: ", y, "<br>RANK: ", rank)
fig <- plot_ly(x = ~x, y = ~y, type = 'scatter', mode = 'lines', text = hover_text, textposition = 'top',
hoverinfo = 'text',
line = list(color = '#2e8bc0'))
fig <- fig %>% layout(
xaxis = list(title = "Year"),
yaxis = list(title = "Temperature °F", range = c(32, max(y))),
height = 500,
width = 800
)
## Warning: Specifying width/height in layout() is now deprecated.
## Please specify in ggplotly() or plot_ly()
fig <- fig %>% add_annotations(
text = "<b>GLOBAL LAND AND OCEAN TEMPERATURE</b>",
x = 0, xref = "paper",
y = 1.05, yref = "paper",
showarrow = FALSE,
font = list(size = 20),
align = "left"
)
fig <- fig %>% add_annotations(
text = "YEARLY TEMPERATURE ANOMALIES 1997 to 2022",
x = 0, xref = "paper",
y = 0.97, yref = "paper",
showarrow = FALSE,
font = list(size = 16),
align = "left"
)
fig
# reference: https://www.ncei.noaa.gov/access/monitoring/tornadoes/12/9?fatalities=false
df2 = read.csv("https://raw.githubusercontent.com/Meccamarshall/Data608/main/Story5/Tornado%20statistics.csv")
df2
## October.September.U.S..Tornadoes...denotes.preliminary.data. X
## 1 Date Tornadoes
## 2 195109 246
## 3 195209 255
## 4 195309 392
## 5 195409 556
## 6 195509 578
## 7 195609 505
## 8 195709 787
## 9 195809 624
## 10 195909 621
## 11 196009 608
## 12 196109 676
## 13 196209 704
## 14 196309 452
## 15 196409 677
## 16 196509 900
## 17 196609 582
## 18 196709 882
## 19 196809 676
## 20 196909 644
## 21 197009 633
## 22 197109 854
## 23 197209 789
## 24 197309 1008
## 25 197409 1040
## 26 197509 912
## 27 197609 897
## 28 197709 794
## 29 197809 815
## 30 197909 835
## 31 198009 889
## 32 198109 789
## 33 198209 964
## 34 198309 935
## 35 198409 949
## 36 198509 730
## 37 198609 757
## 38 198709 634
## 39 198809 612
## 40 198909 928
## 41 199009 1143
## 42 199109 1177
## 43 199209 1143
## 44 199309 1297
## 45 199409 1068
## 46 199509 1162
## 47 199609 1205
## 48 199709 1149
## 49 199809 1448
## 50 199909 1421
## 51 200009 972
## 52 200109 1101
## 53 200209 934
## 54 200309 1555
## 55 200409 1640
## 56 200509 1322
## 57 200609 1140
## 58 200709 1148
## 59 200809 1722
## 60 200909 1122
## 61 201009 1195
## 62 201109 1802
## 63 201209 923
## 64 201309 844
## 65 201409 929
## 66 201509 1071
## 67 201609 1109
## 68 201709 1389
## 69 201809 983
## 70 201909 1651
## 71 202009 1150
## 72 202109 984
## 73 202209 1387
## 74 202309 1393*
## X.1
## 1 Fatalities
## 2 35
## 3 233
## 4 470
## 5 81
## 6 131
## 7 85
## 8 147
## 9 109
## 10 62
## 11 45
## 12 52
## 13 31
## 14 31
## 15 49
## 16 319
## 17 98
## 18 106
## 19 141
## 20 69
## 21 68
## 22 163
## 23 34
## 24 76
## 25 376
## 26 64
## 27 45
## 28 40
## 29 51
## 30 82
## 31 34
## 32 25
## 33 57
## 34 36
## 35 122
## 36 96
## 37 18
## 38 42
## 39 34
## 40 30
## 41 84
## 42 41
## 43 11
## 44 135
## 45 45
## 46 37
## 47 26
## 48 72
## 49 128
## 50 94
## 51 31
## 52 32
## 53 28
## 54 97
## 55 29
## 56 17
## 57 83
## 58 87
## 59 130
## 60 22
## 61 37
## 62 557
## 63 75
## 64 45
## 65 51
## 66 16
## 67 38
## 68 41
## 69 6
## 70 42
## 71 80
## 72 13
## 73 106
## 74
df2_row<- df2[-c(1:47, 74), ]
df2_row
## October.September.U.S..Tornadoes...denotes.preliminary.data. X X.1
## 48 199709 1149 72
## 49 199809 1448 128
## 50 199909 1421 94
## 51 200009 972 31
## 52 200109 1101 32
## 53 200209 934 28
## 54 200309 1555 97
## 55 200409 1640 29
## 56 200509 1322 17
## 57 200609 1140 83
## 58 200709 1148 87
## 59 200809 1722 130
## 60 200909 1122 22
## 61 201009 1195 37
## 62 201109 1802 557
## 63 201209 923 75
## 64 201309 844 45
## 65 201409 929 51
## 66 201509 1071 16
## 67 201609 1109 38
## 68 201709 1389 41
## 69 201809 983 6
## 70 201909 1651 42
## 71 202009 1150 80
## 72 202109 984 13
## 73 202209 1387 106
colnames(df2_row) <- c("DATE", "TORNADOES", "FATALITIES")
df2_row
## DATE TORNADOES FATALITIES
## 48 199709 1149 72
## 49 199809 1448 128
## 50 199909 1421 94
## 51 200009 972 31
## 52 200109 1101 32
## 53 200209 934 28
## 54 200309 1555 97
## 55 200409 1640 29
## 56 200509 1322 17
## 57 200609 1140 83
## 58 200709 1148 87
## 59 200809 1722 130
## 60 200909 1122 22
## 61 201009 1195 37
## 62 201109 1802 557
## 63 201209 923 75
## 64 201309 844 45
## 65 201409 929 51
## 66 201509 1071 16
## 67 201609 1109 38
## 68 201709 1389 41
## 69 201809 983 6
## 70 201909 1651 42
## 71 202009 1150 80
## 72 202109 984 13
## 73 202209 1387 106
df2_index <- df2_row
rownames(df2_index) <- 1:nrow(df2_index)
df2_index
## DATE TORNADOES FATALITIES
## 1 199709 1149 72
## 2 199809 1448 128
## 3 199909 1421 94
## 4 200009 972 31
## 5 200109 1101 32
## 6 200209 934 28
## 7 200309 1555 97
## 8 200409 1640 29
## 9 200509 1322 17
## 10 200609 1140 83
## 11 200709 1148 87
## 12 200809 1722 130
## 13 200909 1122 22
## 14 201009 1195 37
## 15 201109 1802 557
## 16 201209 923 75
## 17 201309 844 45
## 18 201409 929 51
## 19 201509 1071 16
## 20 201609 1109 38
## 21 201709 1389 41
## 22 201809 983 6
## 23 201909 1651 42
## 24 202009 1150 80
## 25 202109 984 13
## 26 202209 1387 106
df2_index$Year <- substr(df2_index$DATE, 1, 4)
df2_index$DATE <- NULL
df2_index
## TORNADOES FATALITIES Year
## 1 1149 72 1997
## 2 1448 128 1998
## 3 1421 94 1999
## 4 972 31 2000
## 5 1101 32 2001
## 6 934 28 2002
## 7 1555 97 2003
## 8 1640 29 2004
## 9 1322 17 2005
## 10 1140 83 2006
## 11 1148 87 2007
## 12 1722 130 2008
## 13 1122 22 2009
## 14 1195 37 2010
## 15 1802 557 2011
## 16 923 75 2012
## 17 844 45 2013
## 18 929 51 2014
## 19 1071 16 2015
## 20 1109 38 2016
## 21 1389 41 2017
## 22 983 6 2018
## 23 1651 42 2019
## 24 1150 80 2020
## 25 984 13 2021
## 26 1387 106 2022
df2_col <- df2_index
df2_col <- df2_col[, c("Year", names(df2_col)[-which(names(df2_col) == "Year")])]
colnames(df2_col)[1] ="YEAR"
df2_col
## YEAR TORNADOES FATALITIES
## 1 1997 1149 72
## 2 1998 1448 128
## 3 1999 1421 94
## 4 2000 972 31
## 5 2001 1101 32
## 6 2002 934 28
## 7 2003 1555 97
## 8 2004 1640 29
## 9 2005 1322 17
## 10 2006 1140 83
## 11 2007 1148 87
## 12 2008 1722 130
## 13 2009 1122 22
## 14 2010 1195 37
## 15 2011 1802 557
## 16 2012 923 75
## 17 2013 844 45
## 18 2014 929 51
## 19 2015 1071 16
## 20 2016 1109 38
## 21 2017 1389 41
## 22 2018 983 6
## 23 2019 1651 42
## 24 2020 1150 80
## 25 2021 984 13
## 26 2022 1387 106
str(df2_col)
## 'data.frame': 26 obs. of 3 variables:
## $ YEAR : chr "1997" "1998" "1999" "2000" ...
## $ TORNADOES : chr "1149" "1448" "1421" "972" ...
## $ FATALITIES: chr "72" "128" "94" "31" ...
df2_col$`TORNADOES` <- as.numeric(df2_col$`TORNADOES`)
df2_col$'FATALITIES' <- as.numeric(df2_col$'FATALITIES')
str(df2_col)
## 'data.frame': 26 obs. of 3 variables:
## $ YEAR : chr "1997" "1998" "1999" "2000" ...
## $ TORNADOES : num 1149 1448 1421 972 1101 ...
## $ FATALITIES: num 72 128 94 31 32 28 97 29 17 83 ...
df2_rank <-df2_col
df2_rank$'TORNADOES RANK' <- rank(-df2_rank$`TORNADOES`)
df2_rank$'FATALITIES RANK' <- rank(-df2_rank$`FATALITIES`)
df2_rank <- df2_rank[, c(1:2, 4, 3, 5:ncol(df2_rank))]
df2_rank
## YEAR TORNADOES TORNADOES RANK FATALITIES FATALITIES RANK
## 1 1997 1149 13 72 11
## 2 1998 1448 6 128 3
## 3 1999 1421 7 94 6
## 4 2000 972 22 31 19
## 5 2001 1101 18 32 18
## 6 2002 934 23 28 21
## 7 2003 1555 5 97 5
## 8 2004 1640 4 29 20
## 9 2005 1322 10 17 23
## 10 2006 1140 15 83 8
## 11 2007 1148 14 87 7
## 12 2008 1722 2 130 2
## 13 2009 1122 16 22 22
## 14 2010 1195 11 37 17
## 15 2011 1802 1 557 1
## 16 2012 923 25 75 10
## 17 2013 844 26 45 13
## 18 2014 929 24 51 12
## 19 2015 1071 19 16 24
## 20 2016 1109 17 38 16
## 21 2017 1389 8 41 15
## 22 2018 983 21 6 26
## 23 2019 1651 3 42 14
## 24 2020 1150 12 80 9
## 25 2021 984 20 13 25
## 26 2022 1387 9 106 4
df2_table <- datatable(df2_rank)
df2_table
library(plotly)
x <- df2_rank$YEAR
y <- df2_rank$`TORNADOES`
rank <- df2_rank$'TORNADOES RANK'
hover_text <- paste("TORNADOES: ", y, "<br>YEAR: ", x, "<br>TORNADOES RANK: ", rank)
fig <- plot_ly(data = df2_rank, x = ~x, y = ~y, type = 'bar',
text = hover_text,
hoverinfo = 'text',
marker = list(color = '#f7b4da',
line = list(color = '#a5e39e', width = 1.5)))
fig <- fig %>% layout(
xaxis = list(title = "Year"),
yaxis = list(title = "Number of Tornadoes", range = c(32, max(y))),
bargap = 0.05,
height = 500,
width = 800
)
## Warning: Specifying width/height in layout() is now deprecated.
## Please specify in ggplotly() or plot_ly()
fig <- fig %>% add_annotations(
text = "<b>U.S. TORNADOES</b>",
x = 0, xref = "paper",
y = 1.05, yref = "paper",
showarrow = FALSE,
font = list(size = 20),
align = "left"
)
fig <- fig %>% add_annotations(
text = "1997 TO 2022",
x = 0, xref = "paper",
y = 0.97, yref = "paper",
showarrow = FALSE,
font = list(size = 16),
align = "left"
)
fig
x <- df2_rank$YEAR
y <- df2_rank$`TORNADOES`
rank <- df2_rank$'TORNADOES RANK'
hover_text <- paste("Year: ", x, "<br>Tornadoes: ", y, "<br>Tornadoes Rank: ", rank)
fig <- plot_ly(x = ~x, y = ~y, type = 'scatter', mode = 'lines', text = hover_text, textposition = 'top',
hoverinfo = 'text',
line = list(color = 'GREEN'))
fig <- fig %>% layout(
xaxis = list(title = "Year"),
yaxis = list(title = "Number of Tornadoes", range = c(32, max(y))),
height = 500,
width = 800
)
## Warning: Specifying width/height in layout() is now deprecated.
## Please specify in ggplotly() or plot_ly()
fig <- fig %>% add_annotations(
text = "<b>U.S. TORNADOES</b>",
x = 0, xref = "paper",
y = 1.05, yref = "paper",
showarrow = FALSE,
font = list(size = 20),
align = "left"
)
fig <- fig %>% add_annotations(
text = "1997 TO 2022",
x = 0, xref = "paper",
y = 0.97, yref = "paper",
showarrow = FALSE,
font = list(size = 16),
align = "left"
)
fig
x <- df2_rank$YEAR
y <- df2_rank$`FATALITIES`
rank <- df2_rank$'FATALITIES RANK'
hover_text <- paste("Year: ", x, "<br>Fatalities: ", y, "<br>Fatalities Rank: ", rank)
fig <- plot_ly(x = ~x, y = ~y, type = 'scatter', mode = 'lines', text = hover_text, textposition = 'top',
hoverinfo = 'text',
line = list(color = 'BLUE'))
fig <- fig %>% layout(
xaxis = list(title = "Year"),
yaxis = list(title = "Number of Fatalities", range = c(32, max(y))),
height = 500,
width = 800
)
## Warning: Specifying width/height in layout() is now deprecated.
## Please specify in ggplotly() or plot_ly()
fig <- fig %>% add_annotations(
text = "<b>U.S. FATALITIES FROM TORNADOES</b>",
x = 0, xref = "paper",
y = 1.05, yref = "paper",
showarrow = FALSE,
font = list(size = 20),
align = "left"
)
fig <- fig %>% add_annotations(
text = "1997 TO 2022",
x = 0, xref = "paper",
y = 0.97, yref = "paper",
showarrow = FALSE,
font = list(size = 16),
align = "left"
)
fig
# References: https://tropical.atmos.colostate.edu/Realtime/index.php?arch&loc=global
df3 = read.csv("https://raw.githubusercontent.com/Meccamarshall/Data608/main/Story5/Global%20Historical%20Tropical%20Cyclone.csv")
df3
## Year Named.Storms Named.Storm.Days Hurricanes Hurricanes.Days
## 1 1980 73 367.25 43 143.75
## 2 1981 82 363.75 45 125.75
## 3 1982 81 428.75 46 162.25
## 4 1983 79 369.50 42 150.00
## 5 1984 93 439.00 47 160.25
## 6 1985 95 455.25 51 163.50
## 7 1986 88 407.75 48 172.25
## 8 1987 83 400.75 39 133.75
## 9 1988 74 336.25 39 146.00
## 10 1989 91 440.00 55 199.25
## 11 1990 92 499.25 58 218.75
## 12 1991 79 433.00 47 188.25
## 13 1992 101 559.75 59 253.75
## 14 1993 79 394.25 49 164.00
## 15 1994 93 514.75 51 213.25
## 16 1995 80 408.75 49 179.25
## 17 1996 100 505.50 57 218.25
## 18 1997 97 535.25 58 220.25
## 19 1998 89 418.50 50 179.25
## 20 1999 74 317.50 39 135.50
## 21 2000 90 392.50 45 160.50
## 22 2001 88 373.50 51 162.75
## 23 2002 82 384.50 41 171.50
## 24 2003 85 418.00 50 175.00
## 25 2004 86 442.00 51 216.00
## 26 2005 96 428.75 51 189.50
## 27 2006 81 369.50 42 165.75
## 28 2007 80 303.50 44 118.75
## 29 2008 90 376.75 40 132.50
## 30 2009 85 324.75 38 115.25
## 31 2010 68 289.75 39 112.00
## 32 2011 75 335.50 39 121.00
## 33 2012 88 424.75 47 154.00
## 34 2013 90 353.25 46 127.75
## 35 2014 77 368.75 46 150.75
## 36 2015 95 500.50 54 221.00
## 37 2016 83 413.50 47 163.25
## 38 2017 84 354.75 43 135.75
## 39 2018 103 540.75 59 223.50
## 40 2019 98 449.00 55 172.25
## 41 2020 104 380.25 46 115.25
## 42 2021 94 354.75 37 119.00
## 43 2022 87 335.75 40 115.25
## Cat..3..Hurricanes Cat..3..Hurricanes.Days Accumulated.Cyclone.Energy
## 1 19 30.25 638.0
## 2 15 19.50 554.7
## 3 21 37.75 709.2
## 4 21 47.25 680.0
## 5 20 41.25 726.2
## 6 24 27.75 717.8
## 7 16 31.00 695.0
## 8 18 39.75 649.1
## 9 19 41.25 625.4
## 10 25 56.75 853.9
## 11 21 60.75 930.8
## 12 25 65.75 860.6
## 13 32 89.00 1163.1
## 14 24 43.75 710.4
## 15 31 80.50 1019.0
## 16 24 54.25 779.3
## 17 27 68.00 960.0
## 18 28 87.75 1099.2
## 19 21 46.00 773.1
## 20 21 46.50 606.4
## 21 20 39.25 677.3
## 22 24 38.50 672.4
## 23 27 69.50 812.0
## 24 25 68.00 833.0
## 25 32 99.00 1024.4
## 26 27 79.50 899.6
## 27 27 59.25 761.0
## 28 22 41.75 568.1
## 29 24 33.25 613.9
## 30 21 49.00 609.6
## 31 19 38.75 526.8
## 32 21 36.50 573.8
## 33 24 47.50 740.5
## 34 22 37.00 618.5
## 35 26 54.50 724.0
## 36 39 88.00 1047.0
## 37 26 58.75 806.5
## 38 20 34.25 621.1
## 39 33 91.00 1108.4
## 40 35 64.50 854.8
## 41 24 35.50 599.1
## 42 16 49.00 621.1
## 43 17 36.25 559.6
df3_row<- df3[-c(1:17), ]
df3_row
## Year Named.Storms Named.Storm.Days Hurricanes Hurricanes.Days
## 18 1997 97 535.25 58 220.25
## 19 1998 89 418.50 50 179.25
## 20 1999 74 317.50 39 135.50
## 21 2000 90 392.50 45 160.50
## 22 2001 88 373.50 51 162.75
## 23 2002 82 384.50 41 171.50
## 24 2003 85 418.00 50 175.00
## 25 2004 86 442.00 51 216.00
## 26 2005 96 428.75 51 189.50
## 27 2006 81 369.50 42 165.75
## 28 2007 80 303.50 44 118.75
## 29 2008 90 376.75 40 132.50
## 30 2009 85 324.75 38 115.25
## 31 2010 68 289.75 39 112.00
## 32 2011 75 335.50 39 121.00
## 33 2012 88 424.75 47 154.00
## 34 2013 90 353.25 46 127.75
## 35 2014 77 368.75 46 150.75
## 36 2015 95 500.50 54 221.00
## 37 2016 83 413.50 47 163.25
## 38 2017 84 354.75 43 135.75
## 39 2018 103 540.75 59 223.50
## 40 2019 98 449.00 55 172.25
## 41 2020 104 380.25 46 115.25
## 42 2021 94 354.75 37 119.00
## 43 2022 87 335.75 40 115.25
## Cat..3..Hurricanes Cat..3..Hurricanes.Days Accumulated.Cyclone.Energy
## 18 28 87.75 1099.2
## 19 21 46.00 773.1
## 20 21 46.50 606.4
## 21 20 39.25 677.3
## 22 24 38.50 672.4
## 23 27 69.50 812.0
## 24 25 68.00 833.0
## 25 32 99.00 1024.4
## 26 27 79.50 899.6
## 27 27 59.25 761.0
## 28 22 41.75 568.1
## 29 24 33.25 613.9
## 30 21 49.00 609.6
## 31 19 38.75 526.8
## 32 21 36.50 573.8
## 33 24 47.50 740.5
## 34 22 37.00 618.5
## 35 26 54.50 724.0
## 36 39 88.00 1047.0
## 37 26 58.75 806.5
## 38 20 34.25 621.1
## 39 33 91.00 1108.4
## 40 35 64.50 854.8
## 41 24 35.50 599.1
## 42 16 49.00 621.1
## 43 17 36.25 559.6
colnames(df3_row) <- c("YEAR", "NAMED STORMS", "NAME STORM DAYS", "HURRICAINES", "HURRICAINES DAYS", "CAT 3 AND ABOVE HURRICAINES", "CAT 3 AND ABOVE HURRICAINES DAYS", "ACCUMULATED CYCLONE ENERGY")
df3_row
## YEAR NAMED STORMS NAME STORM DAYS HURRICAINES HURRICAINES DAYS
## 18 1997 97 535.25 58 220.25
## 19 1998 89 418.50 50 179.25
## 20 1999 74 317.50 39 135.50
## 21 2000 90 392.50 45 160.50
## 22 2001 88 373.50 51 162.75
## 23 2002 82 384.50 41 171.50
## 24 2003 85 418.00 50 175.00
## 25 2004 86 442.00 51 216.00
## 26 2005 96 428.75 51 189.50
## 27 2006 81 369.50 42 165.75
## 28 2007 80 303.50 44 118.75
## 29 2008 90 376.75 40 132.50
## 30 2009 85 324.75 38 115.25
## 31 2010 68 289.75 39 112.00
## 32 2011 75 335.50 39 121.00
## 33 2012 88 424.75 47 154.00
## 34 2013 90 353.25 46 127.75
## 35 2014 77 368.75 46 150.75
## 36 2015 95 500.50 54 221.00
## 37 2016 83 413.50 47 163.25
## 38 2017 84 354.75 43 135.75
## 39 2018 103 540.75 59 223.50
## 40 2019 98 449.00 55 172.25
## 41 2020 104 380.25 46 115.25
## 42 2021 94 354.75 37 119.00
## 43 2022 87 335.75 40 115.25
## CAT 3 AND ABOVE HURRICAINES CAT 3 AND ABOVE HURRICAINES DAYS
## 18 28 87.75
## 19 21 46.00
## 20 21 46.50
## 21 20 39.25
## 22 24 38.50
## 23 27 69.50
## 24 25 68.00
## 25 32 99.00
## 26 27 79.50
## 27 27 59.25
## 28 22 41.75
## 29 24 33.25
## 30 21 49.00
## 31 19 38.75
## 32 21 36.50
## 33 24 47.50
## 34 22 37.00
## 35 26 54.50
## 36 39 88.00
## 37 26 58.75
## 38 20 34.25
## 39 33 91.00
## 40 35 64.50
## 41 24 35.50
## 42 16 49.00
## 43 17 36.25
## ACCUMULATED CYCLONE ENERGY
## 18 1099.2
## 19 773.1
## 20 606.4
## 21 677.3
## 22 672.4
## 23 812.0
## 24 833.0
## 25 1024.4
## 26 899.6
## 27 761.0
## 28 568.1
## 29 613.9
## 30 609.6
## 31 526.8
## 32 573.8
## 33 740.5
## 34 618.5
## 35 724.0
## 36 1047.0
## 37 806.5
## 38 621.1
## 39 1108.4
## 40 854.8
## 41 599.1
## 42 621.1
## 43 559.6
df3_index <- df3_row # Duplicate data
rownames(df3_index) <- 1:nrow(df3_index) # Assign sequence to row names
df3_index
## YEAR NAMED STORMS NAME STORM DAYS HURRICAINES HURRICAINES DAYS
## 1 1997 97 535.25 58 220.25
## 2 1998 89 418.50 50 179.25
## 3 1999 74 317.50 39 135.50
## 4 2000 90 392.50 45 160.50
## 5 2001 88 373.50 51 162.75
## 6 2002 82 384.50 41 171.50
## 7 2003 85 418.00 50 175.00
## 8 2004 86 442.00 51 216.00
## 9 2005 96 428.75 51 189.50
## 10 2006 81 369.50 42 165.75
## 11 2007 80 303.50 44 118.75
## 12 2008 90 376.75 40 132.50
## 13 2009 85 324.75 38 115.25
## 14 2010 68 289.75 39 112.00
## 15 2011 75 335.50 39 121.00
## 16 2012 88 424.75 47 154.00
## 17 2013 90 353.25 46 127.75
## 18 2014 77 368.75 46 150.75
## 19 2015 95 500.50 54 221.00
## 20 2016 83 413.50 47 163.25
## 21 2017 84 354.75 43 135.75
## 22 2018 103 540.75 59 223.50
## 23 2019 98 449.00 55 172.25
## 24 2020 104 380.25 46 115.25
## 25 2021 94 354.75 37 119.00
## 26 2022 87 335.75 40 115.25
## CAT 3 AND ABOVE HURRICAINES CAT 3 AND ABOVE HURRICAINES DAYS
## 1 28 87.75
## 2 21 46.00
## 3 21 46.50
## 4 20 39.25
## 5 24 38.50
## 6 27 69.50
## 7 25 68.00
## 8 32 99.00
## 9 27 79.50
## 10 27 59.25
## 11 22 41.75
## 12 24 33.25
## 13 21 49.00
## 14 19 38.75
## 15 21 36.50
## 16 24 47.50
## 17 22 37.00
## 18 26 54.50
## 19 39 88.00
## 20 26 58.75
## 21 20 34.25
## 22 33 91.00
## 23 35 64.50
## 24 24 35.50
## 25 16 49.00
## 26 17 36.25
## ACCUMULATED CYCLONE ENERGY
## 1 1099.2
## 2 773.1
## 3 606.4
## 4 677.3
## 5 672.4
## 6 812.0
## 7 833.0
## 8 1024.4
## 9 899.6
## 10 761.0
## 11 568.1
## 12 613.9
## 13 609.6
## 14 526.8
## 15 573.8
## 16 740.5
## 17 618.5
## 18 724.0
## 19 1047.0
## 20 806.5
## 21 621.1
## 22 1108.4
## 23 854.8
## 24 599.1
## 25 621.1
## 26 559.6
str(df3_index)
## 'data.frame': 26 obs. of 8 variables:
## $ YEAR : int 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 ...
## $ NAMED STORMS : int 97 89 74 90 88 82 85 86 96 81 ...
## $ NAME STORM DAYS : num 535 418 318 392 374 ...
## $ HURRICAINES : int 58 50 39 45 51 41 50 51 51 42 ...
## $ HURRICAINES DAYS : num 220 179 136 160 163 ...
## $ CAT 3 AND ABOVE HURRICAINES : int 28 21 21 20 24 27 25 32 27 27 ...
## $ CAT 3 AND ABOVE HURRICAINES DAYS: num 87.8 46 46.5 39.2 38.5 ...
## $ ACCUMULATED CYCLONE ENERGY : num 1099 773 606 677 672 ...
df3_rank <- df3_index
df3_rank$'YEAR' <- as.character(df3_rank$'YEAR')
df3_rank$`NAMED STORMS` <- as.numeric(df3_rank$`NAMED STORMS`)
df3_rank$'HURRICAINES' <- as.numeric(df3_rank$'HURRICAINES')
df3_rank$'CAT 3 AND ABOVE HURRICAINES' <- as.numeric(df3_rank$'CAT 3 AND ABOVE HURRICAINES')
str(df3_rank)
## 'data.frame': 26 obs. of 8 variables:
## $ YEAR : chr "1997" "1998" "1999" "2000" ...
## $ NAMED STORMS : num 97 89 74 90 88 82 85 86 96 81 ...
## $ NAME STORM DAYS : num 535 418 318 392 374 ...
## $ HURRICAINES : num 58 50 39 45 51 41 50 51 51 42 ...
## $ HURRICAINES DAYS : num 220 179 136 160 163 ...
## $ CAT 3 AND ABOVE HURRICAINES : num 28 21 21 20 24 27 25 32 27 27 ...
## $ CAT 3 AND ABOVE HURRICAINES DAYS: num 87.8 46 46.5 39.2 38.5 ...
## $ ACCUMULATED CYCLONE ENERGY : num 1099 773 606 677 672 ...
df3_rank$'NAMED STORMS RANK' <- rank(-df3_index$`NAMED STORMS`)
df3_rank$'HURRICAINES RANK' <- rank(-df3_index$`HURRICAINES`)
df3_rank$'CAT 3 AND ABOVE HURRICAINES RANK' <- rank(-df3_index$'CAT 3 AND ABOVE HURRICAINES')
df3_rank$'ACCUMULATED CYCLONE ENERGY RANK' <- rank(-df3_index$'ACCUMULATED CYCLONE ENERGY')
df3_rank <- df3_rank[, c(1:2, 9, 3:4, 10, 5:6, 11, 7:8, 12:ncol(df3_rank))]
df3_rank
## YEAR NAMED STORMS NAMED STORMS RANK NAME STORM DAYS HURRICAINES
## 1 1997 97 4.0 535.25 58
## 2 1998 89 11.0 418.50 50
## 3 1999 74 25.0 317.50 39
## 4 2000 90 9.0 392.50 45
## 5 2001 88 12.5 373.50 51
## 6 2002 82 20.0 384.50 41
## 7 2003 85 16.5 418.00 50
## 8 2004 86 15.0 442.00 51
## 9 2005 96 5.0 428.75 51
## 10 2006 81 21.0 369.50 42
## 11 2007 80 22.0 303.50 44
## 12 2008 90 9.0 376.75 40
## 13 2009 85 16.5 324.75 38
## 14 2010 68 26.0 289.75 39
## 15 2011 75 24.0 335.50 39
## 16 2012 88 12.5 424.75 47
## 17 2013 90 9.0 353.25 46
## 18 2014 77 23.0 368.75 46
## 19 2015 95 6.0 500.50 54
## 20 2016 83 19.0 413.50 47
## 21 2017 84 18.0 354.75 43
## 22 2018 103 2.0 540.75 59
## 23 2019 98 3.0 449.00 55
## 24 2020 104 1.0 380.25 46
## 25 2021 94 7.0 354.75 37
## 26 2022 87 14.0 335.75 40
## HURRICAINES RANK HURRICAINES DAYS CAT 3 AND ABOVE HURRICAINES
## 1 2.0 220.25 28
## 2 8.5 179.25 21
## 3 23.0 135.50 21
## 4 15.0 160.50 20
## 5 6.0 162.75 24
## 6 19.0 171.50 27
## 7 8.5 175.00 25
## 8 6.0 216.00 32
## 9 6.0 189.50 27
## 10 18.0 165.75 27
## 11 16.0 118.75 22
## 12 20.5 132.50 24
## 13 25.0 115.25 21
## 14 23.0 112.00 19
## 15 23.0 121.00 21
## 16 10.5 154.00 24
## 17 13.0 127.75 22
## 18 13.0 150.75 26
## 19 4.0 221.00 39
## 20 10.5 163.25 26
## 21 17.0 135.75 20
## 22 1.0 223.50 33
## 23 3.0 172.25 35
## 24 13.0 115.25 24
## 25 26.0 119.00 16
## 26 20.5 115.25 17
## CAT 3 AND ABOVE HURRICAINES RANK CAT 3 AND ABOVE HURRICAINES DAYS
## 1 5.0 87.75
## 2 19.5 46.00
## 3 19.5 46.50
## 4 22.5 39.25
## 5 13.5 38.50
## 6 7.0 69.50
## 7 11.0 68.00
## 8 4.0 99.00
## 9 7.0 79.50
## 10 7.0 59.25
## 11 16.5 41.75
## 12 13.5 33.25
## 13 19.5 49.00
## 14 24.0 38.75
## 15 19.5 36.50
## 16 13.5 47.50
## 17 16.5 37.00
## 18 9.5 54.50
## 19 1.0 88.00
## 20 9.5 58.75
## 21 22.5 34.25
## 22 3.0 91.00
## 23 2.0 64.50
## 24 13.5 35.50
## 25 26.0 49.00
## 26 25.0 36.25
## ACCUMULATED CYCLONE ENERGY ACCUMULATED CYCLONE ENERGY RANK
## 1 1099.2 2.0
## 2 773.1 10.0
## 3 606.4 21.0
## 4 677.3 14.0
## 5 672.4 15.0
## 6 812.0 8.0
## 7 833.0 7.0
## 8 1024.4 4.0
## 9 899.6 5.0
## 10 761.0 11.0
## 11 568.1 24.0
## 12 613.9 19.0
## 13 609.6 20.0
## 14 526.8 26.0
## 15 573.8 23.0
## 16 740.5 12.0
## 17 618.5 18.0
## 18 724.0 13.0
## 19 1047.0 3.0
## 20 806.5 9.0
## 21 621.1 16.5
## 22 1108.4 1.0
## 23 854.8 6.0
## 24 599.1 22.0
## 25 621.1 16.5
## 26 559.6 25.0
df3_table <- datatable(df3_rank)
df3_table
library(ggplot2)
library(ggrepel)
# Your existing ggplot code
p1 <- ggplot(df3_rank, aes(x = YEAR, y = HURRICAINES, label = HURRICAINES)) +
geom_point(color = "#ffa3b1") +
geom_text_repel(data = df3_rank[!is.na(df3_rank$YEAR), , ]) +
geom_segment(
color = "#ffa3b1",
aes(
xend = c(tail(YEAR, n = -1), NA),
yend = c(tail(HURRICAINES, n = -1), NA)
),
arrow = arrow(length = unit(0.3, "cm"))
) +
labs(x = "Year", y = "Number of Hurricaines") +
theme(legend.position = "none")
# Rotate year labels by 45 degrees
p1 <- p1 + theme(axis.text.x = element_text(angle = 45, hjust = 1))
# Adjust height and width
p1 <- p1 + theme(
plot.background = element_rect(fill = "white"),
plot.margin = margin(20, 20, 20, 20)
)
# Add title and subtitle
p1 <- p1 + labs(
title = "HURRICAINES PER YEAR",
subtitle = "1997 to 2022"
)
# Align title to the left
p1 <- p1 + theme(
plot.title = element_text(hjust = 0)
)
# Change plot dimensions
p1 <- p1 + theme(
plot.background = element_rect(fill = "white"),
plot.margin = margin(20, 20, 20, 20)
)
# Print the modified plot
p1
## Warning: Removed 1 rows containing missing values (`geom_segment()`).
# Load necessary libraries if not loaded
library(ggplot2)
library(dplyr)
library(tidyr)
# Assuming your data is named df3_rank and has the structure mentioned
# Create a new variable "Category" for faceting
df3_rank <- df3_rank %>%
pivot_longer(cols = c("NAMED STORMS", "HURRICAINES", "CAT 3 AND ABOVE HURRICAINES"),
names_to = "Category", values_to = "Count")
# Define the order of the facets
category_order <- c("NAMED STORMS", "HURRICAINES", "CAT 3 AND ABOVE HURRICAINES")
# Reorder the levels of the "Category" factor
df3_rank$Category <- factor(df3_rank$Category, levels = category_order)
# Plot the data using facets and add connecting lines
p <- ggplot(df3_rank, aes(x = YEAR, y = Count, color = Category, group = Category)) +
geom_point() +
geom_line() +
facet_wrap(~Category, scales = "free_y", nrow = 3) +
labs(x = "Year", y = "Count") +
theme_minimal() +
theme(legend.position = "bottom") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# Add title and subtitle
p <- p + labs(
title = "Meteorological Statistics Over the Years",
subtitle = "Yearly counts of meteorological events from 1997 to 2022"
)
# Set custom colors for the lines
p <- p + scale_color_manual(values = c("NAMED STORMS" = "#e8e0ff", "HURRICAINES" = "#cbe4ff", "CAT 3 AND ABOVE HURRICAINES" = "#bcbce4"))
# Print the modified plot
print(p)