{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# UFC Chicago Twitter Stream Topic Modeling \n", "By [Chris Tufts](https://twitter.com/devlintufts)\n", "\n", "This notebook uses Latent Dirichlet Allocation (LDA) to perform topic modeling on a stream of tweets collected during the UFC Chicago event held on July 25th 2015. The data was collected using Python, Tweepy, and MySQL as outlined [here](http://miningthedetails.com/blog/python/TwitterStreamsPythonMySQL/). The tweets were parsed using a version of [Christopher Pott's happy fun tokenizer](http://sentiment.christopherpotts.net/tokenizing.html) provided by the [World Well Being Project at UPenn](http://www.wwbp.org/data.html). \n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " created_at username \\\n", "0 Sat Jul 25 22:25:41 +0000 2015 toddbishop44sp \n", "1 Sat Jul 25 22:25:41 +0000 2015 MMAWreckage \n", "2 Sat Jul 25 22:25:42 +0000 2015 216Zac \n", "3 Sat Jul 25 22:25:43 +0000 2015 ELPILLORDZ \n", "4 Sat Jul 25 22:25:46 +0000 2015 RobTatumMMA \n", "\n", " tweet coordinates \\\n", "0 #UFCChicago what a lousy fight both fighters s... NaN \n", "1 RT @BloodyElbow: Wineland losing to Caraway at... NaN \n", "2 RT @NSyarylla: Wineland looks like a different... NaN \n", "3 RT @UFCONFOX: Wineland having his best round. ... NaN \n", "4 \"That was the jaw that was broken.\" -Joe Rogan... NaN \n", "\n", " userTimeZone userLocation retweeted \n", "0 NaN Pelzer South Carolina 0 \n", "1 Pacific Time (US & Canada) NaN 0 \n", "2 NaN NaN 0 \n", "3 Mexico City NaN 0 \n", "4 Mountain Time (US & Canada) Denver, CO 0 \n" ] } ], "source": [ "import pandas as pd\n", "from pandas.tseries.resample import TimeGrouper\n", "from pandas.tseries.offsets import DateOffset\n", "import numpy as np\n", "from langdetect import detect, lang_detect_exception\n", "from nltk import FreqDist,WordNetLemmatizer\n", "from nltk.corpus import stopwords\n", "from gensim import corpora, models\n", "import pyLDAvis.gensim\n", "import csv\n", "import pickle\n", "import re\n", "import warnings\n", "import seaborn as sns\n", "\n", "# ignore user warning for seaborn\n", "warnings.simplefilter('ignore', UserWarning )\n", "warnings.simplefilter('ignore', DeprecationWarning)\n", "\n", "# list of fights from the UFC Chicago main card\n", "fighters = {'tjdillashaw':['tj', 'dillashaw'],\n", " 'renanbarao':['renan','barao','baroa'],\n", " 'mieshatate':['meisha','miesha','tate'],\n", " 'jessicaeye':['jessica'],# eye is a common word, don't include\n", " 'edsonbarboza':['edson','barboza'],\n", " 'paulfelder':['paul','felder'],\n", " 'joelauzon':['lauzon'], # can't include joe because of announcers\n", " 'takanorigomi':['takanori','gomi'],\n", " 'gianvillante':['gian', 'villante', 'vilante'],\n", " 'tomlawlor':['tom','lawlor'],\n", " 'jimmiller':['jim', 'miller'],\n", " 'dannycastillo':['danny', 'castillo'],\n", " 'kennyrobertson':['kenny','robertson'],\n", " 'bensaunders':['ben', 'saunders'],\n", " 'eddiewineland':['eddie', 'wineland'],\n", " 'bryancaraway':['bryan', 'caraway'] }\n", "\n", "\n", "\n", "\n", "\n", "# import tweet dataset\n", "ds = pd.read_csv(\"data/ufcChicago_tweets.csv\", low_memory=False)\n", "print(ds.head())\n", "\n", "# import tokenized tweets\n", "fileObject = open('data/parsedTweets','rb') \n", "# load the object from the file into var b\n", "tweets = pickle.load(fileObject) \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Additional pre-processing of the tweets is carried out below. All retweets and user mentions are identified and stored in separate lists. A distinct list of tweets is also created which has all mentions and retweets removed. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "mentions = []\n", "retweets = []\n", "distinctTweet = []\n", "import re\n", "\n", "# filter out retweets and save results in \n", "# distinctTweet\n", "\n", "# filter out mentions\n", "for tw in tweets:\n", " rt = False\n", " for t in tw:\n", " if re.match('@\\\\w',t):\n", " mentions.append(t)\n", " if re.match('rt',t):\n", " rt = True\n", " if rt:\n", " retweets.append(tw)\n", " else:\n", " distinctTweet.append(tw)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Stopwords and links are removed from the distinct tweets followed by [lemmatization](http://nlp.stanford.edu/IR-book/html/htmledition/stemming-and-lemmatization-1.html) of the tweets. " ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "\n", "# remove mentions\n", "# remove remaining punctuation\n", "\n", "\n", "stopwords = stopwords.words('english')\n", "additional_stopwords = ['ufc','http','https', 'ufcchicago', 'ufconfox','ufcfightnight', '...']\n", "for sword in additional_stopwords:\n", " stopwords.append(sword)\n", "\n", "\n", "lem = WordNetLemmatizer()\n", "# remove stop words ands stem words\n", "filtered_tweets = []\n", "for tw in distinctTweet:\n", " # remove stop words\n", " filtered_tweets.append([lem.lemmatize(w) for w in tw if w.lower() not in stopwords and\n", " len(w.lower()) > 2 and\n", " not (re.match('@\\\\w',w)) and\n", " not (re.match('#\\\\w',w)) and\n", " not (re.match('htt\\\\w',w))])\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To aid in identification of the fighters, the previously defined fighters dictionary is used to convert the individual first and last name of the fighters into a combined first and last name with no whitespace present. Some exceptions had to be made with the fighters. For example JoeLauzon only looks for Lauzon, since one of the primary announcers is also named Joe (Rogan). " ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# check for fighter names and convert to the full name\n", "for i in range(0, len(filtered_tweets)):\n", " for k in range(0, len(filtered_tweets[i])):\n", " for key,value in fighters.items():\n", " for v in value: \n", " filtered_tweets[i][k]=re.sub(r\"\\b%s\\b\" % v, key, filtered_tweets[i][k])\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Below is commented code for performing LDA with a single core with the gensim package. However since I had 4 cores at my disposal I used the ldamulticore.LdaMulticore function. There were 8 fights on the card while I was recording, so I decided I'd look for a slightly higher number of topics, 10." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "\n", "# # LDA using single core\n", "# dictionary = corpora.Dictionary(filtered_tweets)\n", "# corpus = [dictionary.doc2bow(text) for text in filtered_tweets]\n", "\n", "# # model the topics\n", "# ldamodel = models.ldamodel.LdaModel(corpus, num_topics=8, id2word = dictionary, passes=50)\n", "\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#LDA using 4 cores\n", "dictionary = corpora.Dictionary(filtered_tweets)\n", "corpus = [dictionary.doc2bow(text) for text in filtered_tweets]\n", "\n", "ldamodel = models.ldamulticore.LdaMulticore(corpus, num_topics=10, \n", " id2word = dictionary, passes=50, workers=3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The pyLDAvis package is used to plot the results of the topic model. If you take a look at model topic 8, you'll see that Cole Hamels name present as one of the most used names. At the time Cole Hamels was still pitching for the Philadelphia Phillies and threw a no-hitter that night in Chicago while the fights were airing. Was strange seeing this considering the search term used in tweet collection was UFC, but it was a significant event that fight fans seem to react to as well. " ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "
\n", "" ], "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "ufc_vis_data = pyLDAvis.gensim.prepare(ldamodel, corpus, dictionary)\n", "pyLDAvis.display(ufc_vis_data)\n", "\n", "# cole hamels threw a no-hitter against Chicago, game ended around 6:40 (4pm start time, 2:38 duration)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The remainder of the notebook calculates the number of tweets per minute and displays them as a function of time using the seaborn package. " ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# convert to time series\n", "ds['created_at'] = pd.to_datetime(pd.Series(ds['created_at']))\n", "ds.set_index('created_at', drop=False, inplace=True)\n", "ds.index = ds.index.tz_localize('GMT').tz_convert('EST')\n", "ds.index = ds.index - DateOffset(hours = 12)\n", "\n" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2015-07-25 05:25:41-05:00 0\n", "2015-07-25 05:26:41-05:00 124\n", "2015-07-25 05:27:41-05:00 133\n", "2015-07-25 05:28:41-05:00 109\n", "2015-07-25 05:29:41-05:00 140\n", "Freq: T, dtype: float64" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "start_time = ds.index.min()\n", "end_time = ds.index.max()\n", "\n", "\n", "# minute = Minute()\n", "date_bin = pd.date_range(start_time, end_time, freq='T')\n", "tweet_frequency = pd.Series(np.zeros(len(date_bin)), index=date_bin) \n", "for date_entry in range(1,len(date_bin)):\n", " temp = temp = ds[ds.index > date_bin[(date_entry-1)]]\n", " temp = temp[temp.index < date_bin[date_entry]]\n", " tweet_frequency[date_entry] = len(temp)\n", "tweet_frequency.head()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "\n", "sns.tsplot(data=tweet_frequency)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.0" } }, "nbformat": 4, "nbformat_minor": 0 }