What Bulls fans were telling us between the games

I built a Python pipeline to turn thousands of public Reddit comments into structured evidence about sentiment, player narratives, leadership frustration, and the difference between live reaction and postgame reflection.

15,261+public fan comments processed
50live and postgame threads tracked
250detected front-office theme mentions
3 monthsDecember through February coverage

The question

Scores show what happened. I wanted to understand what fans kept believing, where patience broke, and when criticism shifted from players to the organization.

From raw threads to usable evidence

A reproducible pipeline turned raw discussion into structured, auditable evidence.

01

Collect

Pull public live-game and postgame Reddit threads through JSON-based scraping workflows.

02

Normalize

Unify comment fields, thread types, timestamps, game IDs, scores, and parent-child metadata.

03

Enrich

Add sentiment, intensity, player aliases, themes, profanity, emoji, negation, and sarcasm cues.

04

Aggregate

Build game summaries, theme counts, top comments, player profiles, and live-to-postgame shifts.

05

Interpret

Translate recurring patterns into audience, brand-trust, and organizational narrative insights.

Engineering decisions

Reviewable rules and modular scripts kept the analysis transparent and adaptable.

Built for traceability
  • Separate scripts for collection, cleanup, enrichment, and reporting
  • Inspectable CSV outputs at each stage
  • Player alias matching for nicknames and spelling variants
  • Theme classification across team, leadership, and game topics
  • VADER scoring paired with deterministic rules
Language-aware scoring

Fan comments are messy by design. The enrichment layer accounted for negation, intensifiers, emojis, profanity, and sarcasm signals before producing game-level summaries.

raw threads
→ unified comments
→ enriched comments
→ theme + player summaries
→ game-level insight

What the data made visible

The useful signal was the difference between temporary emotion and the narratives fans carried forward.

Conversation lifecycle

Live reaction and postgame meaning were different

Live threads captured sharper emotional swings. Postgame discussion provided a clearer view of the beliefs and frustrations that persisted.

Trust

Some frustration had moved beyond the court

Front-office language appeared in 250 detected theme mentions, showing that organizational direction had become part of the fan conversation.

Attention

Player narratives carried different kinds of weight

Mention frequency, framing, and sentiment helped separate future-facing belief, performance pressure, and signs of disengagement.

The organizational context

I reached out to a Chicago Bulls Senior Brand Manager on LinkedIn, then spoke with them over Zoom and by phone. Their 20+ years with the organization added valuable context to our conversation about fan trust and frustration with senior leadership.

The Bulls later made major front-office and roster changes. I do not claim this research influenced those decisions. The timing showed why social listening can matter as an early indicator of audience pressure.

Why the build matters

The result connects technical execution with the judgment needed to turn unstructured language into evidence a brand team can use.

Yes, I actually go to the games.

I spent a lot of that season at the United Center, sometimes in the 300 level and sometimes close enough to hear the bench. I was already noticing which players fans rallied behind, what changed the energy in the building, and which frustrations followed everyone home.

This project came from genuine curiosity about a team and fan base I was already invested in. What I saw in the data was also reflected in conversations with people I met and sat next to at the games.

Chicago Bulls logo

And because I’m a branding person...

The Bulls’ primary logo has not changed since 1966. That is pretty incredible when you consider how often professional sports brands update their identities. Sometimes the smartest brand decision is knowing when not to change something.