This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be
generated that includes both content as well as the output of any
embedded R code chunks within the document. You can embed an R code
chunk like this:
vg_sales <- read_csv('vgsales.csv')
## Rows: 8499 Columns: 11
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): Name, Platform, Year, Genre, Publisher
## dbl (6): Rank, NA_Sales, EU_Sales, JP_Sales, Other_Sales, Global_Sales
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
head(vg_sales)
## # A tibble: 6 × 11
## Rank Name Platform Year Genre Publisher NA_Sales EU_Sales JP_Sales
## <dbl> <chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>
## 1 1 Wii Sports Wii 2006 Spor… Nintendo 41.5 29.0 3.77
## 2 2 Super Mario B… NES 1985 Plat… Nintendo 29.1 3.58 6.81
## 3 3 Mario Kart Wii Wii 2008 Raci… Nintendo 15.8 12.9 3.79
## 4 4 Wii Sports Re… Wii 2009 Spor… Nintendo 15.8 11.0 3.28
## 5 5 Pokemon Red/P… GB 1996 Role… Nintendo 11.3 8.89 10.2
## 6 6 Tetris GB 1989 Puzz… Nintendo 23.2 2.26 4.22
## # ℹ 2 more variables: Other_Sales <dbl>, Global_Sales <dbl>
summary(vg_sales)
## Rank Name Platform Year
## Min. : 1 Length :8499 Length :8499 Length :8499
## 1st Qu.:2126 N.unique :5862 N.unique : 27 N.unique : 39
## Median :4251 N.blank : 0 N.blank : 0 N.blank : 0
## Mean :4251 Min.nchar: 2 Min.nchar: 2 Min.nchar: 3
## 3rd Qu.:6376 Max.nchar: 124 Max.nchar: 4 Max.nchar: 4
## Max. :8500
## Genre Publisher NA_Sales EU_Sales
## Length :8499 Length :8499 Min. : 0.0000 Min. : 0.000
## N.unique : 12 N.unique : 296 1st Qu.: 0.1200 1st Qu.: 0.030
## N.blank : 0 N.blank : 0 Median : 0.2300 Median : 0.100
## Min.nchar: 4 Min.nchar: 3 Mean : 0.4863 Mean : 0.274
## Max.nchar: 12 Max.nchar: 38 3rd Qu.: 0.4900 3rd Qu.: 0.270
## Max. :41.4900 Max. :29.020
## JP_Sales Other_Sales Global_Sales
## Min. : 0.0000 Min. : 0.00000 Min. : 0.1600
## 1st Qu.: 0.0000 1st Qu.: 0.01000 1st Qu.: 0.2700
## Median : 0.0000 Median : 0.03000 Median : 0.4600
## Mean : 0.1344 Mean : 0.09018 Mean : 0.9848
## 3rd Qu.: 0.0900 3rd Qu.: 0.08000 3rd Qu.: 0.9800
## Max. :10.2200 Max. :10.57000 Max. :82.7400
## DataViz
df_long <- vg_sales %>%
select(NA_Sales, EU_Sales, JP_Sales, Other_Sales, Global_Sales) %>%
pivot_longer(cols = everything(), names_to = "Region", values_to = "Sales")
ggplot(df_long, aes(x = Region, y = Sales, fill = Region)) +
geom_boxplot() +
theme_minimal() +
labs(title = "Boxplot of Sales by Region", x = "Region", y = "Sales (in millions)") +
theme(legend.position = "none")
sales_cols <- c('NA_Sales', 'EU_Sales', 'JP_Sales', 'Other_Sales', 'Global_Sales')
zero_counts <- vg_sales %>%
select(all_of(sales_cols)) %>%
summarise(across(everything(), ~ sum(. == 0, na.rm = TRUE))) %>%
pivot_longer(cols = everything(), names_to = "Region", values_to = "Zero_Count")
ggplot(zero_counts, aes(x = Region, y = Zero_Count)) +
geom_bar(stat = "identity", fill = "blue") +
geom_text(aes(label = Zero_Count), vjust = -0.5, size = 5) +
theme_minimal() +
labs(title = "Number of Zero Sales by Region",
x = "Region",
y = "Number of Zeros")
genre_counts <- vg_sales %>%
count(Genre) %>%
filter(n > 300)
df_genre <- vg_sales %>%
filter(Genre %in% genre_counts$Genre, !is.na(Genre), !is.na(NA_Sales), !is.na(Year)) %>%
select(Genre, Year, NA_Sales)
genre_sales_adjusted <- df_genre %>%
group_by(Genre, Year) %>%
summarise(
total_na_sales = sum(NA_Sales, na.rm = TRUE),
num_games = n(),
avg_na_sales_per_game = total_na_sales / num_games,
.groups = "drop"
)
plot_avg_sales <- ggplot(genre_sales_adjusted, aes(x = Year, y = avg_na_sales_per_game, color = Genre, group = Genre)) +
geom_line(linewidth = 1.2) +
geom_point(size = 2) +
labs(
title = "Average NA_Sales per Game by Genre over Years",
x = "Year",
y = "Average NA_Sales per Game"
) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)
)
plot_avg_sales