R Markdown

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