SACRAMENTO, CA -- Look at me, deep into these baby blue peepers. I know what you’re thinking:
‘What proof do you have that Matthew Stafford doesn’t suck’.
Well, sit down. Buckle up. I can’t prove Jesus is real to you with cold hard graphs but I can prove that Matthew Stafford isn’t the messiah. However, even though Stafford isn’t Jesus, let’s see exactly just how much that he doesn’t suck. We sat down and found a database of historic play-by-play NFL data from 2009 to 2019. We blew the dust off of these yellowed, aged tomes and read the incantations within.
I was sick and tired of the LAZINESS that internet sports writers embody, they provide a dinky chart and let you decide. That is horse shit. I can’t visualize numbers. Where are the colors? The 5thQuarterSports staff hooked that historic data up to a fancy graph maker, closed our eyes, slammed our acrylic nails against our butterfly keyboard, and this is what came out.
Touchdowns To Interceptions
I have almost no football knowledge. Truthfully. This is just a fact. So I asked the team at 5thQuarterSports, what makes a good player? The resounding answer was that QBI was complete and utter bullshit. One must look at the ratio of touchdowns to interceptions.
I’m a fan of ratios as much as the next guy, so where is what I came up with. It is a breakdown, year by year. I need you to do two things. Ignore those great years by Russel Wilson and that historic (literally historic year) year by Tom Brady. Notice that humble yellow bar. THAT, my friends, is Matthew Stafford. Always POSITIVE. Always present. This is focused on the top 10 quarterbacks by total yearly touchdowns (which in and of itself proves Stafford cannot suck by being included).Image Source
Passing Yards Breakdown
Look, I realize that most of you probably don’t have to analyze a graph, like ever. It probably hurts your coconut to actually think about these icons A N A L Y T I C A L L Y. If I know anything about writing satirical sports based articles backed by data, it’s that the author needs to mock the audience to feel superior.
Moving on, what else makes a quarterback great? It’s how many yards that they can throw the ball for. To quote myself if the previous article:
“It’s football, it gets thrown. It isn’t rushball, in which we look at rushing.”
Here is a similar breakdown from above, looking at passing yards year-by-year. I will admit, this graph has a bit of visual vomit. Focus on the reddish colored bar. That is Stafford, in the wild. Yes, there may be over a 1K passing yard difference in some places. YES, he is dropping off over the years. But look closely. He is still top 10, and still qualifies for greatness there forsure.Image Source
Matthew Stafford isn’t the best. He certainly isn’t the worst. He is solidly within the top ten. I can’t say spitting distance, because I can’t spit over 1K yards, but he is there. Should we look at, maybe, points per touchdown ratio? Or, maybe, the ratio of touchdowns per catch by WR / RB across teams? Maybe next time, kid. Thank you for coming to my TEDx.
Extra: How’d We Do This?
With data, ofcourse. We rely on the nfldb historic NFL dataset. The NFL used to have a public API to access their data. Now, they hide it behind a paywall. What a money grab. Shitty move, NFL. This dataset was build from the previous API and can no longer be updated freely.
To visualize the data, we rely on Apache Superset, a tool developed by AirBnb. It is flexible enough to take a simple SQL query and produce a pretty good looking graph.
Based on the provided data model above, here are the queries we used:
Top QBs by Touchdowns / Interceptions
SELECT player.full_name AS full_name, play_player.passing_int AS interceptions, (play_player.passing_tds + play_player.rushing_tds) AS touchdowns, TO_DATE(game.season_year || '0101', 'YYYYMMDD') AS year FROM play_player LEFT JOIN player ON player.player_id = play_player.player_id LEFT JOIN game ON game.gsis_id = play_player.gsis_id WHERE game.season_type = 'Regular' and game.season_year >= 2012 and game.season_year <= 2019 and player.full_name IN ( SELECT full_name FROM player LEFT JOIN play_player ON player.player_id = play_player.player_id WHERE play_player.passing_tds IS NOT NULL AND play_player.rushing_tds IS NOT NULL GROUP BY player.full_name ORDER BY sum(play_player.passing_tds + play_player.rushing_tds) DESC LIMIT 10 ) ORDER BY year ASC;
Top QBs by Passing Yards
SELECT player.full_name, COALESCE(play_player.passing_yds, 0) as passing_yds, to_date(game.season_year || '0101', 'YYYYMMDD') as year FROM play_player LEFT JOIN player ON player.player_id = play_player.player_id LEFT JOIN game ON game.gsis_id = play_player.gsis_id WHERE game.season_type = 'Regular' and game.season_year >= 2012 and game.season_year <= 2019 and player.full_name in ( select full_name from player LEFT JOIN play_player ON player.player_id = play_player.player_id where play_player.passing_tds is not null and play_player.rushing_tds is not null group by player.full_name order by sum(play_player.passing_yds) desc limit 10 ) and passing_yds is not null order by year asc;