Synopsis

This report explores a 2018 video game market research dataset covering 1,568 platform/title listings, of which 660 carry actual regional and global sales figures (in millions of units) across four regions: North America, Europe, Japan, and the rest of the world. After cleaning the data, we examine which platforms and genres generated the most sales, which publishers and titles dominated the year, how sales are distributed regionally by genre, and how sales activity moved through the year. The headline findings: the PS4 dominated the platform race ($83.95M units, more than double its nearest rival), Action-Adventure and Sports were the best-selling genres, Rockstar Games had the single biggest title of the year (Red Dead Redemption 2), and sales were heavily concentrated around the September-to-November holiday launch window, with October alone accounting for roughly a third of the year’s tracked sales. Regional tastes diverge sharply — Japan is the only region where Role-Playing outsells Action-Adventure and Shooter titles combined.

Data Processing

We start from the raw CSV export, Video_game_market_research.csv.

games <- read.csv("Video_game_market_research.csv", stringsAsFactors = FALSE)
games$Release_Date <- as.Date(games$Release_Date)
dim(games)
## [1] 1568   10
str(games)
## 'data.frame':    1568 obs. of  10 variables:
##  $ Name        : chr  "God of War (2018)" "God of War (2018)" "Dead Cells" "Monster Hunter: World" ...
##  $ Platform    : chr  "All" "PS4" "All" "PS4" ...
##  $ Genre       : chr  "Action" "Action" "Action" "Action" ...
##  $ Publisher   : chr  "Sony Interactive Entertainment" "Sony Interactive Entertainment" "Motion Twin" "Capcom" ...
##  $ NA_Sales    : num  NA NA NA NA 1.44 NA NA NA 1.14 NA ...
##  $ EU_Sales    : num  NA NA NA NA 1.73 NA NA NA 0.47 NA ...
##  $ JP_Sales    : num  NA NA NA NA 0.15 NA NA NA NA NA ...
##  $ Other_Sales : num  NA NA NA NA 0.62 NA NA NA 0.17 NA ...
##  $ Global_Sales: num  NA NA NA NA 3.95 NA NA NA 1.78 NA ...
##  $ Release_Date: Date, format: "2018-04-20" "2018-04-20" ...

Understanding the missing data. A quick audit shows two different kinds of missingness in this dataset, which need to be handled differently:

sapply(games, function(x) sum(is.na(x) | x == ""))
##         Name     Platform        Genre    Publisher     NA_Sales     EU_Sales 
##            0            0            0            0         1099         1334 
##     JP_Sales  Other_Sales Global_Sales Release_Date 
##         1286         1060          908           NA
# "All" is a platform-summary listing row for a title, not an aggregate of
# its per-platform sales -- it never carries its own sales figures:
table(Platform_is_All = games$Platform == "All", Global_Sales_is_NA = is.na(games$Global_Sales))
##                Global_Sales_is_NA
## Platform_is_All FALSE TRUE
##           FALSE   660  850
##           TRUE      0   58

This confirms that (a) every row where Platform == "All" has no sales data of its own (it is just a title-level listing entry, not a rolled-up total), and (b) many platform-specific rows also lack sales data, most likely because the title was too new, too low-profile, or otherwise untracked by the source at the time of collection. We therefore restrict all sales analysis to the 660 rows that have an actual Global_Sales figure — this automatically excludes the “All” rows as a side effect, since they never have sales data to contribute.

sales <- subset(games, !is.na(Global_Sales))
nrow(sales)
## [1] 660
length(unique(sales$Name))
## [1] 423
length(unique(sales$Platform))
## [1] 10

This leaves 660 platform-specific listings, covering 423 distinct titles across 10 platforms, all released in 2018.

Regional NAs are different. Within this filtered set, a NA in a regional sales column (e.g. JP_Sales) means that region reported no meaningful sales for that title — not that the data is missing — so for any calculation that sums across regions we treat regional NAs as 0. We create a second copy of the data with this substitution applied, used only for regional breakdowns.

sales_reg <- sales
region_cols <- c("NA_Sales", "EU_Sales", "JP_Sales", "Other_Sales")
sales_reg[region_cols] <- lapply(sales_reg[region_cols], function(x) ifelse(is.na(x), 0, x))

Finally, we extract a release month for the seasonal-trend analysis:

sales_reg$Month <- format(sales_reg$Release_Date, "%Y-%m")

Results

Platform performance

byPlatform <- aggregate(Global_Sales ~ Platform, data = sales, sum)
byPlatform <- byPlatform[order(-byPlatform$Global_Sales), ]
byPlatform$Platform <- factor(byPlatform$Platform, levels = byPlatform$Platform)

