Grouped by Events and Their corresponding total damages and fatalities
df <- read_csv("100yrdatadisasters_complete.csv", skip = 1) # skip first row of categorizing header
df <- df %>%
mutate(
deaths = as.numeric(deaths),
injuries = as.numeric(injuries),
damage = as.numeric(damage)
)
df_summary <- df %>%
filter(!is.na(event_name)) %>%
mutate(damage = as.numeric(damage)) %>%
group_by(event_name) %>%
summarise(
TotalEstimatedDamages = sum(unique(na.omit(damage)))
) %>%
filter(TotalEstimatedDamages > 0)
top12 <- df_summary %>%
arrange(desc(TotalEstimatedDamages)) %>%
slice_head(n = 12)
kable(head(top12, 12))
| event_name | TotalEstimatedDamages |
|---|---|
| Great Flood of 1993 | 1.500e+10 |
| Fran | 5.085e+09 |
| 1997 red river flood | 5.000e+09 |
| Opal | 4.700e+09 |
| May 1995 Louisiana flood | 3.100e+09 |
| March 1995 El Nino Central California River Valley Floods | 3.000e+09 |
| The Great Ice Storm of 1998 | 3.000e+09 |
| Georges | 2.790e+09 |
| 1997 California New Years Floods | 2.374e+09 |
| Blizzard Hannah Grand Forks Floods | 2.035e+09 |
| mayfest storm | 2.000e+09 |
| The Blizzard of 1996 | 1.000e+09 |
# sum up other damages outside top 10 to put in a pie chart
other_damage <- df_summary %>%
filter(!event_name %in% top12$event_name) %>%
summarise(TotalEstimatedDamages = sum(as.numeric(TotalEstimatedDamages))) %>%
mutate(event_name = "Other")
# Combine other and top10 for pie chart
plot_data <- bind_rows(top12, other_damage)
plot_data <- plot_data %>%
mutate(
TotalEstimatedDamages = as.numeric(TotalEstimatedDamages),
fraction = TotalEstimatedDamages / sum(TotalEstimatedDamages),
ymax = cumsum(fraction),
ymin = lag(ymax, default = 0),
label_position = (ymax + ymin) / 2,
label = dollar(TotalEstimatedDamages, accuracy = 1),
event_name = factor(event_name, levels = event_name[order(-TotalEstimatedDamages)])
)
#pie chart
ggplot(plot_data, aes(ymax = ymax, ymin = ymin, xmax = 4, xmin = 3, fill = event_name)) +
geom_rect() +
coord_polar(theta = "y") +
xlim(c(2, 4)) +
theme_void() +
labs(title = "Top 12 Flood Events by Damages (plus Other)") +
geom_text(
aes(x = 3.5, y = label_position, label = label, angle = 0),
size = 3
) +
scale_fill_discrete(name = "Flood Events(By Most Damages First)")
To quantify response effort by each event. For now, I simply included the average word count of the entries from the response column, which I have populated with data from researching local hazard mitigation reports, annual USACE reports from 1995-2012(atlasti), FEMA HMGP data, and other local sources/archives where applicable. The top 3 responses from this were the May 1995 Louisiana flood, July 13-14, 1998 Lawrenceburg Flash Flood, and the Northern NY November 1996 Flood. Below the table is a bullet point summary of the types of projects they implemented in response to flood damages.
library(stringr)
df_declared <- df %>%
filter(`Federal Disaster Declaration` == "y") %>%
mutate(
before_and_from = as.numeric(`NFIP totallosses - dateofloss before+from event`),
after = as.numeric(`NFIP totallosses - dateofloss after event`),
totalnfip_losses = after + before_and_from,
Population = as.numeric(Population),
nfiplosses_difference = (after - before_and_from)
) %>%
filter(
is.finite(nfiplosses_difference),
!is.na(nfiplosses_difference),
totalnfip_losses > 0,
Population > 0
)
df_response_summary <- df_declared %>%
filter(!is.na(event_name)) %>%
group_by(event_name) %>%
summarise(
TotalEstimatedDamages = sum(unique(na.omit(as.numeric(damage)))),
avg_wordcount_response = mean(str_count(na.omit(response), "\\w+")),
Total_deaths = sum(unique(na.omit(as.numeric(deaths)))),
) %>%
filter(TotalEstimatedDamages > 0) %>%
arrange(desc(avg_wordcount_response))
kable(head(df_response_summary, 10))
| event_name | TotalEstimatedDamages | avg_wordcount_response | Total_deaths |
|---|---|---|---|
| May 1995 Louisiana flood | 3.10e+09 | 211.00 | 6 |
| July 13-14, 1998 Lawrenceburg Flash Flood | 2.20e+07 | 203.00 | 2 |
| Northern NY November 1996 Flood | 2.50e+07 | 186.25 | 0 |
| June 1997 Wisconsin Convective Outbreak | 8.40e+07 | 166.00 | 0 |
| Milwaukee Flash Floods August 1998 | 8.20e+07 | 166.00 | 0 |
| Hortense | 1.25e+08 | 162.00 | 21 |
| August 1997 New Jersey Floods | 5.40e+07 | 159.00 | 0 |
| Honolulu flood November 1996 | 2.00e+07 | 149.00 | 0 |
| Oct-1996 Nor’easter Flood | 5.58e+07 | 144.00 | 0 |
| March 1995 El Nino Central California River Valley Floods | 3.00e+09 | 129.25 | 27 |
Using data from the ‘NFIP Multiple Loss Properties - v1’ dataset from FEMA. I joined total losses(flood insurance property insurance claims), which started counting repetitive loss properties in 1978. Therefore, I included the totalloss data from before + from the event for each entry in the original data using each of their unique dates, so the totallosses before+from event is all the losses counted from 1978 up to 10 days after the corresponding flood event. Then, the totallosses after column represents the total NFIP losses from the date 10 days after the original event up to December 19 2024(as per OPENFEMA website). The average after losses were 1153.914, The average before losses were 116.056 The after average could be significantly higher due to multiple reasons outside of my level of expertise. Possibly, due to better record keeping, more insurance coverage programs, etc. Therefore, here I highlighted the exceptions where I looked at the counties that had the greatest differences of the after losses being less than the losses before and during the corresponding flood event. Since, these were rare exceptions, it could indicate that these counties had the most effective responses in terms of flood control/mitigation.
| county | FIPS | Population | event_name | state | NFIP totallosses - dateofloss before+from event | NFIP totallosses - dateofloss after event | nfiplosses_difference | discharge | Date | reference | year_implemented | county_state |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Milwaukee County | 55079 | 940164 | Milwaukee Flash Floods August 1998 | wi | 480 | 153 | -327 | 7500 | 8/6/1998 | article , lincolnproj, MMSD, HMGP | 1997-ongoing | Milwaukee County, wi |
| Monterey County | 06053 | 401762 | 1997-1998 Winter El Nino | ca | 214 | 92 | -122 | 14700 | 2/3/1998 | ncei, USACE1998, PajaroRiverProj2024, HMGP | 1995-1998-ongoing | Monterey County, ca |
| Sacramento County | 06067 | 1223499 | 1997-1998 Winter El Nino | ca | 402 | 281 | -121 | 3320 | 2/3/1998 | ncei, 2006, natoma, Americanriver, sacriver | 1998-2006-2016-2018-2023 | Sacramento County, ca |
| Warren County | 51187 | 31584 | Fran | va | 147 | 51 | -96 | 121000 | 9/7/1996 | usgs summary, HMGP | 1996 | Warren County, va |
| Hampshire County | 54027 | 20203 | Fran | wv | 92 | 14 | -78 | 147000 | 9/7/1996 | usgs summary, HMGP, USACE | 1996-1998-1999 | Hampshire County, wv |
| Shenandoah County | 51171 | 35075 | Fran | va | 88 | 10 | -78 | 12400 | 9/6/1996 | usgs summary, HMGP, shenandoah | 1996 | Shenandoah County, va |
| Barbour County | 54001 | 15557 | May 1996 Thunderstorm Tygart River Valley Flooding | wv | 108 | 40 | -68 | 16700 | 5/17/1996 | usgs summary, HMGP, USACE | 1996-2006 | Barbour County, wv |
| Jefferson County | 54037 | 42190 | Fran | wv | 46 | 14 | -32 | 156000 | 9/8/1996 | usgs summary, HMGP | 1996 | Jefferson County, wv |
| Rockbridge County | 51163 | 20808 | Fran | va | 61 | 32 | -29 | 35800 | 9/6/1996 | usgs summary, HMGP | 1996 | Rockbridge County, va |
| Allegany County | 24001 | 74930 | Fran | md | 40 | 24 | -16 | 6620 | 9/6/1996 | usgs summary, HMGP | 1996 | Allegany County, md |
Some examples of the most effective responses that included large scale projects in terms of decreasing flood losses were seen in the city of Milwaukee and Milwaukee county and several counties in California’s Central River Valley Region. I included the specifics about some of these responses below.
From this brief analysis, it can be seen that large scale well coordinated/funded flood control projects like levee renovation, detention basin construction, and flood control specific local municipalities in addition to the targeted acquisition of flood-prone properties. Another case, where the response was thorough, but not as reflected in the loss metric changes were the responses from the Cities in North Dakota(Fargo, Grand Forks) and Minnesota where they cited that the 1997 Red River floods were a massive turning/trigger point for how they responded to flood control. North Dakota and Minnesota communities undertook extensive flood mitigation projects in response over the course of the following years. These included the installation of storm lift stations, pump systems, road grade raises, stormwater drainage upgrades, underground utility protections, and large-scale property acquisitions. Grand Forks and East Grand Forks implemented over 30 miles of levees, 3 miles of floodwall, 24 pump stations, and two diversion channels as part of a $409.3 million USACE-led project. Cass County invested heavily in stream diversion and land buyouts, while Fargo and surrounding townships focused on detention basins, floodproofing, and storm sewer improvements. A major 30-mile diversion channel project for the Fargo area began construction in 2017 after years of planning and is still ongoing as of 2024. The diversion channels are part of the ongoing efforts from these states to reduce the formation of ice jams, which have historically been the source of flood damages(snow melt) like in the Red River Flood in 1997.