Master’s Project: Twitter Traffic Analysis

How I used the Twitter API to compare traffic between two online video game tweets

Jacob Perkins
9 min readAug 22, 2022

Details:

This was the final project for my programming in Python for data science class. In this project I used the Twitter API to collect tweets from two massive multiplayer online game accounts: World of Warcraft and Final Fantasy 14.

I only collected tweets during the same two month period for both accounts and used traffic data (likes and retweets) to compare the digital ripples the tweets created.

The Git repository containing code and data can be found here.

Below is the jupyter notebook submission for the project, enjoy!

Introduction: The State of World Of Warcraft

I’m a veteran World of Warcraft(WoW) player for at least 15 years now. Lately, there’s been massive drama and turbulence within the game, Blizzard Entertainment (the makers of WoW), and the passionate community. Here is a brief timeline of events:

In November 2020, WoW releases its latest expansion Shadowlands(9.0), which apparently was the fastest selling pc game of all time. Over the course of the next year WoW will not release any content for 7 months. The latest content (9.1) was released June 29 and is having, at best, mixed reviews.

Additionally, the parent company, Activision Blizzard King(ABK), just got hit with a massive lawsuit(July 21st) from the state of California regarding rampant discrimination and sexual harassment. Not surprisingly, the already troubled community of WoW fans did not take this news well and is becoming increasingly destabilized. Even content creators and youtuber’s are abandoning their WoW centric development structures. Many WoW only creators are talking about either trying, or moving over entirely, to Final Fantasy 14, a competitor similar to WoW.

Lastly, the lawsuit has dramatically affected WoW’s production. Workers are rightly protesting ABK’s “tone deaf” statements and staged a walkout on July 28th. There are also reports of low morale among the staff due to the surfacing of this lawsuit. Jay Alan Brak, the president of Blizzard, has resigned after being explicitly mentioned by the lawsuit.

In summary, WoW which has always been viewed as unbeatable in the MMORPG gaming category is in serious trouble because of these compounding problems. Final Fantasy 14(FF14) is very quickly filling the vacuum created by the WoW turmoil. Twitter is ablaze with WoW players discussing the prospect of a mass exodus from their beloved franchise.

The goal for this project was to better understand the Twitter space comprising of these two competing entities. With the primary question being, how has the Blizzard lawsuit affected social media traffic on both the WoW and FF14 accounts?

My initial prediction was that WoW would be negatively affected and that FF14 would be positively affected.

In [1]:

''' Initialize libraries '''
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

In [2]:

''' Load tweets from Warcraft accnt and FF14 accnt into separate Data Frames'''original_tweets_WoW = pd.read_csv('wrangled_wow.csv')
original_tweets_FF14= pd.read_csv('wrangled_ff14.csv')
merged_tweets = original_tweets_FF14.copy()
merged_tweets = merged_tweets.append(original_tweets_WoW)

Data Collection and Wrangling

As far as data is concerned, retweet and favorite counts for Tweets were collected from each company. Unfortunately, reply counts weren’t available. total_activity was the metric of evaluation for the success/failure of any given tweet. It is the combination of the favorite and reply counts.

100 tweets were collected from each company on August 9th using the Tweepy user_timeline() function.

Date was extremely important because of the lawsuit but was also too broad to be useful. In order to get graph-presentable data each date had to be compressed to fit into tighter categories.

''' Graph of total activity over time '''
fig, ax = plt.subplots()
sns.set(rc={"figure.figsize":(10,5)})
sns.barplot(ax = ax, x= 'compressed_dates5', y ='total_activity',\
hue = 'brand', data = merged_tweets)

ax.set(xlabel= 'Compressed Dates', ylabel ='Total Twitter Activity',\
title = 'Total Activity of the Brands Over Time')

plt.xticks(\
rotation=15, \
fontweight='light',
size = 15)
style = dict(size = 10, color ='red')
line = ax.axvline(5, color = 'red', linestyle = '--')
ax.annotate('WoW\nLawsuit',xy =(5,9500),**style, xytext= (5,0), textcoords = 'offset pixels')

Total Activity of Brands Over Time

The first point of entry into the topic was seeing how these two brands compared side by side. Generally speaking, FF14 outperformed WoW in terms of total activity (the combination of retweets and favorites). Note that the dates are compressed into intervals of 5.