ggplot(byPlatform, aes(x = Platform, y = Global_Sales)) +
  geom_col(fill = "#2C7FB8") +
  geom_text(aes(label = Global_Sales), vjust = -0.4, size = 3.5) +
  labs(title = "Total Global Sales by Platform, 2018",
       x = NULL, y = "Global sales (millions of units)") +
  theme(axis.text.x = element_text(angle = 0))

Figure 1. Total 2018 global sales by platform. The PS4 alone accounts for 83.95M units — more than PS4 + Xbox One + Switch combined would suggest given how far ahead it is of XOne (38.08M) and NS (20.2M). Legacy platforms (PS3, X360, WiiU, Wii) are effectively out of the market by 2018, each posting under half a million units.

Total sales can be misleading if a platform simply has more titles tracked. We also compute average sales per title (“hit rate”) by platform:

hitRate <- aggregate(Global_Sales ~ Platform, data = sales, function(x) c(mean = mean(x), n = length(x)))
hitRate <- do.call(data.frame, hitRate)
names(hitRate) <- c("Platform", "Avg_Sales", "N_Titles")
hitRate <- hitRate[order(-hitRate$Avg_Sales), ]
hitRate$Platform <- factor(hitRate$Platform, levels = hitRate$Platform)

ggplot(hitRate, aes(x = Platform, y = Avg_Sales)) +
  geom_col(fill = "#41AB5D") +
  geom_text(aes(label = paste0("n=", N_Titles)), vjust = -0.4, size = 3) +
  labs(title = "Average Sales per Title by Platform, 2018",
       subtitle = "Label shows number of tracked titles on that platform",
       x = NULL, y = "Average global sales per title (millions)")

Figure 2. PS4 titles don’t just sell the most in total — they also sell best on average (0.35M/title), ahead of Xbox One (0.29M/title), confirming PS4’s lead isn’t just a function of having more titles tracked (243 vs. 132). The Switch (NS) has the second-most titles tracked (176) but a comparatively low average, suggesting a “long tail” of smaller Switch releases alongside its hits.

Genre performance

byGenre <- aggregate(Global_Sales ~ Genre, data = sales, sum)
byGenre <- byGenre[order(byGenre$Global_Sales), ]
byGenre$Genre <- factor(byGenre$Genre, levels = byGenre$Genre)

ggplot(byGenre, aes(x = Genre, y = Global_Sales)) +
  geom_col(fill = "#E6550D") +
  coord_flip() +
  labs(title = "Total Global Sales by Genre, 2018",
       x = NULL, y = "Global sales (millions of units)")

Figure 3. Action-Adventure (35.1M) and Sports narrowly lead the genre rankings, with Shooter close behind — together these three genres account for 56% of all tracked 2018 sales. Niche genres like Strategy, Puzzle, Visual Novel, and Board Games each sold under 1.2M units combined for the whole year.

Regional tastes: where genre preferences diverge

regGenre <- aggregate(cbind(NA_Sales, EU_Sales, JP_Sales, Other_Sales) ~ Genre,
                       data = sales_reg, sum)
# express as % share of each region's total, so genres are comparable across regions of different overall size
regGenre_pct <- regGenre
for (col in region_cols) {
  regGenre_pct[[col]] <- 100 * regGenre[[col]] / sum(regGenre[[col]])
}
regLong <- reshape2::melt(regGenre_pct, id.vars = "Genre",
                           variable.name = "Region", value.name = "SharePct")
regLong$Region <- factor(regLong$Region, levels = region_cols,
                          labels = c("North America", "Europe", "Japan", "Other"))

genreOrder <- byGenre$Genre  # already sorted ascending from Figure 3
regLong$Genre <- factor(regLong$Genre, levels = levels(genreOrder))

ggplot(regLong, aes(x = Region, y = Genre, fill = SharePct)) +
  geom_tile(color = "white") +
  geom_text(aes(label = round(SharePct, 1)), size = 3) +
  scale_fill_gradient(low = "white", high = "#D7301F", name = "% of\nregion's\nsales") +
  labs(title = "Genre Mix by Region, 2018",
       subtitle = "Each column sums to 100% -- shows what each region spends its money on",
       x = NULL, y = NULL)

Figure 4. Reading down each column shows what share of that region’s sales went to each genre. North America and Europe look similar — Action-Adventure, Sports, and Shooter dominate both. Japan is the clear outlier: Role-Playing takes 28.1% of Japanese sales (its single largest genre), versus only 7% in North America — while Shooter and Sports, which lead in the West, are comparatively minor in Japan. This is a well-documented regional divergence in game preferences, and the 2018 data reproduces it clearly.

