Cleaning Data

# Read CSV
concert_archives <- read_csv("sonia_rose11_Concert_Archives_Export.csv", show_col_types=FALSE)

# Filter concert data
concerts <- concert_archives %>%
  select(Date=`Start Date`,
         `Concert Name` = `Concert Name`,
         Venue = Venue,
         Location = Location) 

# Mutate dates and separate locations
concerts <- concerts %>%
  mutate(Date=as.Date(Date, format="%m/%d/%Y")) %>%
  mutate(Year=year(Date)) %>%
  mutate(Location_tot = Location) %>%
  separate(Location_tot, into = c("City", "State", "Country"), sep = ",", fill ="right")

Geocoding Locations

# Geocoding the locations of each concert
concerts <- concerts %>%
  geocode(address=Location, method ="osm", lat=lat, long=long)
## Passing 78 addresses to the Nominatim single address geocoder
## Query completed in: 78.5 seconds

Converting into a spatial object and counting total concerts all time

# Convert into spatial object
sf_concerts <- st_as_sf(concerts, coords = c("long","lat"), crs=4326) %>%
  mutate(long=st_coordinates(.)[,1],
         lat=st_coordinates(.)[,2])

# Count number of concerts by location
concerts_num <- sf_concerts %>%
  group_by(Venue, Location, City, State, Country,geometry) %>%
  summarize(n_concerts = n(), .groups="drop") 

# Quick view of all concerts by location and frequency
mapview(concerts_num, zcol ="n_concerts", cex="n_concerts", label="Venue")

Yearly Concerts

# New data frames by years
concerts_2023 <- sf_concerts %>%
  filter(Year == "23")

concerts_2024 <- sf_concerts %>%
  filter(Year=="24")
  
concerts_2025 <- sf_concerts %>%
  filter(Year=="25")

# Counting concerts by locations for each year

# 2023
concert_count_2023 <- concerts_2023 %>%
  group_by(Venue, Location, City, State, Country,geometry) %>%
  summarize(n_concerts = n(), .groups="drop") 

mapview(concert_count_2023, zcol ="n_concerts", cex="n_concerts", label="Venue")
# 2024
concert_count_2024 <- concerts_2024 %>%
  group_by(Venue, Location, City, State, Country,geometry) %>%
  summarize(n_concerts = n(), .groups="drop") 

mapview(concert_count_2024, zcol ="n_concerts", cex="n_concerts", label="Venue")
# 2025
concert_count_2025 <- concerts_2025 %>%
  group_by(Venue, Location, City, State, Country,geometry) %>%
  summarize(n_concerts = n(), .groups="drop") 

mapview(concert_count_2025, zcol ="n_concerts", cex="n_concerts", label="Venue")

Leaflet Maps: 2023

# Map for 2023 Concerts
map_2023 <- leaflet(concerts_2023) 
map_2023 <- addTiles(map_2023)
map_2023 <- addCircleMarkers(map_2023, color="black", 
  clusterOptions=markerClusterOptions(),
  popup=~paste("<b>Venue:<b>", Venue, "<br>", 
               "<b>Location:<b>", Location, "<br>",
               "<b>Date:<b>", Date))
map_2023

2024

# Map for 2024 Concerts
map_2024 <- leaflet(concerts_2024) 
map_2024 <- addTiles(map_2024)
map_2024 <- addCircleMarkers(map_2024, color="black",
  clusterOptions=markerClusterOptions(),
  popup=~paste("<b>Venue:<b>", Venue, "<br>", 
               "<b>Location:<b>", Location, "<br>",
               "<b>Date:<b>", Date))
map_2024

2025

# Map for 2025 Concerts
map_2025 <- leaflet(concerts_2025) 
map_2025 <- addTiles(map_2025)
map_2025 <- addCircleMarkers(map_2025, color="black",
  clusterOptions=markerClusterOptions(),
  popup=~paste("<b>Venue:<b>", Venue, "<br>", 
               "<b>Location:<b>", Location, "<br>",
               "<b>Date:<b>", Date))
map_2025

All Three Years and All Together

# Map of All Concerts 2023-2025
map_tot <- leaflet(sf_concerts) 
map_tot <- addTiles(map_tot)
map_tot <- addCircleMarkers(map_tot, color="black",
  clusterOptions=markerClusterOptions(),
  popup=~paste("<b>Venue:<b>", Venue, "<br>", 
               "<b>Location:<b>", Location, "<br>",
               "<b>Date:<b>", Date))
map_tot
leafsync::sync(map_2023, map_2024, map_2025, map_tot)