Finding storm events
Brooke Anderson, Ziyu Chen, and Jordan Robinson
Source:vignettes/find_events.Rmd
find_events.Rmd
One of the primary functions of noaastormevents
is
find_events
. This function allows user to retrieve storm
event listings from a specified time frame. These listings are retrieved
from the the NOAA Storm Events Database and comprised into a dataframe
with the following columns:
-
begin_date
: The date the event began -
end_date
: The date the event ended -
state
: The state in which the event occurred -
cz_type
: Whether the event was listed by county or by forecast zone (Where possible, events that are listed by forecast zone are linked to the appropriate county FIPS code and therefore not excluded from this returned dataframe. However, this column is included to allow users to perform quality control on events listed by forecast zone (CZ_TYPE
of “Z”).) -
cz_name
: The name of the county (or other area name) in which the event occurred. -
event_type
: Event type (e.g., “Flood”, “Lightning”, “Tornado”, “Wildfire”). See the NOAA Storm Events documentation for definitions of these event types -
source
: The source of the storm event listing (e.g., trained spotter, emergency manager, general public, law enforcement) -
injuries_direct
,injuries_indirect
,deaths_direct
,deaths_indirect
,damage_property
,damage_crops
: Estimates of damage from the event to human health, property, and crops. For damages, initial values in the database (e.g.,"5K"
) have been converted where possible to numeric values (e.g.,5000
). See the “Details” vignette for more details on this process. -
fips
: Five-digit county (Federal Information Processing Standard) FIPS code. This code uniquely identifies each U.S. county. If the event was reported by forecast zone (cz_type
ofZ
), code within the package has used regular expressions to try to correctly match the area name to a county FIPS (see the “Details” vignette for more details on this process).
For example, a user can run the following code to pull all storm event listings from September 14, 1999 to September 18, 1999:
sept_1999_events <- find_events(date_range = c("1999-09-14", "1999-09-18"))
head(sept_1999_events)
#> # A tibble: 6 × 14
#> begin_date end_date state cz_type cz_name event_type source injuries_direct
#> <date> <date> <chr> <chr> <chr> <chr> <chr> <int>
#> 1 1999-09-14 1999-09-14 Flori… C Duval Thunderst… TRAIN… 0
#> 2 1999-09-14 1999-09-14 Flori… C St. Jo… Thunderst… TRAIN… 0
#> 3 1999-09-14 1999-09-14 Arizo… C Marico… Hail OFFIC… 0
#> 4 1999-09-14 1999-09-14 Arizo… C Marico… Hail TRAIN… 0
#> 5 1999-09-14 1999-09-14 Arizo… C Pinal Thunderst… NEWSP… 0
#> 6 1999-09-14 1999-09-14 Arizo… C Marico… Lightning EMERG… 1
#> # ℹ 6 more variables: injuries_indirect <int>, deaths_direct <int>,
#> # deaths_indirect <int>, damage_property <dbl>, damage_crops <dbl>,
#> # fips <dbl>
In addition, find_events
can focus on events specified
by the event_types
argument. If a user only wants data on
hurricane events from the same date range specified above, they could
run:
sept_1999_hurricane_events <- find_events(date_range = c("1999-09-14", "1999-09-18"),
event_types = c("Hurricane (Typhoon)"))
head(sept_1999_hurricane_events)
#> # A tibble: 6 × 14
#> begin_date end_date state cz_type cz_name event_type source injuries_direct
#> <date> <date> <chr> <chr> <chr> <chr> <chr> <int>
#> 1 1999-09-14 1999-09-14 Flori… Z De Soto Hurricane… OFFIC… 0
#> 2 1999-09-14 1999-09-14 Flori… Z Hardee Hurricane… OFFIC… 0
#> 3 1999-09-14 1999-09-14 Flori… Z Manatee Hurricane… OFFIC… 0
#> 4 1999-09-14 1999-09-14 Flori… Z Saraso… Hurricane… OFFIC… 0
#> 5 1999-09-14 1999-09-14 Flori… Z Hillsb… Hurricane… OFFIC… 0
#> 6 1999-09-14 1999-09-14 Flori… Z Polk Hurricane… OFFIC… 0
#> # ℹ 6 more variables: injuries_indirect <int>, deaths_direct <int>,
#> # deaths_indirect <int>, damage_property <dbl>, damage_crops <dbl>,
#> # fips <dbl>
Further, users can also filter events within proximity to a specified
tropical storm track. For this additional specification, the package
calls on the packages hurricaneexposure
(available on CRAN)
and hurricaneexposuredata
(available through a drat
repository). Data and functions from these packages help match storm
events to tropical storm events by storm name and proximity. These can
be specified using the storm
, and dist_limit
options in the function.
Event listings are pulled for all events that occurred within a
five-day window of the day the storm was closest to each county and that
were in counties within a user-specified distance of the storm track.
For example, to create a dataset with all event listings for counties
within 300 kilometers (dist_limit
option) of the path of
Hurricane Floyd (storm = "Floyd-1999"
) for a five-day
window of the storm’s closest approach to each county, the user can
run:
floyd_events <- find_events(storm = "Floyd-1999", dist_limit = 300)
head(floyd_events)
#> # A tibble: 6 × 16
#> begin_date end_date state cz_type cz_name event_type source injuries_direct
#> <date> <date> <chr> <chr> <chr> <chr> <chr> <int>
#> 1 1999-09-13 1999-09-14 Flori… Z Coasta… Hurricane… NEWSP… 0
#> 2 1999-09-13 1999-09-14 Flori… Z Coasta… Hurricane… NEWSP… 0
#> 3 1999-09-14 1999-09-14 Flori… C Duval Thunderst… TRAIN… 0
#> 4 1999-09-14 1999-09-14 Flori… C St. Jo… Thunderst… TRAIN… 0
#> 5 1999-09-14 1999-09-14 Flori… C Palm B… Tornado EMERG… 0
#> 6 1999-09-14 1999-09-14 North… C Martin Flash Flo… EMERG… 0
#> # ℹ 8 more variables: injuries_indirect <int>, deaths_direct <int>,
#> # deaths_indirect <int>, damage_property <dbl>, damage_crops <dbl>,
#> # fips <dbl>, storm_id <chr>, usa_atcf_id <chr>
Note that the storm ID includes a storm name (“Floyd”) and year
(“1999”). Both must be specified, as storm names are not retired until
they are used for a very severe storm. This functionality will only work
for storms included in the hurricaneexposuredata
package.
Once find_events
has been used to create a dataset of
storm event listings, the dataset can be explored. The user can do
things like determine the number of events of each type that occurred
near in time and location to a storm’s track. For example, here is a
summary of numbers of different types of events for Hurricane Floyd,
created using dplyr
tools:
library(dplyr)
floyd_events %>%
group_by(event_type) %>%
summarize(n = n()) %>%
arrange(desc(n)) %>%
knitr::kable(col.names = c("Event type", "Number of events"),
caption = "NOAA Storm Events within 200 km and within a 5-day window of Hurricane Floyd.")
Event type | Number of events |
---|---|
Flash Flood | 232 |
High Wind | 157 |
Hurricane (Typhoon) | 118 |
Heavy Rain | 28 |
Strong Wind | 21 |
Thunderstorm Wind | 19 |
Tornado | 18 |
Tropical Storm | 16 |
Flood | 14 |
Coastal Flood | 10 |
Storm Surge/Tide | 5 |
Funnel Cloud | 2 |
Waterspout | 1 |
Similarly, you could create a summary with the states in which the most events were listed and give the number and type of events in each of those counties:
floyd_events %>%
group_by(state, event_type) %>%
summarize(n = n()) %>%
ungroup() %>%
arrange(state, desc(n)) %>%
mutate(event_type = paste0(event_type, " (", n, ")")) %>%
group_by(state) %>%
summarize(Total = sum(n),
Events = paste(event_type, collapse = ", ")) %>%
ungroup() %>%
arrange(desc(Total)) %>%
knitr::kable()
state | Total | Events |
---|---|---|
North Carolina | 146 | Flash Flood (58), Hurricane (Typhoon) (58), Tornado (17), High Wind (9), Funnel Cloud (2), Thunderstorm Wind (1), Waterspout (1) |
Virginia | 97 | Flash Flood (57), High Wind (16), Hurricane (Typhoon) (16), Tropical Storm (5), Flood (2), Heavy Rain (1) |
Pennsylvania | 58 | Flash Flood (28), High Wind (27), Coastal Flood (3) |
New York | 52 | High Wind (27), Flash Flood (24), Flood (1) |
New Jersey | 51 | Flash Flood (18), High Wind (18), Coastal Flood (5), Tropical Storm (4), Heavy Rain (3), Hurricane (Typhoon) (3) |
Maryland | 43 | Flash Flood (15), High Wind (11), Tropical Storm (6), Storm Surge/Tide (5), Hurricane (Typhoon) (4), Heavy Rain (2) |
Massachusetts | 37 | Strong Wind (12), Heavy Rain (11), High Wind (11), Flash Flood (2), Flood (1) |
South Carolina | 33 | Thunderstorm Wind (13), Hurricane (Typhoon) (11), High Wind (5), Flash Flood (4) |
Maine | 23 | High Wind (12), Flash Flood (6), Flood (5) |
Florida | 21 | Hurricane (Typhoon) (13), Thunderstorm Wind (5), Flash Flood (2), Tornado (1) |
Connecticut | 18 | Flash Flood (7), Heavy Rain (4), Strong Wind (3), Flood (2), High Wind (2) |
Vermont | 17 | High Wind (14), Flash Flood (3) |
Rhode Island | 14 | Heavy Rain (5), Strong Wind (5), Flash Flood (2), High Wind (2) |
Georgia | 13 | Hurricane (Typhoon) (13) |
Delaware | 8 | Flash Flood (3), High Wind (3), Coastal Flood (2) |
New Hampshire | 8 | Flood (3), Flash Flood (2), Heavy Rain (2), Strong Wind (1) |
District Of Columbia | 2 | Flash Flood (1), Tropical Storm (1) |
To see examples of how data pulled from find_events
can
be visualized, visit the article on “Mapping
Events”. For more details on the underlying data and how the package
processes it, see the “Details”
article.