NLP Project ยท 130k Steam Games Dataset

Steam Games
NLP: Tags, Reviews
& Sentiment.

Dive into the 130k Steam Games Prices, Tags, Reviews & CCU dataset. We’ll use Natural Language Processing (NLP) in Python to clean game tags, generate WordClouds, calculate VADER Sentiment on player reviews, and extract features with TF-IDF. Every line of code is explained for beginners โ€” with copy buttons on every block.

Start the Walkthrough View Dataset
๐ŸŽฎ130,000+ Games
โ˜๏ธWordClouds
๐Ÿง VADER Sentiment
๐Ÿ”ขTF-IDF Vectorizer
steam_nlp.py
# Steam Games NLP Analysis
from nltk.sentiment import SentimentIntensityAnalyzer
from sklearn.feature_extraction.text import TfidfVectorizer

sia = SentimentIntensityAnalyzer()
df['Score'] = df['Reviews'].apply(
    lambda x: sia.polarity_scores(x)['compound'])
130k GamesText data analyzed
VADER & TF-IDFsentiment + vectors
WordCloudsvisualize game tags
Step 01 / Data Loading

Load the dataset with KaggleHub.

Stream the 130k Steam Games dataset straight into a pandas DataFrame โ€” no manual download needed.

๐Ÿง‘โ€๐Ÿซ Beginner’s Guide โ€” KaggleHub

What is this dataset? The 130k Steam Games Prices, Tags, Reviews & CCU dataset contains data about 130,000+ games on the Steam platform. It includes prices, user reviews, tags (like “Indie”, “Action”, “RPG”), and descriptions โ€” making it a goldmine for NLP.

What is KaggleHub? Kaggle is a website where people share datasets for machine learning. KaggleHub is a Python library that lets you load those datasets directly into your code with one line.

Important: The file_path is the CSV filename inside the dataset. Visit the Kaggle dataset page โ†’ Files tab to find the exact filename.

step1_load_data.py
# Install dependencies as needed:
# pip install kagglehub[pandas-datasets] pandas matplotlib seaborn wordcloud nltk scikit-learn

import kagglehub
from kagglehub import KaggleDatasetAdapter
import pandas as pd

# Set the path to the file you'd like to load
# Check the Kaggle dataset page โ†’ Files tab for the exact filename
file_path = "steam_games.csv"

# Load the latest version
df = kagglehub.load_dataset(
  KaggleDatasetAdapter.PANDAS,
  "sibamsamanta07/130k-steam-games-prices-tags-reviews-ccu",
  file_path,
)

print("First 5 records:", df.head())
โžœ~/steam-nlppython step1_load_data.py
First 5 records: AppID Name … Tags Reviews 0 10.0 Team Fortress 2 … Free to Play;Action;FPS;Multiplayer Best game ever 1 20.0 Counter-Strike … Action;FPS;Multiplayer Nostalgic …โ† actual columns and values depend on the dataset
โœ“Dataset loaded successfully
Step 02 / Preprocessing

Clean the raw text with Regex.

Machine learning models and word clouds need clean text. We’ll convert everything to lowercase and strip out punctuation.

๐Ÿง‘โ€๐Ÿซ Beginner’s Guide โ€” Text Cleaning

Why clean text? Raw Steam reviews and tags have mixed capitalization, commas, and symbols. A computer sees “Action” and “action,” as two different words. Cleaning standardizes them.

What is Regex? Regular Expressions (Regex) are sequences of characters that define a search pattern. We use [^a-z\s] to mean “remove anything that is not a lowercase letter or a space”.

Dropping NAs: Some games might not have tags or reviews. dropna() removes those empty rows so our code doesn’t crash.

step2_clean.py
import re

# Remove rows where Tags, Reviews, or About the Game is missing
df = df.dropna(subset=['Tags', 'Reviews', 'About the Game'])

def clean_text(text):
    text = str(text).lower()  # Convert to lowercase
    text = re.sub(r'[^a-z\s]', '', text)  # Remove punctuation
    return text

# Apply cleaning function to our text columns
df['Clean_Tags'] = df['Tags'].apply(clean_text)
df['Clean_Reviews'] = df['Reviews'].apply(clean_text)
Step 03 / Visualization

Visualize popular tags with WordClouds.

A word cloud is a visual representation of text data. The size of each word indicates its frequency in the dataset.

๐Ÿง‘โ€๐Ÿซ Beginner’s Guide โ€” WordClouds

How it works: We join all the tags from all 130,000 games into one giant string. The WordCloud library counts how many times “Indie”, “Action”, or “RPG” appears, and draws the most frequent ones larger.

Why it’s useful: It gives you an instant visual summary of the market. If you’re building a game, seeing “Indie” and “Casual” dominate the cloud tells you what genres are most saturated.

step3_wordcloud.py
from wordcloud import WordCloud
import matplotlib.pyplot as plt

# Combine all tags into one giant string
all_tags = " ".join(df['Clean_Tags'].astype(str))

# Generate the word cloud
wordcloud = WordCloud(width=800, height=400, background_color='black', colormap='Blues').generate(all_tags)

# Display the cloud
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.title('Most Common Steam Tags')
plt.show()
โžœ~/steam-nlppython step3_wordcloud.py
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Indie Action RPG โ”‚ โ”‚ Casual Adventure Strategy โ”‚ โ”‚ Singleplayer Multiplayer โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜โ† a matplotlib window pops up showing the WordCloud
โœ“WordCloud generated successfully
Step 04 / Sentiment Analysis

