Storms and other severe weather events can cause both public health and economic problems for communities and municipalities. This project involves exploring the U.S. National Oceanic and Atmospheric Administration’s (NOAA) storm database. The events in the database start in the year 1950 and end in November 2011. From the data given, I conducted a data analysis to address questions related to which events created most damage whether population health or economic consequences that could be used as a helpful report for a government or municipal manager who might be responsible for preparing for severe weather events and will need to prioritize resources for different types of events.
library(here)
library(lubridate) # For working with date and time
library(dplyr)
library(stringr) # Find and replace strings in dataframe
ok_wd <- getwd()
file_csv <- here(ok_wd, "repdata_data_StormData.csv")
storm_data <- read.csv(file_csv)
tidy_storm_data <- storm_data %>% select(BGN_DATE, STATE, EVTYPE, FATALITIES, INJURIES, PROPDMG, PROPDMGEXP, CROPDMG, CROPDMGEXP)
tidy_storm_data$BGN_DATE <- mdy_hms(tidy_storm_data$BGN_DATE)
tidy_storm_data$BGN_DATE <- lubridate::date(tidy_storm_data$BGN_DATE)
str(storm_data)
## 'data.frame': 902297 obs. of 37 variables:
## $ STATE__ : num 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:00" "6/8/1951 0:00:00" ...
## $ BGN_TIME : chr "0130" "0145" "1600" "0900" ...
## $ TIME_ZONE : chr "CST" "CST" "CST" "CST" ...
## $ COUNTY : num 97 3 57 89 43 77 9 123 125 57 ...
## $ COUNTYNAME: chr "MOBILE" "BALDWIN" "FAYETTE" "MADISON" ...
## $ STATE : chr "AL" "AL" "AL" "AL" ...
## $ EVTYPE : chr "TORNADO" "TORNADO" "TORNADO" "TORNADO" ...
## $ BGN_RANGE : num 0 0 0 0 0 0 0 0 0 0 ...
## $ BGN_AZI : chr "" "" "" "" ...
## $ BGN_LOCATI: chr "" "" "" "" ...
## $ END_DATE : chr "" "" "" "" ...
## $ END_TIME : chr "" "" "" "" ...
## $ COUNTY_END: num 0 0 0 0 0 0 0 0 0 0 ...
## $ COUNTYENDN: logi NA NA NA NA NA NA ...
## $ END_RANGE : num 0 0 0 0 0 0 0 0 0 0 ...
## $ END_AZI : chr "" "" "" "" ...
## $ END_LOCATI: chr "" "" "" "" ...
## $ LENGTH : num 14 2 0.1 0 0 1.5 1.5 0 3.3 2.3 ...
## $ WIDTH : num 100 150 123 100 150 177 33 33 100 100 ...
## $ F : int 3 2 2 2 2 2 2 1 3 3 ...
## $ MAG : num 0 0 0 0 0 0 0 0 0 0 ...
## $ FATALITIES: num 0 0 0 0 0 0 0 0 1 0 ...
## $ INJURIES : num 15 0 2 2 2 6 1 0 14 0 ...
## $ PROPDMG : num 25 2.5 25 2.5 2.5 2.5 2.5 2.5 25 25 ...
## $ PROPDMGEXP: chr "K" "K" "K" "K" ...
## $ CROPDMG : num 0 0 0 0 0 0 0 0 0 0 ...
## $ CROPDMGEXP: chr "" "" "" "" ...
## $ WFO : chr "" "" "" "" ...
## $ STATEOFFIC: chr "" "" "" "" ...
## $ ZONENAMES : chr "" "" "" "" ...
## $ LATITUDE : num 3040 3042 3340 3458 3412 ...
## $ LONGITUDE : num 8812 8755 8742 8626 8642 ...
## $ LATITUDE_E: num 3051 0 0 0 0 ...
## $ LONGITUDE_: num 8806 0 0 0 0 ...
## $ REMARKS : chr "" "" "" "" ...
## $ REFNUM : num 1 2 3 4 5 6 7 8 9 10 ...
data_clean_1 <- tidy_storm_data[str_detect(tidy_storm_data$EVTYPE, "Summary|SUMMARY"), ]
data_clean_1_index <- rownames(data_clean_1)
data_clean_1_index <- as.numeric(data_clean_1_index)
tidy_storm_1 <- tidy_storm_data %>% slice(-c(data_clean_1_index))
Onwards, the dataset tidy_storm_1 is the actual working dataset that will be processed.
event_name_full <- c('ASTRONOMICAL LOW TIDE',
'AVALANCHE',
'BLIZZARD',
'COASTAL FLOOD',
'COLD/WIND CHILL',
'DEBRIS FLOW',
'DENSE FOG',
'DENSE SMOKE',
'DROUGHT',
'DUST DEVIL',
'DUST STORM',
'EXCESSIVE HEAT',
'EXTREME COLD/WIND CHILL',
'FLASH FLOOD',
'FLOOD',
'FROST/FREEZE',
'FUNNEL CLOUD',
'FREEZING FOG',
'HAIL',
'HEAT',
'HEAVY RAIN',
'HEAVY SNOW',
'HIGH SURF',
'HIGH WIND',
'HURRICANE (TYPHOON)',
'ICE STORM',
'LAKE-EFFECT SNOW',
'LAKESHORE FLOOD',
'LIGHTNING',
'MARINE HAIL',
'MARINE HIGH WIND',
'MARINE STRONG WIND',
'MARINE THUNDERSTORM WIND',
'RIP CURRENT',
'SEICHE',
'SLEET',
'STORM SURGE/TIDE',
'STRONG WIND',
'THUNDERSTORM WIND',
'TORNADO',
'TROPICAL DEPRESSION',
'TROPICAL STORM',
'TSUNAMI',
'VOLCANIC ASH',
'WATERSPOUT',
'WILDFIRE',
'WINTER STORM',
'WINTER WEATHER')
tidy_event_lense <- data.frame()
for (check_name in event_name_full) {
event_1 <- subset(tidy_storm_1, EVTYPE == check_name)
tidy_event_lense <- rbind(tidy_event_lense, event_1)
}
tidy_event_lense_index <- rownames(tidy_event_lense)
tidy_event_lense_index <- as.numeric(tidy_event_lense_index)
tidy_storm_rest <- tidy_storm_1 %>% slice(-c(tidy_event_lense_index))
### LỞ ĐẤT/AVALANCHE
tidy_storm_rest$EVTYPE <- str_replace_all(tidy_storm_rest$EVTYPE, 'AVALANCE|AVALANCHE|APACHE', 'AVALANCHE')
tidy_storm_rest$EVTYPE[grepl("AVALANCHE COUNTY", tidy_storm_rest$EVTYPE)] <- "AVALANCHE"
tidy_storm_rest$EVTYPE[grepl("LANDSLIDES|LANDSLIDE|Landslump|LANDSLUMP|LANDSPOUT|MUDSLIDE|Mud|MUD|ROCK SLIDE", tidy_storm_rest$EVTYPE)] <- "DEBRIS FLOW"
### GIÓ BÃO/THUNDERSTORM WIND
tidy_storm_rest$EVTYPE[grepl("THU|Thu|TUNDERSTORM WIND|storm|Metro Storm|TSTM|Tstm|TSTMW|DOWNBURST|DRY|DRYNESS", tidy_storm_rest$EVTYPE)] <- "THUNDERSTORM WIND"
tidy_storm_rest$EVTYPE[grepl("Strong Wind|STRONG WIND|Strong winds|STRONG WINDS", tidy_storm_rest$EVTYPE)] <- "STRONG WIND"
tidy_storm_rest$EVTYPE[grepl("High Wind|HIGH WIND|GRADIENT|gradient|HIGH WIND|Gradient", tidy_storm_rest$EVTYPE)] <- "HIGH WIND"
tidy_storm_rest$EVTYPE[grepl("HURRICANE|Whirlwind|WHIRLWIND|TYPHOON|GUSTNADO|Hurricane", tidy_storm_rest$EVTYPE)] <- "HURRICANE (TYPHOON)"
tidy_storm_rest$EVTYPE[grepl("TORNADO|TORNADOES|TORNADOS|TORNDAO", tidy_storm_rest$EVTYPE)] <- "TORNADO"
tidy_storm_rest$EVTYPE[grepl("FUNNEL|Funnel|MISHAP|CLOUD", tidy_storm_rest$EVTYPE)] <- "FUNNEL CLOUD"
### GIÓ BỤI/DUST DEVIL
tidy_storm_rest$EVTYPE[grepl("DUST DEVEL|Dust Devil|DUST DEVIL|SAHARAN DUST|Dust|TURBULENCE", tidy_storm_rest$EVTYPE)] <- "DUST DEVIL"
tidy_storm_rest$EVTYPE[grepl("DUST", tidy_storm_rest$EVTYPE)] <- "DUST STORM"
### BÃO TUYẾT/BLIZZARD
tidy_storm_rest$EVTYPE[grepl("BLIZZARD|WIND GUSTS|Blizzard|HYPOTHERMIA|HYPERTHERMIA|Hypothermia", tidy_storm_rest$EVTYPE)] <- "BLIZZARD"
tidy_storm_rest$EVTYPE[grepl("Cold|COLD|WIND CHILL|LOW TEMPERATURE|COOL", tidy_storm_rest$EVTYPE)] <- "COLD/WIND CHILL"
tidy_storm_rest$EVTYPE[grepl("HEAVY SNOW|Snowfall", tidy_storm_rest$EVTYPE)] <- "HEAVY SNOW"
tidy_storm_rest$EVTYPE[grepl("SNOW|Snow", tidy_storm_rest$EVTYPE)] <- "ICE STORM"
tidy_storm_rest$EVTYPE[grepl("hail|Hail|HAIL", tidy_storm_rest$EVTYPE)] <- "HAIL"
tidy_storm_rest$EVTYPE[grepl("SLEET|sleet|Snow Squalls|Snow squalls", tidy_storm_rest$EVTYPE)] <- "SLEET"
tidy_storm_rest$EVTYPE[grepl("Lake Effect Snow", tidy_storm_rest$EVTYPE)] <- "LAKE-EFFECT SNOW"
tidy_storm_rest$EVTYPE[grepl("EXTREME WINDCHILL", tidy_storm_rest$EVTYPE)] <- "EXTREME COLD/WIND CHILL"
tidy_storm_rest$EVTYPE[grepl("WINTER WEATHER|Winter Weather|WINTER MIX|Wintry mix|WINTERY MIX|WINTRY|Wintry", tidy_storm_rest$EVTYPE)] <- "WINTER WEATHER"
tidy_storm_rest$EVTYPE[grepl("ICY ROADS|Icy Roads|ICE ON ROAD|ICE", tidy_storm_rest$EVTYPE)] <- "SLEET"
tidy_storm_rest$EVTYPE[grepl("WINTER STORM|Light snow", tidy_storm_rest$EVTYPE)] <- "WINTER STORM"
### KHÔ NÓNG/HEAT
tidy_storm_rest$EVTYPE[grepl("EXCESSIVE HEAT|EXTREME HEAT", tidy_storm_rest$EVTYPE)] <- "EXCESSIVE HEAT"
tidy_storm_rest$EVTYPE[grepl("HEAT|Heat|Microburst|MICROBURST|MICROBURST WINDS|wet micoburst|HOT|Hot|Temperature record", tidy_storm_rest$EVTYPE)] <- "HEAT"
tidy_storm_rest$EVTYPE[grepl("FOREST FIRES|FIRE|FOREST FIRE|BRUSH FIRE|BRUSH FIRES|WILD FIRES|WILDFIRES|FIRES", tidy_storm_rest$EVTYPE)] <- "WILDFIRE"
tidy_storm_rest$EVTYPE[grepl("DRIEST|Dry|dry", tidy_storm_rest$EVTYPE)] <- "DROUGHT"
### LỤT LỘI/FLOOD
tidy_storm_rest$EVTYPE[grepl("COASTAL|Coastal|BEACH|Beach", tidy_storm_rest$EVTYPE)] <- "COASTAL FLOOD"
tidy_storm_rest$EVTYPE[grepl("FLOOD|Urban flood|flood|Flood|Flooding|Wet Year|WET WEATHER|DROWNING|SMALL|URBAN", tidy_storm_rest$EVTYPE)] <- "FLOOD"
tidy_storm_rest$EVTYPE[grepl("FLASH|Flash|DAM", tidy_storm_rest$EVTYPE)] <- "FLASH FLOOD"
### MƯA BÃO/HEAVY RAIN
tidy_storm_rest$EVTYPE[grepl("SMALL STREAM|Rain|Stream|Heavy Rain|HEAVY RAIN|HEAVY SHOWER|PRECIPITATION|Rainfall|HVY RAIN|Precipitation|Heavy rain|RAIN|PRECIPATATION|PRECIP", tidy_storm_rest$EVTYPE)] <- "HEAVY RAIN"
tidy_storm_rest$EVTYPE[grepl("LIGHTING|LIGHTNING|LIGNTNING|LIGHTS", tidy_storm_rest$EVTYPE)] <- "LIGHTNING"
### SÓNG BIỂN/RIP CURRENT
tidy_storm_rest$EVTYPE[grepl("Tidal Flooding|RISING WATER|Marine Accident|WAVE|RIP CURRENTS", tidy_storm_rest$EVTYPE)] <- "RIP CURRENT"
tidy_storm_rest$EVTYPE[grepl("SURF|Heavy surf and wind|surf|Surf|SEAS|WAVES|TIDES|ASTRONOMICAL HIGH TIDE|BLOW-OUT TIDE|BLOW-OUT TIDES|HIGH WATER|SWELL|SWELLS", tidy_storm_rest$EVTYPE)] <- "HIGH SURF"
tidy_storm_rest$EVTYPE[grepl("Tidal Flooding", tidy_storm_rest$EVTYPE)] <- "STORM SURGE/TIDE"
### SƯƠNG MÙ/DENSE FOG
tidy_storm_rest$EVTYPE[grepl("Freezing Fog|Fog|SMOKE", tidy_storm_rest$EVTYPE)] <- "FREEZING FOG"
tidy_storm_rest$EVTYPE[grepl("Frost|FREEZE|Freeze|FROST|GLAZE|Glaze|FREEZING|Freezing", tidy_storm_rest$EVTYPE)] <- "FROST/FREEZE"
tidy_storm_rest$EVTYPE[grepl("FOG", tidy_storm_rest$EVTYPE)] <- "DENSE FOG"
### KHÁC/OTHER
tidy_storm_rest$EVTYPE[grepl("SPOUT", tidy_storm_rest$EVTYPE)] <- "WATERSPOUT"
tidy_storm_rest$EVTYPE[grepl("Ash|VOLCANIC", tidy_storm_rest$EVTYPE)] <- "VOLCANIC ASH"
tidy_storm_rest$EVTYPE[grepl("NONE|Other|OTHER|Mild|No Severe Weather", tidy_storm_rest$EVTYPE)] <- "OTHER"
tidy_event_clean_1 <- data.frame()
for (check_name in event_name_full) {
event_2 <- subset(tidy_storm_rest, EVTYPE == check_name)
tidy_event_clean_1 <- rbind(tidy_event_clean_1, event_2)
}
tidy_event_clean_1_index <- rownames(tidy_event_clean_1)
tidy_event_clean_1_index <- as.numeric(tidy_event_clean_1_index)
tidy_storm_rest_2 <- tidy_storm_rest %>% slice(-c(tidy_event_clean_1_index))
tidy_storm_rest_2$EVTYPE[grepl("GUSTY|LAKE|Gusty", tidy_storm_rest_2$EVTYPE)] <- "MARINE STRONG WIND"
tidy_storm_rest_2$EVTYPE[grepl("TEMPERATURE|TEMPERATURES|temperature|Temperatures|TEMPERATURES|WARM|HIGH|High|Warmth|EXCESSIVE", tidy_storm_rest_2$EVTYPE)] <- "HEAT"
tidy_storm_rest_2$EVTYPE[grepl("TROPICAL", tidy_storm_rest_2$EVTYPE)] <- "TROPICAL STORM"
tidy_storm_rest_2$EVTYPE[grepl("WIND|Wind|WINDS", tidy_storm_rest_2$EVTYPE)] <- "HIGH WIND"
tidy_storm_rest_2$EVTYPE[grepl("STORM", tidy_storm_rest_2$EVTYPE)] <- "STORM SURGE/TIDE"
tidy_storm_rest_2$EVTYPE[grepl("snow|ice|Ice", tidy_storm_rest_2$EVTYPE)] <- "HEAVY SNOW"
tidy_storm_rest_2$EVTYPE[grepl("WET|Wet", tidy_storm_rest_2$EVTYPE)] <- "SLEET"
tidy_storm_rest_2$EVTYPE[grepl("LOW", tidy_storm_rest_2$EVTYPE)] <- "COLD/WIND CHILL"
tidy_event_clean_2 <- data.frame()
for (check_name in event_name_full) {
event_3 <- subset(tidy_storm_rest_2, EVTYPE == check_name)
tidy_event_clean_2 <- rbind(tidy_event_clean_2, event_3)
}
tidy_event_clean_2_index <- rownames(tidy_event_clean_2)
tidy_event_clean_2_index <- as.numeric(tidy_event_clean_2_index)
tidy_storm_rest_3 <- tidy_storm_rest_2 %>% slice(-c(tidy_event_clean_2_index))
tidy_storm_rest_3$EVTYPE <- "OTHER"
storm_data_ok <- bind_rows(tidy_event_lense, tidy_event_clean_1, tidy_event_clean_2, tidy_storm_rest_3)
storm_data_ok <- storm_data_ok %>% arrange(BGN_DATE, desc(STATE), FATALITIES, INJURIES, PROPDMG, PROPDMGEXP, CROPDMG, CROPDMGEXP)
tidy_storm_1 <- tidy_storm_1 %>% arrange(BGN_DATE, desc(STATE), FATALITIES, INJURIES, PROPDMG, PROPDMGEXP, CROPDMG, CROPDMGEXP)
identical(storm_data_ok$FATALITIES, tidy_storm_1$FATALITIES)
## [1] TRUE
After standardizing the names of events, I use the identical function for checking two dataset and get the TRUE result indicating the cleaning is successful.
clean_1_m <- subset(storm_data_ok, PROPDMGEXP == "m")
clean_1_m_index <- rownames(clean_1_m)
clean_1_m_index <- as.numeric(clean_1_m_index)
storm_data_ok[clean_1_m_index, ]$PROPDMGEXP <- "M"
check_clean_m <- c("-", "?", "+", "0", "1", "2", "3", "4", "5", "6", "7", "8", "h", "H")
for (m_symbol in check_clean_m) {
clean_123 <- subset(storm_data_ok, PROPDMGEXP == m_symbol)
clean_123_index <- rownames(clean_123)
clean_123_index <- as.numeric(clean_123_index)
storm_data_ok[clean_123_index, ]$PROPDMGEXP <- ""
}
clean_ok_m <- subset(storm_data_ok, CROPDMGEXP == "m")
clean_ok_m_index <- rownames(clean_ok_m)
clean_ok_m_index <- as.numeric(clean_ok_m_index)
storm_data_ok[clean_ok_m_index, ]$CROPDMGEXP <- "M"
clean_ok_k <- subset(storm_data_ok, CROPDMGEXP == "k")
clean_ok_k_index <- rownames(clean_ok_k)
clean_ok_k_index <- as.numeric(clean_ok_k_index)
storm_data_ok[clean_ok_k_index, ]$CROPDMGEXP <- "K"
check_clean_ok_m <- c("?", "0", "2")
for (c_symbol in check_clean_ok_m) {
clean_1238 <- subset(storm_data_ok, CROPDMGEXP == c_symbol)
clean_1238_index <- rownames(clean_1238)
clean_1238_index <- as.numeric(clean_1238_index)
storm_data_ok[clean_1238_index, ]$CROPDMGEXP <- ""
}
storm_data_ok -> test_yyy
test_yyy <- test_yyy %>%
mutate(PROPDMG_cal = ifelse(PROPDMGEXP == "K", 1000 * PROPDMG,
ifelse(PROPDMGEXP == "M", 1000000 * PROPDMG,
ifelse(PROPDMGEXP == "B", 1000000000 * PROPDMG,
ifelse(PROPDMGEXP == "", PROPDMG, NA)))))
test_yyy$PROPDMG_cal <- as.numeric(test_yyy$PROPDMG_cal)
test_yyy -> storm_data_ok_final_1
storm_data_ok_final_1 -> test_zzz
test_zzz <- test_zzz %>%
mutate(CROPDMG_cal = ifelse(CROPDMGEXP == "K", 1000 * CROPDMG,
ifelse(CROPDMGEXP == "M", 1000000 * CROPDMG,
ifelse(CROPDMGEXP == "B", 1000000000 * CROPDMG,
ifelse(CROPDMGEXP == "", CROPDMG, NA)))))
test_zzz$CROPDMG_cal <- as.numeric(test_zzz$CROPDMG_cal)
test_zzz -> storm_data_ok_final_2
storm_data_ok_final_2 <- storm_data_ok_final_2 %>% arrange(BGN_DATE, desc(STATE), FATALITIES, INJURIES, PROPDMG, PROPDMGEXP, CROPDMG, CROPDMGEXP)
The dataset storm_data_ok_final_2 is a final one that readily for data analysis step.
event_type_health <- storm_data_ok_final_2 %>% group_by(EVTYPE) %>%
summarise(fatal_1 = sum(FATALITIES, na.rm = TRUE),
injur_1 = sum(INJURIES, na.rm = TRUE),
prop_1 = sum(PROPDMG_cal, na.rm = TRUE),
crop_1 = sum(CROPDMG_cal, na.rm = TRUE)
)
EVTYPE variable) are most harmful with respect to population health?TORNADO is the event that most harmful to population health on both fatalities and injuries. The second and third are EXCESSIVE HEAT and HEAT that also created bad results. Be awared that each axis for fatalities and injuries used different scales based on their values.
library(tidyverse)
library(ggplot2)
chart_1_data <- event_type_health %>% dplyr::select(EVTYPE, fatal_1, injur_1)
chart_1_data <- chart_1_data %>% dplyr::rename(V1 = EVTYPE, V2 = fatal_1, V3 = injur_1)
chart_1_data -> df
#Scaling factor
sf <- max(df$V2)/max(df$V3)
#Transform
DF_long <- df %>%
mutate(V1 = fct_reorder(V1, V2)) %>%
mutate(V3 = V3 * sf) %>%
pivot_longer(names_to = "y_new", values_to = "val", V2:V3)
#Plot
ggplot(DF_long, aes(x = V1)) +
geom_bar(aes(y = val, fill = y_new, group = y_new),
stat = "identity",
position = position_dodge(),
color = "black", alpha = 0.8, width = 0.8) +
scale_fill_manual(values = c("#f6608b", "#608bf6"), name = "NUMBERS OF", labels = c("FATALITIES", "INJURIES")) +
scale_y_continuous(name = "FATALITIES",
labels = scales::comma,
sec.axis = sec_axis(~./sf, name = "INJURIES",
labels = scales::comma)) +
xlab("") +
theme_bw() +
theme(legend.position = 'top',
legend.justification = 'left',
legend.direction = 'horizontal') +
theme(text = element_text(size = 12)) +
ggtitle('EVENT TYPES MOST HARMFUL TO POPUPLATION HEALTH IN USA (1950–2011)') + coord_flip()
In this report, I calculated the actual number of dollars of property and crop damage then took the logarithm of theirs. FLOOD is the serious event that damaged most consequences on property and crop. The next ones are HURRICANE (TYPHOON), TORNADO, STORM SURGE/TIDE, and FLASH FLOOD contributed huge negative results on economic.
chart_2_data <- event_type_health %>% dplyr::select(EVTYPE, prop_1, crop_1)
chart_2_data <- chart_2_data %>% dplyr::mutate(prop_1 = log10(prop_1 + 1), crop_1 = log10(crop_1 + 1))
chart_2_data <- chart_2_data %>% dplyr::rename(V1 = EVTYPE, V2 = prop_1, V3 = crop_1)
chart_2_data -> df_1
DF_long_1 <- df_1 %>%
mutate(V1 = fct_reorder(V1, V2)) %>%
pivot_longer(names_to = "y_new", values_to = "val", V2:V3)
#Plot
ggplot(DF_long_1, aes(x = V1)) +
geom_bar(aes(y = val, fill = y_new, group = y_new),
stat = "identity",
position = position_dodge(),
color = "black", alpha = 0.8, width = 0.8) +
scale_fill_manual(values = c("#f6608b", "#608bf6"), name = "LOGARITHMIC IN USD OF", labels = c("PROPERTY DAMAGE", "CROP DAMAGE")) +
scale_y_continuous(name = "PROPERTY DAMAGE",
labels = scales::comma,
sec.axis = sec_axis(
~./1,
name = "CROP DAMAGE",
labels = scales::comma)) +
xlab("") +
theme_bw() +
theme(legend.position = 'top',
legend.justification = 'left',
legend.direction = 'horizontal') +
theme(text = element_text(size = 12)) +
ggtitle('EVENT TYPES CREATED MOST ECONOMIC DAMAGE IN USA (1950–2011)') + coord_flip()
To answer this question, I used the heatmap approach that can presents data on both health and economy in a single plot with the scale IMPACTNESS increased from 0 to 1 indicating their severeness. The result is clear that the events created most consequences on health (as TORNADO) are not the same with the ones on economy (as FLOOD or DROUGHT). Therefore, when making a decision on preventing bad weather, one should consider which aspect of society need protected. If we put the human health on top priority, so preventing storm and heat events would a great choice.
library(reshape2)
library(plyr)
library(scales)
chart_3_data <- event_type_health
chart_3_data <- chart_3_data %>% dplyr::arrange(fatal_1, injur_1, prop_1, crop_1) %>% dplyr::rename(EVTYPE = EVTYPE, FATALITIES = fatal_1, INJURIES = injur_1, PROPERTY_DAMAGE = prop_1, CROP_DAMAGE = crop_1)
chart_3_matrix <- chart_3_data %>% column_to_rownames("EVTYPE") %>% as.matrix
melt_chart_3_matrix <- melt(chart_3_matrix)
melt_chart_3_matrix <- ddply(melt_chart_3_matrix, .(Var2), transform, rescale = rescale(value))
ggplot(melt_chart_3_matrix, aes(Var2, Var1)) +
geom_tile(aes(fill = rescale), colour = "white") +
scale_fill_distiller(name = "IMPACTNESS", type = "div", palette = "Spectral", guide = guide_colorbar(title.position = "top")) +
ggtitle('EVENT TYPES CREATED MOST CONSEQUENCES IN USA (1950–2011)') +
xlab("") +
ylab("") +
theme_bw() +
theme(legend.position = 'right') +
theme(text = element_text(size = 12)) +
theme(legend.key.height= unit(2, 'cm'),
legend.key.width= unit(2, 'cm'))