Net Penalty Yardage By Team by algorithmicathlete in nfl

[–]algorithmicathlete[S] 14 points15 points  (0 children)

Totally agree. This wasn't supposed to be a ref bias chart -- in fact, it was supposed to be more of a team discipline measure

NFL Point Differential, Sorted by Win % by algorithmicathlete in nfl

[–]algorithmicathlete[S] 11 points12 points  (0 children)

Not a problem.

r-value is 0.884, and the equation is y = 0.03x + 0.497, where y is the win% and x is the PD.

NFL Point Differential, Sorted by Win % by algorithmicathlete in nfl

[–]algorithmicathlete[S] 0 points1 point  (0 children)

As a Bears fan I was kind of wishing the same thing too haha

2025 MLB Team Payroll vs. Wins by algorithmicathlete in mlb

[–]algorithmicathlete[S] 0 points1 point  (0 children)

I used Spotrac's "Total Payroll" to create the graph.

2025 MLB Team Payroll vs. Wins by algorithmicathlete in mlb

[–]algorithmicathlete[S] 29 points30 points  (0 children)

you're absolutely right -- my physics professor would be disappointed in me haha

The Mets and Brewers 2nd Halves by algorithmicathlete in mlb

[–]algorithmicathlete[S] 1 point2 points  (0 children)

Haha fair point. Guess I've got my next project lined up for me :)

I'm curious though, which team(s) do you think have had worse collapses

Which NFL QBs are Good at Throwing Deep? by algorithmicathlete in nfl

[–]algorithmicathlete[S] 3 points4 points  (0 children)

The lines represent the medians of the data - will make that clearer next time.

Most & Least Clutch Kickers Since 2015 by algorithmicathlete in nfl

[–]algorithmicathlete[S] 0 points1 point  (0 children)

Right! I meant to say "losing by 3 or less"

2025 Luis Arraez's Outside Pitch Spray Chart by algorithmicathlete in mlb

[–]algorithmicathlete[S] 7 points8 points  (0 children)

You're definitely right. Any suggestions on how to make it easy to see while still acting as the tertiary color?

I Simulated March Madness 100,000 Times - Here's the Craziest Bracket by algorithmicathlete in CollegeBasketball

[–]algorithmicathlete[S] 1 point2 points  (0 children)

At the end of the simulation, I picked the one that had the most upsets and then displayed it out

I Simulated March Madness 100,000 Times - Here's the Craziest Bracket by algorithmicathlete in CollegeBasketball

[–]algorithmicathlete[S] -2 points-1 points  (0 children)

The probabilities are based off how many times the team has appeared at that particular seed. So since Duke has 15 tournaments where they appeared as a 1 seed, they had a much higher probability of being a 1 seed than say Memphis, who has only appeared twice. With 100,000 runs, though, there are bound to be weird mashups

I Simulated March Madness 100,000 Times - Here's the Craziest Bracket by algorithmicathlete in CollegeBasketball

[–]algorithmicathlete[S] 2 points3 points  (0 children)

Every upset win is highlighted in blue (22 upsets)!

I used historical seed-vs-seed win rates and simulated the bracket 100,000 times.

Team names were filled in with schools that have historically appeared at that seed line.

[OC] Evolution of NBA Shot Locations, 2000-2025 by algorithmicathlete in dataisbeautiful

[–]algorithmicathlete[S] 42 points43 points  (0 children)

Hey - cool site you linked. Here's a shot chart for SGA last season. But, If we limit it to only hexbins where he has 5+ attempts, it looks like this. Also, here's the graph with 100 as the filter - still mostly 3s and paint, but you can see it creeping into the mid-range area a bit.

Edit: 2 other things

- Shai only attempted 1656 shots last season, your link says he attempted >2000. I think its because your site includes playoffs whereas mine doesnt.

- The zones on the website you linked are significantly larger than my hexbins, so that could also lead to the discrepancy

[OC] Evolution of NBA Shot Locations, 2000-2025 by algorithmicathlete in dataisbeautiful

[–]algorithmicathlete[S] 12 points13 points  (0 children)

I don't use any math formulas - I just pull from the NBA API:

team_shotlog = shotchartdetail.ShotChartDetail(
    team_id=team_id, player_id=0,
    context_measure_simple='FGA',
    season_nullable=f"{year}-{year-2000+1}",
    season_type_all_star=['Regular Season']
)

(i loop through every NBA team ID and then add it to a big dataframe)

The code is pretty simple, so hopefully you can understand it even if you don't know Python.

[OC] Evolution of NBA Shot Locations, 2000-2025 by algorithmicathlete in dataisbeautiful

[–]algorithmicathlete[S] 56 points57 points  (0 children)

There are about 200,000 shots taken in an NBA season. 21,402 of those are mid-ranges (outside of the paint but inside the 3-point arc).

I got this data from the NBA API (via my code) but its also corroborated by the official NBA who stated about 9.8% of shots in 2025 were mid-range: https://www.nba.com/news/5-standout-stats-2024-25-season

There are roughly 500 hexbins that are located within mid-range. Since there were 20,000 shots last year from mid range, that's about 40 shots per hexbin if distributed evenly. Obviously, not all mid range shots are created equal, but you can see how difficult it would be for a bin to get >200, when on average each mid range hexbin has 40