WoW’s most successful tweet in the whole data set can be found here. It is a statement directly from the WoW development team discussing the state of affairs. The WoW account hasn’t posted anything since this specific Tweet, I’m assuming out of respect for the community and the workers.

In [4]:

''' Graph of WoW activity'''fig, ax= plt.subplots()
sns.set(rc={"figure.figsize":(10,5)})
sns.barplot(ax = ax, x ='compressed_dates2', y='total_activity', data=original_tweets_WoW)
ax.set(xlabel= 'Compressed Dates', ylabel ='Total Twitter Activity',\
title = 'Total Activity of WoW Over Time')
plt.xticks(\
rotation=45, \
fontweight='light',
size = 15)
ax.axvline(1, color = 'black', linestyle = '--')
ax.annotate('WoW\nLawsuit',xy =(1,4000),**style, xytext= (5,0), textcoords = 'offset pixels')

Zoom in on WoW Activity

This graph contains only the WoW tweets in increments of two days. What is most surprising is just how poorly WoW tweets are performing even before the lawsuit. In the next graph, FF14 tells a different story.

Many of the tweets are memes, and aside from the WoW team tweet, they are the best performing of the data set. One of the more successful meme tweets can be found here.

The worst performing Tweets are the ones promoting the brand-new content from 9.1, which was released June 29th. This is surprising to me as a player, I didn’t think the content was this unpopular.

In [5]:

'''Graph of FF14 activity'''fig, ax= plt.subplots()
sns.set(rc={"figure.figsize":(10,5)})
sns.barplot(ax = ax, x ='compressed_dates2', y='total_activity', data=original_tweets_FF14)
ax.set(xlabel= 'Compressed Dates', ylabel ='Total Twitter Activity',\
title = 'Total Activity of FF14 Over Time')

plt.xticks(\
rotation=45, \
horizontalalignment='right',\
fontweight='light',
size = 15)

ax.axvline(11, color = 'gray', linestyle = '--')
ax.annotate('WoW\nLawsuit',xy =(11,10000),**style, xytext= (-40,0), textcoords = 'offset pixels')

Zoom in on FF14 activity

The Final Fantasy graph is much different than the WoW graph, before continuing there’s one thing to mention. Unlike WoW, which has had an unbearably long content drought, FF14 has a new expansion coming out in November and many community members are eagerly awaiting its release.

The dates are compressed into increments of 2.

FF14 has many more “viral” tweets than WoW does.

The black bars extending beyond a given bar graph are outlier successes that did exceptionally well on a given day.

Like the WoW account, the FF14 account uses a combination of memes and advertising for new content. Many of the most successful tweets are advertisements for the upcoming expansion.

The widely successful tweets on July 14th are hand drawn illustrations promoting the new expansion, one can be seen here.

One thing that is surprising, I assumed that FF14 activity would increase after the WoW lawsuit announcement. That doesn’t appear to be the case. Many of the most successful instances of activity happened before the lawsuit.

In [6]:

'''Graph of WoW tweets per day'''graph_data = original_tweets_WoW['created_at'].value_counts()
graph_data = graph_data.sort_index()
fig, ax = plt.subplots()
sns.set(rc={"figure.figsize":(12,5)})
sns.barplot(ax = ax, x = graph_data.index, y = graph_data.values)
ax.set(xlabel= 'Dates', ylabel ='Number of Tweets',\
title = 'WoW Tweet Count')
plt.xticks(\
rotation=60, \
horizontalalignment='right',\
fontweight='light',\
size = 15)

ax.axvline(18, color = 'black', linestyle = '--')
ax.annotate('WoW\nLawsuit',xy =(18,9),**style, xytext= (-40,0), textcoords = 'offset pixels')

WoW tweets on a given day

This is a graph of the number of tweets the WoW account made each day. These dates are not compressed.

The patch 9.1 was released 6/29, there appears to be a larger volume of tweets around this time.

July 7th was a big day for WoW, it was the race for world first to defeat the final boss of the patch. This is a huge community-led event that lasted until the 14th. I doubt that the WoW account is engaging with this contest in any real capacity also, there was some controversy surrounding the finale of the contest. This might explain why the account was hardly posting near the 14th.

