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'