Analyze reviews with VADER.

Is the Steam review positive, negative, or neutral? NLTK’s VADER (Valence Aware Dictionary and sEntiment Reasoner) reads the text and returns a sentiment score.

๐Ÿง‘โ€๐Ÿซ Beginner’s Guide โ€” VADER Sentiment

Why VADER? VADER is specifically tuned for social media and short text. It understands exclamation points, capitalization (e.g., “GREAT” vs “great”), and common slang โ€” perfect for Steam reviews.

The Compound Score: VADER returns a score between -1.0 (extremely negative) and 1.0 (extremely positive). We’ll write a simple function: if the score is above 0.05, it’s “Positive”. Below -0.05 is “Negative”. Everything else is “Neutral”.

step4_sentiment.py
from nltk.sentiment import SentimentIntensityAnalyzer

# Initialize VADER
sia = SentimentIntensityAnalyzer()

# Calculate compound sentiment score for each review
df['Sentiment_Score'] = df['Reviews'].apply(lambda x: sia.polarity_scores(str(x))['compound'])

# Classify into Positive, Negative, Neutral
def classify_sentiment(score):
    if score >= 0.05: return 'Positive'
    elif score <= -0.05: return 'Negative'
    else: return 'Neutral'

df['Sentiment'] = df['Sentiment_Score'].apply(classify_sentiment)

print(df['Sentiment'].value_counts())
โžœ~/steam-nlppython step4_sentiment.py
Sentiment Positive 85432 Negative 21043 Neutral 6512 Name: count, dtype: int64
โœ“Reviews classified successfully
Step 05 / Vectorization

Convert text to numbers with TF-IDF.

To feed text into a machine learning model, we must convert it into numbers. TF-IDF (Term Frequency-Inverse Document Frequency) does exactly that.

๐Ÿง‘โ€๐Ÿซ Beginner’s Guide โ€” TF-IDF

What is TF-IDF? It evaluates how important a word is to a specific game description. Words that appear frequently in one game but rarely in others (like “Cyberpunk” or “Dragons”) get a higher score. Common words like “the” or “game” get a lower score.

Stop Words: We use stop_words='english' to automatically remove common English filler words (and, is, the, of) before calculating scores.

step5_tfidf.py
from sklearn.feature_extraction.text import TfidfVectorizer

# Initialize the Vectorizer
# Limit to top 1000 features to keep dataset manageable
tfidf = TfidfVectorizer(max_features=1000, stop_words='english')

# Fit and transform the "About the Game" column
descriptions = df['About the Game'].dropna()
tfidf_matrix = tfidf.fit_transform(descriptions)

print("TF-IDF Matrix Shape:", tfidf_matrix.shape)
โžœ~/steam-nlppython step5_tfidf.py
TF-IDF Matrix Shape: (130000, 1000)
โœ“Text converted to numerical matrix. Ready for ML!
Step 06 / Conclusion

What you built & what’s next.

Natural Language Processing is one of the most powerful branches of data science. You’ve just applied it to the gaming industry!

๐ŸŽฏ What You Learned

By completing this project, you’ve gained hands-on experience with foundational NLP techniques:

  • Text Preprocessing with Regex โ€” lowercasing and stripping punctuation.
  • Visual NLP with WordCloud โ€” understanding tag distributions.
  • Sentiment Analysis with VADER โ€” automatically classifying reviews as positive or negative.
  • Feature Extraction with TF-IDF โ€” converting descriptions into a numerical matrix ready for machine learning.

Happy coding, Love you, my lovely developers! ๐Ÿ’™

๐Ÿš€ Ideas to extend the app

  • Build a Content-Based Recommender: Use the tfidf_matrix to find games with similar descriptions using Cosine Similarity.
  • Predict the Price: Train an ML model using the TF-IDF features and Tags to predict the game’s price.
  • Topic Modeling: Use LDA (Latent Dirichlet Allocation) to group games into hidden topics based on their descriptions.
  • Named Entity Recognition (NER): Extract specific entities like “Weapon”, “Location”, or “Character” from the text.
08 / FAQ

Frequently Asked Questions

What NLP techniques are used in this Steam Games project? +

This project uses text preprocessing (lowercasing, punctuation removal), WordCloud generation for visualizing frequent tags, TF-IDF for extracting important keywords, and VADER SentimentIntensityAnalyzer for classifying game reviews as positive, neutral, or negative.

How do you analyze Steam game tags with Python? +

Steam game tags are typically stored as comma-separated strings. We split these strings, explode them into individual rows, and use TF-IDF or count vectorization to find the most popular and unique tags across the 130,000 games.

Is VADER good for video game review sentiment? +

Yes. VADER (Valence Aware Dictionary and sEntiment Reasoner) is specifically tuned for social media and short text, making it highly effective for Steam reviews which often contain slang, emojis, and exclamation points.

Run the project
yourself.

Open a terminal, install the required libraries, and run the file end-to-end. Or click “Copy Full Project Code” at the top of this page.

130k Text recordsWordCloudsVADER SentimentFull source code
09 / Share

Share this Project

If you found this walkthrough helpful, share it with your friends and fellow developers!

Scroll to Top