zip_codes <- st_read('../assign7/R-Spatial_I_Lab/ZIP_CODE_040114/ZIP_CODE_040114.shp')
## Reading layer `ZIP_CODE_040114' from data source
## `/Users/williamcornejo/Desktop/Desktop - william’s MacBook Air/school/gtech705/gtech78520/assign7/R-Spatial_I_Lab/ZIP_CODE_040114/ZIP_CODE_040114.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 263 features and 12 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 913129 ymin: 120020.9 xmax: 1067494 ymax: 272710.9
## Projected CRS: NAD83 / New York Long Island (ftUS)
health_facilities <- read.csv('../assign7/R-Spatial_I_Lab/NYS_Health_Facility 3(in).csv')
hf_df <- health_facilities[!is.na(health_facilities$Facility.Longitude), ]
hf_df <- hf_df[!is.na(hf_df$Facility.Latitude), ]
hf_df <- hf_df[!is.na(hf_df$Facility.Longitude), ]
hf_df <- hf_df[hf_df$Facility.Latitude != 0, ]
hf_df <- hf_df[hf_df$Facility.Longitude != 0, ]
hf_sf <- st_as_sf(hf_df, coords = c("Facility.Longitude", "Facility.Latitude"))
#Prepare zipcode and covid join
covid_3 <- read.csv('../assign8/R-Spatial_II_Lab/tests-by-zcta_2021_04_23.csv')
# Read zip code data as spatial
zip_codes_1 <- st_transform(zip_codes, 4326)
# Join by zipcode
# Convert zcta to char
covid_3 <- covid_3[!is.na(covid_3$MODIFIED_ZCTA), ]
covid_3_sf <- st_as_sf(covid_3, coords = c("lon", "lat"), crs=4326)
covid_3$MODZCTA_2 <- as.character(covid_3$MODIFIED_ZCTA)
covid_3_sf$MODZCTA_2 <- as.character(covid_3_sf$MODIFIED_ZCTA)
covid_3_join <- base::merge(covid_3, zip_codes_1, by.x='MODZCTA_2', by.y='ZIPCODE')
covid_3_join <- st_as_sf(covid_3_join, coords = c("lon", "lat"), crs=4326)
covid_3_join <- covid_3_join %>%
rename(ZIPCODE = MODZCTA_2)
# Join with just st_join
covid_3_sf <- st_join(zip_codes_1, covid_3_sf)
# acs and census
acsData <- readLines("../assign8/R-Spatial_II_Lab/ACSDP5Y2018.DP05_data_with_overlays_2020-04-22T132935.csv") %>%
magrittr::extract(-2) %>%
textConnection() %>%
read.csv(header=TRUE, quote= "\"") %>%
dplyr::select(GEO_ID,
totPop = DP05_0001E, elderlyPop = DP05_0024E, # >= 65
malePop = DP05_0002E, femalePop = DP05_0003E,
whitePop = DP05_0037E, blackPop = DP05_0038E,
asianPop = DP05_0067E, hispanicPop = DP05_0071E,
adultPop = DP05_0021E, citizenAdult = DP05_0087E) %>%
dplyr::mutate(censusCode = stringr::str_sub(GEO_ID, -9,-1));
nycCensus <- sf::st_read('../assign8/R-Spatial_II_Lab/2010 Census Tracts/geo_export_1dc7b645-647b-4806-b9a0-7b79660f120a.shp', stringsAsFactors = FALSE)
## Reading layer `geo_export_1dc7b645-647b-4806-b9a0-7b79660f120a' from data source `/Users/williamcornejo/Desktop/Desktop - william’s MacBook Air/school/gtech705/gtech78520/assign8/R-Spatial_II_Lab/2010 Census Tracts/geo_export_1dc7b645-647b-4806-b9a0-7b79660f120a.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 2165 features and 11 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -74.25559 ymin: 40.49612 xmax: -73.70001 ymax: 40.91553
## Geodetic CRS: WGS84(DD)
nycCensus %<>% dplyr::mutate(cntyFIPS = case_when(
boro_name == 'Bronx' ~ '005',
boro_name == 'Brooklyn' ~ '047',
boro_name == 'Manhattan' ~ '061',
boro_name == 'Queens' ~ '081',
boro_name == 'Staten Island' ~ '085'),
tractFIPS = paste(cntyFIPS, ct2010, sep='')
)
# Make new column from nycCensus$boroct201, where we add 1400000US3600 to it
# And name it GEO_ID, which is optional
acsData %>%
magrittr::extract(1:10,)
## GEO_ID totPop elderlyPop malePop femalePop whitePop blackPop
## 1 1400000US36005000100 7080 51 6503 577 1773 4239
## 2 1400000US36005000200 4542 950 2264 2278 2165 1279
## 3 1400000US36005000400 5634 710 2807 2827 2623 1699
## 4 1400000US36005001600 5917 989 2365 3552 2406 2434
## 5 1400000US36005001900 2765 76 1363 1402 585 1041
## 6 1400000US36005002000 9409 977 4119 5290 3185 4487
## 7 1400000US36005002300 4600 648 2175 2425 479 2122
## 8 1400000US36005002400 172 0 121 51 69 89
## 9 1400000US36005002500 5887 548 2958 2929 903 1344
## 10 1400000US36005002701 2868 243 1259 1609 243 987
## asianPop hispanicPop adultPop citizenAdult censusCode
## 1 130 2329 6909 6100 005000100
## 2 119 3367 3582 2952 005000200
## 3 226 3873 4507 4214 005000400
## 4 68 3603 4416 3851 005001600
## 5 130 1413 2008 1787 005001900
## 6 29 5905 6851 6170 005002000
## 7 27 2674 3498 3056 005002300
## 8 14 0 131 42 005002400
## 9 68 4562 4237 2722 005002500
## 10 0 1985 1848 1412 005002701
# Merge (JOIN) ACS data to the census tracts
popData <- merge(nycCensus, acsData, by.x ='tractFIPS', by.y = 'censusCode')
# Aggregate ACS to census
popData_1 <- st_transform(popData, 4326)
# Final dataframe with zipcodes, census tracts,
#c_final <- st_join(covid_3_sf_new_1, popData_1)
popData_2 <- st_join(zip_codes_1, popData_1)
#ggplot2
#ggplot(c_final) + geom_sf(aes(fill=COVID_CASE_RATE))
#pal_elderly <- colorQuantile("YlGnBu",
# domain = c(min(acsCovidDat$eldrlyP, na.rm = T), max(acsCovidDat$eldrlyP, na.rm = T)),
# alpha = TRUE)
case_map <- ggplot() +
geom_sf(data=covid_3_sf, aes(fill=COVID_CASE_RATE))+
ggtitle("COVID-19 Case Rates") +
coord_sf(datum = sf::st_crs(4326))+
theme(
axis.text = element_text(size = 10),
axis.ticks = element_line(linewidth = 0.5),
)
elderly_map <- ggplot() +
geom_sf(data =popData_2, aes(fill=elderlyPop)) +
ggtitle("Elderly Population") +
coord_sf(datum = NA)
#plot(c_final[c("COVID_CASE_RATE","elderlyPop")])
ggarrange(case_map, elderly_map, nrow = 1, ncol = 2, widths = c(1.5,1))
2 Plots
###task 3: Create a web-based interactive map for COVID-19 data using tmap, mapview, or leaflet package and save it as a HTML file.
library(tmap)
html_map <- tm_shape(covid_3_sf) +
tm_polygons("COVID_CASE_RATE",
style="quantile",
title="Covid-19 Case Rate")
tmap_mode("view")
## tmap mode set to interactive viewing
html_map
# This works it just takes too long to run each time
#tmp <- tmap_leaflet(html_map)
#saveWidget(tmp, file = "covid_case_rate_map.html",
# selfcontained = TRUE,
# title = "COVID-19 Interactive Map")
list.files()
## [1] "03-map-making.R"
## [2] "covid_case_rate_map_files"
## [3] "lab_3_example.R"
## [4] "lab9_files"
## [5] "lab9.html"
## [6] "lab9.Rmd"
## [7] "rsconnect"
## [8] "Screen Shot 2025-03-29 at 8.00.01 PM.png"
knitr::include_graphics('Screen Shot 2025-03-29 at 8.00.01 PM.png')
# actually show html file