Dungeons and Dragons: Character Speech Timeline Visualization

Inspiration

As a team of data enthusiasts and storytellers, we were drawn to the "Dungeons & Dragons" datathon challenge because it beautifully blended narrative with data. The opportunity to bring life to the dialogues from Critical Role Campaign 1 through visual storytelling excited us. What inspired us the most was how D&D storytelling parallels data visualization — both are about uncovering patterns, emotions, and impactful moments from vast information.

What We Learned

This project helped us sharpen and explore various skills, including:

  • Data wrangling and cleaning using Python and pandas.
  • Extracting and working with dialogue-level timestamped data.
  • Designing a streamgraph visualization to represent evolving character speech dynamics.
  • Using Tableau effectively for dynamic filtering and storytelling through visuals.
  • Implementing categorical color reduction and time binning to enhance clarity.

How We Built the Project

Dataset Selection & Extraction

  • Used the Critical_Role_Campaign_1_Datapack, extracted from the provided project link.
  • Focused on episode transcripts with structured dialogue, player names, and timestamps.

Data Cleaning (Python)

  • Removed null/missing entries and irrelevant rows.
  • Extracted and normalized fields like Character, Player, Role, and Timestamp.
  • Created a new field to bin time into minute intervals for aggregation.

Visualization in Tableau

  • Imported the cleaned dataset.
  • Used a Streamgraph to represent speech flow over time for each character.
  • Added filter controls for Episode, Player, Role, and Character to make it interactive.
  • Reduced color clutter by displaying only Top 10 speakers dynamically.

Challenges Faced

Data Granularity

The raw dataset was large and unstructured — parsing character dialogues by timestamp was tricky and required several rounds of cleanup.

Time Binning Errors

Initial attempts to create a timeline-based binning using INT([Start Time] / 60) in Tableau led to unexpected nulls due to format inconsistencies.

Visualization Overload

Early versions of the chart had too many characters and colors, making it unreadable — this was solved by limiting the view to top speakers.

Tool Compatibility

Exporting Python-cleaned data in a Tableau-friendly format required trial-and-error with CSV encodings and delimiters.

Team Coordination

Merging each member’s contribution across Python scripts and Tableau dashboards while maintaining consistency required strong communication.

Final Output

The final Streamgraph Timeline allows users to explore:

  • Which character spoke most during different episodes.
  • How each character’s presence evolved through the campaign.
  • Filterable views by role, player, and episode — providing both a narrative arc and analytical insight into the campaign’s structure.

Team Members Discord Handle

Jean Paul Rajesh - akaza15 Hariharan Ramesh - hariharanuta Akshay Prassanna Sivaprakash - theomegawolf.

Built With

Share this project:

Updates