library(data.table)
library(ggplot2)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:data.table':
##
## between, first, last
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(showtext)
## Warning: package 'showtext' was built under R version 4.3.2
## Loading required package: sysfonts
## Warning: package 'sysfonts' was built under R version 4.3.2
## Loading required package: showtextdb
## Warning: package 'showtextdb' was built under R version 4.3.2
library(tidyr)
library(svglite)
## Warning: package 'svglite' was built under R version 4.3.2
###percent of extreme heat for six MSAs
load('E:/POI_gridmet_daily_weather_data/6cities_extreme_heat_all.RData')
df_merge = df_heat%>% group_by(PLACEKEY ,NAME)%>% summarise(n = n(),THREE_90F_DAYS = sum(extreme_heat_90F),
TWO_90F_DAYS = sum(extreme_heat_90F_2day),THREE_95F_DAYS = sum(extreme_heat_95F),
TWO_95F_DAYS = sum(extreme_heat_95F_2day),THREE_100F_DAYS = sum(extreme_heat_100F),
TWO_100F_DAYS = sum(extreme_heat_100F_2day))
## `summarise()` has grouped output by 'PLACEKEY'. You can override using the
## `.groups` argument.
df_merge = df_merge%>% mutate(percentage_90F_THREE = THREE_90F_DAYS/n,percentage_90F_TWO = TWO_90F_DAYS/n,
percentage_95F_THREE = THREE_95F_DAYS/n,percentage_95F_TWO = TWO_95F_DAYS/n,
percentage_100F_THREE = THREE_100F_DAYS/n,percentage_100F_TWO = TWO_100F_DAYS/n,)
df_MSA = df_merge%>% group_by(NAME) %>% summarise(B_mean_percentage_90F_THREE= mean(percentage_90F_THREE, na.rm=TRUE),
A_mean_percentage_90F_TWO= mean(percentage_90F_TWO, na.rm=TRUE),
D_mean_percentage_100F_THREE= mean(percentage_100F_THREE, na.rm=TRUE),
C_mean_percentage_100F_TWO= mean(percentage_100F_TWO, na.rm=TRUE))
df_MSA <- df_MSA[complete.cases(df_MSA),]
df_sum = df_MSA %>% pivot_longer(!NAME, names_to = "category", values_to = "percentage")
df_sum$category = factor(df_sum$category,levels = c('A_mean_percentage_90F_TWO',"B_mean_percentage_90F_THREE",
'C_mean_percentage_100F_TWO',"D_mean_percentage_100F_THREE"))
df_sum = df_sum[complete.cases(df_sum$category),]
df_sum$percentage= df_sum$percentage*100
p =ggplot(df_sum,aes(x = NAME, y = percentage)) +
geom_col(aes(fill = category), position = "dodge") +
ylab("Percentage")+
scale_fill_brewer(type = "seq", palette = "Oranges", labels = c("90F, 2 days", "90F, 3 days", "100F, 2 days","100F, 3 days"))+
scale_x_discrete(labels=c('AUS', 'DAL', 'HOU', 'LV','PHX','SA'))+
theme_minimal() + # Set the theme to minimal
theme(panel.grid.major = element_blank(), # Remove major grid lines
panel.grid.minor = element_blank(), # Remove minor grid lines
panel.border = element_rect(color = "black", fill = NA), # Add a black frame
axis.line = element_line(color = "black"),
axis.text.x=element_text(size=12),
axis.text.y=element_text(size=12),
axis.title.x =element_blank(),
axis.title=element_text(size=14),
legend.title=element_blank(),
legend.position="top", # Position the legend above the plot
legend.box = "horizontal")
plot(p)

####visualization for spend and air temp
load("E:/POI_gridmet_daily_weather_data/average_spend_temp_bins.RData")
p <-ggplot(average_spend, aes(x = temperature_mid, y = average_spend)) +
geom_point() + # Scatter plot points
geom_smooth(method = "lm", se = TRUE) + # Regression line with confidence interval
labs(x = "Temperature (Celsius)",
y = "Spend per Transaction") +
theme_minimal() + # Set the theme to minimal
theme(
panel.grid.major = element_blank(), # Remove major grid lines
panel.grid.minor = element_blank(), # Remove minor grid lines
panel.border = element_rect(color = "black", fill = NA), # Add a black frame
axis.line = element_line(color = "black"),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12) # Add black axis lines
)
lm_model <- lm(average_spend ~ temperature_mid, data = average_spend)
r_squared <- summary(lm_model)$r.squared
print(r_squared)
## [1] 0.6738306
print(summary(lm_model))
##
## Call:
## lm(formula = average_spend ~ temperature_mid, data = average_spend)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.2259 -0.5870 -0.2084 0.4824 2.3025
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 16.53756 0.52400 31.560 < 2e-16 ***
## temperature_mid -0.12914 0.01588 -8.131 2.76e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.9086 on 32 degrees of freedom
## Multiple R-squared: 0.6738, Adjusted R-squared: 0.6636
## F-statistic: 66.11 on 1 and 32 DF, p-value: 2.759e-09
f1 <- p + annotate(
"text",
x = Inf, y = -Inf,
label = expression(paste(R^2, "=",0.674)),
hjust = 3, vjust = -2,
size = 4
)
plot(f1)
## `geom_smooth()` using formula = 'y ~ x'
## Warning in is.na(x): is.na() applied to non-(list or vector) of type
## 'expression'

