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.