Publishers and top titles

byPub <- aggregate(Global_Sales ~ Publisher, data = sales, sum)
byPub <- byPub[order(-byPub$Global_Sales), ][1:12, ]
byPub$Publisher <- factor(byPub$Publisher, levels = rev(byPub$Publisher))

ggplot(byPub, aes(x = Publisher, y = Global_Sales)) +
  geom_col(fill = "#6A51A3") +
  coord_flip() +
  labs(title = "Top 12 Publishers by Total Global Sales, 2018",
       x = NULL, y = "Global sales (millions of units)")

Figure 5. Rockstar Games narrowly leads the publisher ranking (19.71M) thanks almost entirely to a single title, followed closely by Activision (19.39M, largely Call of Duty) and Electronic Arts (17.74M, spread across FIFA, Madden, and Battlefield). This illustrates two different publisher strategies visible in the data: Rockstar’s total rides on one blockbuster, while EA and Activision’s totals are built from several mid-to-large releases.

topGames <- head(sales[order(-sales$Global_Sales),
                        c("Name", "Platform", "Genre", "Publisher", "Global_Sales")], 10)
rownames(topGames) <- NULL
knitr::kable(topGames, caption = "Table 1. Top 10 best-selling title/platform listings, 2018")
Table 1. Top 10 best-selling title/platform listings, 2018
Name Platform Genre Publisher Global_Sales
Red Dead Redemption 2 PS4 Action-Adventure Rockstar Games 13.94
Call of Duty: Black Ops IIII PS4 Shooter Activision 9.32
FIFA 19 PS4 Sports Electronic Arts 9.15
Red Dead Redemption 2 XOne Action-Adventure Rockstar Games 5.77
Call of Duty: Black Ops IIII XOne Shooter Activision 4.85
Far Cry 5 PS4 Action Ubisoft 3.95
Assassin’s Creed Odyssey PS4 Action-Adventure Ubisoft 3.18
NBA 2K19 PS4 Sports 2K Sports 2.63
Battlefield V PS4 Shooter Electronic Arts 2.22
FIFA 19 XOne Sports Electronic Arts 2.22

Red Dead Redemption 2 on PS4 was, by a wide margin, the single best-selling listing of the year at 13.94M units — more than 40% ahead of the next entry.

Seasonality: when do games sell?

byMonth <- aggregate(Global_Sales ~ Month, data = sales_reg, sum)
byMonth$MonthLabel <- factor(format(as.Date(paste0(byMonth$Month, "-01")), "%b"),
                              levels = format(as.Date(paste0(sprintf("2018-%02d", 1:12), "-01")), "%b"))

ggplot(byMonth, aes(x = MonthLabel, y = Global_Sales)) +
  geom_col(fill = "#238B45") +
  geom_text(aes(label = Global_Sales), vjust = -0.4, size = 3.2) +
  labs(title = "Total Global Sales by Release Month, 2018",
       subtitle = "Sales figures reflect the title's release-window performance",
       x = NULL, y = "Global sales (millions of units)")

Figure 6. Release timing is heavily concentrated in the September-to-November holiday window: October 2018 alone accounts for 35% of the year’s tracked sales (driven by Red Dead Redemption 2, Call of Duty: Black Ops 4, and FIFA 19 all launching that month), and September-November combined account for 64% of the total. Publishers clearly target the pre-holiday shopping season for their biggest releases, while January, April, and December are comparatively quiet launch windows.

Conclusion

Three patterns stand out from this dataset. First, the 2018 console market was a PS4-led market, both in total volume and in average per-title performance. Second, genre demand is regionally distinct — Western markets (North America, Europe) cluster around Action-Adventure, Sports, and Shooter titles, while Japan remains a stronghold for Role-Playing games, a divergence worth factoring into any region-specific marketing or localization strategy. Third, the market is highly seasonal, with release timing itself acting almost like a strategic lever — the September-November window captured roughly 64% of the year’s tracked sales. For a publisher or platform holder using this kind of data, the practical implications are straightforward: prioritize PS4 as a lead platform, tailor genre mix by region rather than assuming a one-size-fits-all portfolio, and treat the fall release window as the primary competitive battleground.

Caveats: this dataset covers a single year (2018) and only the titles that had sales figures reported (42% of all listed title/platform rows); smaller or later-tracked titles are likely under-represented, so the totals here should be read as directional market signal rather than complete industry figures.