Introduction

Twitch is the leading platform in a global live-streaming industry, where streamers broadcast content in dozens of languages and attract audiences from around the world. This project examines the following research question: Does average viewership differ significantly across the top streaming language groups on Twitch?

Identifying whether viewership size differs by language can reveal meaningful patterns in audience reach and content popularity across different regions. If certain language communities consistently attract larger audiences, that has practical implications for how platforms allocate support and resources for creators internationally.

The dataset used to conduct this analysis is Twitch Statistics — Top 1000 Streamers (twitchdata-update.csv), which contains performance statistics for the 1,000 most-followed Twitch channels. The dataset was obtained from Kaggle and provided in the course dataset folder on Blackboard. There are 1,000 observations and a total of 11 variables. The two variables used for this analysis are:


Data Analysis

To answer the research question, I loaded the dataset and used select() and filter() to isolate the two relevant variables and restrict the analysis to the six largest language groups, which together account for 831 of the 1,000 observations. I then used group_by() and summarise() to compute descriptive statistics — mean and standard deviation of average viewers — for each language group, and calculated the overall mean using mean(). I generated a bar chart of group means and a boxplot of the viewership distributions by language to visualize between-group differences. Finally, I ran a one-way ANOVA using aov() to formally test whether at least one group mean differs significantly from the others at α = 0.05.


Hypotheses

H₀: μ₁ = μ₂ = μ₃ = μ₄ = μ₅ = μ₆

The mean average viewership is equal across all six language groups.

Hₐ: At least one μᵢ differs from the others.

Where α = 0.05.


Analysis

# Load required libraries
library(tidyverse)

# Load the dataset
twitch <- read.csv("twitchdata-update.csv", check.names = FALSE)

# Select relevant columns and filter to the six target language groups
target_langs <- c("English", "Korean", "Russian", "Spanish", "French", "Portuguese")

twitch_filtered <- twitch %>%
  select(Language, `Average viewers`) %>%
  filter(Language %in% target_langs) %>%
  drop_na()

# Confirm group sizes
twitch_filtered %>%
  count(Language)
##     Language   n
## 1    English 485
## 2     French  66
## 3     Korean  77
## 4 Portuguese  61
## 5    Russian  74
## 6    Spanish  68
# Compute mean and standard deviation of average viewers by language
group_stats <- twitch_filtered %>%
  group_by(Language) %>%
  summarise(
    n = n(),
    Mean_Viewers = mean(`Average viewers`),
    SD_Viewers = sd(`Average viewers`)
  ) %>%
  arrange(desc(Mean_Viewers))

group_stats
## # A tibble: 6 × 4
##   Language       n Mean_Viewers SD_Viewers
##   <chr>      <int>        <dbl>      <dbl>
## 1 Russian       74        6594.     14947.
## 2 Spanish       68        6450.      9058.
## 3 English      485        5113.      9179.
## 4 Korean        77        3914.      5863.
## 5 Portuguese    61        3801.      5036.
## 6 French        66        3507.      3340.
# Overall mean across all six groups
mean(twitch_filtered$`Average viewers`)
## [1] 5019.162
# Bar chart of mean average viewers by language group
ggplot(group_stats, aes(x = reorder(Language, -Mean_Viewers), y = Mean_Viewers, fill = Language)) +
  geom_col(show.legend = FALSE) +
  labs(
    title = "Mean Average Viewers by Streaming Language Group",
    x = "Language",
    y = "Mean Average Viewers"
  ) +
  theme_minimal()

# Boxplot of average viewers distribution by language group
ggplot(twitch_filtered, aes(x = reorder(Language, `Average viewers`, FUN = median),
                             y = `Average viewers`, fill = Language)) +
  geom_boxplot(show.legend = FALSE, outlier.alpha = 0.4) +
  labs(
    title = "Distribution of Average Viewers by Streaming Language Group",
    x = "Language",
    y = "Average Viewers"
  ) +
  theme_minimal()

# One-way ANOVA: does mean average viewership differ by language group?
anova_model <- aov(`Average viewers` ~ Language, data = twitch_filtered)
summary(anova_model)
##              Df    Sum Sq   Mean Sq F value Pr(>F)
## Language      5 6.626e+08 132519756   1.621  0.152
## Residuals   825 6.745e+10  81751659

Conclusion

A one-way ANOVA was conducted to evaluate whether mean average viewership differs significantly across six language groups on Twitch: English, Korean, Russian, Spanish, French, and Portuguese (n = 831). The analysis yielded an F-statistic of 1.621 and a p-value of 0.152. Because the p-value exceeds α = 0.05, we fail to reject the null hypothesis. There is insufficient evidence to conclude that mean average viewership differs significantly across the six language groups.

The descriptive statistics and figures above show that Russian-language streamers had the highest mean viewership (6,594 avg. viewers), followed closely by Spanish (6,450), while French-language streamers had the lowest (3,507). Despite this visible gap between groups, the standard deviations for every group far exceeded their respective means — for example, Russian streamers had a mean of 6,594 but a standard deviation of 14,947 — indicating extreme variability within each group. The boxplots confirm this pattern: the interquartile ranges are compressed near zero across all languages, while massive outliers stretch upward past 100,000 viewers in several groups. This large within-group variance is what likely prevented the ANOVA from detecting a statistically significant between-group difference.

These findings suggest that language alone is not a reliable predictor of viewership size among the top 1,000 Twitch streamers. A small number of exceptionally popular streamers within each language group appear to be driving group means upward, masking any true structural difference between language communities. Future research could apply a log transformation to the viewership data to reduce skew and outlier influence, which may improve the sensitivity of the ANOVA. Incorporating additional variables such as partnership status, content category, or streaming frequency into a more complex model could also help account for the large variability in viewership that language alone cannot explain.


References

Mishra, A. (2020). Twitch Statistics — Top 1000 Streamers [Dataset]. Kaggle. https://www.kaggle.com/datasets/aayushmishra1512/twitchdata