Code
library(tidyverse)
library(ggplot2)
::opts_chunk$set(echo = TRUE) knitr
Jack Sniezek
December 14, 2022
The Super Bowl is easily the biggest betting event in the United States, with an estimated $7.61 billion in bets for the Super Bowl LVI. This figure is up 78%, or $3.33B from the year before. The huge surge in betting figures can be explained by the Supreme Court overturning a federal ban on sports betting in 2018, which had been in place since 1992. The law previously only allowed a select few states to operate. Today, 39 states and Washington DC either have legal sports betting or are considering legislation to implement it. Of the 39 states with legal sports betting or legislation, 22 allow online and mobile sports betting, which has led to the rise of many online sportsbooks such as DraftKings, Caesar’s Sportsbook, and BetMGM.
The purpose of this paper is to explore the trends in NFL betting in the Super Bowl Era. The key points that I intend to cover in my research are:
• Stadiums where spread is covered the most how it changes over time • How weather affects who has covered the spread • Who covers the spread in the Super Bowl/playoff games
I would like to also examine the over/under for these, as well as how individual teams fare against weather, stadium, and opponent, but I am afraid this will result in me taking on too much to handle. So, for the purposes of this paper, I will stick to these research topics.
The dataset I will be working with was available on Kaggle.com and consists of NFL game results, betting odds information, stadium information, and weather information. The data is made up of game results and weather information 1966 to present, and betting odds beginning in 1979. The betting odds included are the spread and the over/under. Weather data included is temperature, wind speed, and humidity for each game. Stadium data includes years active, type, capacity, and location. I will have to do significant data clean up, as the weather data is incomplete in some spots, there is a lot of extra stadium data, and many teams have changed names/cities. There are also some data points that are unique that have no info such as stadiums used for one or two games and have no information associated with it(for example, several baseball stadiums were venues in the early days of the NFL).
First I read in the data. There are 3 separate csv files that contain the data I will be working with; spreadspoke_scores, nfl_stadiums, and nfl_teams.
Rows: 13504 Columns: 17
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (7): schedule_date, schedule_week, team_home, team_away, team_favorite_i...
dbl (8): schedule_season, score_home, score_away, spread_favorite, over_unde...
lgl (2): schedule_playoff, stadium_neutral
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# A tibble: 13,504 × 17
schedule_date sched…¹ sched…² sched…³ team_…⁴ score…⁵ score…⁶ team_…⁷ team_…⁸
<chr> <dbl> <chr> <lgl> <chr> <dbl> <dbl> <chr> <chr>
1 9/2/1966 1966 1 FALSE Miami … 14 23 Oaklan… <NA>
2 9/3/1966 1966 1 FALSE Housto… 45 7 Denver… <NA>
3 9/4/1966 1966 1 FALSE San Di… 27 7 Buffal… <NA>
4 9/9/1966 1966 2 FALSE Miami … 14 19 New Yo… <NA>
5 9/10/1966 1966 1 FALSE Green … 24 3 Baltim… <NA>
6 9/10/1966 1966 2 FALSE Housto… 31 0 Oaklan… <NA>
7 9/10/1966 1966 2 FALSE San Di… 24 0 New En… <NA>
8 9/11/1966 1966 1 FALSE Atlant… 14 19 Los An… <NA>
9 9/11/1966 1966 2 FALSE Buffal… 20 42 Kansas… <NA>
10 9/11/1966 1966 1 FALSE Detroi… 14 3 Chicag… <NA>
# … with 13,494 more rows, 8 more variables: spread_favorite <dbl>,
# over_under_line <dbl>, stadium <chr>, stadium_neutral <lgl>,
# weather_temperature <dbl>, weather_wind_mph <dbl>, weather_humidity <dbl>,
# weather_detail <chr>, and abbreviated variable names ¹schedule_season,
# ²schedule_week, ³schedule_playoff, ⁴team_home, ⁵score_home, ⁶score_away,
# ⁷team_away, ⁸team_favorite_id
Rows: 118 Columns: 15
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (9): stadium_name, stadium_location, stadium_type, stadium_address, stad...
dbl (5): stadium_open, stadium_close, LATITUDE, LONGITUDE, ELEVATION
num (1): stadium_capacity
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# A tibble: 118 × 15
stadium_name stadi…¹ stadi…² stadi…³ stadi…⁴ stadi…⁵ stadi…⁶ stadi…⁷ stadi…⁸
<chr> <chr> <dbl> <dbl> <chr> <chr> <chr> <chr> <dbl>
1 Acrisure Sta… Pittsb… 2001 NA outdoor 100 Ar… 15212 cold 65500
2 Alamo Dome San An… NA NA indoor 100 Mo… 78203 dome 72000
3 Allegiant St… Paradi… 2020 NA indoor <NA> <NA> dome 65000
4 Allianz Arena Munich… NA NA outdoor <NA> <NA> modera… 75024
5 Alltel Stadi… Jackso… NA NA <NA> <NA> <NA> <NA> NA
6 Alumni Stadi… Chestn… NA NA outdoor Perime… 2467 cold NA
7 Anaheim Stad… Anahei… 1980 1994 outdoor 2000 E… 92806 warm NA
8 Arrowhead St… Kansas… 1972 NA outdoor 1 Arro… 64129 cold 76416
9 AT&T Stadium Arling… 2009 NA retrac… 1 AT&T… 76011 dome 80000
10 Atlanta-Fult… Atlant… 1966 1991 outdoor 521 Ca… 30312 warm NA
# … with 108 more rows, 6 more variables: stadium_surface <chr>, STATION <chr>,
# NAME <chr>, LATITUDE <dbl>, LONGITUDE <dbl>, ELEVATION <dbl>, and
# abbreviated variable names ¹stadium_location, ²stadium_open,
# ³stadium_close, ⁴stadium_type, ⁵stadium_address,
# ⁶stadium_weather_station_code, ⁷stadium_weather_type, ⁸stadium_capacity
Rows: 44 Columns: 8
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (8): team_name, team_name_short, team_id, team_id_pfr, team_conference, ...
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# A tibble: 44 × 8
team_name team_nam…¹ team_id team_…² team_…³ team_…⁴ team_…⁵ team_…⁶
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 Arizona Cardinals Cardinals ARI CRD NFC NFC We… NFC NFC We…
2 Atlanta Falcons Falcons ATL ATL NFC NFC So… NFC NFC We…
3 Baltimore Colts Colts IND CLT AFC <NA> AFC AFC Ea…
4 Baltimore Ravens Ravens BAL RAV AFC AFC No… AFC AFC Ce…
5 Boston Patriots Patriots NE NWE AFC <NA> AFC <NA>
6 Buffalo Bills Bills BUF BUF AFC AFC Ea… AFC AFC Ea…
7 Carolina Panthers Panthers CAR CAR NFC NFC So… NFC NFC We…
8 Chicago Bears Bears CHI CHI NFC NFC No… NFC NFC Ce…
9 Cincinnati Bengals Bengals CIN CIN AFC AFC No… AFC AFC Ce…
10 Cleveland Browns Browns CLE CLE AFC AFC No… AFC AFC Ce…
# … with 34 more rows, and abbreviated variable names ¹team_name_short,
# ²team_id_pfr, ³team_conference, ⁴team_division, ⁵team_conference_pre2002,
# ⁶team_division_pre2002
The datasets will have to be merged using joins before I can start manipulating the data. The stadium data was easy to join because it only required one variable name change. I had issues joining the teams data as there was not a clear variable that was exactly the same on both datasets. Initially I tried to use team_id and team_favorite_id, but some of the teams had name changes but still had the same id. This created duplicate data that could not be removed because multiple ids were connected to one data point. Ultimately, I found success by using team_name and team_home for the join.
#Rename stadium so I can join to stadiums data, create new variable for join with teams data
scores <- spreadspoke_scores%>%
rename(stadium_name = stadium)
#new variable to join scores data
new_teams <- teams%>%
mutate(team_home = team_name)
#mutate(team_name_id = str_c(team_name, team_id, sep = "_"), .before = team_name)
#select only data that I can use
#team_id had to be removed because the duplicates made redundant data, i.e. some teams changed names/location but id was the same
new_teams <- new_teams%>%
select(team_home,team_name,team_id,team_name_short,team_conference,team_division,team_division_pre2002)
#in case I messed up the data
full_scores <- scores
#joins
full_scores <- full_join(x = scores, y = new_teams, by = "team_home")
full_scores <- full_join(x = full_scores,y = stadiums, by = "stadium_name")
full_scores
# A tibble: 13,505 × 37
schedule_date sched…¹ sched…² sched…³ team_…⁴ score…⁵ score…⁶ team_…⁷ team_…⁸
<chr> <dbl> <chr> <lgl> <chr> <dbl> <dbl> <chr> <chr>
1 9/2/1966 1966 1 FALSE Miami … 14 23 Oaklan… <NA>
2 9/3/1966 1966 1 FALSE Housto… 45 7 Denver… <NA>
3 9/4/1966 1966 1 FALSE San Di… 27 7 Buffal… <NA>
4 9/9/1966 1966 2 FALSE Miami … 14 19 New Yo… <NA>
5 9/10/1966 1966 1 FALSE Green … 24 3 Baltim… <NA>
6 9/10/1966 1966 2 FALSE Housto… 31 0 Oaklan… <NA>
7 9/10/1966 1966 2 FALSE San Di… 24 0 New En… <NA>
8 9/11/1966 1966 1 FALSE Atlant… 14 19 Los An… <NA>
9 9/11/1966 1966 2 FALSE Buffal… 20 42 Kansas… <NA>
10 9/11/1966 1966 1 FALSE Detroi… 14 3 Chicag… <NA>
# … with 13,495 more rows, 28 more variables: spread_favorite <dbl>,
# over_under_line <dbl>, stadium_name <chr>, stadium_neutral <lgl>,
# weather_temperature <dbl>, weather_wind_mph <dbl>, weather_humidity <dbl>,
# weather_detail <chr>, team_name <chr>, team_id <chr>,
# team_name_short <chr>, team_conference <chr>, team_division <chr>,
# team_division_pre2002 <chr>, stadium_location <chr>, stadium_open <dbl>,
# stadium_close <dbl>, stadium_type <chr>, stadium_address <chr>, …
The fully merged data contains 13,505 rows(games), and 37 columns.
My next big challenge was trying to create a variable that tells whether or not a spread was covered. I mutated the favorite variable to show the team name instead of the team id, and then I mutated the spread from a negative number to a positive in order for it to mathematically make sense to compare to the scores. Then I could use a case_when() to compare the two and determine if the spread was covered. The data was then ready to be selected and filtered. I took 13 variables and filtered out data from before 1979, except Super Bowls, since that was when the spread data was available. Also, I noticed that some spreads were 0 and the favorite was “PICK”, so I filtered by spreads > 0.
#rename
full_scores <- full_scores%>%
rename(favorite = team_favorite_id,
spread = spread_favorite)
#adjust favorite so data is team name and not id
#make spread positive number to keep calculations accurate
#new variable to show if a spread was covered, uses case_when
full_scores <- full_scores%>%
mutate(favorite = ifelse(favorite == team_id,team_home,team_away))
full_scores <- full_scores%>%
mutate(spread = spread * -1,
favorite_covers = case_when(team_home == favorite & (score_home - score_away) > spread ~ "Cover",
team_home == favorite & (score_home - score_away) < spread ~ "Not Cover",
team_away == favorite & (score_away - score_home) > spread ~ "Cover",
team_away == favorite & (score_away - score_home) < spread ~ "Not Cover"))
#select and filter the data
full_scores <- full_scores%>%
select(schedule_season,schedule_week,team_home,score_home,score_away,team_away,favorite,spread,favorite_covers,stadium_name,stadium_type,weather_temperature,weather_wind_mph)%>%
filter(schedule_season > 1978 | schedule_week == "Superbowl",
spread > 0)
full_scores
# A tibble: 10,781 × 13
schedule_sea…¹ sched…² team_…³ score…⁴ score…⁵ team_…⁶ favor…⁷ spread favor…⁸
<dbl> <chr> <chr> <dbl> <dbl> <chr> <chr> <dbl> <chr>
1 1966 Superb… Green … 35 10 Kansas… Green … 14 Cover
2 1967 Superb… Green … 33 14 Oaklan… Green … 13.5 Cover
3 1968 Superb… Baltim… 7 16 New Yo… Baltim… 18 Not Co…
4 1969 Superb… Kansas… 23 7 Minnes… Minnes… 12 Not Co…
5 1970 Superb… Baltim… 16 13 Dallas… Baltim… 2.5 Cover
6 1971 Superb… Dallas… 24 3 Miami … Dallas… 6 Cover
7 1972 Superb… Miami … 14 7 Washin… Miami … 1 Cover
8 1973 Superb… Miami … 24 7 Minnes… Miami … 6.5 Cover
9 1974 Superb… Minnes… 6 16 Pittsb… Pittsb… 3 Cover
10 1975 Superb… Dallas… 17 21 Pittsb… Pittsb… 7 Not Co…
# … with 10,771 more rows, 4 more variables: stadium_name <chr>,
# stadium_type <chr>, weather_temperature <dbl>, weather_wind_mph <dbl>, and
# abbreviated variable names ¹schedule_season, ²schedule_week, ³team_home,
# ⁴score_home, ⁵score_away, ⁶team_away, ⁷favorite, ⁸favorite_covers
Here is where I struggled. My intent was to show spread coverage at different stadiums on a bar graph, but I could not figure out how to graph a count. I also tried a similar plot with wind mph and Super Bowls, but also could not figure out if I could plot the count of the spreads. However, I was able to manipulate the data into showing what I was looking for in the graph. I was able to get a count of the number of covers at each stadium by week. For example, in Giants Stadium, favorites have covered 17 times in week 16. Thats the most out of any team. I also did an overall count of stadium covers, with Giants Stadium having the most covers at 223. Giants Stadium is a unique situation, as both the Giants and Jets both play their home games there. Because tof this, it gets twice the amount of games as other stadiums. Next, I checked the Super Bowl covers at each stadium. The Rose Bowl has the most covers at 4, followed by the Louisiana Superdome and the Orange Bowl both at 3. Covers at different wind speeds is interesting. The most covers by more than double is at 0 mph, which makes sense. Rounding out the top 10 wind speeds for covers is 5 mph through 12 mph. The highest wind speed to have a cover is 32 mph.
In addition to using the counts to show my data, I made some tables to represent stadium covers, wind speed covers, and temperature covers. The stadium table breaks down stadium covers by week. The wind speed table breaks it down wind speed covers by week, with a filter to show the covers when the wind speed is more than 10 mph. The temperature covers table represents temperature covers by week. The coldest temperature for game that the spread was covered was -3 degrees.
stadium_covers <- full_scores%>%
select(schedule_season, schedule_week,stadium_name, favorite_covers)%>%
filter(schedule_season > 1978,favorite_covers == "Cover")%>%
count(stadium_name, favorite_covers, schedule_week,sort = TRUE)
#ggplot(aes(y = stadium_name, x = schedule_week, fill = favorite_covers), geom_bar())
stadium_covers
# A tibble: 1,232 × 4
stadium_name favorite_covers schedule_week n
<chr> <chr> <chr> <int>
1 Giants Stadium Cover 16 17
2 Giants Stadium Cover 1 16
3 Giants Stadium Cover 3 16
4 Lambeau Field Cover 2 16
5 Texas Stadium Cover 12 16
6 Giants Stadium Cover 10 15
7 Giants Stadium Cover 7 15
8 Lambeau Field Cover 11 15
9 Lambeau Field Cover 13 15
10 Qualcomm Stadium Cover 14 15
# … with 1,222 more rows
# A tibble: 94 × 3
stadium_name favorite_covers n
<chr> <chr> <int>
1 Giants Stadium Cover 223
2 Lambeau Field Cover 191
3 Soldier Field Cover 164
4 Arrowhead Stadium Cover 150
5 Ralph Wilson Stadium Cover 148
6 Candlestick Park Cover 146
7 Qualcomm Stadium Cover 146
8 Louisiana Superdome Cover 132
9 Texas Stadium Cover 125
10 Oakland Coliseum Cover 107
# … with 84 more rows
# A tibble: 18 × 4
stadium_name favorite_covers schedule_week n
<chr> <chr> <chr> <int>
1 Rose Bowl Cover Superbowl 4
2 Louisiana Superdome Cover Superbowl 3
3 Orange Bowl Cover Superbowl 3
4 Los Angeles Memorial Coliseum Cover Superbowl 2
5 Tulane Stadium Cover Superbowl 2
6 Cowboys Stadium Cover Superbowl 1
7 Dolphin Stadium Cover Superbowl 1
8 Ford Field Cover Superbowl 1
9 Georgia Dome Cover Superbowl 1
10 Hard Rock Stadium Cover Superbowl 1
11 Hubert H. Humphrey Metrodome Cover Superbowl 1
12 Joe Robbie Stadium Cover Superbowl 1
13 Mercedes-Benz Stadium Cover Superbowl 1
14 Pontiac Silverdome Cover Superbowl 1
15 Pro Player Stadium Cover Superbowl 1
16 Raymond James Stadium Cover Superbowl 1
17 Rice Stadium Cover Superbowl 1
18 Stanford Stadium Cover Superbowl 1
# A tibble: 31 × 3
weather_wind_mph favorite_covers n
<dbl> <chr> <int>
1 0 Cover 1129
2 NA Cover 451
3 8 Cover 369
4 6 Cover 325
5 9 Cover 325
6 7 Cover 294
7 10 Cover 294
8 11 Cover 268
9 12 Cover 232
10 5 Cover 209
# … with 21 more rows
, , favorite_covers = Cover
schedule_week
stadium_name 1 10 11 12 13 14 15 16 17 18 2 3 4 5
Acrisure Stadium 0 1 1 0 0 0 0 0 0 0 0 0 0 0
Alamo Dome 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Allegiant Stadium 0 2 1 0 0 1 0 0 0 0 0 0 2 0
Allianz Arena 0 1 0 0 0 0 0 0 0 0 0 0 0 0
Alltel Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Anaheim Stadium 0 4 3 7 6 6 6 2 2 0 2 3 1 8
Arrowhead Stadium 11 6 11 8 9 10 7 11 10 1 6 10 9 7
AT&T Stadium 3 1 1 2 0 1 0 1 1 0 1 2 2 1
Atlanta-Fulton County Stadium 3 4 3 3 5 3 3 5 1 0 2 2 1 3
Bank of America Stadium 5 7 9 3 5 9 5 10 6 0 4 5 2 6
Busch Memorial Stadium 1 3 2 1 1 3 2 3 0 0 5 2 3 1
Caesars Superdome 0 0 1 1 1 0 0 1 1 0 1 0 0 1
Candlestick Park 6 4 10 13 7 11 10 9 4 0 9 5 8 13
CenturyLink Field 4 4 8 3 6 7 4 6 3 0 4 11 2 1
Cinergy Field 6 2 7 7 9 5 4 6 2 0 2 3 5 2
Cleveland Municipal Stadium 4 2 4 6 7 3 0 4 1 0 5 4 2 2
Cowboys Stadium 2 1 2 2 0 0 0 3 1 0 0 3 0 1
Dolphin Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Edward Jones Dome 4 2 2 6 9 1 6 8 4 0 1 4 6 4
Empower Field at Mile High 0 0 0 0 0 1 0 0 0 0 0 1 0 0
Estadio Azteca 0 0 4 0 0 0 0 0 0 0 0 0 1 0
EverBank Field 8 5 9 4 5 12 5 5 4 0 6 3 5 5
FedEx Field 7 3 7 5 4 9 5 6 8 0 5 5 3 9
FirstEnergy Stadium 7 4 10 5 4 7 5 6 4 0 2 6 1 8
Ford Field 5 4 7 14 8 2 3 5 4 0 5 5 2 5
Foxboro Stadium 9 6 2 4 7 5 7 1 1 0 6 4 4 5
GEHA Field at Arrowhead Stadium 0 1 0 1 0 0 0 0 0 0 0 0 0 0
Georgia Dome 2 8 3 8 6 5 4 5 6 0 9 7 5 6
Giants Stadium 16 15 14 12 10 13 14 17 12 0 12 16 7 9
Gillette Stadium 5 3 5 5 4 5 5 6 10 0 3 8 2 8
Hard Rock Stadium 2 2 2 1 3 0 0 0 1 0 2 1 2 0
Heinz Field 4 8 2 1 6 6 4 5 6 0 6 3 5 6
Highmark Stadium 0 0 0 0 0 0 1 0 0 1 1 1 1 1
Houlihan's Stadium 7 4 3 4 2 1 6 4 5 0 4 3 4 4
Houston Astrodome 2 3 5 3 1 8 3 3 0 1 3 5 4 3
Hubert H. Humphrey Metrodome 8 7 4 7 7 10 3 7 4 0 8 5 4 4
Husky Stadium 0 0 0 0 1 1 0 0 0 0 1 1 0 0
Jack Murphy Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Joe Robbie Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Lambeau Field 12 12 15 7 15 13 7 12 11 0 16 7 8 9
Levi's Stadium 1 0 1 4 0 0 2 1 1 0 1 0 4 3
Liberty Bowl Memorial Stadium 0 1 1 0 1 0 0 0 0 0 0 0 0 0
Lincoln Financial Field 6 4 7 8 5 5 5 5 6 1 5 3 4 6
Los Angeles Memorial Coliseum 3 1 7 5 3 2 3 4 3 0 5 6 2 2
Louisiana Superdome 10 8 8 9 8 6 6 11 7 1 4 7 8 6
LP Stadium 0 0 0 0 1 0 0 0 1 0 0 1 0 0
Lucas Oil Stadium 2 1 4 7 4 2 5 1 3 0 3 3 2 4
Lumen Field 0 0 0 0 0 0 0 0 1 0 0 0 0 1
M&T Bank Stadium 9 5 5 9 6 7 10 3 5 0 8 3 8 3
Mall of America Field 0 0 2 1 2 1 1 0 1 0 0 1 1 2
Memorial Stadium (Baltimore) 2 2 1 1 0 2 1 1 1 0 2 0 1 1
Memorial Stadium (Champaign) 0 0 0 0 0 0 0 0 2 0 0 1 0 0
Memorial Stadium (Clemson) 0 0 0 0 0 0 1 0 0 0 0 1 0 1
Mercedes-Benz Stadium 1 0 2 0 3 1 1 1 0 1 1 0 1 0
Mercedes-Benz Superdome 1 1 2 1 1 0 2 2 0 0 1 0 0 2
MetLife Stadium 7 3 3 8 4 7 8 3 6 1 7 5 6 6
Metropolitan Stadium 0 2 2 1 0 0 1 0 0 0 1 1 1 0
Mile High Stadium 9 6 7 6 3 2 4 1 3 0 8 3 4 4
New Era Field 1 1 0 2 1 4 2 0 2 0 1 1 0 0
Nissan Stadium 5 4 1 6 2 10 7 3 7 0 2 4 4 3
NRG Stadium 0 0 2 1 3 1 0 1 2 0 1 1 1 3
Oakland Coliseum 5 10 3 4 8 7 9 5 7 0 6 6 10 2
Orange Bowl 0 1 1 1 2 2 0 5 0 0 5 1 3 0
Paul Brown Stadium 2 6 4 7 6 5 5 3 5 0 6 3 5 5
Paycor Stadium 0 0 0 0 0 0 0 0 0 0 0 0 1 0
Pontiac Silverdome 7 4 2 2 8 8 6 9 0 0 5 4 6 2
Pro Player Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Qualcomm Stadium 6 4 8 7 14 15 12 8 5 0 13 7 7 8
Ralph Wilson Stadium 15 11 8 10 6 9 6 5 5 0 9 6 13 5
Raymond James Stadium 2 6 8 3 4 10 6 4 4 1 7 7 4 3
RCA Dome 4 4 7 5 5 3 6 6 3 1 6 4 6 6
Reliant Stadium 7 0 2 6 3 3 2 2 6 0 2 4 6 1
RFK Memorial Stadium 5 3 5 3 6 2 3 1 2 0 2 5 2 4
Rice Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Rogers Centre 0 0 0 0 1 0 1 0 0 0 0 0 0 0
Rose Bowl 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Seattle Kingdome 4 5 4 1 4 6 2 4 3 0 9 3 3 3
SoFi Stadium 3 1 0 0 1 3 2 1 2 0 0 0 1 1
Soldier Field 10 12 8 9 10 10 9 11 9 0 10 5 14 8
Sports Authority Field at Mile High 5 1 4 1 2 3 4 4 7 0 3 6 5 5
Stanford Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
State Farm Stadium 1 0 0 0 0 0 0 0 0 0 0 1 0 1
StubHub Center 0 0 1 1 0 1 1 0 1 0 0 1 0 1
Sun Devil Stadium 0 1 2 1 3 2 2 0 1 0 1 1 1 1
Sun Life Stadium 7 6 11 5 5 6 8 2 5 0 5 7 5 2
Tampa Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
TCF Bank Stadium 0 0 0 0 2 1 2 1 0 0 2 1 0 0
Texas Stadium 2 9 5 16 11 4 6 7 4 0 7 4 4 6
Three Rivers Stadium 7 5 5 7 6 4 4 9 4 1 4 7 4 6
TIAA Bank Field 1 0 2 1 1 2 0 1 0 0 1 1 1 1
Tiger Stadium (LSU) 0 0 0 0 1 0 1 0 0 0 0 0 0 0
Tottenham Hotspur Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 1
Tottenham Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Tulane Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Twickenham Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
U.S. Bank Stadium 4 0 3 2 0 2 2 1 1 1 0 1 2 1
University of Phoenix Stadium 1 6 3 7 6 6 5 8 5 0 8 6 2 6
Vanderbilt Stadium 0 0 1 0 0 0 0 0 1 0 0 0 1 0
Veterans Stadium 3 5 4 2 2 7 5 6 4 0 4 7 4 5
Wembley Stadium 0 1 0 0 0 0 0 0 0 0 0 0 3 0
schedule_week
stadium_name 6 7 8 9 Conference Division Superbowl
Acrisure Stadium 0 0 0 0 0 0 0
Alamo Dome 0 0 0 0 0 0 0
Allegiant Stadium 0 3 0 0 0 0 0
Allianz Arena 0 0 0 0 0 0 0
Alltel Stadium 0 0 0 0 0 0 0
Anaheim Stadium 0 3 6 4 0 1 0
Arrowhead Stadium 4 10 11 2 2 3 0
AT&T Stadium 1 2 1 1 0 0 0
Atlanta-Fulton County Stadium 3 1 1 4 0 0 0
Bank of America Stadium 2 6 5 9 1 2 0
Busch Memorial Stadium 2 1 1 1 0 0 0
Caesars Superdome 1 0 0 1 0 0 0
Candlestick Park 6 5 7 6 4 8 0
CenturyLink Field 2 2 2 8 2 2 0
Cinergy Field 5 2 5 6 2 2 0
Cleveland Municipal Stadium 4 3 3 5 0 2 0
Cowboys Stadium 1 3 3 1 0 0 1
Dolphin Stadium 0 0 0 0 0 0 1
Edward Jones Dome 4 7 5 4 0 2 0
Empower Field at Mile High 0 1 1 0 0 0 0
Estadio Azteca 0 0 0 0 0 0 0
EverBank Field 5 3 3 4 0 1 0
FedEx Field 4 4 4 1 0 0 0
FirstEnergy Stadium 5 4 4 7 0 0 0
Ford Field 2 3 7 2 0 0 1
Foxboro Stadium 4 3 3 3 1 1 0
GEHA Field at Arrowhead Stadium 1 0 0 0 0 0 0
Georgia Dome 5 8 2 8 1 2 1
Giants Stadium 14 15 11 8 1 4 0
Gillette Stadium 7 3 8 5 3 8 0
Hard Rock Stadium 2 2 0 2 0 0 1
Heinz Field 3 7 2 3 3 3 0
Highmark Stadium 0 0 0 0 0 0 0
Houlihan's Stadium 2 0 5 5 1 0 0
Houston Astrodome 5 3 4 3 0 0 0
Hubert H. Humphrey Metrodome 4 11 3 3 0 2 1
Husky Stadium 0 2 0 1 0 0 0
Jack Murphy Stadium 0 0 0 0 0 0 0
Joe Robbie Stadium 0 0 0 0 0 0 1
Lambeau Field 6 12 9 9 1 5 0
Levi's Stadium 0 4 1 3 1 1 0
Liberty Bowl Memorial Stadium 0 1 0 0 0 0 0
Lincoln Financial Field 5 1 6 4 1 1 0
Los Angeles Memorial Coliseum 6 0 3 1 1 3 2
Louisiana Superdome 9 6 8 6 0 1 3
LP Stadium 1 0 0 0 0 0 0
Lucas Oil Stadium 3 5 2 3 1 1 0
Lumen Field 0 0 2 0 0 0 0
M&T Bank Stadium 4 3 5 5 0 0 0
Mall of America Field 1 1 1 0 0 1 0
Memorial Stadium (Baltimore) 2 3 2 0 0 0 0
Memorial Stadium (Champaign) 0 0 0 0 0 0 0
Memorial Stadium (Clemson) 0 0 0 0 0 0 0
Mercedes-Benz Stadium 1 1 0 2 0 0 1
Mercedes-Benz Superdome 1 0 1 1 0 0 0
MetLife Stadium 9 6 3 4 0 0 0
Metropolitan Stadium 2 0 1 0 0 0 0
Mile High Stadium 3 3 4 6 3 3 0
New Era Field 2 0 3 2 0 1 0
Nissan Stadium 4 5 10 4 0 0 0
NRG Stadium 1 1 2 0 0 0 0
Oakland Coliseum 4 6 7 4 1 2 0
Orange Bowl 1 3 0 5 2 2 3
Paul Brown Stadium 2 4 3 3 0 0 0
Paycor Stadium 0 1 0 1 0 0 0
Pontiac Silverdome 4 5 2 2 0 0 1
Pro Player Stadium 0 0 0 0 0 0 1
Qualcomm Stadium 7 6 10 7 0 0 0
Ralph Wilson Stadium 9 6 8 10 2 3 0
Raymond James Stadium 9 4 2 5 0 1 1
RCA Dome 6 2 3 6 1 0 0
Reliant Stadium 1 3 5 5 0 0 0
RFK Memorial Stadium 3 7 2 2 2 3 0
Rice Stadium 0 0 0 0 0 0 1
Rogers Centre 0 0 1 0 0 0 0
Rose Bowl 0 0 0 0 0 0 4
Seattle Kingdome 0 4 2 5 0 0 0
SoFi Stadium 1 2 0 1 0 0 0
Soldier Field 9 9 10 3 4 3 0
Sports Authority Field at Mile High 3 5 6 3 1 1 0
Stanford Stadium 0 0 0 0 0 0 1
State Farm Stadium 0 2 0 0 0 0 0
StubHub Center 0 0 0 0 0 0 0
Sun Devil Stadium 3 2 3 2 0 0 0
Sun Life Stadium 2 7 5 9 1 1 0
Tampa Stadium 0 0 0 0 0 0 0
TCF Bank Stadium 1 0 0 1 0 0 0
Texas Stadium 10 9 8 3 2 5 0
Three Rivers Stadium 3 7 5 6 1 3 0
TIAA Bank Field 1 0 1 0 0 0 0
Tiger Stadium (LSU) 0 0 0 1 0 0 0
Tottenham Hotspur Stadium 1 0 0 0 0 0 0
Tottenham Stadium 1 0 0 0 0 0 0
Tulane Stadium 0 0 0 0 0 0 2
Twickenham Stadium 0 2 1 0 0 0 0
U.S. Bank Stadium 1 1 1 2 0 0 0
University of Phoenix Stadium 6 6 7 7 0 0 0
Vanderbilt Stadium 0 1 0 0 0 0 0
Veterans Stadium 4 5 6 8 0 2 0
Wembley Stadium 0 2 5 0 0 0 0
schedule_week
stadium_name SuperBowl Wildcard WildCard
Acrisure Stadium 0 0 0
Alamo Dome 0 0 0
Allegiant Stadium 0 0 0
Allianz Arena 0 0 0
Alltel Stadium 0 0 0
Anaheim Stadium 0 0 0
Arrowhead Stadium 0 2 0
AT&T Stadium 0 0 0
Atlanta-Fulton County Stadium 0 0 0
Bank of America Stadium 0 2 0
Busch Memorial Stadium 0 0 0
Caesars Superdome 0 0 0
Candlestick Park 0 1 0
CenturyLink Field 0 1 1
Cinergy Field 0 1 0
Cleveland Municipal Stadium 0 1 0
Cowboys Stadium 0 1 0
Dolphin Stadium 0 0 0
Edward Jones Dome 0 0 0
Empower Field at Mile High 0 0 0
Estadio Azteca 0 0 0
EverBank Field 0 1 0
FedEx Field 0 2 0
FirstEnergy Stadium 0 0 0
Ford Field 0 0 0
Foxboro Stadium 0 1 0
GEHA Field at Arrowhead Stadium 0 0 0
Georgia Dome 0 0 0
Giants Stadium 0 3 0
Gillette Stadium 0 2 0
Hard Rock Stadium 0 0 0
Heinz Field 0 0 1
Highmark Stadium 0 1 0
Houlihan's Stadium 0 1 0
Houston Astrodome 0 0 0
Hubert H. Humphrey Metrodome 0 4 0
Husky Stadium 0 0 0
Jack Murphy Stadium 0 0 0
Joe Robbie Stadium 0 0 0
Lambeau Field 0 4 1
Levi's Stadium 0 0 0
Liberty Bowl Memorial Stadium 0 0 0
Lincoln Financial Field 0 0 0
Los Angeles Memorial Coliseum 0 2 0
Louisiana Superdome 0 1 0
LP Stadium 0 0 0
Lucas Oil Stadium 0 1 0
Lumen Field 0 0 0
M&T Bank Stadium 0 3 0
Mall of America Field 0 0 0
Memorial Stadium (Baltimore) 0 0 0
Memorial Stadium (Champaign) 0 0 0
Memorial Stadium (Clemson) 0 0 0
Mercedes-Benz Stadium 0 0 0
Mercedes-Benz Superdome 0 1 0
MetLife Stadium 0 1 0
Metropolitan Stadium 0 0 0
Mile High Stadium 0 1 0
New Era Field 0 0 0
Nissan Stadium 0 2 0
NRG Stadium 0 1 0
Oakland Coliseum 0 1 0
Orange Bowl 0 1 0
Paul Brown Stadium 0 2 0
Paycor Stadium 0 0 0
Pontiac Silverdome 0 0 0
Pro Player Stadium 0 0 0
Qualcomm Stadium 0 2 0
Ralph Wilson Stadium 0 2 0
Raymond James Stadium 0 1 0
RCA Dome 0 3 0
Reliant Stadium 0 3 1
RFK Memorial Stadium 0 2 0
Rice Stadium 0 0 0
Rogers Centre 0 0 0
Rose Bowl 0 0 0
Seattle Kingdome 0 1 0
SoFi Stadium 0 1 0
Soldier Field 0 1 0
Sports Authority Field at Mile High 0 0 0
Stanford Stadium 0 0 0
State Farm Stadium 0 0 0
StubHub Center 0 0 0
Sun Devil Stadium 0 0 0
Sun Life Stadium 0 3 0
Tampa Stadium 0 0 0
TCF Bank Stadium 0 0 0
Texas Stadium 0 3 0
Three Rivers Stadium 0 1 0
TIAA Bank Field 0 0 0
Tiger Stadium (LSU) 0 0 0
Tottenham Hotspur Stadium 0 0 0
Tottenham Stadium 0 0 0
Tulane Stadium 0 0 0
Twickenham Stadium 0 0 0
U.S. Bank Stadium 0 0 0
University of Phoenix Stadium 0 1 0
Vanderbilt Stadium 0 0 0
Veterans Stadium 0 2 0
Wembley Stadium 0 0 0
, , favorite_covers = Not Cover
schedule_week
stadium_name 1 10 11 12 13 14 15 16 17 18 2 3 4 5
Acrisure Stadium 0 0 0 0 0 0 0 0 0 0 0 0 1 0
Alamo Dome 0 0 0 0 0 0 0 1 0 0 0 0 1 0
Allegiant Stadium 1 1 1 0 1 0 1 2 0 1 2 1 0 1
Allianz Arena 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Alltel Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Anaheim Stadium 6 4 4 3 0 4 6 2 1 1 6 3 1 4
Arrowhead Stadium 9 8 12 15 7 12 15 11 4 0 15 5 11 11
AT&T Stadium 0 1 0 3 3 0 2 3 1 0 2 0 3 3
Atlanta-Fulton County Stadium 1 1 7 4 1 3 2 4 0 0 6 1 1 5
Bank of America Stadium 8 7 8 3 2 8 6 7 3 0 9 8 7 11
Busch Memorial Stadium 2 2 4 3 2 3 1 2 0 0 0 1 2 2
Caesars Superdome 0 0 0 0 0 0 0 0 0 0 0 0 1 0
Candlestick Park 6 11 9 8 5 9 6 10 6 1 7 7 5 8
CenturyLink Field 3 3 2 4 5 1 2 9 6 0 4 5 2 4
Cinergy Field 3 4 6 3 3 6 3 3 6 0 7 4 4 4
Cleveland Municipal Stadium 2 3 4 2 5 4 4 2 0 0 6 5 5 3
Cowboys Stadium 1 0 2 4 3 3 5 1 2 0 2 2 3 4
Dolphin Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Edward Jones Dome 8 5 8 5 5 1 9 5 3 0 5 5 5 4
Empower Field at Mile High 0 1 1 1 0 0 1 0 0 1 1 1 1 1
Estadio Azteca 0 0 0 0 0 0 0 0 0 0 0 0 0 0
EverBank Field 5 5 5 3 6 7 5 7 2 0 8 2 6 4
FedEx Field 8 6 5 8 8 6 4 5 7 0 6 8 6 2
FirstEnergy Stadium 10 4 3 8 4 5 5 5 4 1 9 4 8 3
Ford Field 6 1 3 3 5 8 6 3 5 1 3 5 5 5
Foxboro Stadium 2 8 5 8 4 6 4 5 5 0 5 10 3 3
GEHA Field at Arrowhead Stadium 0 0 0 0 0 0 0 0 0 0 1 0 0 1
Georgia Dome 7 5 7 9 5 3 7 4 11 1 7 2 10 6
Giants Stadium 13 12 17 12 18 13 19 13 9 1 22 11 16 16
Gillette Stadium 6 4 3 5 4 4 3 5 4 0 2 8 4 1
Hard Rock Stadium 1 1 0 1 2 3 2 2 0 1 1 1 1 1
Heinz Field 5 9 2 5 8 5 7 4 4 0 5 3 6 4
Highmark Stadium 1 1 1 0 1 0 0 0 0 0 0 0 0 0
Houlihan's Stadium 3 2 4 6 5 7 8 1 2 0 5 3 5 5
Houston Astrodome 5 3 3 6 4 5 7 6 4 0 3 6 3 3
Hubert H. Humphrey Metrodome 5 9 8 7 6 4 6 12 6 0 4 9 6 5
Husky Stadium 0 1 0 0 0 0 0 1 2 0 1 1 2 1
Jack Murphy Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Joe Robbie Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Lambeau Field 15 11 5 7 7 14 5 6 5 0 11 10 10 9
Levi's Stadium 3 5 0 2 1 3 3 3 4 0 2 2 2 2
Liberty Bowl Memorial Stadium 1 0 0 0 0 0 0 0 1 0 0 0 1 0
Lincoln Financial Field 2 6 2 4 3 3 2 6 3 0 7 9 2 3
Los Angeles Memorial Coliseum 3 2 2 5 4 4 7 5 3 0 4 3 5 3
Louisiana Superdome 10 9 7 7 12 7 10 13 6 0 9 8 7 12
LP Stadium 1 1 0 0 0 0 0 1 0 0 0 0 0 0
Lucas Oil Stadium 4 6 3 4 1 1 4 3 6 0 6 5 4 3
Lumen Field 1 0 1 1 1 0 0 1 0 0 1 1 0 0
M&T Bank Stadium 2 4 4 3 9 3 6 6 9 1 4 7 6 5
Mall of America Field 1 2 1 0 1 1 1 0 3 0 2 3 0 0
Memorial Stadium (Baltimore) 1 2 0 1 4 1 2 2 1 0 2 0 1 1
Memorial Stadium (Champaign) 1 1 0 1 0 0 1 0 0 0 0 0 0 1
Memorial Stadium (Clemson) 0 0 0 0 0 1 0 1 0 0 0 0 0 0
Mercedes-Benz Stadium 2 0 1 2 1 0 1 1 0 0 1 2 3 1
Mercedes-Benz Superdome 2 1 1 1 0 1 1 1 1 0 1 1 1 1
MetLife Stadium 6 9 5 7 8 3 4 7 6 0 8 7 4 6
Metropolitan Stadium 2 0 0 1 1 0 1 1 0 0 1 1 0 2
Mile High Stadium 7 5 6 3 6 7 8 4 4 0 2 6 5 4
New Era Field 1 0 0 2 0 1 1 1 1 0 0 3 1 1
Nissan Stadium 6 11 8 3 4 5 5 8 4 0 10 6 2 5
NRG Stadium 3 0 1 2 1 3 0 2 1 1 1 1 3 2
Oakland Coliseum 6 5 5 9 7 4 10 6 6 0 6 5 3 8
Orange Bowl 0 1 3 2 4 2 2 3 0 0 2 0 2 3
Paul Brown Stadium 4 4 5 6 6 7 2 10 6 0 7 4 5 4
Paycor Stadium 1 0 0 0 0 0 0 0 0 0 0 0 0 0
Pontiac Silverdome 2 4 8 6 11 2 7 6 3 1 6 4 9 4
Pro Player Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Qualcomm Stadium 7 11 8 12 9 8 10 6 9 0 7 9 9 6
Ralph Wilson Stadium 11 4 5 8 6 8 5 8 6 0 6 9 9 11
Raymond James Stadium 9 8 3 5 5 3 4 7 8 0 5 5 7 2
RCA Dome 9 7 5 3 7 4 6 8 6 0 4 5 2 5
Reliant Stadium 4 1 6 4 2 3 5 5 5 0 1 3 3 6
RFK Memorial Stadium 8 5 5 3 6 6 3 4 3 1 6 3 1 5
Rice Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Rogers Centre 0 0 0 0 1 1 0 0 0 0 0 0 0 0
Rose Bowl 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Seattle Kingdome 4 6 4 6 10 8 6 7 3 0 2 4 5 5
SoFi Stadium 1 2 3 1 1 0 1 0 0 1 3 3 2 1
Soldier Field 16 13 5 9 13 7 13 7 4 0 12 11 8 5
Sports Authority Field at Mile High 6 4 5 10 2 7 4 4 8 0 7 5 4 5
Stanford Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
State Farm Stadium 0 1 0 1 1 1 0 1 0 1 0 0 0 1
StubHub Center 1 0 1 0 1 1 0 2 0 0 1 1 2 1
Sun Devil Stadium 0 2 1 2 0 0 3 2 3 0 1 0 3 1
Sun Life Stadium 5 6 7 8 8 7 14 14 7 0 7 11 3 7
Tampa Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
TCF Bank Stadium 0 0 0 1 0 0 0 0 1 0 0 0 1 0
Texas Stadium 8 4 10 5 10 6 7 10 4 0 5 9 6 6
Three Rivers Stadium 5 3 4 4 4 6 3 6 0 0 4 3 5 3
TIAA Bank Field 2 0 0 2 1 0 2 0 1 1 1 3 0 1
Tiger Stadium (LSU) 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Tottenham Hotspur Stadium 0 0 0 0 0 0 0 0 0 0 0 0 1 2
Tottenham Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Tulane Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Twickenham Stadium 0 0 0 0 0 0 0 0 0 0 0 0 0 0
U.S. Bank Stadium 1 0 3 1 2 0 2 1 3 0 1 5 1 2
University of Phoenix Stadium 7 10 4 5 7 10 9 7 6 0 7 9 9 5
Vanderbilt Stadium 0 0 0 1 0 1 0 0 0 0 1 0 0 0
Veterans Stadium 6 9 9 8 4 8 6 4 4 0 8 3 6 4
Wembley Stadium 0 0 0 0 0 0 0 0 0 0 0 1 2 0
schedule_week
stadium_name 6 7 8 9 Conference Division Superbowl
Acrisure Stadium 1 0 0 0 0 0 0
Alamo Dome 1 0 0 0 0 0 0
Allegiant Stadium 0 0 0 0 0 0 0
Allianz Arena 0 0 0 0 0 0 0
Alltel Stadium 0 0 0 0 0 0 1
Anaheim Stadium 1 4 0 1 0 0 0
Arrowhead Stadium 10 9 14 13 2 4 0
AT&T Stadium 1 0 0 3 0 0 0
Atlanta-Fulton County Stadium 4 2 4 1 0 1 0
Bank of America Stadium 2 6 9 3 0 2 0
Busch Memorial Stadium 0 2 5 5 0 0 0
Caesars Superdome 0 0 2 1 0 0 0
Candlestick Park 7 5 7 10 4 6 0
CenturyLink Field 9 3 2 5 1 1 0
Cinergy Field 6 4 2 5 0 0 0
Cleveland Municipal Stadium 5 6 5 2 1 2 0
Cowboys Stadium 0 1 3 3 0 1 0
Dolphin Stadium 0 0 0 0 0 0 0
Edward Jones Dome 4 4 3 2 2 1 0
Empower Field at Mile High 1 0 0 0 0 0 0
Estadio Azteca 0 0 0 0 0 0 0
EverBank Field 8 5 2 2 1 0 0
FedEx Field 8 10 1 9 0 0 0
FirstEnergy Stadium 8 4 4 5 0 0 0
Ford Field 4 6 5 5 0 0 0
Foxboro Stadium 7 8 3 8 0 0 0
GEHA Field at Arrowhead Stadium 0 0 0 1 0 0 0
Georgia Dome 7 3 4 6 1 3 0
Giants Stadium 15 12 17 16 1 2 0
Gillette Stadium 4 4 3 4 4 4 0
Hard Rock Stadium 2 1 1 1 0 0 0
Heinz Field 5 0 8 5 1 2 0
Highmark Stadium 0 0 1 0 0 0 0
Houlihan's Stadium 6 7 3 3 0 1 0
Houston Astrodome 3 2 4 5 0 1 0
Hubert H. Humphrey Metrodome 5 2 7 9 1 0 0
Husky Stadium 1 0 0 1 0 0 0
Jack Murphy Stadium 0 0 0 0 0 0 1
Joe Robbie Stadium 0 0 0 0 0 0 1
Lambeau Field 12 4 9 8 2 3 0
Levi's Stadium 2 2 0 4 0 0 1
Liberty Bowl Memorial Stadium 0 0 1 0 0 0 0
Lincoln Financial Field 3 6 5 3 2 2 0
Los Angeles Memorial Coliseum 5 2 3 6 0 2 0
Louisiana Superdome 5 7 13 6 1 1 2
LP Stadium 0 0 0 0 0 0 0
Lucas Oil Stadium 2 2 4 4 0 0 1
Lumen Field 1 1 0 0 0 0 0
M&T Bank Stadium 5 6 5 5 0 3 0
Mall of America Field 2 1 1 1 0 0 0
Memorial Stadium (Baltimore) 2 1 1 1 0 0 0
Memorial Stadium (Champaign) 0 0 0 1 0 1 0
Memorial Stadium (Clemson) 0 1 1 0 0 0 0
Mercedes-Benz Stadium 1 2 3 0 0 0 0
Mercedes-Benz Superdome 0 1 1 1 1 2 1
MetLife Stadium 5 6 6 7 0 0 1
Metropolitan Stadium 0 1 0 0 0 0 0
Mile High Stadium 5 7 4 1 0 4 0
New Era Field 0 1 2 1 0 0 0
Nissan Stadium 7 5 3 2 0 4 0
NRG Stadium 1 0 2 2 0 0 0
Oakland Coliseum 7 10 6 7 1 0 0
Orange Bowl 1 3 0 0 1 3 2
Paul Brown Stadium 5 5 8 3 0 0 0
Paycor Stadium 0 0 0 0 0 0 0
Pontiac Silverdome 6 4 4 9 0 0 0
Pro Player Stadium 0 0 0 0 0 0 0
Qualcomm Stadium 8 5 5 10 1 4 2
Ralph Wilson Stadium 8 9 6 10 1 1 0
Raymond James Stadium 4 6 6 6 0 2 2
RCA Dome 6 7 9 8 0 3 0
Reliant Stadium 4 3 0 2 0 0 1
RFK Memorial Stadium 1 3 4 7 2 1 0
Rice Stadium 0 0 0 0 0 0 0
Rogers Centre 0 0 0 0 0 0 0
Rose Bowl 0 0 0 0 0 0 1
Seattle Kingdome 4 6 3 5 0 0 0
SoFi Stadium 1 2 2 1 1 0 1
Soldier Field 12 8 11 8 0 4 0
Sports Authority Field at Mile High 7 2 5 4 2 4 0
Stanford Stadium 0 0 0 0 0 0 0
State Farm Stadium 0 0 1 1 0 0 0
StubHub Center 1 1 0 1 0 0 0
Sun Devil Stadium 1 1 1 1 0 0 1
Sun Life Stadium 5 14 3 5 0 0 1
Tampa Stadium 0 0 0 0 0 0 2
TCF Bank Stadium 1 0 0 1 0 0 0
Texas Stadium 5 3 9 2 0 3 0
Three Rivers Stadium 1 7 4 6 3 2 0
TIAA Bank Field 1 2 0 3 0 0 0
Tiger Stadium (LSU) 0 0 1 0 0 0 0
Tottenham Hotspur Stadium 1 0 0 0 0 0 0
Tottenham Stadium 0 0 0 0 0 0 0
Tulane Stadium 0 0 0 0 0 0 1
Twickenham Stadium 0 0 0 0 0 0 0
U.S. Bank Stadium 2 0 3 1 0 1 1
University of Phoenix Stadium 7 6 4 5 1 1 2
Vanderbilt Stadium 0 0 1 0 0 0 0
Veterans Stadium 5 4 8 5 2 0 0
Wembley Stadium 0 2 6 1 0 0 0
schedule_week
stadium_name SuperBowl Wildcard WildCard
Acrisure Stadium 0 0 0
Alamo Dome 0 0 0
Allegiant Stadium 0 0 0
Allianz Arena 0 0 0
Alltel Stadium 0 0 0
Anaheim Stadium 0 1 0
Arrowhead Stadium 0 3 0
AT&T Stadium 0 2 0
Atlanta-Fulton County Stadium 0 0 0
Bank of America Stadium 0 0 0
Busch Memorial Stadium 0 0 0
Caesars Superdome 0 0 0
Candlestick Park 0 1 0
CenturyLink Field 0 4 0
Cinergy Field 0 1 0
Cleveland Municipal Stadium 0 1 0
Cowboys Stadium 0 1 0
Dolphin Stadium 0 0 0
Edward Jones Dome 0 0 0
Empower Field at Mile High 0 0 0
Estadio Azteca 0 0 0
EverBank Field 0 1 0
FedEx Field 0 2 0
FirstEnergy Stadium 0 0 0
Ford Field 0 0 0
Foxboro Stadium 0 0 0
GEHA Field at Arrowhead Stadium 0 0 0
Georgia Dome 0 0 0
Giants Stadium 0 5 0
Gillette Stadium 0 2 0
Hard Rock Stadium 0 0 0
Heinz Field 0 4 0
Highmark Stadium 0 0 0
Houlihan's Stadium 0 0 0
Houston Astrodome 0 4 0
Hubert H. Humphrey Metrodome 0 2 0
Husky Stadium 0 0 0
Jack Murphy Stadium 0 0 0
Joe Robbie Stadium 0 0 0
Lambeau Field 0 4 0
Levi's Stadium 0 0 0
Liberty Bowl Memorial Stadium 0 0 0
Lincoln Financial Field 0 4 0
Los Angeles Memorial Coliseum 0 1 0
Louisiana Superdome 0 4 0
LP Stadium 0 0 0
Lucas Oil Stadium 0 2 0
Lumen Field 0 0 0
M&T Bank Stadium 0 1 0
Mall of America Field 0 0 0
Memorial Stadium (Baltimore) 0 0 0
Memorial Stadium (Champaign) 0 0 0
Memorial Stadium (Clemson) 0 0 0
Mercedes-Benz Stadium 0 0 0
Mercedes-Benz Superdome 0 2 0
MetLife Stadium 0 0 0
Metropolitan Stadium 0 0 0
Mile High Stadium 0 0 0
New Era Field 0 1 0
Nissan Stadium 0 0 0
NRG Stadium 1 1 0
Oakland Coliseum 0 1 0
Orange Bowl 0 0 0
Paul Brown Stadium 0 3 0
Paycor Stadium 0 0 0
Pontiac Silverdome 0 1 0
Pro Player Stadium 0 0 0
Qualcomm Stadium 0 3 0
Ralph Wilson Stadium 0 1 0
Raymond James Stadium 0 2 0
RCA Dome 0 0 0
Reliant Stadium 0 0 0
RFK Memorial Stadium 0 0 0
Rice Stadium 0 0 0
Rogers Centre 0 0 0
Rose Bowl 0 0 0
Seattle Kingdome 0 2 0
SoFi Stadium 0 0 0
Soldier Field 0 2 0
Sports Authority Field at Mile High 0 1 0
Stanford Stadium 0 0 0
State Farm Stadium 0 0 0
StubHub Center 0 0 0
Sun Devil Stadium 0 0 0
Sun Life Stadium 0 3 0
Tampa Stadium 0 0 0
TCF Bank Stadium 0 1 0
Texas Stadium 0 2 0
Three Rivers Stadium 0 1 0
TIAA Bank Field 0 0 0
Tiger Stadium (LSU) 0 0 0
Tottenham Hotspur Stadium 0 0 0
Tottenham Stadium 0 0 0
Tulane Stadium 0 0 0
Twickenham Stadium 0 0 0
U.S. Bank Stadium 0 0 0
University of Phoenix Stadium 0 1 0
Vanderbilt Stadium 0 0 0
Veterans Stadium 0 5 0
Wembley Stadium 0 0 0
, , favorite_covers = Cover
schedule_week
1 10 11 12 13 14 15 16 17 18 2 3 4 5 6 7 8 9
FALSE 227 160 207 198 209 216 183 198 169 9 218 193 193 175 162 191 186 176
TRUE 58 93 85 93 92 93 93 81 67 2 57 61 51 67 70 72 72 67
schedule_week
Conference Division Superbowl SuperBowl Wildcard WildCard
FALSE 5 16 13 0 18 3
TRUE 1 2 6 0 2 1
, , favorite_covers = Not Cover
schedule_week
1 10 11 12 13 14 15 16 17 18 2 3 4 5 6 7 8 9
FALSE 251 199 201 210 205 193 222 216 184 13 244 226 223 191 190 182 183 209
TRUE 49 85 73 87 94 93 102 110 55 3 68 62 57 75 80 77 89 66
schedule_week
Conference Division Superbowl SuperBowl Wildcard WildCard
FALSE 12 20 11 1 26 0
TRUE 2 4 6 0 5 0
I am disappointed that I could not get any graphs to work. That being said, I enjoyed working with this dataset, and am happy with what I was able to produce with the data. This was challenging data to work with, and it took me many long nights to work through some of the mutations and getting the joins to work right. I did learn quite a bit about Rstudio and found it very rewarding when my code started working correctly. I even found some satisfaction working on the graphs, when I at least got the counts working as I had hoped. I thought it was a fascinating dataset, with so many variables I could’ve used for analysis. It probably could have been done 100 different ways. In the end, the only question I had left was if the over/under data would have worked out better than the spreads.
Course textbook:
Wickham, H., & Grolemund, G. (2016). R for data science: Visualize, model, transform, tidy, and import data. OReilly Media.
Link: https://r4ds.had.co.nz/explore-intro.html
R programming language:
R Core Team (2022). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. URL https://www.R-project.org/.
R Packages:
Tidyverse: Wickham H, Averick M, Bryan J, Chang W, McGowan LD, François R, Grolemund G, Hayes A, Henry L, Hester J, Kuhn M, Pedersen TL, Miller E, Bache SM, Müller K, Ooms J, Robinson D, Seidel DP, Spinu V, Takahashi K, Vaughan D, Wilke C, Woo K, Yutani H (2019). “Welcome to the tidyverse.” Journal of Open Source Software, 4(43), 1686. doi:10.21105/joss.01686 https://doi.org/10.21105/joss.01686.
ggplot2: H. Wickham. ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York, 2016.
Sports Betting Laws by State https://www.investopedia.com/sports-betting-laws-by-state-5219064
Record 31.4 Million Americans to Wager $7.61B on Super Bowl LVI https://www.americangaming.org/new/record-31-4-million-americans-to-wager-on-super-bowl-lvi/
---
title: "Final Project"
author: "Jack Sniezek"
desription: "Examining NFL Betting Statistics"
date: "12/14/2022"
format:
html:
toc: true
code-fold: true
code-copy: true
code-tools: true
categories:
- final project
---
```{r}
#| label: setup
#| warning: false
library(tidyverse)
library(ggplot2)
knitr::opts_chunk$set(echo = TRUE)
```
## Introduction
The Super Bowl is easily the biggest betting event in the United States, with an estimated $7.61 billion in bets for the Super Bowl LVI. This figure is up 78%, or $3.33B from the year before. The huge surge in betting figures can be explained by the Supreme Court overturning a federal ban on sports betting in 2018, which had been in place since 1992. The law previously only allowed a select few states to operate. Today, 39 states and Washington DC either have legal sports betting or are considering legislation to implement it. Of the 39 states with legal sports betting or legislation, 22 allow online and mobile sports betting, which has led to the rise of many online sportsbooks such as DraftKings, Caesar’s Sportsbook, and BetMGM.
The purpose of this paper is to explore the trends in NFL betting in the Super Bowl Era. The key points that I intend to cover in my research are:
• Stadiums where spread is covered the most how it changes over time
• How weather affects who has covered the spread
• Who covers the spread in the Super Bowl/playoff games
I would like to also examine the over/under for these, as well as how individual teams fare against weather, stadium, and opponent, but I am afraid this will result in me taking on too much to handle. So, for the purposes of this paper, I will stick to these research topics.
The dataset I will be working with was available on Kaggle.com and consists of NFL game results, betting odds information, stadium information, and weather information. The data is made up of game results and weather information 1966 to present, and betting odds beginning in 1979. The betting odds included are the spread and the over/under. Weather data included is temperature, wind speed, and humidity for each game. Stadium data includes years active, type, capacity, and location. I will have to do significant data clean up, as the weather data is incomplete in some spots, there is a lot of extra stadium data, and many teams have changed names/cities. There are also some data points that are unique that have no info such as stadiums used for one or two games and have no information associated with it(for example, several baseball stadiums were venues in the early days of the NFL).
## Read in the Data
First I read in the data. There are 3 separate csv files that contain the data I will be working with; spreadspoke_scores, nfl_stadiums, and nfl_teams.
```{r}
#change directory
spreadspoke_scores <- read_csv("_data/nfl_data/spreadspoke_scores.csv")
spreadspoke_scores
stadiums <- read_csv("_data/nfl_data/nfl_stadiums.csv")
stadiums
teams <- read_csv("_data/nfl_data/nfl_teams.csv")
teams
```
## Combine the Data
The datasets will have to be merged using joins before I can start manipulating the data. The stadium data was easy to join because it only required one variable name change. I had issues joining the teams data as there was not a clear variable that was exactly the same on both datasets. Initially I tried to use team_id and team_favorite_id, but some of the teams had name changes but still had the same id. This created duplicate data that could not be removed because multiple ids were connected to one data point. Ultimately, I found success by using team_name and team_home for the join.
```{r}
#Rename stadium so I can join to stadiums data, create new variable for join with teams data
scores <- spreadspoke_scores%>%
rename(stadium_name = stadium)
#new variable to join scores data
new_teams <- teams%>%
mutate(team_home = team_name)
#mutate(team_name_id = str_c(team_name, team_id, sep = "_"), .before = team_name)
#select only data that I can use
#team_id had to be removed because the duplicates made redundant data, i.e. some teams changed names/location but id was the same
new_teams <- new_teams%>%
select(team_home,team_name,team_id,team_name_short,team_conference,team_division,team_division_pre2002)
#in case I messed up the data
full_scores <- scores
#joins
full_scores <- full_join(x = scores, y = new_teams, by = "team_home")
full_scores <- full_join(x = full_scores,y = stadiums, by = "stadium_name")
full_scores
```
The fully merged data contains 13,505 rows(games), and 37 columns.
## Clean and Mutate
My next big challenge was trying to create a variable that tells whether or not a spread was covered. I mutated the favorite variable to show the team name instead of the team id, and then I mutated the spread from a negative number to a positive in order for it to mathematically make sense to compare to the scores. Then I could use a case_when() to compare the two and determine if the spread was covered. The data was then ready to be selected and filtered. I took 13 variables and filtered out data from before 1979, except Super Bowls, since that was when the spread data was available. Also, I noticed that some spreads were 0 and the favorite was "PICK", so I filtered by spreads > 0.
```{r}
#rename
full_scores <- full_scores%>%
rename(favorite = team_favorite_id,
spread = spread_favorite)
#adjust favorite so data is team name and not id
#make spread positive number to keep calculations accurate
#new variable to show if a spread was covered, uses case_when
full_scores <- full_scores%>%
mutate(favorite = ifelse(favorite == team_id,team_home,team_away))
full_scores <- full_scores%>%
mutate(spread = spread * -1,
favorite_covers = case_when(team_home == favorite & (score_home - score_away) > spread ~ "Cover",
team_home == favorite & (score_home - score_away) < spread ~ "Not Cover",
team_away == favorite & (score_away - score_home) > spread ~ "Cover",
team_away == favorite & (score_away - score_home) < spread ~ "Not Cover"))
#select and filter the data
full_scores <- full_scores%>%
select(schedule_season,schedule_week,team_home,score_home,score_away,team_away,favorite,spread,favorite_covers,stadium_name,stadium_type,weather_temperature,weather_wind_mph)%>%
filter(schedule_season > 1978 | schedule_week == "Superbowl",
spread > 0)
full_scores
```
## Visualize
Here is where I struggled. My intent was to show spread coverage at different stadiums on a bar graph, but I could not figure out how to graph a count. I also tried a similar plot with wind mph and Super Bowls, but also could not figure out if I could plot the count of the spreads. However, I was able to manipulate the data into showing what I was looking for in the graph. I was able to get a count of the number of covers at each stadium by week. For example, in Giants Stadium, favorites have covered 17 times in week 16. Thats the most out of any team. I also did an overall count of stadium covers, with Giants Stadium having the most covers at 223. Giants Stadium is a unique situation, as both the Giants and Jets both play their home games there. Because tof this, it gets twice the amount of games as other stadiums. Next, I checked the Super Bowl covers at each stadium. The Rose Bowl has the most covers at 4, followed by the Louisiana Superdome and the Orange Bowl both at 3. Covers at different wind speeds is interesting. The most covers by more than double is at 0 mph, which makes sense. Rounding out the top 10 wind speeds for covers is 5 mph through 12 mph. The highest wind speed to have a cover is 32 mph.
In addition to using the counts to show my data, I made some tables to represent stadium covers, wind speed covers, and temperature covers. The stadium table breaks down stadium covers by week. The wind speed table breaks it down wind speed covers by week, with a filter to show the covers when the wind speed is more than 10 mph. The temperature covers table represents temperature covers by week. The coldest temperature for game that the spread was covered was -3 degrees.
```{r}
stadium_covers <- full_scores%>%
select(schedule_season, schedule_week,stadium_name, favorite_covers)%>%
filter(schedule_season > 1978,favorite_covers == "Cover")%>%
count(stadium_name, favorite_covers, schedule_week,sort = TRUE)
#ggplot(aes(y = stadium_name, x = schedule_week, fill = favorite_covers), geom_bar())
stadium_covers
stadium_covers_total <- full_scores%>%
select(schedule_season, schedule_week,stadium_name, favorite_covers)%>%
filter(schedule_season > 1978,favorite_covers == "Cover")%>%
count(stadium_name, favorite_covers,sort = TRUE)
stadium_covers_total
superbowl_covers <- full_scores%>%
filter(schedule_week == "Superbowl",favorite_covers == "Cover")%>%
count(stadium_name, favorite_covers, schedule_week,sort = TRUE)
#ggplot(aes(x = favorite_covers), geom_bar())
superbowl_covers
wind_covers <- full_scores%>%
filter(schedule_season > 1978,favorite_covers == "Cover")%>%
count(weather_wind_mph, favorite_covers,sort = TRUE)
#ggplot(aes(x= schedule_week, y = weather_wind_mph, fill = mean(weather_wind_mph)),geom_histogram())
wind_covers
tbl_stadium <- with(full_scores, table(stadium_name,schedule_week, favorite_covers))
tbl_stadium
tbl_wind <- with(full_scores, table(weather_wind_mph>10, schedule_week, favorite_covers))
tbl_wind
#tbl_heat <- with(full_scores, table(weather_temperature,schedule_week, favorite_covers))
#tbl_heat
#decided not to include the temperature table because its huge
```
## Reflection
I am disappointed that I could not get any graphs to work. That being said, I enjoyed working with this dataset, and am happy with what I was able to produce with the data. This was challenging data to work with, and it took me many long nights to work through some of the mutations and getting the joins to work right. I did learn quite a bit about Rstudio and found it very rewarding when my code started working correctly. I even found some satisfaction working on the graphs, when I at least got the counts working as I had hoped. I thought it was a fascinating dataset, with so many variables I could've used for analysis. It probably could have been done 100 different ways. In the end, the only question I had left was if the over/under data would have worked out better than the spreads.
## References
Course textbook:
Wickham, H., & Grolemund, G. (2016). R for data science: Visualize, model, transform, tidy, and import data. OReilly Media.
Link: https://r4ds.had.co.nz/explore-intro.html
R programming language:
R Core Team (2022). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. URL https://www.R-project.org/.
R Packages:
Tidyverse: Wickham H, Averick M, Bryan J, Chang W, McGowan LD, François R, Grolemund G, Hayes A, Henry L, Hester J, Kuhn M, Pedersen TL, Miller E, Bache SM, Müller K, Ooms J, Robinson D, Seidel DP, Spinu V, Takahashi K, Vaughan D, Wilke C, Woo K, Yutani H (2019). “Welcome to the tidyverse.” Journal of Open Source Software, 4(43), 1686. doi:10.21105/joss.01686 https://doi.org/10.21105/joss.01686.
ggplot2: H. Wickham. ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York, 2016.
Sports Betting Laws by State
https://www.investopedia.com/sports-betting-laws-by-state-5219064
Record 31.4 Million Americans to Wager $7.61B on Super Bowl LVI
https://www.americangaming.org/new/record-31-4-million-americans-to-wager-on-super-bowl-lvi/