Introduction

Twitch is an online live-streaming platform that has dominated video game streaming after its main competitor shut down. This data set, produced from web scraping by Aayush Mishra, provides a range of quantitative and qualitative information. It covers a variety of metrics from 2020, ranging from average viewership to content categorization. I chose to cover this topic because streamers on this platform provided a constant source of entertainment for my younger self.

More Information

For those that are unfamiliar with the platform, Twitch is a live-streaming platform that hosts a variety of content. User broadcasts can range from gaming and cooking to music and art, which can promote various interactions between the streamer and their audience. Any viewer can engage with various features such as live chatting, donating, and even directly altering the activity on stream.

Loading Libraries

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.4.4     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dplyr)
library(plotly)
## 
## Attaching package: 'plotly'
## 
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## 
## The following object is masked from 'package:stats':
## 
##     filter
## 
## The following object is masked from 'package:graphics':
## 
##     layout

Setting a Pathway

setwd("/Users/Mathew/Downloads/Data Sets - Data 110")
Twitch_Orig <- read.csv("twitchdata-update.csv")

Narrowing Down the Data

Twitch_Line <-Twitch_Orig|>
  select(Channel,Followers,Stream.time.minutes.)

I am narrowing down the data to see if there’s a relationship between the time each channel spends on streaming and the number of followers that channel has.

p1 <- ggplot(Twitch_Line, aes(x=Followers, y=Stream.time.minutes.)) +
  labs(title = "Stream Time and Followers",
       caption = "Source: Kaggle.com - Aayush Mishra") +
  xlab("Followers") +
  ylab("Stream Time in Minutes") +
  theme_minimal(base_size = 12)
p1 + geom_point()

I’m not sure why I was expecting the data to be more spread out with over 1000 different channels, but lets see if there is any correlation between the two variables.

p2 <- p1 + geom_point() + geom_smooth(method='lm', formula=y~x)
p2

It appears that the stream time decreases the more followers someone has. This makes sense as more followers means more people tuning into a stream, which directly impacts a streamers revenue.

Exploring Further

For the next part of the project, I am going to try and determine what factors make a streamer ‘successful.’ This will be accomplished by comparing various factors to the number of followers and average stream viewer, which can be assumed to have an direct impact on revenue generated. It is important to note that these calculations for success may not be entirely accurate as the data set doesn’t include dates or other media and events outside of Twitch, which may have impacted both variables.

Creating a new data set

First, I wanted to explore the content type. Specifically, whether the content produced is labelled as “mature.”

T_F1 <-Twitch_Orig|>
  select(Channel,Followers,Average.viewers,Mature,Language,Stream.time.minutes.)

In the chunk above, I used the ‘select’ command to isolate the variables I want to explore.

TF2 <-T_F1 |>
  filter(Language == "English" | Language == "German" | Language == "French" | Language == "Japanese")

In order to narrow the data a bit more, I’ve chosen 4 languages at random and filtered the data to only include streamers that speak those languages on stream.

F1 <- ggplot(TF2, aes(x=factor(Mature), fill = factor(Mature))) +
  geom_bar() +
  labs(x = "Labeled as Mature", y = "Number of Channels", title = "Total Number of Channels Labeled as Mature") +
  theme_minimal(base_size = 12)
F1

So, most of the channels within the data set are not labelled as Mature.

F2 <- ggplot(TF2, aes(x=factor(Mature), fill = factor(Language))) +
  geom_bar() +
  labs(x = "Labeled as Mature", y = "Number of Channels", title = "Total Number of Channels Labeled as Mature")
F2

In this chunk, I’ve added the language spoken on stream onto the previous chart. Out of the 4 languages chosen, English seems to be the most spoken. This isn’t surprising as Twitch is an American-based company.

E1 <- ggplot(TF2, aes(x=Followers, y= Average.viewers, size=Stream.time.minutes., color=factor(Language))) +
  geom_point() +
  labs(x= "Number of Followers", y= "Average Viewers", title= "Streamer Success", color = "Language Spoken During Streams", size= "Stream Time in Minutes", caption = "Source: Kaggle.com - Aayush Mishra") + 
  scale_size_continuous() +
  scale_color_brewer(palette = "Dark2")
E1

E1I <- ggplotly(E1)
E1I

As I discovered during the linear regression graph, stream time tends to decreases based on the number of followers a streamer has. This suggests that follower count has a larger impact on revenue generated.

Closing Thoughts

I wanted to a more edited formatting into the plotly chart, but I couldn’t really manage to edit the information within without losing the mouse-over interactivity completely. This was even more disappointing when I realized I couldn’t include the streamer names into the tooltip itself. Mainly because the font wouldn’t adjust on zooming in or out, which left a majority of them illegible. I also wanted to explore the followers gained and viewers gained variables more, but without information pertaining to when they were gained, I chose to leave the variables out of my exploration. I also wished there was more data pertaining to advertisements on the platform, which could impact the time someone spends streaming and affect viewership numbers.

Bibliography

https://www.twitch.tv/p/en/about/ All information for the background aspect was taken directly from Twitch’s website and not just their about page. I only listed one because it’s possible to navigate to the other pages through their website.