Skip to content
Go back

Reddit Data Analysis: Visualizing r/AmItheAsshole Community Judgments

6 min read

Introduction

A new and improved version of this can be found at here

This project explores the fascinating world of community-driven moral judgments through data visualization. By analyzing posts from the popular r/AmItheAsshole subreddit, we can gain insights into how online communities collectively evaluate interpersonal conflicts and ethical dilemmas.

About r/AmItheAsshole

The r/AmItheAsshole subreddit serves as a unique platform for moral philosophy in action. As described by the community:

A catharsis for the frustrated moral philosopher in all of us, and a place to finally find out if you were wrong in an argument that’s been bothering you. Tell us about any non-violent conflict you have experienced; give us both sides of the story, and find out if you’re right, or you’re the asshole.

The subreddit can be found at https://www.reddit.com/r/AmItheAsshole/

Understanding the Voting System

The community uses a standardized voting system with specific abbreviations:

AbbreviationMeaningDescription
YTAYou’re the A-holeThe poster is in the wrong
NTANot the A-holeThe poster is not in the wrong
ESHEveryone sucks hereBoth parties are at fault
NAHNo A-holes hereNo one is at fault
INFONot Enough InfoMore information needed

Live Data Visualization

The charts below represent real-time analysis of current r/AmItheAsshole posts. Each chart shows the distribution of community judgments for individual posts.

Technical Deep Dive

This uses jQuery components and to be fair should be avoided in 2025.

Data Processing Pipeline

// 1. Fetch posts from subreddit
let getPost = () => {
let endPoint = "https://reddit.com/r/amitheasshole.json?limit=50&jsonp=?"
$.getJSON(endPoint, function(data){
let entries = data["data"].children;
for(let i = 0; i < entries.length; i++){
let link = entries[i]["data"]["permalink"];
parseResult(link);
}
});
}
// 2. Analyze individual post comments
let parseResult = (link) => {
const endPoint = "https://reddit.com" + link + ".json?limit=80&jsonp=?";
$.getJSON(endPoint, function(data){
let title = data[0].data.children[0].data["title"];
let replies = data[1]["data"].children;
// Count judgment patterns in comments
let countNTAAppearance = 0;
let countYTAAppearance = 0;
let countESHAppearance = 0;
let countNAHAppearance = 0;
let countINFOAppearance = 0;
for (let i = 0; i < replies.length; i++) {
let reply = replies[i]["data"].body;
if (reply == undefined) continue;
countNTAAppearance += (reply.match(/NTA/g) || []).length;
countYTAAppearance += (reply.match(/YTA/g) || []).length;
countESHAppearance += (reply.match(/ESH/g) || []).length;
countNAHAppearance += (reply.match(/NAH/g) || []).length;
countINFOAppearance += (reply.match(/INFO/g) || []).length;
}
// Create result object and visualize
let jsonResult = {
"id": data[0].data.children[0].data["id"],
"url": "https://reddit.com" + link,
"title": title,
"countNTAAppearance": countNTAAppearance,
"countYTAAppearance": countYTAAppearance,
"countESHAppearance": countESHAppearance,
"countNAHAppearance": countNAHAppearance,
"countINFOAppearance": countINFOAppearance,
}
summary.push(jsonResult);
showResult(jsonResult);
});
}

Visualization Implementation

let showResult = (jsonResult) => {
// Create chart container
let output = "<strong>" + jsonResult["title"] + "</strong>";
let out = output + "<p><a id=" + jsonResult["id"] + "_link> Click here</a> to view post in context.</p>";
$(".result").append("<div class='shadow'>" + out + "<div class='' id=" + jsonResult["id"] + "></div></div>");
$("#" + jsonResult["id"] + "_link").prop("href", jsonResult["url"]);
// Configure chart data
const data = {
labels: ["NTA","YTA","ESH","NAH","INFO"],
datasets: [{
name: "data",
charType: 'percentage',
values: [
jsonResult["countNTAAppearance"],
jsonResult["countYTAAppearance"],
jsonResult["countESHAppearance"],
jsonResult["countNAHAppearance"],
jsonResult["countINFOAppearance"],
]
}]
}
// Render interactive chart
const chart = new frappe.Chart(document.getElementById(jsonResult["id"]), {
data: data,
type: 'percentage',
colors: ['#33691e', '#b71c1c', '#f47e17','#1a237e','#e8eaf6']
});
}

Data Analysis Insights

Community Behavior Patterns

The visualization reveals several interesting patterns:

  1. Judgment Distribution: Shows how the community collectively evaluates different types of conflicts
  2. Consensus Levels: Indicates how strongly the community agrees or disagrees on specific issues
  3. Information Needs: Highlights cases where the community needs more context to make judgments

Technical Challenges

Ethical Considerations

Data Privacy

Community Impact

Conclusion

This project demonstrates the power of combining web APIs, data analysis, and visualization to gain insights into online community behavior. The r/AmItheAsshole subreddit provides a unique dataset for understanding how people collectively evaluate moral dilemmas.

Key Takeaways


This visualization represents a snapshot of community judgment patterns, providing insights into how we collectively evaluate moral conflicts in the digital age.


Share this post on:

Previous Post
Sentiment Analysis of r/HongKong Using AFINN Lexicon
Next Post
FIT5032 - Internet Applications Development