[Github repo for the project] (https://github.com/harishmani09/RepData_PeerAssignment2)
this is analysis of the storm database by NOAA. This is required for fulfillment of Project 2, Reproducible Research, data science course from Johns Hopkins University. The objective of the EDA is to study the weather events and find out which event types are most harmful for with respect to population health and which weather events cause max economic losses
Data is a available from url: url
Download the raw data and load it in a dataframe in R studio
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.4
## ── 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(data.table)
##
## Attaching package: 'data.table'
##
## The following objects are masked from 'package:lubridate':
##
## hour, isoweek, mday, minute, month, quarter, second, wday, week,
## yday, year
##
## The following objects are masked from 'package:dplyr':
##
## between, first, last
##
## The following object is masked from 'package:purrr':
##
## transpose
library(R.utils)
## Loading required package: R.oo
## Loading required package: R.methodsS3
## R.methodsS3 v1.8.2 (2022-06-13 22:00:14 UTC) successfully loaded. See ?R.methodsS3 for help.
## R.oo v1.27.0 (2024-11-01 18:00:02 UTC) successfully loaded. See ?R.oo for help.
##
## Attaching package: 'R.oo'
##
## The following object is masked from 'package:R.methodsS3':
##
## throw
##
## The following objects are masked from 'package:methods':
##
## getClasses, getMethods
##
## The following objects are masked from 'package:base':
##
## attach, detach, load, save
##
## R.utils v2.13.0 (2025-02-24 21:20:02 UTC) successfully loaded. See ?R.utils for help.
##
## Attaching package: 'R.utils'
##
## The following object is masked from 'package:tidyr':
##
## extract
##
## The following object is masked from 'package:utils':
##
## timestamp
##
## The following objects are masked from 'package:base':
##
## cat, commandArgs, getOption, isOpen, nullfile, parse, use, warnings
library(lubridate)
#download the file from the given url
if (!file.exists('StormData.csv.bz2')){
url <- "https://d396qusza40orc.cloudfront.net/repdata%2Fdata%2FStormData.csv.bz2"
download.file(url,'StormData.csv.bz2')
bunzip2('StormData.csv.bz2','stormData.csv',remove=FALSE)
}
#read the file in r
data <- read_csv('stormData.csv')
## Rows: 902297 Columns: 37
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (18): BGN_DATE, BGN_TIME, TIME_ZONE, COUNTYNAME, STATE, EVTYPE, BGN_AZI,...
## dbl (18): STATE__, COUNTY, BGN_RANGE, COUNTY_END, END_RANGE, LENGTH, WIDTH, ...
## lgl (1): COUNTYENDN
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
#examine data using names and glimpse functions
names(data)
## [1] "STATE__" "BGN_DATE" "BGN_TIME" "TIME_ZONE" "COUNTY"
## [6] "COUNTYNAME" "STATE" "EVTYPE" "BGN_RANGE" "BGN_AZI"
## [11] "BGN_LOCATI" "END_DATE" "END_TIME" "COUNTY_END" "COUNTYENDN"
## [16] "END_RANGE" "END_AZI" "END_LOCATI" "LENGTH" "WIDTH"
## [21] "F" "MAG" "FATALITIES" "INJURIES" "PROPDMG"
## [26] "PROPDMGEXP" "CROPDMG" "CROPDMGEXP" "WFO" "STATEOFFIC"
## [31] "ZONENAMES" "LATITUDE" "LONGITUDE" "LATITUDE_E" "LONGITUDE_"
## [36] "REMARKS" "REFNUM"
glimpse(data)
## Rows: 902,297
## Columns: 37
## $ STATE__ <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ BGN_DATE <chr> "4/18/1950 0:00:00", "4/18/1950 0:00:00", "2/20/1951 0:00:0…
## $ BGN_TIME <chr> "0130", "0145", "1600", "0900", "1500", "2000", "0100", "09…
## $ TIME_ZONE <chr> "CST", "CST", "CST", "CST", "CST", "CST", "CST", "CST", "CS…
## $ COUNTY <dbl> 97, 3, 57, 89, 43, 77, 9, 123, 125, 57, 43, 9, 73, 49, 107,…
## $ COUNTYNAME <chr> "MOBILE", "BALDWIN", "FAYETTE", "MADISON", "CULLMAN", "LAUD…
## $ STATE <chr> "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL",…
## $ EVTYPE <chr> "TORNADO", "TORNADO", "TORNADO", "TORNADO", "TORNADO", "TOR…
## $ BGN_RANGE <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ BGN_AZI <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ BGN_LOCATI <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ END_DATE <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ END_TIME <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ COUNTY_END <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ COUNTYENDN <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ END_RANGE <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ END_AZI <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ END_LOCATI <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ LENGTH <dbl> 14.0, 2.0, 0.1, 0.0, 0.0, 1.5, 1.5, 0.0, 3.3, 2.3, 1.3, 4.7…
## $ WIDTH <dbl> 100, 150, 123, 100, 150, 177, 33, 33, 100, 100, 400, 400, 2…
## $ F <dbl> 3, 2, 2, 2, 2, 2, 2, 1, 3, 3, 1, 1, 3, 3, 3, 4, 1, 1, 1, 1,…
## $ MAG <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ FATALITIES <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0,…
## $ INJURIES <dbl> 15, 0, 2, 2, 2, 6, 1, 0, 14, 0, 3, 3, 26, 12, 6, 50, 2, 0, …
## $ PROPDMG <dbl> 25.0, 2.5, 25.0, 2.5, 2.5, 2.5, 2.5, 2.5, 25.0, 25.0, 2.5, …
## $ PROPDMGEXP <chr> "K", "K", "K", "K", "K", "K", "K", "K", "K", "K", "M", "M",…
## $ CROPDMG <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ CROPDMGEXP <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ WFO <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ STATEOFFIC <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ ZONENAMES <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ LATITUDE <dbl> 3040, 3042, 3340, 3458, 3412, 3450, 3405, 3255, 3334, 3336,…
## $ LONGITUDE <dbl> 8812, 8755, 8742, 8626, 8642, 8748, 8631, 8558, 8740, 8738,…
## $ LATITUDE_E <dbl> 3051, 0, 0, 0, 0, 0, 0, 0, 3336, 3337, 3402, 3404, 0, 3432,…
## $ LONGITUDE_ <dbl> 8806, 0, 0, 0, 0, 0, 0, 0, 8738, 8737, 8644, 8640, 0, 8540,…
## $ REMARKS <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ REFNUM <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, …
We convert event time from character to date time and change EVTYPE and State to factor for our analysis
storm_data <- data |>
mutate(BGN_DATE = mdy_hms(BGN_DATE)) |>
mutate(EVTYPE = as.factor(EVTYPE)) |>
mutate(STATE = as.factor(STATE)) |>
glimpse()
## Rows: 902,297
## Columns: 37
## $ STATE__ <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ BGN_DATE <dttm> 1950-04-18, 1950-04-18, 1951-02-20, 1951-06-08, 1951-11-15…
## $ BGN_TIME <chr> "0130", "0145", "1600", "0900", "1500", "2000", "0100", "09…
## $ TIME_ZONE <chr> "CST", "CST", "CST", "CST", "CST", "CST", "CST", "CST", "CS…
## $ COUNTY <dbl> 97, 3, 57, 89, 43, 77, 9, 123, 125, 57, 43, 9, 73, 49, 107,…
## $ COUNTYNAME <chr> "MOBILE", "BALDWIN", "FAYETTE", "MADISON", "CULLMAN", "LAUD…
## $ STATE <fct> AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,…
## $ EVTYPE <fct> "TORNADO", "TORNADO", "TORNADO", "TORNADO", "TORNADO", "TOR…
## $ BGN_RANGE <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ BGN_AZI <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ BGN_LOCATI <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ END_DATE <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ END_TIME <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ COUNTY_END <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ COUNTYENDN <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ END_RANGE <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ END_AZI <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ END_LOCATI <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ LENGTH <dbl> 14.0, 2.0, 0.1, 0.0, 0.0, 1.5, 1.5, 0.0, 3.3, 2.3, 1.3, 4.7…
## $ WIDTH <dbl> 100, 150, 123, 100, 150, 177, 33, 33, 100, 100, 400, 400, 2…
## $ F <dbl> 3, 2, 2, 2, 2, 2, 2, 1, 3, 3, 1, 1, 3, 3, 3, 4, 1, 1, 1, 1,…
## $ MAG <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ FATALITIES <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0,…
## $ INJURIES <dbl> 15, 0, 2, 2, 2, 6, 1, 0, 14, 0, 3, 3, 26, 12, 6, 50, 2, 0, …
## $ PROPDMG <dbl> 25.0, 2.5, 25.0, 2.5, 2.5, 2.5, 2.5, 2.5, 25.0, 25.0, 2.5, …
## $ PROPDMGEXP <chr> "K", "K", "K", "K", "K", "K", "K", "K", "K", "K", "M", "M",…
## $ CROPDMG <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ CROPDMGEXP <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ WFO <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ STATEOFFIC <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ ZONENAMES <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ LATITUDE <dbl> 3040, 3042, 3340, 3458, 3412, 3450, 3405, 3255, 3334, 3336,…
## $ LONGITUDE <dbl> 8812, 8755, 8742, 8626, 8642, 8748, 8631, 8558, 8740, 8738,…
## $ LATITUDE_E <dbl> 3051, 0, 0, 0, 0, 0, 0, 0, 3336, 3337, 3402, 3404, 0, 3432,…
## $ LONGITUDE_ <dbl> 8806, 0, 0, 0, 0, 0, 0, 0, 8738, 8737, 8644, 8640, 0, 8540,…
## $ REMARKS <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ REFNUM <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, …
#some quick summaries
summary(storm_data$FATALITIES)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0000 0.0000 0.0000 0.0168 0.0000 583.0000
summary(storm_data$INJURIES)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0000 0.0000 0.0000 0.1557 0.0000 1700.0000
summary(storm_data$PROPDMG)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 0.00 0.00 12.06 0.50 5000.00
summary(storm_data$CROPDMG)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 0.000 0.000 1.527 0.000 990.000
damage_data <- storm_data |>
group_by(EVTYPE) |>
summarise(
FATALITIES = sum(FATALITIES),
INJURIES = sum(INJURIES)
) |>
arrange(desc(FATALITIES)) |>
slice(1:10) |>
print()
## # A tibble: 10 × 3
## EVTYPE FATALITIES INJURIES
## <fct> <dbl> <dbl>
## 1 TORNADO 5633 91346
## 2 EXCESSIVE HEAT 1903 6525
## 3 FLASH FLOOD 978 1777
## 4 HEAT 937 2100
## 5 LIGHTNING 816 5230
## 6 TSTM WIND 504 6957
## 7 FLOOD 470 6789
## 8 RIP CURRENT 368 232
## 9 HIGH WIND 248 1137
## 10 AVALANCHE 224 170
damage_data_lg <- damage_data |>
pivot_longer(
cols=!EVTYPE,
names_to = 'harm_type',
values_to = 'count'
)
damage_data_lg |> ggplot(aes(x=EVTYPE,y=count,fill = harm_type)) +
geom_col() + theme(axis.text.x = element_text(angle = 90,color='red',face='bold')) +
labs(
title='Top 10 events with maximum casualities',
x='Event Type',
y='Incidents',
caption='Storm Data from NOAA from 1990 onwards'
)
#tornados are the biggest culprint and cause maximum casualtities.
tornado_data <- data |>
filter(EVTYPE=='TORNADO') |>
mutate(BGN_DATE = mdy_hms(BGN_DATE)) |>
mutate(BGN_DATE = year(BGN_DATE))|>
group_by(BGN_DATE) |>
summarise(FATALITIES = sum(FATALITIES),
INJURIES=sum(INJURIES)) |>
print()
## # A tibble: 62 × 3
## BGN_DATE FATALITIES INJURIES
## <int> <dbl> <dbl>
## 1 1950 70 659
## 2 1951 34 524
## 3 1952 230 1915
## 4 1953 519 5131
## 5 1954 36 715
## 6 1955 129 926
## 7 1956 83 1355
## 8 1957 193 1976
## 9 1958 67 535
## 10 1959 58 734
## # ℹ 52 more rows
tornado_data_longer <- tornado_data |>
pivot_longer(
cols=!BGN_DATE,
names_to = 'harm_type',
values_to = 'count') |>
print()
## # A tibble: 124 × 3
## BGN_DATE harm_type count
## <int> <chr> <dbl>
## 1 1950 FATALITIES 70
## 2 1950 INJURIES 659
## 3 1951 FATALITIES 34
## 4 1951 INJURIES 524
## 5 1952 FATALITIES 230
## 6 1952 INJURIES 1915
## 7 1953 FATALITIES 519
## 8 1953 INJURIES 5131
## 9 1954 FATALITIES 36
## 10 1954 INJURIES 715
## # ℹ 114 more rows
tornado_data_longer |>
ggplot(aes(x=BGN_DATE, y=count,fill=harm_type)) +
geom_smooth(method='auto') +
facet_grid(rows=vars(harm_type)) +
theme(axis.text.x = element_text(angle=90)) +
labs(x='Year',y='Incidents',title='Casulaties per year due to tornado')
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
#fatalites and injuries from tornado seem to be rising over the years
we now caculate the damages to property and crop due to event type. Tornado clearly seems to have caused the most damage to property
#we filter out colmn which we require for analysis
data_sub <- data |>
select(EVTYPE,FATALITIES,INJURIES, PROPDMG,PROPDMGEXP,CROPDMG,CROPDMGEXP)
unique(data$PROPDMGEXP)
## [1] "K" "M" NA "B" "m" "+" "0" "5" "6" "?" "4" "2" "3" "h" "7" "H" "-" "1" "8"
#we create a mapping vector to correctly map the property and crop exp with the figures as expenses are coded in thds,millions or billions etc
mapping_vec <- c("K"=1000,"k"=1000,'M'=1e6,'m'=1e6,'h'=100,'H'=100,'B'=1e9,'b'=1e9,'+'=0,'?'=0,'-'=0,"0"=0,'1'=1*10,'2'=2*10,'3'=3*10,'4'=4*10,'5'=5*10,'6'=6*10,'7'=7*10,'8'=10*8,'9'=9*10)
#getting the correct damage figure
data_sub <- data_sub |>
mutate(
property_damage = mapping_vec[data$PROPDMGEXP],
crop_damage = mapping_vec[data$CROPDMGEXP],
prop_dmg = PROPDMG*property_damage,
crop_dmg = CROPDMG*crop_damage,
na.rm=TRUE
) |>
print()
## # A tibble: 902,297 × 12
## EVTYPE FATALITIES INJURIES PROPDMG PROPDMGEXP CROPDMG CROPDMGEXP
## <chr> <dbl> <dbl> <dbl> <chr> <dbl> <chr>
## 1 TORNADO 0 15 25 K 0 <NA>
## 2 TORNADO 0 0 2.5 K 0 <NA>
## 3 TORNADO 0 2 25 K 0 <NA>
## 4 TORNADO 0 2 2.5 K 0 <NA>
## 5 TORNADO 0 2 2.5 K 0 <NA>
## 6 TORNADO 0 6 2.5 K 0 <NA>
## 7 TORNADO 0 1 2.5 K 0 <NA>
## 8 TORNADO 0 0 2.5 K 0 <NA>
## 9 TORNADO 1 14 25 K 0 <NA>
## 10 TORNADO 0 0 25 K 0 <NA>
## # ℹ 902,287 more rows
## # ℹ 5 more variables: property_damage <dbl>, crop_damage <dbl>, prop_dmg <dbl>,
## # crop_dmg <dbl>, na.rm <lgl>
#getting the top damage causing event types
economic_loss_storm <- data_sub |>
mutate(EVTYPE=as.factor(EVTYPE)) |>
group_by(EVTYPE) |>
summarise(prop_dmg=sum(prop_dmg),
crop_dmg=sum(crop_dmg),
total_damage=prop_dmg+crop_dmg
) |>
arrange(desc(total_damage)) |>
slice(1:10) |>
print()
## # A tibble: 10 × 4
## EVTYPE prop_dmg crop_dmg total_damage
## <fct> <dbl> <dbl> <dbl>
## 1 TORNADOES, TSTM WIND, HAIL 1600000000 2500000 1602500000
## 2 HIGH WINDS/COLD 110500000 7000000 117500000
## 3 HURRICANE OPAL/HIGH WINDS 100000000 10000000 110000000
## 4 WINTER STORM HIGH WINDS 60000000 5000000 65000000
## 5 Heavy Rain/High Surf 13500000 1500000 15000000
## 6 LAKESHORE FLOOD 7540000 0 7540000
## 7 HIGH WINDS HEAVY RAINS 7500000 10000 7510000
## 8 FOREST FIRES 5000000 500000 5500000
## 9 FLASH FLOODING/FLOOD 1750000 175000 1925000
## 10 HEAVY SNOW/HIGH WINDS & FLOOD 1500000 20000 1520000
#
economic_loss_storm_lg <- economic_loss_storm |>
select(-total_damage) |>
pivot_longer(!EVTYPE,names_to = 'damage_to',values_to = 'Value') |>
print()
## # A tibble: 20 × 3
## EVTYPE damage_to Value
## <fct> <chr> <dbl>
## 1 TORNADOES, TSTM WIND, HAIL prop_dmg 1600000000
## 2 TORNADOES, TSTM WIND, HAIL crop_dmg 2500000
## 3 HIGH WINDS/COLD prop_dmg 110500000
## 4 HIGH WINDS/COLD crop_dmg 7000000
## 5 HURRICANE OPAL/HIGH WINDS prop_dmg 100000000
## 6 HURRICANE OPAL/HIGH WINDS crop_dmg 10000000
## 7 WINTER STORM HIGH WINDS prop_dmg 60000000
## 8 WINTER STORM HIGH WINDS crop_dmg 5000000
## 9 Heavy Rain/High Surf prop_dmg 13500000
## 10 Heavy Rain/High Surf crop_dmg 1500000
## 11 LAKESHORE FLOOD prop_dmg 7540000
## 12 LAKESHORE FLOOD crop_dmg 0
## 13 HIGH WINDS HEAVY RAINS prop_dmg 7500000
## 14 HIGH WINDS HEAVY RAINS crop_dmg 10000
## 15 FOREST FIRES prop_dmg 5000000
## 16 FOREST FIRES crop_dmg 500000
## 17 FLASH FLOODING/FLOOD prop_dmg 1750000
## 18 FLASH FLOODING/FLOOD crop_dmg 175000
## 19 HEAVY SNOW/HIGH WINDS & FLOOD prop_dmg 1500000
## 20 HEAVY SNOW/HIGH WINDS & FLOOD crop_dmg 20000
# graph of the damage causing event types
economic_loss_storm_lg |> ggplot(aes(x=EVTYPE,y=Value,fill = damage_to)) +
geom_col() +
theme(axis.text.x = element_text(angle=90,vjust = 1,hjust=0) ) +
scale_y_continuous(labels = scales::dollar_format(prefix = '$',scale=1e-3,suffix='K'))+
labs(x='Event Type', y='Damage in thd dollars',title='Total value of damages to crop and property due to storm events')