Impact of bad weather types on population health and economic

Synopsis

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.

Data Processing

Loading packages

library(here)
library(lubridate) # For working with date and time
library(dplyr)
library(stringr) # Find and replace strings in dataframe

Loading dataset

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)

Briefly summarizes the data analysis

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 cleaning

1. Remove “summary strings”

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.

2. Loading event types

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')

3. Extract event types matching

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)
}

4. Exclude and get the rest

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))

5. Cleaning the dataset (Event) [1/2]

### 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"

6. Cleaning the dataset (Event) [2/2]

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"

7. Check dataset after cleaning

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.

8. Cleaning the rest

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.

9. Tidying the dataset

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)
        )

Results

Question 1. Across the United States, which types of events (as indicated in the 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()

2. Across the United States, which types of events have the greatest economic consequences?

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()

Plus: Across the United States, which types of events have the greatest consequences on both health and economy?

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'))