library(tidyverse)
library(tidyr)
setwd("/Users/Mathew/Downloads/Data Sets - Data 110")
cities500 <- read_csv("500CitiesLocalHealthIndicators.cdc.csv")Healthy Cities GIS Assignment
Load the libraries and set the working directory
The GeoLocation variable has (lat, long) format
Split GeoLocation (lat, long) into two columns: lat and long
latlong <- cities500|>
mutate(GeoLocation = str_replace_all(GeoLocation, "[()]", ""))|>
separate(GeoLocation, into = c("lat", "long"), sep = ",", convert = TRUE)
head(latlong)# A tibble: 6 × 25
Year StateAbbr StateDesc CityName GeographicLevel DataSource Category
<dbl> <chr> <chr> <chr> <chr> <chr> <chr>
1 2017 CA California Hawthorne Census Tract BRFSS Health Outcom…
2 2017 CA California Hawthorne City BRFSS Unhealthy Beh…
3 2017 CA California Hayward City BRFSS Health Outcom…
4 2017 CA California Hayward City BRFSS Unhealthy Beh…
5 2017 CA California Hemet City BRFSS Prevention
6 2017 CA California Indio Census Tract BRFSS Health Outcom…
# ℹ 18 more variables: UniqueID <chr>, Measure <chr>, Data_Value_Unit <chr>,
# DataValueTypeID <chr>, Data_Value_Type <chr>, Data_Value <dbl>,
# Low_Confidence_Limit <dbl>, High_Confidence_Limit <dbl>,
# Data_Value_Footnote_Symbol <chr>, Data_Value_Footnote <chr>,
# PopulationCount <dbl>, lat <dbl>, long <dbl>, CategoryID <chr>,
# MeasureId <chr>, CityFIPS <dbl>, TractFIPS <dbl>, Short_Question_Text <chr>
Filter the dataset
Remove the StateDesc that includes the United Sates, select Prevention as the category (of interest), filter for only measuring crude prevalence and select only 2017.
latlong_clean <- latlong |>
filter(StateDesc != "United States") |>
filter(Category == "Prevention") |>
filter(Data_Value_Type == "Crude prevalence") |>
filter(Year == 2017)
head(latlong_clean)# A tibble: 6 × 25
Year StateAbbr StateDesc CityName GeographicLevel DataSource Category
<dbl> <chr> <chr> <chr> <chr> <chr> <chr>
1 2017 AL Alabama Montgomery City BRFSS Prevention
2 2017 CA California Concord City BRFSS Prevention
3 2017 CA California Concord City BRFSS Prevention
4 2017 CA California Fontana City BRFSS Prevention
5 2017 CA California Richmond Census Tract BRFSS Prevention
6 2017 FL Florida Davie Census Tract BRFSS Prevention
# ℹ 18 more variables: UniqueID <chr>, Measure <chr>, Data_Value_Unit <chr>,
# DataValueTypeID <chr>, Data_Value_Type <chr>, Data_Value <dbl>,
# Low_Confidence_Limit <dbl>, High_Confidence_Limit <dbl>,
# Data_Value_Footnote_Symbol <chr>, Data_Value_Footnote <chr>,
# PopulationCount <dbl>, lat <dbl>, long <dbl>, CategoryID <chr>,
# MeasureId <chr>, CityFIPS <dbl>, TractFIPS <dbl>, Short_Question_Text <chr>
What variables are included? (can any of them be removed?)
names(latlong_clean) [1] "Year" "StateAbbr"
[3] "StateDesc" "CityName"
[5] "GeographicLevel" "DataSource"
[7] "Category" "UniqueID"
[9] "Measure" "Data_Value_Unit"
[11] "DataValueTypeID" "Data_Value_Type"
[13] "Data_Value" "Low_Confidence_Limit"
[15] "High_Confidence_Limit" "Data_Value_Footnote_Symbol"
[17] "Data_Value_Footnote" "PopulationCount"
[19] "lat" "long"
[21] "CategoryID" "MeasureId"
[23] "CityFIPS" "TractFIPS"
[25] "Short_Question_Text"
Remove the variables that will not be used in the assignment
prevention <- latlong_clean |>
select(-DataSource,-Data_Value_Unit, -DataValueTypeID, -Low_Confidence_Limit, -High_Confidence_Limit, -Data_Value_Footnote_Symbol, -Data_Value_Footnote)
head(prevention)# A tibble: 6 × 18
Year StateAbbr StateDesc CityName GeographicLevel Category UniqueID Measure
<dbl> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 2017 AL Alabama Montgome… City Prevent… 151000 Choles…
2 2017 CA California Concord City Prevent… 616000 Visits…
3 2017 CA California Concord City Prevent… 616000 Choles…
4 2017 CA California Fontana City Prevent… 624680 Visits…
5 2017 CA California Richmond Census Tract Prevent… 0660620… Choles…
6 2017 FL Florida Davie Census Tract Prevent… 1216475… Choles…
# ℹ 10 more variables: Data_Value_Type <chr>, Data_Value <dbl>,
# PopulationCount <dbl>, lat <dbl>, long <dbl>, CategoryID <chr>,
# MeasureId <chr>, CityFIPS <dbl>, TractFIPS <dbl>, Short_Question_Text <chr>
md <- prevention |>
filter(StateAbbr=="MD")
head(md)# A tibble: 6 × 18
Year StateAbbr StateDesc CityName GeographicLevel Category UniqueID Measure
<dbl> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 2017 MD Maryland Baltimore Census Tract Preventi… 2404000… "Chole…
2 2017 MD Maryland Baltimore Census Tract Preventi… 2404000… "Visit…
3 2017 MD Maryland Baltimore Census Tract Preventi… 2404000… "Visit…
4 2017 MD Maryland Baltimore Census Tract Preventi… 2404000… "Curre…
5 2017 MD Maryland Baltimore Census Tract Preventi… 2404000… "Curre…
6 2017 MD Maryland Baltimore Census Tract Preventi… 2404000… "Visit…
# ℹ 10 more variables: Data_Value_Type <chr>, Data_Value <dbl>,
# PopulationCount <dbl>, lat <dbl>, long <dbl>, CategoryID <chr>,
# MeasureId <chr>, CityFIPS <dbl>, TractFIPS <dbl>, Short_Question_Text <chr>
The new dataset “Prevention” is a manageable dataset now.
For your assignment, work with the cleaned “Prevention” dataset
1. Once you run the above code, filter this dataset one more time for any particular subset.
I’m going to filter for the city of Sacramento inside of California.
CA_Sacramento <- prevention |>
filter(StateAbbr=="CA")|>
filter(CityName=="Sacramento")
head(CA_Sacramento)# A tibble: 6 × 18
Year StateAbbr StateDesc CityName GeographicLevel Category UniqueID Measure
<dbl> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 2017 CA California Sacramen… Census Tract Prevent… 0664000… "Curre…
2 2017 CA California Sacramen… Census Tract Prevent… 0664000… "Visit…
3 2017 CA California Sacramen… Census Tract Prevent… 0664000… "Chole…
4 2017 CA California Sacramen… Census Tract Prevent… 0664000… "Visit…
5 2017 CA California Sacramen… Census Tract Prevent… 0664000… "Takin…
6 2017 CA California Sacramen… Census Tract Prevent… 0664000… "Visit…
# ℹ 10 more variables: Data_Value_Type <chr>, Data_Value <dbl>,
# PopulationCount <dbl>, lat <dbl>, long <dbl>, CategoryID <chr>,
# MeasureId <chr>, CityFIPS <dbl>, TractFIPS <dbl>, Short_Question_Text <chr>
CA_Sacramento <- CA_Sacramento |>
select(-Category, -CategoryID)
Saccess <- CA_Sacramento |>
filter(MeasureId=="ACCESS2")2. Based on the GIS tutorial (Japan earthquakes), create one plot about something in your subsetted dataset.
Now, let’s compare the data for preventative treatment in Sacramento.
ggplot(CA_Sacramento, aes(x = Data_Value/PopulationCount, y = MeasureId, fill = Short_Question_Text)) +
geom_boxplot() +
labs(title = "Prevalence of Preventative Treatment",
x = "Prevalence in Population",
y = "Treatment Type")Warning: Removed 12 rows containing non-finite values (`stat_boxplot()`).
The graph doesn’t really display a visible difference if we’re comparing the treatments per capita.
ggplot(CA_Sacramento, aes(x = Data_Value, y = MeasureId, fill = Short_Question_Text)) +
geom_boxplot() +
labs(title = "Prevalence of Preventative Treatment",
x = "Prevalence",
y = "Treatment Type")Warning: Removed 12 rows containing non-finite values (`stat_boxplot()`).
This graph displays has a better display of the difference in prevalence.
3. Now create a map of your subsetted dataset.
mean(Saccess$lat)[1] 38.55654
mean(Saccess$long)[1] -121.4698
library(leaflet)leaflet() |>
setView(lng = -121.4698, lat = 38.55654, zoom = 11) |>
addProviderTiles("Esri.NatGeoWorldMap") |>
addCircles(
data = Saccess,
radius = Saccess$Data_Value
)Assuming "long" and "lat" are longitude and latitude, respectively
leaflet() |>
setView(lng = -121.4698, lat = 38.55654, zoom = 11) |>
addProviderTiles("Esri.NatGeoWorldMap") |>
addCircles(
data = Saccess,
radius = Saccess$Data_Value/Saccess$PopulationCount
)Assuming "long" and "lat" are longitude and latitude, respectively
I just wanted to see if making the data relevant to population had an impact on the dot sizes.
4. Refine your map to include a mousover tooltip
Refined map chunk here
Saccess <- Saccess |>
filter(!is.na(Data_Value))tooltip <- paste0(
"<b>Visit Type:</b>", Saccess$Short_Question_Text, "<br>",
"<b>Data Value:</b>", Saccess$Data_Value, "<br>",
"<b>Population:</b>", Saccess$PopulationCount, "<br>"
)
leaflet() |>
setView(lng = -121.4698, lat = 38.55654, zoom = 11) |>
addProviderTiles("Esri.NatGeoWorldMap") |>
addCircles(
data = Saccess,
radius = Saccess$Data_Value,
popup = tooltip
)Assuming "long" and "lat" are longitude and latitude, respectively
5. Write a paragraph
The box plots that I created display the prevalence of different preventative treatments in Sacramento, CA. I chose to create a second box plot after the I couldn’t really interpret the data from the first. The first leaflet I created displays the crude value of prevalence of uninsured individuals between the ages of 18 and 64 within Sacramento in 2017. The second leaflet was a test to see whether the radius of the dots would change based on population count, but I couldn’t see a visible difference. This lead to the creation of the final leaflet with the information being put within a tooltip.
Side Note: The creation of the tooltip took a few extra hours because I didn’t notice the extra comma I had at the end of my code.