####visualization for visit and air temp
load("E:/POI_gridmet_daily_weather_data/average_visit_temp_bins.RData")
average_visit$temperature_mid <- as.numeric(gsub(".*\\((.*),.*", "\\1", average_visit$temperature_bin)) + 1 # Adding 1 for the midpoint
p <-ggplot(average_visit, aes(x = temperature_mid, y = average_visit)) +
geom_point() + # Scatter plot points
geom_smooth(method = "lm", se = TRUE) + # Regression line with confidence interval
labs(x = "Temperature (Celsius)",
y = "In-person Visits") +
theme_minimal() + # Set the theme to minimal
theme(
panel.grid.major = element_blank(), # Remove major grid lines
panel.grid.minor = element_blank(), # Remove minor grid lines
panel.border = element_rect(color = "black", fill = NA), # Add a black frame
axis.line = element_line(color = "black"),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12) # Add black axis lines
)
lm_model <- lm(average_visit ~ temperature_mid, data = average_visit)
r_squared <- summary(lm_model)$r.squared
print(summary(lm_model))
##
## Call:
## lm(formula = average_visit ~ temperature_mid, data = average_visit)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.9520 -0.8272 0.0215 0.6728 5.3061
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 16.6646 0.8084 20.614 < 2e-16 ***
## temperature_mid -0.2221 0.0245 -9.063 2.38e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.402 on 32 degrees of freedom
## Multiple R-squared: 0.7196, Adjusted R-squared: 0.7109
## F-statistic: 82.14 on 1 and 32 DF, p-value: 2.377e-10
f2 <- p + annotate(
"text",
x = Inf, y = -Inf,
label = expression(paste(R^2, "=",0.719)),
hjust = 3, vjust = -2,
size = 4
)
plot(f2)
## `geom_smooth()` using formula = 'y ~ x'
## Warning in is.na(x): is.na() applied to non-(list or vector) of type
## 'expression'

####visualization for transaction and air temp
filesave <-paste0("E:/POI_gridmet_daily_weather_data/7cities_heat_spend_visit_climate",".RData")
load(filesave)
average_transaction <- df %>%
group_by(temperature_bin) %>%
summarize(average_transaction= mean(transaction, na.rm = TRUE),
count = n())
average_transaction$temperature_mid <- as.numeric(gsub(".*\\((.*),.*", "\\1", average_transaction$temperature_bin)) + 1 # Adding 1 for the midpoint
p <-ggplot(average_transaction, aes(x = temperature_mid, y = average_transaction)) +
geom_point() + # Scatter plot points
geom_smooth(method = "lm", se = TRUE) + # Regression line with confidence interval
labs(x = "Temperature (Celsius)",
y = "Transactions") +
theme_minimal() + # Set the theme to minimal
theme(
panel.grid.major = element_blank(), # Remove major grid lines
panel.grid.minor = element_blank(), # Remove minor grid lines
panel.border = element_rect(color = "black", fill = NA), # Add a black frame
axis.line = element_line(color = "black"),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12) # Add black axis lines
)
lm_model <- lm(average_transaction ~ temperature_mid, data = average_transaction)
r_squared <- summary(lm_model)$r.squared
print(summary(lm_model))
##
## Call:
## lm(formula = average_transaction ~ temperature_mid, data = average_transaction)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.5056 -0.8813 -0.5341 0.9108 3.1359
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.7526 0.7555 2.32 0.0269 *
## temperature_mid 0.1621 0.0229 7.08 4.97e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.31 on 32 degrees of freedom
## Multiple R-squared: 0.6103, Adjusted R-squared: 0.5982
## F-statistic: 50.12 on 1 and 32 DF, p-value: 4.972e-08
f3 <- p + annotate(
"text",
x = Inf, y = -Inf,
label = expression(paste(R^2, "=",0.610)),
hjust = 1.3, vjust = -2,
size = 4
)
plot(f3)
## `geom_smooth()` using formula = 'y ~ x'
## Warning in is.na(x): is.na() applied to non-(list or vector) of type
## 'expression'
