What Actually Makes a “Good” and a “Bad” Movie? Let 50,000 Reviews Explain

Stills from Citizen Kane (1941) dir. Orson Welles

The other day, I just finished my first viewing of Citizen Kane (1941). The common film enthusiast has definitely heard and sang its praises about how it is often referred to as the single “greatest film ever made”, which intrigued me to get on a train and commute for two hours to see it in the first place. On my way there, I can’t help but wonder “WHY do people think that its the greatest film ever made?” and read some reviews online.

“Its the unique writing and narrative structure…”
“The bold and different cinematography…”
“Its the deep and provocative themes of power, wealth, and loneliness…”
“It’s the legacy — its the most culturally significant film ever…”

This was what got me thinking about how movie reviews are written, especially the ones written by the common person you can find online. Have you ever read a movie review that made you think “Wow, this person REALLY loved the film, huh?” or the opposite ones where it sounds like the movie director might as well have stolen their lunch money? That’s the beauty of language in reviews, the way in which we communicate our opinion and how it represents a sentiment.

Stills from Citizen Kane (1941) dir. Orson Welles

Thousands of films are released every year, which means there are at least millions of reviews written every day! With curiosity running wild, I wanted to explore a simple question: What actually makes a positive review sound positive, and a negative review sound negative?

Sounds like an interesting text analysis or NLP mini-project to us. So we got to work.

Data Preprocessing

We used the dataset from Andrew Maas’ publication of 50.000 highly polar IMDB movie reviews (which can be found here) as the basis of our little data science project. The data contains “review”, a column housing the paragraphs of reviews written by IMDB users and “sentiment”, which is either positive or negative.

A pipeline was created to preprocess our review data so it is better analyzed and understood by the machine. The method is as follows:

  1. Deleting HTML Tags and convert to lower case
  2. Contraction
  3. Removing or converting numbers into text
  4. Removing punctuation, white spaces, and stop words
  5. Lemmatization

Then they’re all combined and laid out into their own columns for easier analysis:

#1. Delete HTML tags & lower case
df['review_prep1'] = df['review'].apply(clean_text)
#2. Transforming words or combination of words that are shortened
df['review_prep2'] = df['review_prep1'].apply(main_contraction)
#3. Removing or converting numbers into text
df['review_prep3'] = df['review_prep2'].apply(remove_numbers)
#4. Removing punctuation contextually
df['review_prep4'] = df['review_prep3'].apply(remove_punctuation)
#5. Removing white spaces
df['review_prep5'] = df['review_prep4'].apply(to_strip)
#6. Removing words that don't add any information for the analysis
df['review_prep6'] = df['review_prep5'].apply(remove_stopwords)
#7. Transform words into their dictionary base form.
df['review_lemmatized'] = df['review_prep6'].apply(lemmatize)

Data Analysis & Insight

This project focuses purely on descriptive text analysis. No advanced machine learning or NLP modeling (e.g., sentiment classification, embeddings) is implemented. The goal is to explore and visualize patterns within the text data.

After some simple tokenization, we found no significant correlation between review length and sentiments, since both sentiments have identical lengths. But we did learn that IMDB users are thoughtful and dedicated movie-goers, since they leave deliberate reviews instead of short comments.

Sentiments are better highlighted in the most frequent words used, which are better visualized below:

Positive Sentiment word cloud, consisting of the most used words in positive reviews.
Negative Sentiment word cloud, consisting of the most used words in negative reviews.

Positive reviews seem to praise and highlight narrative and emotions (“character”, “life”, “story”, “show”) while negative reviews have a very comparative tone (“even”, “could”, “would”). Negative reviews also seem to use a lot of nouns (“thing”, “people”) which indicates vague language.

Phrases does a lot better job of highlighting review sentiments. It’s amazing how much context and meaning can be inferred from one extra word. The top 20 most frequent phrases from each sentiment can be seen below:

Positive reviews talk about the world of the movie, mentioning settings (“New York” or “real life”) and referring to characters or storylines through phrases like “main character.” These reviews tend to be more immersive, story-driven, and focus on the emotion provoked more than anything. They’re often told as if the writer is reliving the movie while describing it.

Positive reviews also endlessly glaze the the film they love so much with a lot of positive reinforcements (“great movie,” “pretty good”). Interestingly, the phrase “year old” often appears as people summarize the story in their own words (“a 25-year-old woman…”), suggesting that positive reviewers engage with the film’s narrative details. Even “low budget” appears positively, implying that reviewers appreciate creativity within production constraints.

In negative reviews, however, the focus shifts away from story and emotion, and toward technical or production-related flaws. Phrases like “special effects,” “low budget,” and “make movie” dominated. These reviews are also very comparative and evaluative in nature, using phrases like “look like” or “movie like” to draw comparison with other films. The tone even gets very judgmental, with a lot of strong phrases (“bad movie,” “worst movie,” “waste of time”) used by reviewers to cook these films to crisp. Interestingly, even the phrase “good movie” appears often in negative reviews… usually as part of a contrastive statement like “it would have been a good movie if…” Some phrases do appear in both camps, “low budget,” “sci-fi,” and “horror movie.” These overlaps reveal that certain genres are polarizing by nature.

At the end of the day, these reviews are emotional reflections of us, the viewers. Our expectations and responses says a lot about the things we value in film as a medium: Is it the deep and emotional storytelling? Is it the beautiful set designs and cinematography? This small analysis reminds us that “Hey, movies are very subjective” and that sentiment isn’t just about liking or hating a film, but about how we talk and remember the experience.

See the complete project notebook here!
Project created by Magdianov Putra & Ariq Fauzan

Learn more about What Actually Makes a “Good” and a “Bad” Movie? Let 50,000 Reviews Explain

Leave a Reply