I plunked through a bunch of Anaconda, Jupyter, Pandas, and Matplotlib stuff today. Hopefully I did all the calculations correctly! Most of this stuff is new to me.
Anyway, my goal was to revisit bare EPA/play. For now I have focused on the offense but a similar data crunch is possible for the defense. I have been using rankings, overall and weekly, to contextualize the raw EPA/play numbers so far but this will I hope be superior. I wanted to compare the Seahawk offense's production to what their opponent typically allowed.
Below is a graph of overall EPA/play, passing EPA/play, and rushing EPA/play, with each data point being offset by the opponent's average yielded EPA/. So if the Hawks did exactly the average production against, say, DET as DET usually allows, they'd have an EPA/play OE of 0.0 that week. The higher the number the better and vice versa, with the aforementioned 0.0 being the transition point.
One interesting thing about this graph is that past figures are liable to change as the year goes on. As each defense matures, fades, improves, etc., their average EPA/ changes and the delta from what the Hawks' offense did against them changes with it.
I may put in the extra work sometime to switch from the yearly defensive average to an N week window around each game, hopefully to better capture the present state of the defense. That way injuries and other developments would be better determined.
EDIT: I forgot to include the overall grades. So far, the Seahawks are closest to facing the JAX defense every week on average, are overall in the positive for EPA/play OE and EPA/dropback OE, and are in the negative for EPA/rush OE. Without crunching the same numbers for every offense, I don't have enough context to say how good or bad are the raw numbers.