In [7]:

''' Graph of FF14 tweets per day'''graph_data = original_tweets_FF14['created_at'].value_counts()
graph_data = graph_data.sort_index()
fig, ax = plt.subplots()
sns.set(rc={"figure.figsize":(15,5)})
sns.barplot(ax = ax, x = graph_data.index, y = graph_data.values)
ax.set(xlabel= 'Dates', ylabel ='Number of Tweets',\
title = 'FF14 Tweet Count')
plt.xticks(\
rotation=45, \
horizontalalignment='right',\
fontweight='light',\
size = 14)
ax.axvline(10, color = 'black', linestyle = '--')
ax.annotate('WoW\nLawsuit',xy =(10,10),**style, xytext= (-40,0), textcoords = 'offset pixels')

FF14 Tweet Count

When I first saw the data I assumed that the FF14 account was posting more than the WoW account. It would also be safe to assume that because of the notable inaction from the WoW account after the lawsuit is released to the public.

The following data will provide numeric clarification for the research.

In [8]:

print(f"The average activity per WoW tweet: {original_tweets_WoW['total_activity'].mean()}")
print(f"The average activty per FF14 tweet: {original_tweets_FF14['total_activity'].mean()}\n")
print(f"The average number of WoW tweets per day: {original_tweets_WoW['created_at'].value_counts().mean()}")
print(f"The average number of FF14 tweets per day: {original_tweets_FF14['created_at'].value_counts().mean()}\n")
dates_before= []
for i in range(9,21):
dates_before.append(f'07/{i}')
print(f"The average number of FF14 tweets per day *before* the lawsuit: {original_tweets_FF14['created_at'].loc[original_tweets_FF14['created_at'].isin( dates_before)].value_counts().mean()}")
print(f"The average number of FF14 tweets per day *after* the lawsuit: {original_tweets_FF14['created_at'].loc[~original_tweets_FF14['created_at'].isin( dates_before)].value_counts().mean()}")
--------------------------------------------------------------------The average activity per WoW tweet: 628.46
The average activty per FF14 tweet: 3276.62
The average number of WoW tweets per day: 4.761904761904762
The average number of FF14 tweets per day: 3.4482758620689653
The average number of FF14 tweets per day *before* the lawsuit: 4.8
The average number of FF14 tweets per day *after* the lawsuit: 2.736842105263158

Basic Metrics

As seen above, the WoW account tweets more, on average, than the FF14 account. Even more surprising is that the number of tweets, on average, from the FF14 account went down after the lawsuit. My assumption was that they would tweet more often to try and scoop up disgruntled WoW users.

The FF14 account dramatically outperforms the WoW account despite posting less. The on average performance of a FF14 tweet is 5 times more effective than a WoW tweet. That’s remarkable given the sheer size of WoW in terms of user-base. The website MMO Populations, though not entirely reliable, is the only available data regarding the active player base for WoW.

The estimated daily players for WoW, according to the website, is almost 4 and a half million players. This same website estimates that FF14 has barely 3 million active players.

It’s difficult, and inaccurate, to compare active player bases from this website for a variety of reasons but it does serve to illustrate the underdog nature that FF14 has traditionally occupied when compared to WoW.

Conclusions

The poor performance regarding WoW’s social media is not surprising in the least, given the strife the game has faced. What is surprising is the degree of underperformance from the account. Especially when these results are compared to the closest thing WoW has had to a rival. This data suggests that this rivalry is no longer hyperbole and that the two are actually in competition.

The shortcomings for this research are plenty and worth noting. Tweets and social media presence aren’t indicative of a massive multiplayer online game’s performance. Success for these games is almost entirely driven by raw player metrics and continued engagement. Any attempt to create causality between major events and twitter performance is purely speculative.

The research does confirm that there is a definite disparity forming between the successes of the WoW twitter account and the FF14 account.

For the research, I would have liked to see data that goes back further. I want to know if the WoW account has always performed this poorly or if this is a product of turbulent times. Likewise, has the FF14 account always had this virality, or is there something unique happening within this moment? I also wanted to track the number of comments because that can be a great indicator of ire towards a tweet further enhancing my assessment of player engagement.

--

--

Jacob Perkins

World traveler, life-long learner, writer and aspiring data scientist.