Sample: ArcGIS Pro with Additional Analysis

Massachusetts Courthouse Locations & Public Transportation Infrastructure: The Implications of Transit on Courthouse Access

Megan Georges
2022-08-23

Introduction

Barriers are central to discussions surrounding the criminal justice system and system-involved individuals. A key topic faced is transportation. The “five A’s” describe the primary factors related to transportation that present issues for individuals: “affordability, accessibility, applicability, availability, and awareness”.

Transportation is a significant consideration for employment, healthcare, groceries/products, and access to government locations like courthouses. Massachusetts comprises of 7 types of trial courts, including Superior Court, District Court, Boston Municipal Court, Housing Court, Juvenile Court, Land Court, and Probate and Family Court. This research initially began as an inquiry into the accessibility of courthouses for system-involved individuals – attempting to identify barriers to compliance with court dates/appointments. It evolved into a state-wide examination of general public access to courthouses via the state’s public transit infrastructure.

Primary Goals:

Overview of Data

Shape Files:

From the Massachusetts Bureau of Geographic Information through MassGIS and the Massachusetts Department of Transportation Open Data Portal through massDOT

Data Sets:

From the United States Census Bureau through census.gov and MA Court Data, Metrics, and Reports through Mass.gov

Study Area

Massachusetts by county

MA Public Transit Overview

Courthouse locations and bus/train routes (not included: bus/train stops)

RTA Coverage

The Regional Transit Authority (RTA) provides public transportation systems across Massachusetts. The RTA has 15 defined coverage areas.

Red indicates areas excluded from RTA coverage

Steps in ArcGIS Pro:

# import data table
RTA_Coverage <- read_excel("RTA_coverage_data.xls")
RTA_Coverage <- select(RTA_Coverage, "COUNTY", "MiSQ", "MiSQExcl")
# Calculate percentage without coverage in each county
RTA_Coverage <- RTA_Coverage %>%
  group_by(COUNTY) %>% 
  mutate(Percentage=paste0(round(MiSQExcl/MiSQ*100, 1),"%"))
kable(RTA_Coverage, col.names = c("County", "Area (sq mi)", 
                                  "Area w/o RTA Coverage (sq mi)",
                                  "Percentage of County w/o RTA Coverage"), 
      align = c('c', 'c', 'c', 'c')) %>% 
  add_header_above(c("Percentage of Area per County not Covered by an RTA System" = 4)) %>% 
  kable_styling() %>% 
  scroll_box(height = "100%", width = "100%")
Percentage of Area per County not Covered by an RTA System
County Area (sq mi) Area w/o RTA Coverage (sq mi) Percentage of County w/o RTA Coverage
BARNSTABLE 411.9740 0.1448718 0%
BERKSHIRE 946.3420 174.1378326 18.4%
BRISTOL 571.7110 0.9371677 0.2%
DUKES 106.4660 13.4747152 12.7%
ESSEX 513.2210 141.8912659 27.6%
FRANKLIN 724.4930 10.8300152 1.5%
HAMPDEN 634.1160 77.5864792 12.2%
MIDDLESEX 846.4100 163.2825623 19.3%
NANTUCKET 48.9112 0.0213758 0%
NORFOLK 409.4450 214.5567932 52.4%
PLYMOUTH 689.5540 129.9457397 18.8%
SUFFOLK 60.9833 2.9424100 4.8%
WORCESTER 1579.1600 86.1403275 5.5%

From this, we can see that Norfolk County is the least covered county by the RTA, with 52.4% of the county excluded from RTA’s defined boundaries.

Distribution of Courthouses Across MA

Next, I imported county populations and evaluated the proportion of courthouses in each county based on population and based on county area.

Courthouse to county population ratio
Courthouse to county area ratio

Closest Bus or Train Stop to Each Courthouse

Steps to calculate distance from closest stop to courthouse in ArcGIS Pro:

# Import data
Courthouse_Stops <- read_excel("../Samples/courthouse_stops.xls")
Courthouse_Stops <- select(Courthouse_Stops, "NAME", "CITY", "COUNTY", "NEAR_DIST")
# Convert from Meters to Miles
Courthouse_Stops$NEAR_DIST <- Courthouse_Stops$NEAR_DIST*0.00062137
# Calculate summary stats for entire state
round(summary(Courthouse_Stops$NEAR_DIST), digits = 2) 
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   0.01    0.04    0.07    0.21    0.14    2.69 

Across the state, the average distance from the closest bus/train stop to courthouse is 0.21 miles, and the longest distance is 2.69 miles.

# Summary stats by county
Stops_Summary <- Courthouse_Stops %>% 
  group_by(COUNTY) %>% 
  summarize(min = min(NEAR_DIST),
            med = median(NEAR_DIST), 
            mean = mean(NEAR_DIST), 
            max = max(NEAR_DIST))

