Christopher G. Healey
Department of Computer Science, North Carolina State University
Fig. 1. A visualization of the final plays during the 4th quarter of the 2008 Orange Bowl, where Virginia Tech attempted to come back from a 10-point deficit. Although the Hokies scored a touchdown near the end of the game, they could not retrieve their onside kick; the Jayhawks made enough first downs during the ensuing possession to run out the clock.
Visualizations of each of the 2008 BCS games are available at the bottom of the web page:
Fiesta Bowl |
Orange Bowl |
Rose Bowl |
Sugar Bowl |
BCS Championship |
Visualizations of NFL play-by-play are also available here.
Visualization of NCAA play-by-play is an extension of our original NFL play-by-play visualization project. Our goal is to implement a parser capable of converting NCAA play-by-play descriptions into the common format that our NFL visualizer expects.
Although the specific rules used to choose BCS bowl teams are fairly involved, in general the teams ranked #1 and #2 nationally play in the BCS Championship game. Winners of each BCS conference (ACC, Big 12, Big East, Big Ten, Pac 10, and SEC) are guaranteed an automatic BCS bowl game bid. The remaining four "at-large" bids are selected from the pool of teams ranked in the top 14 in the nation with at least nine wins. A more complete description of the BCS with specific details about how BCS bowl teams are selected is available online.
As with the NFL project, our results are built in two steps. First, we must parse the play-by-play text into a format that properly describes each play during a game. Second, we need to convert the play-by-play descriptions into a visual representation of a game's events. Since we are using the visualizer from the NFL project, our main goal is to convert NCAA play-by-play into a format that matches what our visualizer expects.
A number of NCAA play-by-play sources are available online, each with different strengths. ESPN.com provides detailed play-by-play for most games throughout the season. Unfortunately, game time is reported only at the beginning and the end each possession, making it impossible to determine how long an individual play took to run. CBS Sports also provides NCAA football play-by-play, including times for individual plays. The number of games each week with "full play-by-play" is limited, however, normally to games that include at least one team with a national Top-25 ranking.
In the end, we chose to use the play-by-play published by CBS Sports. This decision was motivated by the fact that CBS provides complete play-by-play descriptions that include all the information our visualizer needs. CBS Sports makes their play-by-play text available online in a HTML/XML format. English language is used to describe each play, with only a few very general XML tags to identify different types of plays. This means that most of the parsing has to occur by-hand.
In general, the play-by-play text restricts each line to include only a single play, for example:
This is not universally true, however:
As with the NFL play-by-play, there are also cases where missing or incorrect information is provided. This normally involves incorrect play times:
Notice that the second play has a play time of 15:00, which cannot occur between two plays with play times of 12:02 and 11:56. It is also common for the play-by-play to exclude the text line that defines when a quarter begins. Basic typographical errors are also possible:
Here, the field goal attempt was missed, but the play-by-play text reports it as made.
Our parser does its best to compensate for these types of situations. We enforced two design decisions when we implemented the parser. First, we do not hand-correct the parser's output. This means that all interpretations must be handled automatically by the parser. Second, we do not to try to "guess" about where the play-by-play text might be incorrect. This means that if an error exists in the play-by-play, it will propagate into the parser's output.
We record the same 13 separate attributes for each play as for the NFL play-by-play: (1) type of play; (2) team with possession; (3) quarter; (4) game time within quarter; (5) down; (6) field position; (7) yards to go; (8) position ball advances to; (9) position ball returns to, e.g. on interceptions, fumbles, punts, kicks, and so on; (10) recipient of an event, e.g. for penalties, challenges, timeouts, and so on; (11) whether an event is applied, e.g. penalty enforced or declined, challenged play reversed or upheld, and so on; (12) home team score; and (13) away team score.
![]() (a) |
![]() (b) |
| Fig. 2. Examples of play glyphs and event tags: (a) kick, pass, rush, and pass incomplete glyphs; (b) play tags to identify sacks, penalties, fumbles, and scoring plays |
Once the play-by-play results have been parsed, they must be visualized. Plays are overlaid on a two-dimensional plane, where field position runs in the x-direction, and time runs in the -y-direction. The home team's end zone is on the left, and the away team's end zone is on the right. Each play is displayed as a rectangular glyph, with the from and to positions of the ball during the play defining the glyph's horizontal width, and the start and end times of the play defining it's vertical height. The glyph is coloured with the appropriate team colour, as defined by the CBS Sports web site. Plays are divided into four basic types: pass, rush, kick, and other. The play glyphs are modified to visually differentiate the play types (Fig. 2). Pass plays texture small X's onto the play glyph. Completed passes are shown as a solid glyph. Glyphs for incomplete passes fade out at their endpoint. Rush plays texture small strips onto the glyph. Kicks add an arrow to the glyph to show the direction of the kick. Any other types of ball movement (e.g. changing the ball position due to a penalty) leave the glyph unchanged.
Important plays are tagged with a text label to highlight them in the play sequence. For example, in Fig. 2b the away team (North Carolina State) passes for 20 yards, is sacked for -10 yards, is penalized for -10 yards, passes for 30 yards then fumbles and recovers for -10 yards, and finally rushes 20 yards for a touchdown. The sack, penalty, fumble, and score plays are tagged to identify them to the viewer.
| Fiesta Bowl | Orange Bowl | Rose Bowl | Sugar Bowl | BCS Championship |
![]() WV 48 OK 28 |
![]() KS 24 VATECH 21 |
![]() IL 17 USC 49 |
![]() HI 10 GA 41 |
![]() OHST 24 LSU 38 |
We have recently updated our prototype with a number of necessary improvements. Proper contrast colours are selected to ensure that dark team colours (e.g. the darker glyphs representing Illinois) are textured with light elements, while lighter colours are textured with dark elements. When team colours taken are very similar to one another, we use a HSL colour space to "push" the colours away from one another in the saturation channel.
Other work still remains to be completed. One major goal is to rewrite our visualizer in Java. Currently, HTML/XML parsing is done in Java, while the visualizations are rendered in OpenGL and C++. By converting the rendering code to some appropriate 2D graphics API (e.g. Swing), we can run the entire program as an applet. Web code can then be wrapped around the applet, to allow it to dynamically query and visualization any game an online user requests.