Source: EPA’s National Walkability Index, 2021
From the EPA: “The National Walkability Index is a nationwide geographic data resource that ranks block groups according to their relative walkability. The national dataset includes walkability scores for all block groups as well as the underlying attributes that are used to rank the block groups.”
The Walkability Index is based on measures of the built environment derived from EPA’s Smart Location Database. The Index is calculated as a function of block rankings on a series of indicators:
\[ Walkability \space Index = \left(\frac{w}{3}\right) + \left(\frac{x}{3}\right) + \left(\frac{y}{3}\right) + \left(\frac{z}{6}\right)\]
Where
For more, see the EPA’s “National Walkability Index Methodology and User Guide”.
glimpse(walk)
## Rows: 155
## Columns: 16
## $ FIPS_TRACT <dbl> 51540000502, 51540000502, 51540000502, 5154000050…
## $ FIPS_BLKGP <chr> "515400005022", "515400005023", "515400005024", "…
## $ STATEFP <dbl> 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 5…
## $ COUNTYFP <chr> "540", "540", "540", "540", "540", "540", "540", …
## $ TRACTCE <chr> "000502", "000502", "000502", "000502", "000600",…
## $ BLKGRPCE <dbl> 2, 3, 4, 5, 1, 2, 3, 2, 3, 4, 1, 5, 3, 3, 1, 4, 2…
## $ intersection_density <dbl> 75.554437, 52.477706, 64.177938, 60.630232, 146.6…
## $ proximity_transit <dbl> 527.06, 325.89, 236.04, 544.49, 319.19, 693.36, 8…
## $ employment_mix <dbl> 0.53865306, 0.51282003, 0.10395780, 0.66573695, 0…
## $ emp_housing_mix <dbl> 0.1937425, 0.3625699, 0.5550809, 0.8216670, 0.175…
## $ emp_hou_mix_rank <dbl> 3, 6, 12, 19, 2, 16, 10, 15, 17, 10, 17, 7, 19, 5…
## $ emp_mix_rank <dbl> 9, 9, 2, 14, 1, 3, 3, 12, 14, 17, 20, 9, 14, 9, 2…
## $ int_density_rank <dbl> 12, 10, 11, 11, 17, 18, 12, 15, 5, 4, 5, 6, 6, 2,…
## $ prox_transit_rank <dbl> 15, 17, 19, 15, 17, 14, 13, 14, 1, 1, 1, 1, 1, 1,…
## $ walkability_index <dbl> 11.000000, 11.500000, 12.333333, 14.166667, 11.83…
## $ walkability_bins <chr> "Above Average Walkable", "Above Average Walkable…
Five-number summaries of all variables:
walk %>% select(intersection_density:walkability_bins) %>%
as.data.frame() %>%
stargazer(., type = "text", title = "Summary Statistics", digits = 0,
summary.stat = c("mean", "sd", "min", "median", "max"))
##
## Summary Statistics
## ===================================================
## Statistic Mean St. Dev. Min Median Max
## ---------------------------------------------------
## intersection_density 48 78 1 12 601
## proximity_transit 448 262 0 386 1,140
## employment_mix 1 0 0 1 1
## emp_housing_mix 1 0 0 1 1
## emp_hou_mix_rank 11 5 1 11 20
## emp_mix_rank 11 6 1 11 20
## int_density_rank 8 5 1 5 20
## prox_transit_rank 7 8 1 1 20
## walkability_index 8 4 3 7 20
## ---------------------------------------------------
walk %>%
select(FIPS_BLKGP, walkability_index, intersection_density, proximity_transit, employment_mix, emp_housing_mix) %>%
pivot_longer(-FIPS_BLKGP, names_to = "measure", values_to = "value") %>%
ggplot(aes(x = value, fill = measure)) +
geom_histogram() +
facet_wrap(~measure, scales = "free") +
guides(fill = "none")
meta %>%
filter(varname %in% c("walkability_index", "intersection_density",
"proximity_transit", "employment_mix",
"emp_housing_mix")) %>%
mutate(label = paste0(varname, ": ", description)) %>%
select(label) %>%
as.list()
## $label
## [1] "intersection_density: Street intersection density, measured in street intersections per acre. Higher intersection density is correlated with more walk trips (derived from 2018 HERE maps NAVSTREETS)"
## [2] "proximity_transit: Proximity to transit stops, measured in meters from population-weighted centroid of block group to nearest transit stop. Distance from population center to nearest transit stop in meters. Shorter distances correlate with more walk trips (areas with no transit stops are missing; dervied from 2020 GTFS, 2020 COTD)"
## [3] "employment_mix: The mix of employment types in a block group (such as retail, office, or industrial). Higher values correlate with more walk trips (derived from 2017 LEHD WAC)"
## [4] "emp_housing_mix: The mix of employment types and occupied housing. A block group with a diverse set of employment types (such as office, retail, and service) plus a large quantity of occupied housing units will have a relatively high value. Higher values correlate with more walk trips (derived from 2017 LEHD WAC)"
## [5] "walkability_index: Calculated by weighted formula using results of indicator rank scores."
walk %>%
ggplot(aes(x = walkability_index, fill = COUNTYFP)) +
geom_histogram() +
facet_wrap(~COUNTYFP) +
guides(fill = "none")
pal <- colorNumeric("plasma", reverse = TRUE, domain = cville_maps$walkability_index)
leaflet(cville_maps) %>%
addProviderTiles("CartoDB.Positron") %>%
addPolygons(data = cville_maps,
fillColor = ~pal(walkability_index),
weight = 1,
opacity = 1,
color = "white",
fillOpacity = 0.6,
highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
popup = paste0("Tract Number: ", cville_maps$GEOID, "<br>",
"Walkability Index: ", round(cville_maps$walkability_index, 2))) %>%
addLegend("bottomright", pal = pal, values = cville_maps$walkability_index,
title = "Walkability Index", opacity = 0.7)
pal <- colorNumeric("plasma", reverse = TRUE, domain = cville_maps$intersection_density)
leaflet(cville_maps) %>%
addProviderTiles("CartoDB.Positron") %>%
addPolygons(data = cville_maps,
fillColor = ~pal(intersection_density),
weight = 1,
opacity = 1,
color = "white",
fillOpacity = 0.6,
highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
popup = paste0("Tract Number: ", cville_maps$GEOID, "<br>",
"Intersection Density: ", round(cville_maps$intersection_density, 2))) %>%
addLegend("bottomright", pal = pal, values = cville_maps$intersection_density,
title = "Intersection Density", opacity = 0.7)
pal <- colorNumeric("plasma", reverse = TRUE, domain = cville_maps$employment_mix)
leaflet(cville_maps) %>%
addProviderTiles("CartoDB.Positron") %>%
addPolygons(data = cville_maps,
fillColor = ~pal(employment_mix),
weight = 1,
opacity = 1,
color = "white",
fillOpacity = 0.6,
highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
popup = paste0("Tract Number: ", cville_maps$GEOID, "<br>",
"Employment Mix: ", round(cville_maps$employment_mix, 2))) %>%
addLegend("bottomright", pal = pal, values = cville_maps$employment_mix,
title = "Employment Mix", opacity = 0.7)
pal <- colorNumeric("plasma", reverse = TRUE, domain = cville_maps$emp_housing_mix)
leaflet(cville_maps) %>%
addProviderTiles("CartoDB.Positron") %>%
addPolygons(data = cville_maps,
fillColor = ~pal(emp_housing_mix),
weight = 1,
opacity = 1,
color = "white",
fillOpacity = 0.6,
highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
popup = paste0("Tract Number: ", cville_maps$GEOID, "<br>",
"Employment-Housing Mix: ", round(cville_maps$emp_housing_mix, 2))) %>%
addLegend("bottomright", pal = pal, values = cville_maps$emp_housing_mix,
title = "Employment-Housing Mix", opacity = 0.7)
pal <- colorNumeric("plasma", reverse = TRUE, domain = cville_maps$proximity_transit)
leaflet(cville_maps) %>%
addProviderTiles("CartoDB.Positron") %>%
addPolygons(data = cville_maps,
fillColor = ~pal(proximity_transit),
weight = 1,
opacity = 1,
color = "white",
fillOpacity = 0.6,
highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
popup = paste0("Tract Number: ", cville_maps$GEOID, "<br>",
"Proximity to Transit: ", round(cville_maps$proximity_transit, 2))) %>%
addLegend("bottomright", pal = pal, values = cville_maps$proximity_transit,
title = "Proximity to Transit", opacity = 0.7)
pal <- colorNumeric("plasma", reverse = TRUE, domain = cville_maps2$avg_walkability_index)
leaflet(cville_maps2) %>%
addProviderTiles("CartoDB.Positron") %>%
addPolygons(data = cville_maps2,
fillColor = ~pal(avg_walkability_index),
weight = 1,
opacity = 1,
color = "white",
fillOpacity = 0.6,
highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
popup = paste0("Tract Number: ", cville_maps2$GEOID, "<br>",
"Average Walkability Index: ", round(cville_maps2$avg_walkability_index, 2))) %>%
addLegend("bottomright", pal = pal, values = cville_maps2$avg_walkability_index,
title = "Average <br> Walkability <br> Index", opacity = 0.7)
pal <- colorNumeric("plasma", reverse = TRUE, domain = cville_maps2$avg_intersection_density)
leaflet(cville_maps2) %>%
addProviderTiles("CartoDB.Positron") %>%
addPolygons(data = cville_maps2,
fillColor = ~pal(avg_intersection_density),
weight = 1,
opacity = 1,
color = "white",
fillOpacity = 0.6,
highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
popup = paste0("Tract Number: ", cville_maps2$GEOID, "<br>",
"Intersection Density: ", round(cville_maps2$avg_intersection_density, 2))) %>%
addLegend("bottomright", pal = pal, values = cville_maps2$avg_intersection_density,
title = "Intersection Density", opacity = 0.7)
pal <- colorNumeric("plasma", reverse = TRUE, domain = cville_maps2$avg_employment_mix)
leaflet(cville_maps2) %>%
addProviderTiles("CartoDB.Positron") %>%
addPolygons(data = cville_maps2,
fillColor = ~pal(avg_employment_mix),
weight = 1,
opacity = 1,
color = "white",
fillOpacity = 0.6,
highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
popup = paste0("Tract Number: ", cville_maps2$GEOID, "<br>",
" Average Employment-Housing Mix: ", round(cville_maps2$avg_employment_mix, 2))) %>%
addLegend("bottomright", pal = pal, values = cville_maps2$avg_employment_mix,
title = "Average <br> Employment-Housing <br> Mix", opacity = 0.7)
pal <- colorNumeric("plasma", reverse = TRUE, domain = cville_maps2$avg_emp_housing_mix)
leaflet(cville_maps2) %>%
addProviderTiles("CartoDB.Positron") %>%
addPolygons(data = cville_maps2,
fillColor = ~pal(avg_emp_housing_mix),
weight = 1,
opacity = 1,
color = "white",
fillOpacity = 0.6,
highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
popup = paste0("Tract Number: ", cville_maps2$GEOID, "<br>",
" Average Employment-Housing Mix: ", round(cville_maps2$avg_emp_housing_mix, 2))) %>%
addLegend("bottomright", pal = pal, values = cville_maps2$avg_emp_housing_mix,
title = "Average <br> Employment-Housing <br> Mix", opacity = 0.7)
pal <- colorNumeric("plasma", reverse = TRUE, domain = cville_maps2$proximity_transit)
leaflet(cville_maps2) %>%
addProviderTiles("CartoDB.Positron") %>%
addPolygons(data = cville_maps2,
fillColor = ~pal(avg_proximity_transit),
weight = 1,
opacity = 1,
color = "white",
fillOpacity = 0.6,
highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
popup = paste0("Tract Number: ", cville_maps2$GEOID, "<br>",
" Average Proximity to Transit: ", round(cville_maps2$avg_proximity_transit, 2))) %>%
addLegend("bottomright", pal = pal, values = cville_maps2$avg_proximity_transit,
title = "Average <br> Proximity to Transit", opacity = 0.7)