Stops_Summary <- data.frame(lapply(Stops_Summary,
                function(x) if(is.numeric(x)) round(x, 2) else x))

kable(Stops_Summary, col.names = c("County", "Min", "Median", "Mean", "Max"), align = c('c', 'c', 'c', 'c', 'c')) %>% add_header_above(c("Summary Statistics for Distance from Closest Stop to Courthouse by County" = 5)) %>% kable_styling() %>% scroll_box(height = "100%", width = "100%")
Summary Statistics for Distance from Closest Stop to Courthouse by County
County Min Median Mean Max
Barnstable 0.02 0.07 0.10 0.24
Berkshire 0.04 0.08 0.10 0.18
Bristol 0.03 0.04 0.08 0.26
Dukes 0.04 0.05 0.05 0.06
Essex 0.01 0.05 0.06 0.18
Franklin 0.10 0.14 0.14 0.17
Hampden 0.03 0.13 0.19 0.70
Hampshire 0.03 0.05 0.35 1.27
Middlesex 0.02 0.05 0.13 0.83
Nantucket 0.03 0.03 0.03 0.03
Norfolk 0.05 0.12 0.27 1.35
Plymouth 0.02 0.07 0.15 0.37
Suffolk 0.02 0.05 0.06 0.12
Worcester 0.01 0.79 0.91 2.69

It looks like Worcester County has the courthouse that is 2.69 miles from the closest bus or train stop.

# Restructure data to plot
Long_Stops_Summary <- Stops_Summary %>%
  pivot_longer(c(min, med, mean, max), names_to = "Summary_Type", values_to = "Value")
# Plot summary stats by county
Vec <- c("min", "med", "mean", "max")
DSgg <- ggplot(data = Long_Stops_Summary, 
               mapping = aes(x = factor(Summary_Type, 
                                        levels = unique(Vec)), 
                             y = Value)) + 
  geom_point(color = "darkblue", size = 2) +
  facet_wrap(vars(COUNTY), ncol = 5) +
  labs(title = "Distance from Closest Bus or Train Stop to Courthouse",
       subtitle = "Summary Statistics by County", 
       x = "Summary Statistics Type", 
       y = "Distance to Courthouse") +
  theme_bw(base_size = 12) +
  theme(text=element_text(family="serif"))+
  theme(axis.text.x = element_text(angle = 90))
DSgg

Most counties have a bus or train stop on average below 0.5 miles from their courthouses.

Area Outside of 5 Miles from a Stop for Each County

Let’s see which counties have more and less coverage based on county area and bus/train stop dispersion.

Steps to calculate in ArcGIS Pro:

Outside5 <- read_excel("Counties_5miles.xls")
Outside5 <- select(Outside5, "COUNTIES_POLYM.COUNTY",
                   "COUNTIES_POLYM.area_mi", 
                   "5mille_stp_cnty.mil5_area") %>%
  rename("County" = "COUNTIES_POLYM.COUNTY", 
         "Area" = "COUNTIES_POLYM.area_mi", 
         "Outside_Area" = "5mille_stp_cnty.mil5_area")
Outside5$Outside_Area[is.na(Outside5$Outside_Area)] <- 0
Outside5 <- Outside5 %>%
  mutate(Percentage=paste0(round(Outside_Area/Area*100, 1),"%"))

kable(Outside5, col.names = c("County", "Area (sq mi)", 
                              "Area Outside 5 Miles of Stop", 
                              "% of County Outside 5 Miles of a Stop"), 
      align = c('c', 'c', 'c', 'c')) %>% 
  add_header_above(c("Percentage of Area per County Outside 5 Miles of a Bus or Train Stop" = 4)) %>% 
  kable_styling() %>% 
  scroll_box(height = "100%", width = "100%")
Percentage of Area per County Outside 5 Miles of a Bus or Train Stop
County Area (sq mi) Area Outside 5 Miles of Stop % of County Outside 5 Miles of a Stop
BERKSHIRE 946.3980 442.98901 46.8%
BRISTOL 571.8640 72.11630 12.6%
DUKES 109.8960 11.99290 10.9%
ESSEX 514.9040 36.17110 7%
BARNSTABLE 412.4770 6.57529 1.6%
HAMPSHIRE 545.2690 243.94200 44.7%
MIDDLESEX 846.5920 91.96370 10.9%
FRANKLIN 724.5880 195.54900 27%
HAMPDEN 634.0580 324.04599 51.1%
NANTUCKET 49.0269 5.18355 10.6%
NORFOLK 408.5400 3.73558 0.9%
PLYMOUTH 689.7700 17.02720 2.5%
SUFFOLK 59.7386 0.00000 0%
WORCESTER 1579.2100 486.16901 30.8%

Concluding Discussion