How Liberals and Conservatives Talk About Cancel Culture

NLP
text analytics
topic modeling
measurement validation
Python
R
HPC
8.6 million tweets. Liberal- and conservative-leaning users framed the same cancellations with different moral language, and outrage lingered for weeks after the attention faded.
Published

July 22, 2026

Modified

September 23, 2026

In brief. Everyone has an opinion about cancel culture; very few of those opinions come with data. I collected 8.6 million tweets about cancellations from five samples: the phrase “cancel culture” itself, the “___ is over” hashtag trend, and tweets about specific academics, celebrities, and private citizens who were canceled. I estimated each user’s political lean from the words in their profile bio, then scored every tweet for moral and emotional language. Two findings stand out. Liberal- and conservative-leaning users discussed the same events in different moral vocabularies. And outrage arrived with the first wave of attention, then lingered for weeks after the attention faded.

8.6M tweets4M users5 samplespartisan lean from biosmoral languagetopic modelingPythonRHPC

Which words show up together in profile bios?

Each dot is a word from users’ profile bios; lines connect words that tend to appear in the same bios. Hover over (or tap) a word to see which words it travels with.

The question

“Cancel culture” gets invoked with a great deal of confidence and very little data. Underneath the argument are two questions any organization that listens to the public has to answer: who is talking, and how are different groups framing the same thing?

What I did

Estimated political lean from profile bios. A small share of users (1 to 9%) state their politics outright in their bio with terms like “#BlueWave” or “GOP.” I used them as anchors, then scored every other bio word by how closely it tracks those anchors across the millions of bios. That produced a usable estimate of partisan lean for between a third and a half of all users.

Reading politics from a bio

Picture a bio that reads “dog mom, nurse, #BlueWave.” The hashtag gives a clear clue to her political leaning. The more interesting part, however, is that “dog mom” and “nurse” now carry a little information too. Over millions of bios, non-political words get associated with clear liberal or conservative signals (or get associated with other words that are associated with clear partisan terms). Add up those small signals across a whole bio and you get a rough estimate of lean for people, even if they never mention politics.

Scored moral and emotional language. I measured moral language with a published dictionary of moral words and checked it against two AI models trained to recognize similar categories. I then built an outrage score from dictionary terms for harm, cheating, betrayal, subversion, and degradation, and ran separate AI classifiers for anger, sentiment, and irony to check it.

Tracked time. For 23 cancellations with a verifiable date for the behavior itself (the tweet, remark, or incident, not the news coverage or a firing), I lined up each person’s tweets by that date and followed the outrage score for a month afterward.

Modeled topics. Using a variant of latent Dirichlet allocation, I identified different topics that were discussed by the different political groups (e.g., “mob justice”).

Note

8,572,185 English-language tweets from 4,035,488 users, collected in late 2022 through Twitter’s research API. Platform terms prohibit sharing tweet or bio text, so everything here is an aggregate. Code: github.com/zjschroeder/Cancel-Culture-Text-Analysis.

What I found

Liberal and conservative users brought different moral lenses to the same events. Each cell below compares how often conservative- and liberal-leaning users used one kind of moral language in one sample.

Red cells: conservative-leaning users used that kind of language more. Blue cells: liberal-leaning users did. The label says how many times as often (“2.1× con” means conservatives used it 2.1 times as often as liberals). Hover for the underlying rates.

Reading the heatmap

Each cell compares one kind of moral language between the two groups. The label tells you which group used it more and by how much: “2.1× con” means conservative-leaning users used it 2.1 times as often as liberal-leaning users, and “2.1× lib” means the reverse. The color says the same thing, red for conservative and blue for liberal, and the deeper the color, the bigger the gap. For example, when academics were canceled, conservatives used fairness language 2.1 times as often as liberals did; when celebrities were canceled, liberals used sanctity (purity) language 2.1 times as often as conservatives did.

Fairness showed the biggest gap, but its direction depended on who was being canceled: conservatives used it far more when the target was an academic or a private citizen, and slightly less in the other samples. Betrayal, degradation, and outrage leaned conservative in most samples.

They also talked about different parts of the story. Conservative-leaning users spent more of their tweets on free speech and on the idea of “the mob”; liberal-leaning users spent more on accountability and consequences. Although gaps are a few percentage points, for a dataset of millions of tweets, that marks a sizable difference in conversations.

Outrage arrived with the attention, then lingered.

Day 0 is the date of the behavior itself (the tweet, remark, video, or incident), found by searching news coverage for each of the 23 cases listed below. Each point averages that day and up to six days before it, counting only days from day 0 on. Days before day 0 are left off: most people in the sample were barely tweeted about before their behavior, so those averages rest on a handful of people. The academic jump around day 15 comes mostly from one case whose remarks went viral about two weeks after they aired.

Day 0 is the date of the behavior itself, not when news covered it or when an employer acted; later actions are listed separately. Dates marked ±1 day in the data file could only be pinned that closely. Cases were left out when the behavior could not be dated to the day (for example, years-old tweets that resurfaced, or remarks recorded at an unknown time), when the only available date was news coverage or a firing, or when the dataset held fewer than 20 tweets within a month of the behavior.

Lining up the timelines

Every cancellation happened on a different date, so I looked up the date of each person’s behavior (the tweet, the remark, the incident) and reset their clock: day 0 is that date. Averaging the reset timelines shows the typical arc. For celebrities, outrage jumped from about 3 outrage words per 1,000 in the month before (not shown) to about 10 within two days, as attention peaked, and stayed near that level for the rest of the month even as the number of tweets fell by more than 90%. Civilians held steady at about 8 from the first day. The academic line is less certain because it rests on five to eight people. Its jump around day 15 is mostly one case: Amy Wax’s podcast remarks aired on day 0 but were not widely noticed until about two weeks later, a reminder that the behavior and the outrage are not always close together.

An anger score is not an outrage score. An off-the-shelf AI “anger” classifier and the moral-outrage measure were essentially unrelated (r = −.05). As such, building a unique measure of outrage allowed me to specify the type and context of the negative emotionality.

What this is good for

Interviews and surveys capture what people say when a researcher asks. A dataset like this captures what they say to each other. The same approach would work on support tickets, portal comments, or reviews: estimate who is talking, compare how each group frames the same event, and watch how the tone shifts in the days after something goes wrong.