This is my code for retrieving, updating and formatting the parking data of Santa Monica’s Open Data portal.
Steps To Download Original Dataset:
ParkingRaw <- read.csv(file = "C:/Users/asher/Documents/Classes/CUNY/DATA 607/Final Project/ParkingRawU.csv", stringsAsFactors = FALSE, header = TRUE, sep = ",") #Read in the existing parking dataset
Latest <- ParkingRaw$Date.Time[nrow(ParkingRaw)] #Identify last data point in raw dataset
Latest <- as.POSIXct(strptime(Latest, "%m/%d/%Y %I:%M:%S %p")) #Recode time format to match API specs
Current <- format(Sys.time(), tz="America/Los_Angeles",usetz=TRUE) #Set the currnt time as an endpoint for the API call.
APILink <- "https://data.smgov.net/resource/tce2-7ir6.csv" #Location of API
start <- paste0("%27", substr(Latest,1,10),"T", substr(Latest,12,18),"1%27") #Start date of API call
finish <- paste0("%27", substr(Current,1,10),"T", substr(Current,12,19),"%27") #End date of API call
AppToken <- "QT8fWTQjKdIwy22DoFZ0bfuEU" #API token
ParkingRawURL <- paste0(APILink,
"?$where=date_time%20between%20", start,"%20and%20", finish,
"&$select=date_time,%20lot_name,%20available_spaces",
"&$order=date_time%20ASC,%20lot_name%20ASC",
"&$limit=50000") #URL for API call
ParkingRawUpdate <- read.csv(url(ParkingRawURL), row.names = NULL, stringsAsFactors = FALSE) #Make the API call and download it to a csv.
ParkingRawUpdate <- ParkingRawUpdate[ , c(2,3,1)] #Use only the relevant columns, date, lot name, and number of spaces available.
names(ParkingRawUpdate) <- c("Date.Time","Lot","Available") #Rename columns to match original dataset.
ParkingRawUpdate$Date.Time <- format(strptime(ParkingRawUpdate$Date.Time,"%Y-%m-%dT%H:%M:%S"), "%m/%d/%Y %I:%M:%S %p") #Convert date format to match original
ParkingRawU <- rbind(ParkingRaw, ParkingRawUpdate) #Combine old and new dataset
write.csv(ParkingRawU, file = "C:/Users/asher/Documents/Classes/CUNY/DATA 607/Final Project/ParkingRawU.csv", row.names = FALSE) #Write file to a CSV on the local hard drive
WeatherDataRaw <- read.csv(file = "C:/Users/asher/Documents/Classes/CUNY/DATA 607/Final Project/WeatherDataRawU.csv", sep = ",", stringsAsFactors = FALSE)
LatestW <- WeatherDataRaw[nrow(WeatherDataRaw), 1] #Find last date with weather data
StartW <- gsub("-","/",as.Date(LatestW, format = "%m/%d/%Y")+1) #Add a day and convert hyphens to slashes
NewURL <- paste0("https://www.wunderground.com/history/airport/KSMO/", StartW, "/CustomHistory.html?dayend=", format(Sys.Date()-1, "%d&monthend=%m&yearend=%Y"), "&format=1")
WeatherDataNew <- read.csv(url(NewURL), stringsAsFactors = FALSE)
setnames(WeatherDataNew, old = names(WeatherDataNew), new = names(WeatherDataRaw)) #Change column names of update to match the old column names
WeatherDataNew$PST <- format(as.POSIXct(strptime(WeatherDataNew$PST, "%Y-%m-%d")), "%m/%d/%Y")
WeatherDataRawU <- rbind(WeatherDataRaw, WeatherDataNew)
write.csv(WeatherDataRawU,file = "C:/Users/asher/Documents/Classes/CUNY/DATA 607/Final Project/WeatherDataRawU.csv", row.names = FALSE)
ParKingRaw <- read.csv(file = "C:/Users/asher/Documents/Classes/CUNY/DATA 607/Final Project/ParkingRawU.csv", stringsAsFactors = FALSE, header = TRUE, sep = ",")
ParkingData <- unique(ParKingRaw) #Remove duplicate data points
BadTimestamp <- names(sort(table(ParkingData$Date.Time),decreasing=TRUE)[1]) #Reveals that one timestamp has more than one entry per parking lot - we'll remove this timestamp. Now, all timestamps have exactly 18 readings - one per garage.
ParkingData <- subset(ParkingData, Date.Time != BadTimestamp) #Removes bad timestamp, at Nov 1, 2015, 1 AM.
ParkingData <- ParkingData[order(ParkingData$Date.Time), ]
#Names of Lots
ParkingLotsOrig <- sort(unique(ParKingRaw$Lot)) #Parking Lot names in alphabetical order, original
ParkingLots <- c("BeachHouse", "Civic", "Library", "Lot1N", "Lot3N", "Lot4S", "Lot5S", "Lot8N", "Pier", "Struc1", "Struc2", "Struc3", "Struc4", "Struc5", "Struc6", "Struc7", "Struc8", "Struc9")
ParkingDataM <- data.frame("Date.Time" = unique(ParkingData$Date.Time))#Create a dataframe to house the merged dataset, starting with a vector of 144,849 unique timestamps
#Use a for loop to subset the data by garage, and turn it into a column to add to a dataframe.
for (i in 1:length(ParkingLots)) {
ParkingDataM <- cbind(ParkingDataM, merge(ParkingDataM, subset(ParkingData, Lot == ParkingLotsOrig[i])[,c(1,3)], by = "Date.Time")$Available)
}
## Warning in merge.data.frame(ParkingDataM, subset(ParkingData,
## Lot == ParkingLotsOrig[i])[, : column name 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ' is duplicated in the
## result
## Warning in merge.data.frame(ParkingDataM, subset(ParkingData,
## Lot == ParkingLotsOrig[i])[, : column names 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ' are duplicated in the
## result
## Warning in merge.data.frame(ParkingDataM, subset(ParkingData,
## Lot == ParkingLotsOrig[i])[, : column names 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ' are duplicated in the
## result
## Warning in merge.data.frame(ParkingDataM, subset(ParkingData,
## Lot == ParkingLotsOrig[i])[, : column names 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ' are duplicated in the
## result
## Warning in merge.data.frame(ParkingDataM, subset(ParkingData,
## Lot == ParkingLotsOrig[i])[, : column names 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ' are duplicated in the
## result
## Warning in merge.data.frame(ParkingDataM, subset(ParkingData,
## Lot == ParkingLotsOrig[i])[, : column names 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ' are duplicated in the
## result
## Warning in merge.data.frame(ParkingDataM, subset(ParkingData,
## Lot == ParkingLotsOrig[i])[, : column names 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ' are duplicated in the
## result
## Warning in merge.data.frame(ParkingDataM, subset(ParkingData,
## Lot == ParkingLotsOrig[i])[, : column names 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ' are duplicated in the
## result
## Warning in merge.data.frame(ParkingDataM, subset(ParkingData,
## Lot == ParkingLotsOrig[i])[, : column names 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ' are duplicated in the
## result
## Warning in merge.data.frame(ParkingDataM, subset(ParkingData,
## Lot == ParkingLotsOrig[i])[, : column names 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ' are duplicated in the
## result
## Warning in merge.data.frame(ParkingDataM, subset(ParkingData,
## Lot == ParkingLotsOrig[i])[, : column names 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ' are duplicated in the
## result
## Warning in merge.data.frame(ParkingDataM, subset(ParkingData,
## Lot == ParkingLotsOrig[i])[, : column names 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ' are duplicated in the
## result
## Warning in merge.data.frame(ParkingDataM, subset(ParkingData,
## Lot == ParkingLotsOrig[i])[, : column names 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ' are duplicated in the
## result
## Warning in merge.data.frame(ParkingDataM, subset(ParkingData,
## Lot == ParkingLotsOrig[i])[, : column names 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ' are duplicated in the
## result
## Warning in merge.data.frame(ParkingDataM, subset(ParkingData,
## Lot == ParkingLotsOrig[i])[, : column names 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ' are duplicated in the
## result
## Warning in merge.data.frame(ParkingDataM, subset(ParkingData,
## Lot == ParkingLotsOrig[i])[, : column names 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ', 'merge(ParkingDataM,
## subset(ParkingData, Lot == ParkingLotsOrig[i])[, ' are duplicated in the
## result
names(ParkingDataM) <- c("Date.Time", ParkingLots) #Rename columns
ParkingDataM$EpochTime <- as.POSIXct(strptime(ParkingDataM$Date.Time, "%m/%d/%Y %I:%M:%S %p"))
ParkingDataM$Year <- strptime(ParkingDataM$EpochTime, "%Y-%m-%d")$year+1900
ParkingDataM$Month <- as.integer(strptime(ParkingDataM$EpochTime, "%Y-%m-%d")$mon+1) #Obtain the month of a given date, 1-12
ParkingDataM$DayM <- strptime(ParkingDataM$EpochTime, "%Y-%m-%d")$mday
ParkingDataM$DayNum <- strptime(ParkingDataM$EpochTime, "%Y-%m-%d")$yday+1 #Obtain the daynumber, eg Feb 1 = 32
ParkingDataM$Weekday <- strptime(ParkingDataM$EpochTime, "%Y-%m-%d")$wday #Obtain the weekday, 0-6, 0 = Sunday
ParkingDataM$Hour <- strptime(ParkingDataM$EpochTime, "%Y-%m-%d %H:%M")$hour
ParkingDataM$Minute <- strptime(ParkingDataM$EpochTime, "%Y-%m-%d %H:%M")$min
ParkingDataM <- ParkingDataM[order(ParkingDataM$EpochTime), ]
#Redefine Parking All to put date columns at front and remove original Date.Time column
ParkingDataM <- data.frame(ParkingDataM[ , c(20:27, 2:19)])
#Add Total Column
ParkingDataM$Total <- rowSums(ParkingDataM[ , 9:26])
MaxCapacity <- as.integer(sapply(ParkingDataM[, 9:26], max)) #Operationally define max capacity as maximum available in 2015
VacancyDataAll2M <- round(ParkingDataM[9:26] / MaxCapacity[col(ParkingDataM[, 9:26])], 3) #Divide number of spaces available by max capacity vector
VacancyRatesAll2M <- data.frame(ParkingDataM[ , 1:8], VacancyDataAll2M) #Create a dataset containing the vacancy rate of each garage at each moment
VacancyRatesAll2M$Total <- round(ParkingDataM$Total / sum(MaxCapacity),3)
#Merging Parking Data with Weather and Holiday Data
#WeatherDataRaw <- read.csv(file = "C:/Users/asher/Documents/Classes/CUNY/DATA 607/Final Project/WeatherData14To16.csv", sep = ",", stringsAsFactors = FALSE)
WeatherDataRaw <- read.csv(file = "C:/Users/asher/Documents/Classes/CUNY/DATA 607/Final Project/WeatherDataRawU.csv", sep = ",", stringsAsFactors = FALSE)
WeatherData <- WeatherDataRaw[ , c(1:4, 20, 21, 22)]
WeatherData$Year <- as.integer(str_sub(WeatherData$PST, -4, -1))
WeatherData$Month <- as.integer(str_extract(WeatherData$PST,"[:digit:]{1,2}"))
WeatherData$DayM <- str_extract(str_extract(WeatherData$PST,"[:digit:]{1,2}[:print:]{1}[:digit:]{4}"), "[:digit:]{1,2}")
WeatherData$RainfallIn <- round(WeatherData$Precipitationmm/25.4, 1)
WeatherData <- WeatherData[ , c(8:10, 2:4, 6:7, 11)]
VacancyWeatherAll <- setorder(merge(VacancyRatesAll2M, WeatherData), EpochTime)
VacancyWeatherAll <- subset(VacancyWeatherAll, Minute %% 5 == 0) #Remove erratic timestamps that don't end in 5 minute increments.
VacancyWeatherHourly <- subset(VacancyWeatherAll, Minute == 0 & Hour > 7)
write.csv(VacancyWeatherAll, file = "C:/Users/asher/Documents/Classes/CUNY/DATA 607/Final Project/VacancyWeather14To16.csv", row.names = FALSE)
write.csv(VacancyWeatherHourly, file = "C:/Users/asher/Documents/Classes/CUNY/DATA 607/Final Project/VacancyWeatherHourly.csv", row.names = FALSE)