# Load libraries
library(sf) # Load sf for handling spatial data and shapefiles
## Warning: package 'sf' was built under R version 4.3.2
## Linking to GEOS 3.11.2, GDAL 3.7.2, PROJ 9.3.0; sf_use_s2() is TRUE
library(tmap) # Load tmap for creating interactive and static maps
## The legacy packages maptools, rgdal, and rgeos, underpinning the sp package,
## which was just loaded, will retire in October 2023.
## Please refer to R-spatial evolution reports for details, especially
## https://r-spatial.org/r/2023/05/15/evolution4.html.
## It may be desirable to make the sf package available;
## package maintainers should consider adding sf to Suggests:.
## The sp package is now running under evolution status 2
## (status 2 uses the sf package in place of rgdal)
## Breaking News: tmap 3.x is retiring. Please test v4, e.g. with
## remotes::install_github('r-tmap/tmap')
library(tidycensus) # Load tidycensus for accessing U.S. Census Bureau data directly
library(dplyr) # For data manipulation functions like mutate
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
###### Question 1
# Set your Census API key ()
## census_api_key("4645b7ba2f363dfb5a199f288801acd96006ea29",install=TRUE, overwrite = TRUE)
# Retrieve Bexar County census tracts with geometry data
bexar_tracts <- get_acs(
geography = "tract",
variables = "B01003_001", # Use total population variable to access boundary data
state = "TX",
county = "Bexar",
geometry = TRUE,
year = 2021
)
## Getting data from the 2017-2021 5-year ACS
## Downloading feature geometry from the Census website. To cache shapefiles for use in future sessions, set `options(tigris_use_cache = TRUE)`.
##
|
| | 0%
|
| | 1%
|
|= | 1%
|
|= | 2%
|
|== | 2%
|
|== | 3%
|
|== | 4%
|
|=== | 4%
|
|=== | 5%
|
|==== | 5%
|
|==== | 6%
|
|===== | 6%
|
|===== | 7%
|
|===== | 8%
|
|====== | 8%
|
|====== | 9%
|
|======= | 9%
|
|======= | 10%
|
|======== | 11%
|
|======== | 12%
|
|========= | 12%
|
|========= | 13%
|
|========== | 14%
|
|========== | 15%
|
|=========== | 15%
|
|=========== | 16%
|
|============ | 17%
|
|============= | 18%
|
|============= | 19%
|
|============== | 19%
|
|============== | 20%
|
|=============== | 21%
|
|=============== | 22%
|
|================ | 23%
|
|================= | 24%
|
|================= | 25%
|
|================== | 26%
|
|=================== | 27%
|
|=================== | 28%
|
|==================== | 28%
|
|==================== | 29%
|
|===================== | 30%
|
|===================== | 31%
|
|====================== | 31%
|
|====================== | 32%
|
|======================= | 32%
|
|======================= | 33%
|
|======================== | 35%
|
|========================= | 35%
|
|========================= | 36%
|
|========================== | 37%
|
|=========================== | 38%
|
|=========================== | 39%
|
|============================ | 40%
|
|============================= | 41%
|
|============================= | 42%
|
|============================== | 43%
|
|=============================== | 44%
|
|=============================== | 45%
|
|================================ | 46%
|
|================================= | 47%
|
|================================== | 48%
|
|================================== | 49%
|
|=================================== | 50%
|
|==================================== | 51%
|
|==================================== | 52%
|
|===================================== | 53%
|
|====================================== | 54%
|
|====================================== | 55%
|
|======================================= | 56%
|
|======================================== | 57%
|
|======================================== | 58%
|
|========================================= | 59%
|
|========================================== | 59%
|
|========================================== | 60%
|
|=========================================== | 61%
|
|=========================================== | 62%
|
|============================================ | 62%
|
|============================================ | 63%
|
|============================================= | 64%
|
|============================================= | 65%
|
|============================================== | 65%
|
|============================================== | 66%
|
|=============================================== | 67%
|
|=============================================== | 68%
|
|================================================ | 68%
|
|================================================ | 69%
|
|================================================= | 70%
|
|================================================== | 71%
|
|================================================== | 72%
|
|=================================================== | 73%
|
|==================================================== | 74%
|
|==================================================== | 75%
|
|===================================================== | 76%
|
|====================================================== | 77%
|
|====================================================== | 78%
|
|======================================================= | 79%
|
|======================================================== | 80%
|
|======================================================== | 81%
|
|========================================================= | 81%
|
|========================================================= | 82%
|
|========================================================== | 82%
|
|========================================================== | 84%
|
|=========================================================== | 84%
|
|============================================================ | 85%
|
|============================================================= | 86%
|
|============================================================= | 87%
|
|============================================================== | 88%
|
|=============================================================== | 89%
|
|=============================================================== | 90%
|
|================================================================ | 91%
|
|================================================================= | 92%
|
|================================================================= | 93%
|
|================================================================== | 94%
|
|================================================================== | 95%
|
|=================================================================== | 95%
|
|=================================================================== | 96%
|
|==================================================================== | 97%
|
|===================================================================== | 98%
|
|===================================================================== | 99%
|
|======================================================================| 100%
# Load the "2017 BOND PROGRAM LINE" shapefile data
bond_program_line <- st_read("C:/Users/haomi/OneDrive/Desktop/TA URP5363 Planning Methods 1/Ass 4/BondProjectLines2017/BondProjectLines2017.shp")
## Reading layer `BondProjectLines2017' from data source
## `C:\Users\haomi\OneDrive\Desktop\TA URP5363 Planning Methods 1\Ass 4\BondProjectLines2017\BondProjectLines2017.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 69 features and 24 fields
## Geometry type: MULTILINESTRING
## Dimension: XY
## Bounding box: xmin: 2078269 ymin: 13665110 xmax: 2168346 ymax: 13783530
## Projected CRS: NAD83 / Texas South Central (ftUS)
# Set tmap to interactive mode
tmap_mode("view")
## tmap mode set to interactive viewing
# Create the map with census tracts as the background and bond lines in green
tm_shape(bexar_tracts) +
tm_borders() + # Display borders for Bexar County census tracts
tm_shape(bond_program_line) +
tm_lines(col = "green") + # Display bond program lines in green
tm_layout(title = "2017 Bond Program Line with Bexar County Census Tracts")
#### Question 2
# Load the "LIBRARIES" shapefile data
libraries <- st_read("C:/Users/haomi/OneDrive/Desktop/TA URP5363 Planning Methods 1/Ass 4/Libraries/Libraries.shp")
## Reading layer `Libraries' from data source
## `C:\Users\haomi\OneDrive\Desktop\TA URP5363 Planning Methods 1\Ass 4\Libraries\Libraries.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 30 features and 9 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: 2075828 ymin: 13669570 xmax: 2170361 ymax: 13779280
## Projected CRS: NAD83 / Texas South Central (ftUS)
# Set tmap to interactive mode
tmap_mode("view")
## tmap mode set to interactive viewing
# Create the map with census tracts as the background and libraries in red
tm_shape(bexar_tracts) +
tm_borders() + # Display borders for Bexar County census tracts
tm_shape(libraries) +
tm_dots(col = "red", size = 0.5) + # Display library points in red
tm_layout(title = "Libraries in Bexar County with Census Tracts Background")
#### Question 3
# Define the variables we want to retrieve
variables <- c(total_population = "B01003_001E", poverty_level = "B17017_002E")
# Retrieve ACS data for Travis County block groups in wide format
travis_data <- get_acs(
geography = "block group", # Set geography level to "block group"
variables = variables, # Specify the variables to retrieve: total population and poverty level
state = "TX", # Specify the state (Texas)
county = "Travis", # Specify the county (Travis County)
geometry = TRUE, # Include geometry data to enable mapping
year = 2020, # Specify the year of the ACS data
output = "wide" # Output data in wide format for easier manipulation
)
## Getting data from the 2016-2020 5-year ACS
## Downloading feature geometry from the Census website. To cache shapefiles for use in future sessions, set `options(tigris_use_cache = TRUE)`.
##
|
| | 0%
|
| | 1%
|
|= | 1%
|
|= | 2%
|
|== | 2%
|
|== | 3%
|
|=== | 4%
|
|=== | 5%
|
|==== | 5%
|
|==== | 6%
|
|===== | 7%
|
|===== | 8%
|
|====== | 8%
|
|====== | 9%
|
|======= | 10%
|
|======= | 11%
|
|======== | 11%
|
|======== | 12%
|
|========= | 13%
|
|========== | 14%
|
|========== | 15%
|
|=========== | 16%
|
|============ | 17%
|
|============ | 18%
|
|============= | 18%
|
|============= | 19%
|
|============== | 20%
|
|=============== | 21%
|
|=============== | 22%
|
|================ | 23%
|
|================= | 24%
|
|================= | 25%
|
|================== | 25%
|
|================== | 26%
|
|=================== | 27%
|
|=================== | 28%
|
|==================== | 28%
|
|==================== | 29%
|
|===================== | 29%
|
|===================== | 30%
|
|===================== | 31%
|
|====================== | 31%
|
|====================== | 32%
|
|======================= | 32%
|
|======================= | 33%
|
|======================== | 34%
|
|======================== | 35%
|
|========================= | 35%
|
|========================= | 36%
|
|========================== | 37%
|
|=========================== | 38%
|
|=========================== | 39%
|
|============================ | 40%
|
|============================= | 41%
|
|============================= | 42%
|
|============================== | 42%
|
|============================== | 43%
|
|=============================== | 44%
|
|================================ | 45%
|
|================================ | 46%
|
|================================= | 47%
|
|================================== | 48%
|
|================================== | 49%
|
|=================================== | 50%
|
|==================================== | 51%
|
|==================================== | 52%
|
|===================================== | 53%
|
|====================================== | 54%
|
|====================================== | 55%
|
|======================================= | 55%
|
|======================================= | 56%
|
|======================================== | 57%
|
|======================================== | 58%
|
|========================================= | 58%
|
|========================================= | 59%
|
|========================================== | 60%
|
|========================================== | 61%
|
|=========================================== | 61%
|
|=========================================== | 62%
|
|============================================ | 62%
|
|============================================ | 63%
|
|============================================ | 64%
|
|============================================= | 64%
|
|============================================= | 65%
|
|============================================== | 65%
|
|============================================== | 66%
|
|=============================================== | 66%
|
|=============================================== | 67%
|
|=============================================== | 68%
|
|================================================ | 68%
|
|================================================ | 69%
|
|================================================= | 69%
|
|================================================= | 70%
|
|================================================== | 71%
|
|================================================== | 72%
|
|=================================================== | 72%
|
|=================================================== | 73%
|
|==================================================== | 74%
|
|==================================================== | 75%
|
|===================================================== | 75%
|
|===================================================== | 76%
|
|====================================================== | 77%
|
|======================================================= | 78%
|
|======================================================= | 79%
|
|======================================================== | 80%
|
|========================================================= | 81%
|
|========================================================= | 82%
|
|========================================================== | 83%
|
|=========================================================== | 84%
|
|=========================================================== | 85%
|
|============================================================ | 86%
|
|============================================================= | 87%
|
|============================================================= | 88%
|
|============================================================== | 88%
|
|============================================================== | 89%
|
|=============================================================== | 90%
|
|================================================================ | 91%
|
|================================================================ | 92%
|
|================================================================= | 92%
|
|================================================================= | 93%
|
|================================================================== | 94%
|
|================================================================== | 95%
|
|=================================================================== | 95%
|
|=================================================================== | 96%
|
|==================================================================== | 96%
|
|==================================================================== | 97%
|
|==================================================================== | 98%
|
|===================================================================== | 98%
|
|===================================================================== | 99%
|
|======================================================================| 99%
|
|======================================================================| 100%
# Calculate poverty rate by dividing poverty level by total population
travis_data <- travis_data %>%
mutate(poverty_rate = poverty_level / total_population)
# Set tmap to interactive mode to enable a dynamic map
tmap_mode("view")
## tmap mode set to interactive viewing
# Create map showing poverty rate with a green to red color gradient
# Start creating the map by defining the base shape data
tm_shape(travis_data) +
tm_polygons(
col = "poverty_rate", # Use the poverty_rate column to define polygon colors
palette = "RdYlGn", # Apply RdYlGn color palette with multiple contrasting colors
title = "Poverty Rate" # Set the title for the legend to "Poverty Rate"
) + tm_layout(
title = "Poverty Rate in Travis County Block Groups" # Set the main title for the map
)
#### Question 4
# Retrieve Bexar County census tracts with geometry data
bexar_tracts <- get_acs(
geography = "tract",
variables = "B01003_001", # Use total population variable to access boundary data
state = "TX",
county = "Bexar",
geometry = TRUE,
year = 2021
)
## Getting data from the 2017-2021 5-year ACS
## Downloading feature geometry from the Census website. To cache shapefiles for use in future sessions, set `options(tigris_use_cache = TRUE)`.
# Check and set the coordinate systems for Bexar County census tracts and Libraries data
# Ensure that both datasets are using the same coordinate reference system (CRS)
# Check the CRS of both datasets
st_crs(bexar_tracts) # Display CRS of bexar_tracts
## Coordinate Reference System:
## User input: NAD83
## wkt:
## GEOGCRS["NAD83",
## DATUM["North American Datum 1983",
## ELLIPSOID["GRS 1980",6378137,298.257222101,
## LENGTHUNIT["metre",1]]],
## PRIMEM["Greenwich",0,
## ANGLEUNIT["degree",0.0174532925199433]],
## CS[ellipsoidal,2],
## AXIS["latitude",north,
## ORDER[1],
## ANGLEUNIT["degree",0.0174532925199433]],
## AXIS["longitude",east,
## ORDER[2],
## ANGLEUNIT["degree",0.0174532925199433]],
## ID["EPSG",4269]]
st_crs(libraries) # Display CRS of libraries
## Coordinate Reference System:
## User input: NAD83 / Texas South Central (ftUS)
## wkt:
## PROJCRS["NAD83 / Texas South Central (ftUS)",
## BASEGEOGCRS["NAD83",
## DATUM["North American Datum 1983",
## ELLIPSOID["GRS 1980",6378137,298.257222101,
## LENGTHUNIT["metre",1]]],
## PRIMEM["Greenwich",0,
## ANGLEUNIT["degree",0.0174532925199433]],
## ID["EPSG",4269]],
## CONVERSION["SPCS83 Texas South Central zone (US Survey feet)",
## METHOD["Lambert Conic Conformal (2SP)",
## ID["EPSG",9802]],
## PARAMETER["Latitude of false origin",27.8333333333333,
## ANGLEUNIT["degree",0.0174532925199433],
## ID["EPSG",8821]],
## PARAMETER["Longitude of false origin",-99,
## ANGLEUNIT["degree",0.0174532925199433],
## ID["EPSG",8822]],
## PARAMETER["Latitude of 1st standard parallel",30.2833333333333,
## ANGLEUNIT["degree",0.0174532925199433],
## ID["EPSG",8823]],
## PARAMETER["Latitude of 2nd standard parallel",28.3833333333333,
## ANGLEUNIT["degree",0.0174532925199433],
## ID["EPSG",8824]],
## PARAMETER["Easting at false origin",1968500,
## LENGTHUNIT["US survey foot",0.304800609601219],
## ID["EPSG",8826]],
## PARAMETER["Northing at false origin",13123333.333,
## LENGTHUNIT["US survey foot",0.304800609601219],
## ID["EPSG",8827]]],
## CS[Cartesian,2],
## AXIS["easting (X)",east,
## ORDER[1],
## LENGTHUNIT["US survey foot",0.304800609601219]],
## AXIS["northing (Y)",north,
## ORDER[2],
## LENGTHUNIT["US survey foot",0.304800609601219]],
## USAGE[
## SCOPE["Engineering survey, topographic mapping."],
## AREA["United States (USA) - Texas - counties of Aransas; Atascosa; Austin; Bandera; Bee; Bexar; Brazoria; Brewster; Caldwell; Calhoun; Chambers; Colorado; Comal; De Witt; Dimmit; Edwards; Fayette; Fort Bend; Frio; Galveston; Goliad; Gonzales; Guadalupe; Harris; Hays; Jackson; Jefferson; Karnes; Kendall; Kerr; Kinney; La Salle; Lavaca; Live Oak; Matagorda; Maverick; McMullen; Medina; Presidio; Real; Refugio; Terrell; Uvalde; Val Verde; Victoria; Waller; Wharton; Wilson; Zavala."],
## BBOX[27.78,-105,30.67,-93.76]],
## ID["EPSG",2278]]
# Transform both datasets to WGS84 (EPSG: 4326) for consistency
bexar_tracts <- st_transform(bexar_tracts, crs = 4326)
libraries <- st_transform(libraries, crs = 4326)
# Perform overlay analysis to find the census tract for each library
libraries_in_tracts <- st_join(libraries, bexar_tracts, join = st_within)
# Print the result to verify each library is matched with a census tract
print(libraries_in_tracts)
## Simple feature collection with 30 features and 14 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -98.66264 ymin: 29.33487 xmax: -98.36605 ymax: 29.63648
## Geodetic CRS: WGS 84
## First 10 features:
## Name Address Phone Zipcode
## 1 Schaeffer Branch 6322 US Hwy 87 E <NA> 78222
## 2 Collins Garden Branch 200 N Park Blvd 210.225.0331 78204
## 3 San Pedro Branch 1315 San Pedro Ave 210.733.1454 78212
## 4 John Igo Branch 13330 Kyle Seale Pkwy 210.561.6113 78249
## 5 Forest Hills Branch 5245 Ingram Rd 210.431.2544 78228
## 6 Thousand Oaks Branch 4618 Thousand Oaks 210.657.5205 78233
## 7 Oakwell Branch 4134 Harry Wurzbach Rd 210.828.2569 78209
## 8 Parman Branch 20735 Wilderness Oak 210.207.2703 78258
## 9 Memorial Branch 3222 Culebra 210.432.6783 78228
## 10 Potranco Branch 8765 State Hwy 151 (Access Rd) <NA> 78250
## Number PrefixDire StreetName StreetType
## 1 6322 E HWY US 87 HWY
## 2 200 N PARK BLVD
## 3 1315 <NA> SAN PEDRO AVE
## 4 13330 <NA> KYLE SEALE PWKY <NA>
## 5 5245 <NA> INGRAM RD
## 6 4618 <NA> THOUSAND OAKS <NA>
## 7 4134 <NA> HARRY WURZBACH RD
## 8 <NA> <NA> WILDERNESS OAK <NA>
## 9 3222 <NA> CULEBRA <NA>
## 10 8765 <NA> StTATE HWY 151 HWY
## Website GEOID
## 1 <NA> 48029131401
## 2 www.sat.lib.tx.us/branches/collinsgarden.htm 48029160200
## 3 www.sat.lib.tx.us/branches/sanpedro.htm 48029190100
## 4 www.sanantonio.gov/library/branch/igo.asp 48029181824
## 5 www.sat.lib.tx.us/branches/foresthills.htm 48029180501
## 6 www.sat.lib.tx.us/branches/thoaks.htm 48029121205
## 7 www.sat.lib.tx.us/branches/oakwell.htm 48029120902
## 8 <NA> 48029191811
## 9 www.sat.lib.tx.us/branches/memorial.htm 48029171301
## 10 <NA> 48029171926
## NAME variable estimate moe
## 1 Census Tract 1314.01, Bexar County, Texas B01003_001 11242 1340
## 2 Census Tract 1602, Bexar County, Texas B01003_001 2970 424
## 3 Census Tract 1901, Bexar County, Texas B01003_001 2922 577
## 4 Census Tract 1818.24, Bexar County, Texas B01003_001 3119 651
## 5 Census Tract 1805.01, Bexar County, Texas B01003_001 4930 654
## 6 Census Tract 1212.05, Bexar County, Texas B01003_001 4035 508
## 7 Census Tract 1209.02, Bexar County, Texas B01003_001 6586 1188
## 8 Census Tract 1918.11, Bexar County, Texas B01003_001 4059 432
## 9 Census Tract 1713.01, Bexar County, Texas B01003_001 2815 618
## 10 Census Tract 1719.26, Bexar County, Texas B01003_001 2501 323
## geometry
## 1 POINT (-98.36605 29.39328)
## 2 POINT (-98.51508 29.39835)
## 3 POINT (-98.50159 29.44702)
## 4 POINT (-98.64343 29.57044)
## 5 POINT (-98.58884 29.46413)
## 6 POINT (-98.4015 29.54507)
## 7 POINT (-98.43386 29.51066)
## 8 POINT (-98.51492 29.63648)
## 9 POINT (-98.56427 29.44865)
## 10 POINT (-98.66067 29.44238)