if (!require("tidyverse"))
install.packages("tidyverse")
if (!require("tidycensus"))
install.packages("tidycensus")
if (!require("sf"))
install.packages("sf")
if (!require("mapview"))
install.packages("mapview")
if (!require("DataEditR"))
install.packages("DataEditR")
if (!require("leaflet"))
install.packages("leaflet")
if (!require("leaflet.extras2"))
install.packages("leaflet.extras2")
if (!require("plotly"))
install.packages("plotly")
library(tidyverse)
library(tidycensus)
library(sf)
library(mapview)
library(DataEditR)
library(leaflet)
library(leafpop)
library(plotly)
####################
# Run this code first, but only once.
# Running this code again will reset the data file
# to its pre-election contents
# Downloading initial data files
# NOTE: You must replace PasteYourAPIKeyBetweenTheseQuoteMarks
# with your Census API key
census_api_key("PasteYourAPIKeyBetweenTheseQuoteMarks")
TNSenateMap <- get_acs(
geography = "state legislative district (upper chamber)",
state = "TN",
variables = "DP02_0154P",
year = 2022,
survey = "acs5",
output = "wide",
geometry = TRUE)
TNSenateMap <- TNSenateMap %>%
select(GEOID, NAME, geometry)
st_write(TNSenateMap,"TNSenateMap.shp", append = FALSE)
TNSenateData <- read_csv("https://raw.githubusercontent.com/drkblake/Data/refs/heads/main/TNSenateRaceData.csv")
write_csv(TNSenateData,"TNSenateRaceData.csv")
####################
# Run this code each time you want
# to update and republish the map
# Reading files from local computer project folder
TNSenateMap <- st_read("TNSenateMap.shp")
TNSenateData <- read_csv("TNSenateRaceData.csv")
# Edit / update election data
TNSenateData <- data_edit(TNSenateData)
write_csv(TNSenateData,"TNSenateRaceData.csv")
# Merge election and map data
TNSenateWinners <- merge(TNSenateMap,TNSenateData)
# Make the election map
mypalette = colorRampPalette(c("gray","#384B70","#B8001F"))
# Use this palette if an independent wins
# mypalette = colorRampPalette(c("gray","#384B70","#B8001F","#FFD35A"))
TNSenateElectionMap <-
mapview(
TNSenateWinners,
zcol = "Party",
col.regions = mypalette,
layer.name = "Party",
popup = popupTable(
TNSenateWinners,
feature.id = FALSE,
row.numbers = FALSE,
zcol = c(
"District",
"Party",
"Dem",
"Rep",
"Ind"
)
)
)
# Show the map
TNSenateElectionMap