Dashboard Week Days 4&5: NFL Big Data Bowl 2026 - Analytics

Our final brief of dashboard week is to create the start of an entry for the NFL Big Data Bowl hackathon, which focuses on the player movement before and after a pass.

As with previous weeks my first step is to breakdown the time available to me and plan out the next two days.

Time budget

Thursday

0900 - 1100 - Understand the brief, scoping and research

1100 - 1200 - Extensively plan, understand required calculations and sense check scope

1200 - 1300 - Lunch

1300 - 1400 - Sketching

1400 - 1500 - Data transformations (hopefully minimal with this project)

1500 - 1700 - Building charts

Friday

0900 - 1200 - Building charts

1200 - 1230 - Lunch

1230 - 1430 - Dashboard formatting

1430 - 1530 - Presentation prep

Plan

After reviewing the data, I decided to focus on pass receptions. This involves tracking the runs of receivers and observing successful/unsuccessful outcomes. Luckily, we can see the route that target receivers run. This means we can bin/colour different routes!

I think the big picture will be understanding which routes run by receivers lead to the most successful outcomes and with the following user stories in mind, allowing coaches to understand what routes suit which players.

User story

As a ... NFL Coach

I need ... to understand the most successful routes run by receivers/my own players

So that ... I can utilise the best tactics to win games

This can achieved by ... visualising routes run by different players, showing success rates overall and by player. Possibly breaking this down into different types of pass i.e long/medium/short

Required columns from data

Essential:

input file

  • play_id (not unique across games)
  • game_id (primary key)
  • nfl_id
  • play_direction
  • player_name
  • player_position
  • player_role
  • num_frames_output
  • ball_land_x
  • ball_land_y
  • play_direction

output file (all files)

  • x co-ordinate
  • y co-ordinate
  • play_id (not unique across games)
  • game_id (primary key)
  • nfl_id
  • frame_id (starts at 1, increments with each frame of a play.)

supplementary file

  • route_of_targeted_receiver
  • season
  • week
  • home_team_abbr
  • visitor_team_abbr
  • game_id
  • play_id
  • pass_result
  • pass_length
  • offense_formation
  • team_coverage_man_zone
  • play_description
  • team_coverage_type - The specific kind of coverage assigned on the play (text)
  • team_coverage_man_zone: Indicates the overarching type of coverage (Man/Zone) on a play (text)

Inspiration

https://public.tableau.com/app/profile/tim.lafferty/viz/NFLReceiverRoutes/ReceiverRoutes

Data prep plan

As it's a very large dataset, start by pulling in a single week of inputs and outputs and then the rest can be unioned in after testing with the nimble dataset.

We will need:

Unified frames table - gives a path ID of the players movement, contains the x and y, frame ids (modified to differentiate between input and output), and keys to allow relationship with the play info table

Play info - this is an aggregation of the input/output file that takes the information about the play and aggregates to that play (removing all but the first frame and dropping the frame column)

Supplementary

This table (hopefully) won't require much data prep.

Sketching

Building time!

I decided to utilise a background image for visualising the pitch, as this would help the view see the context of where the runs started/ended.

I asked Gemini to decolour an image from wikimedia, then I did some manual cropping/editing to end up with this

After receiving some feedback, I realised that I also needed to normalise the data so that any runs that were being performed from left to right would be inversed, so that you could see all the runs in the correct direction.

That calculation ended up like this:

The pitch is 120 yards long, which are the units used in the x, y co-ordinates of the data
It is 53.3 yards wide, and so we subtract that from the Y co-ordinate to flip the data (so a player on the right of the pitch is still shown there regardless of direction)

I ended up with this!

Author:
Joss Lazenby
Powered by The Information Lab
1st Floor, 25 Watling Street, London, EC4M 9BR
Subscribe
to our Newsletter
Get the lastest news about The Data School and application tips
Subscribe now
© 2026 The Information Lab