ml-finance-python

python scripts for finance machine learning

git clone https://9o.is/git/ml-finance-python.git

05_sentiment_analysis_twitter.ipynb

(90522B)


      1 {
      2  "cells": [
      3   {
      4    "cell_type": "markdown",
      5    "metadata": {},
      6    "source": [
      7     "# Text classification and sentiment analysis: Twitter"
      8    ]
      9   },
     10   {
     11    "cell_type": "markdown",
     12    "metadata": {},
     13    "source": [
     14     "Once text data has been converted into numerical features using the natural language processing techniques discussed in the previous sections, text classification works just like any other classification task.\n",
     15     "\n",
     16     "In this notebook, we will apply these preprocessing technique to news articles, product reviews, and Twitter data and teach various classifiers to predict discrete news categories, review scores, and sentiment polarity."
     17    ]
     18   },
     19   {
     20    "cell_type": "markdown",
     21    "metadata": {},
     22    "source": [
     23     "## Imports"
     24    ]
     25   },
     26   {
     27    "cell_type": "code",
     28    "execution_count": 1,
     29    "metadata": {
     30     "ExecuteTime": {
     31      "end_time": "2018-11-26T06:37:13.006374Z",
     32      "start_time": "2018-11-26T06:37:12.515786Z"
     33     }
     34    },
     35    "outputs": [],
     36    "source": [
     37     "%matplotlib inline\n",
     38     "import warnings\n",
     39     "from collections import Counter, OrderedDict\n",
     40     "from pathlib import Path\n",
     41     "\n",
     42     "import numpy as np\n",
     43     "import pandas as pd\n",
     44     "from pandas.io.json import json_normalize\n",
     45     "import pyarrow as pa   \n",
     46     "import pyarrow.parquet as pq\n",
     47     "from fastparquet import ParquetFile \n",
     48     "from scipy import sparse\n",
     49     "from scipy.spatial.distance import pdist, squareform\n",
     50     "\n",
     51     "# Visualization\n",
     52     "import matplotlib.pyplot as plt\n",
     53     "from matplotlib.ticker import FuncFormatter, ScalarFormatter\n",
     54     "import seaborn as sns\n",
     55     "\n",
     56     "# spacy, textblob and nltk for language processing\n",
     57     "from textblob import TextBlob, Word\n",
     58     "\n",
     59     "# sklearn for feature extraction & modeling\n",
     60     "from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer\n",
     61     "from sklearn.model_selection import train_test_split\n",
     62     "from sklearn.naive_bayes import MultinomialNB\n",
     63     "from sklearn.linear_model import LogisticRegression\n",
     64     "from sklearn.metrics import roc_auc_score, roc_curve, accuracy_score, confusion_matrix\n",
     65     "from sklearn.externals import joblib\n",
     66     "\n",
     67     "import lightgbm as lgb\n",
     68     "\n",
     69     "import json\n",
     70     "from time import clock, time"
     71    ]
     72   },
     73   {
     74    "cell_type": "code",
     75    "execution_count": 2,
     76    "metadata": {
     77     "ExecuteTime": {
     78      "end_time": "2018-11-26T06:37:13.010613Z",
     79      "start_time": "2018-11-26T06:37:13.007802Z"
     80     }
     81    },
     82    "outputs": [],
     83    "source": [
     84     "plt.style.use('fivethirtyeight')\n",
     85     "warnings.filterwarnings('ignore')"
     86    ]
     87   },
     88   {
     89    "cell_type": "markdown",
     90    "metadata": {},
     91    "source": [
     92     "## Twitter Sentiment"
     93    ]
     94   },
     95   {
     96    "cell_type": "markdown",
     97    "metadata": {},
     98    "source": [
     99     "We use a dataset that contains 1.6 million training and 350 test tweets from 2009 with algorithmically assigned binary positive and negative sentiment scores that are fairly evenly split."
    100    ]
    101   },
    102   {
    103    "cell_type": "markdown",
    104    "metadata": {},
    105    "source": [
    106     "Download the data from [here](http://cs.stanford.edu/people/alecmgo/trainingandtestdata.zip)."
    107    ]
    108   },
    109   {
    110    "cell_type": "markdown",
    111    "metadata": {},
    112    "source": [
    113     "Extract the content of the compressed file, move to 'data/sentiment140/' and rename the files:\n",
    114     "- `training.1600000.processed.noemoticon.csv` to `train.csv`, and\n",
    115     "- `testdata.manual.2009.06.14.csv` to `test.csv`"
    116    ]
    117   },
    118   {
    119    "cell_type": "markdown",
    120    "metadata": {},
    121    "source": [
    122     "- 0 - the polarity of the tweet (0 = negative, 2 = neutral, 4 = positive); training data has no neutral tweets\n",
    123     "- 1 - the id of the tweet (2087)\n",
    124     "- 2 - the date of the tweet (Sat May 16 23:58:44 UTC 2009)\n",
    125     "- 3 - the query (lyx). If there is no query, then this value is NO_QUERY. (only test data uses query)\n",
    126     "- 4 - the user that tweeted (robotickilldozr)\n",
    127     "- 5 - the text of the tweet (Lyx is cool)"
    128    ]
    129   },
    130   {
    131    "cell_type": "markdown",
    132    "metadata": {},
    133    "source": [
    134     "### Read train/test data"
    135    ]
    136   },
    137   {
    138    "cell_type": "markdown",
    139    "metadata": {},
    140    "source": [
    141     "We move the data to the faster parqu3et"
    142    ]
    143   },
    144   {
    145    "cell_type": "code",
    146    "execution_count": 3,
    147    "metadata": {
    148     "ExecuteTime": {
    149      "end_time": "2018-11-22T19:00:48.485331Z",
    150      "start_time": "2018-11-22T18:57:39.456400Z"
    151     }
    152    },
    153    "outputs": [],
    154    "source": [
    155     "names = ['polarity', 'id', 'date', 'query', 'user', 'text']\n",
    156     "train = (pd.read_csv('data/sentiment140/train.csv',\n",
    157     "                     low_memory=False,\n",
    158     "                     encoding='latin1',\n",
    159     "                     header=None,\n",
    160     "                     names=names,\n",
    161     "                     parse_dates=['date'])\n",
    162     "         .drop(['id', 'query'], axis=1)\n",
    163     "         .drop_duplicates(subset=['polarity', 'text']))\n",
    164     "\n",
    165     "train = train[train.text.str.len()<=140]\n",
    166     "train.polarity = (train.polarity>0).astype(int)"
    167    ]
    168   },
    169   {
    170    "cell_type": "code",
    171    "execution_count": 4,
    172    "metadata": {
    173     "ExecuteTime": {
    174      "end_time": "2018-11-22T19:00:48.675865Z",
    175      "start_time": "2018-11-22T19:00:48.486380Z"
    176     }
    177    },
    178    "outputs": [
    179     {
    180      "name": "stdout",
    181      "output_type": "stream",
    182      "text": [
    183       "<class 'pandas.core.frame.DataFrame'>\n",
    184       "Int64Index: 1566668 entries, 0 to 1599999\n",
    185       "Data columns (total 4 columns):\n",
    186       "polarity    1566668 non-null int64\n",
    187       "date        1566668 non-null datetime64[ns]\n",
    188       "user        1566668 non-null object\n",
    189       "text        1566668 non-null object\n",
    190       "dtypes: datetime64[ns](1), int64(1), object(2)\n",
    191       "memory usage: 59.8+ MB\n"
    192      ]
    193     }
    194    ],
    195    "source": [
    196     "train.info(null_counts=True)"
    197    ]
    198   },
    199   {
    200    "cell_type": "code",
    201    "execution_count": 5,
    202    "metadata": {
    203     "ExecuteTime": {
    204      "end_time": "2018-11-22T19:00:49.731086Z",
    205      "start_time": "2018-11-22T19:00:48.676975Z"
    206     }
    207    },
    208    "outputs": [],
    209    "source": [
    210     "train.to_parquet('data/sentiment140/train.parquet')"
    211    ]
    212   },
    213   {
    214    "cell_type": "code",
    215    "execution_count": 7,
    216    "metadata": {
    217     "ExecuteTime": {
    218      "end_time": "2018-11-22T19:17:51.114458Z",
    219      "start_time": "2018-11-22T19:17:51.034471Z"
    220     }
    221    },
    222    "outputs": [],
    223    "source": [
    224     "test = (pd.read_csv('data/sentiment140/test.csv',\n",
    225     "                    low_memory=False,\n",
    226     "                    encoding='latin1',\n",
    227     "                    header=None,\n",
    228     "                    names=names,\n",
    229     "                    parse_dates=['date'])\n",
    230     "        .drop(['id', 'query'], axis=1)\n",
    231     "        .drop_duplicates(subset=['polarity', 'text']))\n",
    232     "test = test[(test.text.str.len()<=140) & (test.polarity.isin([0,4]))]"
    233    ]
    234   },
    235   {
    236    "cell_type": "code",
    237    "execution_count": 8,
    238    "metadata": {
    239     "ExecuteTime": {
    240      "end_time": "2018-11-22T19:17:51.785326Z",
    241      "start_time": "2018-11-22T19:17:51.769276Z"
    242     }
    243    },
    244    "outputs": [
    245     {
    246      "name": "stdout",
    247      "output_type": "stream",
    248      "text": [
    249       "<class 'pandas.core.frame.DataFrame'>\n",
    250       "Int64Index: 354 entries, 0 to 497\n",
    251       "Data columns (total 4 columns):\n",
    252       "polarity    354 non-null int64\n",
    253       "date        354 non-null datetime64[ns, UTC]\n",
    254       "user        354 non-null object\n",
    255       "text        354 non-null object\n",
    256       "dtypes: datetime64[ns, UTC](1), int64(1), object(2)\n",
    257       "memory usage: 13.8+ KB\n"
    258      ]
    259     }
    260    ],
    261    "source": [
    262     "test.info()"
    263    ]
    264   },
    265   {
    266    "cell_type": "code",
    267    "execution_count": 9,
    268    "metadata": {
    269     "ExecuteTime": {
    270      "end_time": "2018-11-22T19:17:53.872380Z",
    271      "start_time": "2018-11-22T19:17:53.867964Z"
    272     }
    273    },
    274    "outputs": [],
    275    "source": [
    276     "test.to_parquet('data/sentiment140/test.parquet')"
    277    ]
    278   },
    279   {
    280    "cell_type": "code",
    281    "execution_count": 10,
    282    "metadata": {
    283     "ExecuteTime": {
    284      "end_time": "2018-11-22T19:16:36.901020Z",
    285      "start_time": "2018-11-22T19:16:36.392462Z"
    286     }
    287    },
    288    "outputs": [],
    289    "source": [
    290     "train = pd.read_parquet('data/sentiment140/train.parquet')\n",
    291     "test = pd.read_parquet('data/sentiment140/test.parquet')"
    292    ]
    293   },
    294   {
    295    "cell_type": "markdown",
    296    "metadata": {},
    297    "source": [
    298     "### Explore data"
    299    ]
    300   },
    301   {
    302    "cell_type": "code",
    303    "execution_count": 11,
    304    "metadata": {
    305     "ExecuteTime": {
    306      "end_time": "2018-11-22T19:18:03.927318Z",
    307      "start_time": "2018-11-22T19:18:03.920661Z"
    308     }
    309    },
    310    "outputs": [
    311     {
    312      "data": {
    313       "text/html": [
    314        "<div>\n",
    315        "<style scoped>\n",
    316        "    .dataframe tbody tr th:only-of-type {\n",
    317        "        vertical-align: middle;\n",
    318        "    }\n",
    319        "\n",
    320        "    .dataframe tbody tr th {\n",
    321        "        vertical-align: top;\n",
    322        "    }\n",
    323        "\n",
    324        "    .dataframe thead th {\n",
    325        "        text-align: right;\n",
    326        "    }\n",
    327        "</style>\n",
    328        "<table border=\"1\" class=\"dataframe\">\n",
    329        "  <thead>\n",
    330        "    <tr style=\"text-align: right;\">\n",
    331        "      <th></th>\n",
    332        "      <th>polarity</th>\n",
    333        "      <th>date</th>\n",
    334        "      <th>user</th>\n",
    335        "      <th>text</th>\n",
    336        "    </tr>\n",
    337        "  </thead>\n",
    338        "  <tbody>\n",
    339        "    <tr>\n",
    340        "      <th>0</th>\n",
    341        "      <td>0</td>\n",
    342        "      <td>2009-04-06 22:19:45</td>\n",
    343        "      <td>_TheSpecialOne_</td>\n",
    344        "      <td>@switchfoot http://twitpic.com/2y1zl - Awww, t...</td>\n",
    345        "    </tr>\n",
    346        "    <tr>\n",
    347        "      <th>1</th>\n",
    348        "      <td>0</td>\n",
    349        "      <td>2009-04-06 22:19:49</td>\n",
    350        "      <td>scotthamilton</td>\n",
    351        "      <td>is upset that he can't update his Facebook by ...</td>\n",
    352        "    </tr>\n",
    353        "    <tr>\n",
    354        "      <th>2</th>\n",
    355        "      <td>0</td>\n",
    356        "      <td>2009-04-06 22:19:53</td>\n",
    357        "      <td>mattycus</td>\n",
    358        "      <td>@Kenichan I dived many times for the ball. Man...</td>\n",
    359        "    </tr>\n",
    360        "    <tr>\n",
    361        "      <th>3</th>\n",
    362        "      <td>0</td>\n",
    363        "      <td>2009-04-06 22:19:57</td>\n",
    364        "      <td>ElleCTF</td>\n",
    365        "      <td>my whole body feels itchy and like its on fire</td>\n",
    366        "    </tr>\n",
    367        "    <tr>\n",
    368        "      <th>4</th>\n",
    369        "      <td>0</td>\n",
    370        "      <td>2009-04-06 22:19:57</td>\n",
    371        "      <td>Karoli</td>\n",
    372        "      <td>@nationwideclass no, it's not behaving at all....</td>\n",
    373        "    </tr>\n",
    374        "  </tbody>\n",
    375        "</table>\n",
    376        "</div>"
    377       ],
    378       "text/plain": [
    379        "   polarity                date             user  \\\n",
    380        "0         0 2009-04-06 22:19:45  _TheSpecialOne_   \n",
    381        "1         0 2009-04-06 22:19:49    scotthamilton   \n",
    382        "2         0 2009-04-06 22:19:53         mattycus   \n",
    383        "3         0 2009-04-06 22:19:57          ElleCTF   \n",
    384        "4         0 2009-04-06 22:19:57           Karoli   \n",
    385        "\n",
    386        "                                                text  \n",
    387        "0  @switchfoot http://twitpic.com/2y1zl - Awww, t...  \n",
    388        "1  is upset that he can't update his Facebook by ...  \n",
    389        "2  @Kenichan I dived many times for the ball. Man...  \n",
    390        "3    my whole body feels itchy and like its on fire   \n",
    391        "4  @nationwideclass no, it's not behaving at all....  "
    392       ]
    393      },
    394      "execution_count": 11,
    395      "metadata": {},
    396      "output_type": "execute_result"
    397     }
    398    ],
    399    "source": [
    400     "train.head()"
    401    ]
    402   },
    403   {
    404    "cell_type": "code",
    405    "execution_count": 12,
    406    "metadata": {
    407     "ExecuteTime": {
    408      "end_time": "2018-11-22T19:18:12.927468Z",
    409      "start_time": "2018-11-22T19:18:12.911852Z"
    410     }
    411    },
    412    "outputs": [
    413     {
    414      "data": {
    415       "text/plain": [
    416        "1    784335\n",
    417        "0    782333\n",
    418        "Name: polarity, dtype: int64"
    419       ]
    420      },
    421      "execution_count": 12,
    422      "metadata": {},
    423      "output_type": "execute_result"
    424     }
    425    ],
    426    "source": [
    427     "train.polarity = (train.polarity>0).astype(int)\n",
    428     "train.polarity.value_counts()"
    429    ]
    430   },
    431   {
    432    "cell_type": "code",
    433    "execution_count": 13,
    434    "metadata": {
    435     "ExecuteTime": {
    436      "end_time": "2018-11-22T19:18:15.622426Z",
    437      "start_time": "2018-11-22T19:18:15.548936Z"
    438     }
    439    },
    440    "outputs": [
    441     {
    442      "data": {
    443       "text/plain": [
    444        "1    180\n",
    445        "0    174\n",
    446        "Name: polarity, dtype: int64"
    447       ]
    448      },
    449      "execution_count": 13,
    450      "metadata": {},
    451      "output_type": "execute_result"
    452     }
    453    ],
    454    "source": [
    455     "test.polarity = (test.polarity>0).astype(int)\n",
    456     "test.polarity.value_counts()"
    457    ]
    458   },
    459   {
    460    "cell_type": "code",
    461    "execution_count": 14,
    462    "metadata": {
    463     "ExecuteTime": {
    464      "end_time": "2018-11-22T19:18:20.141090Z",
    465      "start_time": "2018-11-22T19:18:19.641846Z"
    466     }
    467    },
    468    "outputs": [
    469     {
    470      "data": {
    471       "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbUAAAEfCAYAAADGLVhVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3X9U1HW+x/HnrNZZwhLDYdAUcnMC4dqPVRl01y1/pKG2hEE/7p67q0ao6B7l7Cja9mPruiGmKBlOpXLs3K3uBktXrNRuB06Nho6d7kZXXcXbidsPGw7cxoRgS5n7B4fvOsovFXTm6+txDufk9/Pm8/2+B5hXn+/3OzMWn8/nR0RExAR+dLkPQEREpLco1ERExDQUaiIiYhoKNRERMQ2FmoiImIZCTURETEOhJiIipqFQExER01CohZCamprLfQi9Rr0EJ/USnNRLzynURETENBRqIiJiGgo1ERExDYWaiIiYhkJNRERMQ6EmIiKmoVATERHTUKiJiIhp9L/cByAiIqFp25GmDrfPiQu/xEfyD1qpiYiIaSjURETENBRqIiJiGgo1ERExDYWaiIiYhkJNRERMQ6EmIiKmoVATERHTUKiJiIhpKNRERMQ0FGoiImIaCjURETENhZqIiJiGQk1ERExDoSYiIqahUBMREdNQqImIiGko1ERExDS6DbW8vDwiIiICvm6++WZj3O/3k5eXR3x8PNHR0cycOZPDhw8HzOHz+cjKyiImJoaYmBiysrLw+XwBNQcPHmTGjBlER0czatQo8vPz8fv9ATXbt2/H4XAQFRWFw+Fgx44dF9O7iIiYTI9Wana7nSNHjhhfH3zwgTFWWFhIUVER+fn5VFRUYLVaSUtL4+TJk0ZNZmYm1dXVlJSUUFpaSnV1NfPnzzfGv/32W9LS0oiKiqKiooLVq1ezceNGnn/+eaPG4/Ewb948MjIycLvdZGRkMGfOHD788MPeeBxERMQE+veoqH9/bDbbOdv9fj8ul4ulS5eSmpoKgMvlwm63U1payty5czly5Ajvvvsuu3btwuFwALB+/XpSUlKoqanBbrdTUlJCc3MzLpeLsLAwEhISOHr0KJs2bWLx4sVYLBZcLhcTJ07E6XQCEBcXh9vtxuVysXXr1t56PEREJIT1aKX22WefMWrUKG655RbmzZvHZ599BkBtbS1er5fJkycbtWFhYUyYMIH9+/cDbSusAQMGGIEGkJycTHh4eEDN+PHjCQsLM2qmTJnC8ePHqa2tBeDAgQMB+2mvaZ9DRESk21AbO3YsmzZtoqSkhOeeew6v18u0adP4v//7P7xeLwBWqzXge6xWK3V1dQDU1dURGRmJxWIxxi0WC4MHDw6o6WiO9jEAr9fb5X5ERES6Pf141113Bfx77Nix3Hbbbbz66quMGzcOICCwoO205NkhdrbuatpvEumupqO5z1ZTU9NtTahQL8FJvQQn9dK3vHX9Otxe86PTXX7fxfRit9u7HO/RNbUzDRgwgPj4eD799FNmzZoFtK2mhg0bZtTU19cbq6qoqCjq6+sDAsjv99PQ0BBQc/aKq76+HvjHis1ms3VYc/bqrSPdPQihov0apBmol+CkXoJTsPZia23qcLvdHt7p9/R1L+f9OrWWlhZqamqw2WzExsZis9morKwMGK+qqjKuoSUlJdHY2IjH4zFqPB4PTU1NATVVVVW0tLQYNZWVlQwZMoTY2FgAxo0bF7Cf9pozr9WJuWw70tTpl4hIR7pdqT322GPcfffdDBs2jPr6ep599lm+++47HnroISwWCwsXLmTdunXY7XZGjhzJ2rVrCQ8PJz09HWi7S3Hq1Knk5ORQWFiI3+8nJyeH6dOnG2mdnp5Ofn4+2dnZOJ1Ojh07xoYNG1i+fLmxuluwYAEzZsygoKCAWbNm8eabb+J2u9m1a1cfPjzS1/oioLqac05c5/8HKSKhr9tQ++qrr8jMzKShoYHBgwczduxY/vM//5OYmBgAlixZQnNzM8uWLcPn8zFmzBjKysq49tprjTk2b95Mbm4us2fPBiAlJYU1a9YY4wMHDuSNN97A6XQyadIkIiIiWLRoEYsXLzZqHA4HxcXFrFq1iry8PEaMGEFxcTFjx47ttQdDRERCm8Xn8/m7L5NgEKzn1S9Eey8XulLrasXVF3N2xYw/FzNQL32vs7+1rv6Wgu6amoiISLBSqImIiGko1ERExDQUaiIiYhoKNRERMY3zfkcRkc6Y9fVhZu1LxIy0UhMREdNQqImIiGko1ERExDQUaiIiYhq6UUTOi94hP9C2I0146/p1+BEcuolE5NLTSk1ERExDoSYiIqahUBMREdNQqImIiGko1ERExDQUaiIiYhoKNRERMQ2FmoiImIZefC1yGeid/0X6hlZqIiJiGgo1ERExDZ1+FAkyOjUpcuG0UhMREdNQqImIiGko1ERExDR0Te0Kpes2ImJGWqmJiIhpKNRERMQ0zjvU1q1bR0REBMuWLTO2+f1+8vLyiI+PJzo6mpkzZ3L48OGA7/P5fGRlZRETE0NMTAxZWVn4fL6AmoMHDzJjxgyio6MZNWoU+fn5+P3+gJrt27fjcDiIiorC4XCwY8eO821BRERM6rxC7cCBA7z88sskJiYGbC8sLKSoqIj8/HwqKiqwWq2kpaVx8uRJoyYzM5Pq6mpKSkooLS2lurqa+fPnG+PffvstaWlpREVFUVFRwerVq9m4cSPPP/+8UePxeJg3bx4ZGRm43W4yMjKYM2cOH3744YX2LyIiJtLjUDtx4gSPPPIIGzduJCIiwtju9/txuVwsXbqU1NRUEhIScLlcNDY2UlpaCsCRI0d499132bBhAw6Hg6SkJNavX8/u3bupqakBoKSkhObmZlwuFwkJCaSmprJkyRI2bdpkrNZcLhcTJ07E6XQSFxeH0+nk5z//OS6XqzcfExERCVE9DrX20LrjjjsCttfW1uL1epk8ebKxLSwsjAkTJrB//36gbYU1YMAAHA6HUZOcnEx4eHhAzfjx4wkLCzNqpkyZwvHjx6mtrQXaVopn7qe9pn0OERG5svXolv6XX36ZTz/9lBdffPGcMa/XC4DVag3YbrVaOX78OAB1dXVERkZisViMcYvFwuDBg6mrqzNqhg4des4c7WM33ngjXq+3w/20z9GZ9tWgGfRWL966fp3v40enL+j7utLRnDU1Nb06X7venrMn83nrvD2er6dzdqSrOXuL/l6CUzD20tnvcXe/pxfTi91u73K821Crqanh6aefZufOnVx99dWd1p0ZWNB2WvLsEDtbdzXtpx27q+lo7jN19yCEipqaml7rxdba+evU7PbOX6fW1fd15ew523vprfnO1Ntzdjeft86LLcrW4/l6MmdnOpuzt1532Ju/Y5ebeul7nf0ed/W739e9dHv60ePx0NDQwPjx44mMjCQyMpK9e/eyZcsWIiMjuf766wHOWS3V19cbq6qoqCjq6+sD7mT0+/00NDQE1HQ0B/xjxWaz2brcj4iIXNm6DbWZM2fywQcf4Ha7ja/bb7+d++67D7fbzciRI7HZbFRWVhrf09LSQlVVlXENLSkpicbGRjwej1Hj8XhoamoKqKmqqqKlpcWoqaysZMiQIcTGxgIwbty4gP2015x5rU5ERK5c3Z5+jIiICLjbEeCaa65h0KBBJCQkALBw4ULWrVuH3W5n5MiRrF27lvDwcNLT0wGIi4tj6tSp5OTkUFhYiN/vJycnh+nTpxvL0PT0dPLz88nOzsbpdHLs2DE2bNjA8uXLjdOLCxYsYMaMGRQUFDBr1izefPNN3G43u3bt6tUHRUREQlOvvPfjkiVLaG5uZtmyZfh8PsaMGUNZWRnXXnutUbN582Zyc3OZPXs2ACkpKaxZs8YYHzhwIG+88QZOp5NJkyYRERHBokWLWLx4sVHjcDgoLi5m1apV5OXlMWLECIqLixk7dmxvtCEiIiHugkLtrbfeCvi3xWJh5cqVrFy5stPvGTRoEC+99FKX8yYmJrJz584ua1JTU0lNTe35wYpc4fTm1XIl0bv0m1hXT2YiImakNzQWERHTUKiJiIhpKNRERMQ0dE1NREQ6FWrX5hVqIlews5+wvHX9jLc+0p2REop0+lFERExDoSYiIqahUBMREdNQqImIiGko1ERExDQUaiIiYhoKNRERMQ29Tk1Ezpve+V+ClUJNRER6VVf/0/OzPj4/qNOPIiJiGgo1ERExDYWaiIiYhkJNRERMQzeKiEiv6uwmAd0VKZeCVmoiImIaCjURETENnX6UkBRqn8YrIpeGVmoiImIaWqnJJXH2yspb1w9ba3CttrT6Ewl9CjURuez0XpLSW3T6UURETEOhJiIipqFQExER0+g21DZv3syECRMYPnw4w4cP56677mL37t3GuN/vJy8vj/j4eKKjo5k5cyaHDx8OmMPn85GVlUVMTAwxMTFkZWXh8/kCag4ePMiMGTOIjo5m1KhR5Ofn4/f7A2q2b9+Ow+EgKioKh8PBjh07LqZ3EQkB2440dfolcrZuQ23o0KE89dRTvPfee1RWVvKLX/yCX/3qV/z3f/83AIWFhRQVFZGfn09FRQVWq5W0tDROnjxpzJGZmUl1dTUlJSWUlpZSXV3N/PnzjfFvv/2WtLQ0oqKiqKioYPXq1WzcuJHnn3/eqPF4PMybN4+MjAzcbjcZGRnMmTOHDz/8sDcfDxERCWHd3v04c+bMgH8//vjjbN26lQMHDpCYmIjL5WLp0qWkpqYC4HK5sNvtlJaWMnfuXI4cOcK7777Lrl27cDgcAKxfv56UlBRqamqw2+2UlJTQ3NyMy+UiLCyMhIQEjh49yqZNm1i8eDEWiwWXy8XEiRNxOp0AxMXF4Xa7cblcbN26tbcfFxERCUHndU3t9OnT/OUvf6GpqYmkpCRqa2vxer1MnjzZqAkLC2PChAns378faFthDRgwwAg0gOTkZMLDwwNqxo8fT1hYmFEzZcoUjh8/Tm1tLQAHDhwI2E97TfscIiIiPXqd2sGDB5k2bRotLS2Eh4fzpz/9icTERCNQrFZrQL3VauX48eMA1NXVERkZicViMcYtFguDBw+mrq7OqBk6dOg5c7SP3XjjjXi93g730z5HV2pqanrSZkg4n168df0ubB8/Ot3rc3Y8l7fX5rrcOuqlLx7Hzubsi59Lbx//pXw8jPEr9G+/N/Xm7xYA0RfXi91u73K8R6Fmt9txu92cOHGC8vJyFi5cyJtvvmmMnxlY0HbzyNkhdrbuatpvEumupqO5Ozr+ULftSBPeOi+2KNs5Y529OPVC37HDbu/8xa699S4gnfUSijrrZW9r599ji7qwfXX2s+mLn0tv/x70xe9VV3O2X94wg8vZS++/889XfdpLj04/Xn311fzkJz/h9ttv58knn2T06NFs2rQJm63tl//s1VJ9fb2xqoqKiqK+vj7gTka/309DQ0NATUdzwD9WbDabrcv9iIiIXNDr1FpbW/n++++JjY3FZrNRWVlpjLW0tFBVVWVcQ0tKSqKxsRGPx2PUeDwempqaAmqqqqpoaWkxaiorKxkyZAixsbEAjBs3LmA/7TVnXqsTEWlX9nU/vRTgCtTt6cc//OEPTJs2jRtuuIHGxkZKS0vZs2cPr7/+OhaLhYULF7Ju3TrsdjsjR45k7dq1hIeHk56eDrTdpTh16lRycnIoLCzE7/eTk5PD9OnTjSVoeno6+fn5ZGdn43Q6OXbsGBs2bGD58uXG6cUFCxYwY8YMCgoKmDVrFm+++SZut5tdu3b14cNzZdIfvYiEqm5Dzev1kpWVRV1dHddddx2JiYmUlpYyZcoUAJYsWUJzczPLli3D5/MxZswYysrKuPbaa405Nm/eTG5uLrNnzwYgJSWFNWvWGOMDBw7kjTfewOl0MmnSJCIiIli0aBGLFy82ahwOB8XFxaxatYq8vDxGjBhBcXExY8eO7bUHQ0REQlu3oeZyuboct1gsrFy5kpUrV3ZaM2jQIF566aUu50lMTGTnzp1d1qSmphqvhxMRuVCdnY0w8ycCXCmfhKD3fhQREdNQqImIiGko1ERExDT0ydciIUR3pop0TSs1ERExDa3URER6IBTuHtRKXis1ERExEa3UREQu0oWu4kJh9RdqFGoiIkHozMDz1vUz3i1fYdc1nX4UERHTUKiJiIhpKNRERMQ0FGoiImIaCjURETENhZqIiJiGQk1ERExDoSYiIqahF1+LSIf0PoISirRSExER01CoiYiIaSjURETENHRNzQR07UNEpI1WaiIiYhoKNRERMQ2FmoiImIauqQURXRsTEbk4WqmJiIhpaKUmIpeEzkTIpdDtSq2goIBJkyYxfPhwbrrpJh544AEOHToUUOP3+8nLyyM+Pp7o6GhmzpzJ4cOHA2p8Ph9ZWVnExMQQExNDVlYWPp8voObgwYPMmDGD6OhoRo0aRX5+Pn6/P6Bm+/btOBwOoqKicDgc7Nix40J7FxERk+k21Pbs2cPDDz/M7t27KS8vp3///tx777188803Rk1hYSFFRUXk5+dTUVGB1WolLS2NkydPGjWZmZlUV1dTUlJCaWkp1dXVzJ8/3xj/9ttvSUtLIyoqioqKClavXs3GjRt5/vnnjRqPx8O8efPIyMjA7XaTkZHBnDlz+PDDD3vr8RARueJsO9LU6Veo6fb0Y1lZWcC/X3zxRWJiYti3bx8pKSn4/X5cLhdLly4lNTUVAJfLhd1up7S0lLlz53LkyBHeffdddu3ahcPhAGD9+vWkpKRQU1OD3W6npKSE5uZmXC4XYWFhJCQkcPToUTZt2sTixYuxWCy4XC4mTpyI0+kEIC4uDrfbjcvlYuvWrb392IiISIg57xtFGhsbaW1tJSIiAoDa2lq8Xi+TJ082asLCwpgwYQL79+8H2lZYAwYMMAINIDk5mfDw8ICa8ePHExYWZtRMmTKF48ePU1tbC8CBAwcC9tNe0z6HiIhc2c471FasWMHo0aNJSkoCwOv1AmC1WgPqrFYrdXV1ANTV1REZGYnFYjHGLRYLgwcPDqjpaI72sfZ9dbUfERG5sp3X3Y+PPvoo+/btY9euXfTr1y9g7MzAgrabR84OsbN1V9N+k0h3NR3Nfaaampoux4OFt65fD2q8l+BILg31EpxCqZeaH53uYrTfeffS1Xw9+fvsyznbe+mLY7ykoi/uOdlut3c53uNQW7lyJWVlZezYsYMbb7zR2G6z2YC21dSwYcOM7fX19caqKioqivr6+oAA8vv9NDQ0BNScveKqr68H/rFis9lsHdacvXo7W3cPQrCwtXZ9UdZb58UWZbtER9O31EtwCrVe9rZ2NXr+vdjt4Z2Odff32Zdznvlz6YtjvLS+6tPn5B6dfszNzaW0tJTy8nJuvvnmgLHY2FhsNhuVlZXGtpaWFqqqqoxraElJSTQ2NuLxeIwaj8dDU1NTQE1VVRUtLS1GTWVlJUOGDCE2NhaAcePGBeynvebMa3UiInLl6jbUnE4nr776Klu2bCEiIgKv14vX66WxsRFoOx24cOFCNmzYQHl5OYcOHSI7O5vw8HDS09OBtrsUp06dSk5ODgcOHMDj8ZCTk8P06dONxE5PTycsLIzs7GwOHTpEeXk5GzZsIDs721jdLViwgPfff5+CggKOHj1KQUEBbrebhQsX9tXjIyIiIaTb049btmwBMG7Xb5ebm8vKlSsBWLJkCc3NzSxbtgyfz8eYMWMoKyvj2muvNeo3b95Mbm4us2fPBiAlJYU1a9YY4wMHDuSNN97A6XQyadIkIiIiWLRoEYsXLzZqHA4HxcXFrFq1iry8PEaMGEFxcTFjx469iIdARETMottQO/tdPzpisVhYuXKlEXIdGTRoEC+99FKX8yQmJrJz584ua1JTU88JWBEREdB7P4qIGELxHTQkkN6lX0RETEOhJiIipqHTjyIifUinNC8thZqISAhRSHZNpx9FRMQ0FGoiImIaCjURETENhZqIiJiGQk1ERExDoSYiIqahUBMREdNQqImIiGko1ERExDQUaiIiYhoKNRERMQ2FmoiImIZCTURETEOhJiIipqFQExER01CoiYiIaSjURETENBRqIiJiGgo1ERExDYWaiIiYhkJNRERMQ6EmIiKmoVATERHTUKiJiIhp9CjU9u7dy4MPPsioUaOIiIjglVdeCRj3+/3k5eURHx9PdHQ0M2fO5PDhwwE1Pp+PrKwsYmJiiImJISsrC5/PF1Bz8OBBZsyYQXR0NKNGjSI/Px+/3x9Qs337dhwOB1FRUTgcDnbs2HEhfYuIiAn1KNSamppISEhg9erVhIWFnTNeWFhIUVER+fn5VFRUYLVaSUtL4+TJk0ZNZmYm1dXVlJSUUFpaSnV1NfPnzzfGv/32W9LS0oiKiqKiooLVq1ezceNGnn/+eaPG4/Ewb948MjIycLvdZGRkMGfOHD788MOLeQxERMQk+vekaNq0aUybNg2A7OzsgDG/34/L5WLp0qWkpqYC4HK5sNvtlJaWMnfuXI4cOcK7777Lrl27cDgcAKxfv56UlBRqamqw2+2UlJTQ3NyMy+UiLCyMhIQEjh49yqZNm1i8eDEWiwWXy8XEiRNxOp0AxMXF4Xa7cblcbN26tdceFBERCU0XfU2ttrYWr9fL5MmTjW1hYWFMmDCB/fv3A20rrAEDBhiBBpCcnEx4eHhAzfjx4wNWglOmTOH48ePU1tYCcODAgYD9tNe0zxEKth1p6vRLREQuzkWHmtfrBcBqtQZst1qt1NXVAVBXV0dkZCQWi8UYt1gsDB48OKCmoznax9r31dV+RETkytaj0489cWZgQdtpybND7Gzd1bTfJNJdTUdzn6mmpqabo+9dZV/367O5vXXePpv7UlMvwUm9BCfT9BJ9cc/Jdru9y/GLDjWbzQa0raaGDRtmbK+vrzdWVVFRUdTX1wcEkN/vp6GhIaDm7BVXfX098I8Vm81m67Dm7NXb2bp7EHqbrbVvTiV667zYomx9Mvelpl6Ck3oJTmbqBb7q0+fkiz79GBsbi81mo7Ky0tjW0tJCVVWVcQ0tKSmJxsZGPB6PUePxeGhqagqoqaqqoqWlxaiprKxkyJAhxMbGAjBu3LiA/bTXnHmtTkRErlw9CrXGxkaqq6uprq6mtbWVL774gurqaj7//HMsFgsLFy5kw4YNlJeXc+jQIbKzswkPDyc9PR1ou0tx6tSp5OTkcODAATweDzk5OUyfPt1I7PT0dMLCwsjOzubQoUOUl5ezYcMGsrOzjdXdggULeP/99ykoKODo0aMUFBTgdrtZuHBhHz08IiISSiw+n8/fXZHb7eaee+45Z/tDDz2Ey+XC7/ezevVqtm3bhs/nY8yYMaxdu5aEhASj9ptvviE3N5edO3cCkJKSwpo1a4iIiDBqDh48iNPp5KOPPiIiIoK5c+eSm5sbcM1s+/btrFq1is8++4wRI0bw2GOP8ctf/vKiHoTe1ld3MprpFIR6CU7qJTiZqZef/ahvTz/2KNTk/CjUuqdegpN6CU5m6qWvQ03v/SgiIqahUBMREdNQqImIiGko1ERExDQUaiIiYhoKNRERMQ2FmoiImIZCTURETEOhJiIipqFQExER01CoiYiIaSjURETENBRqIiJiGgo1ERExDYWaiIiYhkJNRERMo//lPoBQ1VcfBCoiIhdOKzURETENhZqIiJiGQk1ERExDoSYiIqahUBMREdNQqImIiGko1ERExDQUaiIiYhoKNRERMQ2FmoiImIZCTURETEOhJiIiphGSobZlyxZuueUWbDYbd9xxBx988MHlPiQREQkCIfcu/WVlZaxYsYJ169aRnJzMli1byMjIYN++fQwfPrzX96d34xcRCR0ht1IrKirin//5n/nNb35DXFwczz77LDabjeLi4st9aCIicplZfD6f/3IfRE99//33DBkyhK1bt3Lvvfca251OJ4cOHeLtt9++jEcnIiKXW0it1BoaGjh9+jRWqzVgu9Vqpa6u7jIdlYiIBIuQCrV2Fosl4N9+v/+cbSIicuUJqVCLjIykX79+56zK6uvrz1m9iYjIlSekQu3qq6/mtttuo7KyMmB7ZWUlDofjMh2ViIgEi5C7pX/RokXMnz+fMWPG4HA4KC4u5uuvv2bu3LmX+9BEROQyC6mVGsDs2bPJy8vj2WefZeLEiezbt4/XX3+dmJiYc2pD8UXaBQUFTJo0ieHDh3PTTTfxwAMPcOjQoYAav99PXl4e8fHxREdHM3PmTA4fPnyZjrhn1q1bR0REBMuWLTO2hVofX3/9NQsWLOCmm27CZrPhcDjYs2ePMR4q/Zw+fZpVq1YZfxu33HILq1at4tSpU0ZNsPayd+9eHnzwQUaNGkVERASvvPJKwHhPjtvn85GVlUVMTAwxMTFkZWXh8/kuZRtA17388MMPPPnkk0yYMIGhQ4cSFxdHZmYmn3/+ecAcf//731m2bBk/+clPGDp0KA8++CBffvnlpW6l25/LmZYsWUJERAQbN24M2N5bvYRcqAFkZmbyySefUFdXx3vvvcfPfvazc2raX6T9u9/9jvfff5+kpCQyMjLO+aUINnv27OHhhx9m9+7dlJeX079/f+69916++eYbo6awsJCioiLy8/OpqKjAarWSlpbGyZMnL+ORd+7AgQO8/PLLJCYmBmwPpT58Ph/Tp0/H7/fz+uuvs3//ftasWRNwLTdU+tmwYQNbtmwhPz8fj8fD6tWr2bx5MwUFBUZNsPbS1NREQkICq1evJiws7Jzxnhx3ZmYm1dXVlJSUUFpaSnV1NfPnz7+UbQBd9/Ldd9/x8ccf43Q6ee+993j11Vf58ssvSU9PD/ifj5UrV7Jjxw62bt3K22+/zcmTJ3nggQc4ffp00PRypu3bt/PRRx8xZMiQc8Z6q5eQep3a+ZgyZQqJiYk899xzxraf/vSnpKam8uSTT17GIzs/jY2NxMTE8Morr5CSkoLf7yc+Pp5HHnkEp9MJQHNzM3a7nX/9138NutOwJ06c4I477qCwsJA1a9aQkJDAs88+G3J9PP300+zdu5fdu3d3OB5K/TzwwAMMGjSIF154wdi2YMECvvnmG/785z+HTC833HADa9as4Ve/+hXQs5/BkSNHcDgc7Nq1i+TkZABziaITAAAJh0lEQVSqqqpISUnhwIED2O32oOilI3/7299ITk5m7969JCYmcuLECUaOHElRURH3338/AF988QWjR4+mtLSUKVOmXKrDD9BZL//7v//L9OnT+Y//+A/S09PJysrit7/9LUCv9hKSK7XufP/99/z1r39l8uTJAdsnT57M/v37L9NRXZjGxkZaW1uJiIgAoLa2Fq/XG9BbWFgYEyZMCMreli5dSmpqKnfccUfA9lDr46233mLMmDHMnTuXkSNH8vOf/5yXXnoJv7/t/wlDqZ/k5GT27NnD0aNHgbYnS7fbzV133QWEVi9n6slxezweBgwYEHBjWXJyMuHh4UHdG2CsNtufC/7617/yww8/BPQ7bNgw4uLigq6XU6dOkZmZidPpJC4u7pzx3uwl5G4U6QkzvUh7xYoVjB49mqSkJAC8Xi9Ah70dP378kh9fV15++WU+/fRTXnzxxXPGQqkPgM8++4ytW7eSnZ3N0qVL+eSTT8jNzQUgKysrpPpZunQpjY2NOBwO+vXrx6lTp3A6nWRmZgKh97Np15PjrqurIzIyMuB1rRaLhcGDBwf1c8P333/PY489xt13380NN9wAtPXSr18/IiMjA2qD8XkuLy+PQYMG8fDDD3c43pu9mDLU2oX6i7QfffRR9u3bx65du+jXr1/AWLD3VlNTw9NPP83OnTu5+uqrO60L9j7atba2cvvttxunrm+99VY+/fRTtmzZQlZWllEXCv2UlZXx7//+72zZsoX4+Hg++eQTVqxYQUxMDL/+9a+NulDopSPdHXdHPQRzb6dOnSIrK4sTJ07w2muvdVsfbL3s2bOHV199Fbfbfd7feyG9mPL0oxlepL1y5Ur+8pe/UF5ezo033mhst9lsAEHfm8fjoaGhgfHjxxMZGUlkZCR79+5ly5YtREZGcv311wPB30c7m812zmmTm2++mS+++MIYh9Do54knnmDx4sXcd999JCYm8uCDD7Jo0SLWr18PhFYvZ+rJcUdFRVFfX2+cNoa2J86Ghoag7O3UqVM8/PDDHDx4kO3btxt/N9DWy+nTp2loaAj4nmD7Obndbr7++mvi4uKM54LPP/+cJ598koSEBKB3ezFlqIX6i7Rzc3MpLS2lvLycm2++OWAsNjYWm80W0FtLSwtVVVVB1dvMmTP54IMPcLvdxtftt9/Offfdh9vtZuTIkSHRR7vk5GSOHTsWsO3YsWPGxx2Fys8F2u6sO3vl369fP1pbW4HQ6uVMPTnupKQkGhsb8Xg8Ro3H46GpqSnoevvhhx+YO3cuBw8eZMeOHUZot7vtttu46qqrAvr98ssvjZthgkVmZiZ79+4NeC4YMmQI2dnZbN++HejdXkx7+jFUX6TtdDr585//zJ/+9CciIiKM6wTh4eEMGDAAi8XCwoULWbduHXa7nZEjR7J27VrCw8NJT0+/zEf/DxEREcYF7XbXXHMNgwYNMv7vLBT6aJednc20adNYu3Yts2fPprq6mpdeeonHH38cIGR+LgB33303GzZsIDY2lvj4eKqrqykqKuLBBx8EgruXxsZGPv30U6DtlPAXX3xBdXU1gwYNYvjw4d0ed1xcHFOnTiUnJ4fCwkL8fj85OTlMnz79kt/52FUvQ4YM4Te/+Q3/9V//xWuvvYbFYjGeC6677jrCwsIYOHAg//Iv/8ITTzyB1Wpl0KBB/P73vycxMZE777wzaHoZPnz4Oaut/v37Y7PZjMe8N3sx7S390Pbi68LCQrxeL6NGjeKZZ57p8DVtweTsIGiXm5vLypUrgbbTJatXr2bbtm34fD7GjBnD2rVrjbAIVjNnzjRu6YfQ62P37t08/fTTHDt2jGHDhvHII48wf/5845x/qPRz8uRJ/vjHP/Lmm29SX1+PzWbjvvvuY/ny5fz4xz8GgrcXt9vNPffcc872hx56CJfL1aPj/uabb8jNzWXnzp0ApKSksGbNmk7/9vpKV72sWLGCW2+9tcPvKyoqMm6Xb2lp4fHHH6e0tJSWlhZ+8YtfsG7dOoYNG9anx3627n4uZxs9enTALf3Qe72YOtREROTKYspraiIicmVSqImIiGko1ERExDQUaiIiYhoKNRERMQ2FmoiImIZCTURETEOhJhIkqqqqyMvL6/NPYb5U+xG5HBRqIkFi37595Ofnc+LECVPsR+RyUKiJiIhpKNREgkBeXh5PPfUU0PZZbe1vCN3+GVSVlZXMmjWLYcOGMXToUGbNmhXwicDNzc0kJSXx05/+lKamJmN7U1MTt99+O0lJSbS0tHS7H5FQZ9p36RcJJffccw81NTWUlZXxzDPPGJ8AHBcXR2lpKVlZWUycOJHf//73tLa28sorr/DLX/6St956i7FjxxIWFsYLL7zAtGnTeOKJJ1i3bh0Ajz/+OJ9//jnvvPMOP/7xj7vcj4gZ6A2NRYLE+vXreeqpp/j444+JjY0F2lZaiYmJpKSkBLzb+XfffUdycjI33ngj5eXlxvY//vGPPPvss5SVlQEwe/Zsli9fzqOPPtrlfkTMQis1kSBWWVmJz+fj/vvvP+dTge+8805ee+01fvjhB6666ioAli9fzjvvvMNvf/tb/H4/t956K8uWLbschy5yWSjURILY//zP/wCQlpbWac2JEycYPHgwAFdddRWbNm3iZz/7Gf3796esrMwIPJErgUJNJIi1trYCsGnTJoYOHdphzXXXXRfw74qKCgBOnTrFkSNHiI+P79uDFAkiCjWRINH+CdpnGjFiBACDBw/u0cfa/+1vf2PVqlXcd999fPnll/zud79jwoQJWK3WLvcjYha6pV8kSFxzzTUAAe/0MWXKFAYOHMjatWv5+9//fs731NfXG/996tQpFixYwPXXX8/atWtxuVw0NzezdOnSbvcjYhb9VqxY8YfLfRAi0naq8d/+7d/44osvOH36NEePHuWGG24gMTGRF154gTfeeAOfz8exY8d4++23eeaZZ3jnnXe4//77AVizZg2lpaUUFxfzT//0TwwaNIiBAwdSVFREbGwso0eP7nQ/VquV8PDwy9m+SK/QLf0iQWTt2rVs27aNr776itbWVnbs2MHEiRPZv38/BQUF7N+/n+bmZmw2G2PHjuXXv/41d955Jx9//DFTp07loYce4rnnnjPm8/v9zJ49m48++ogPPviAG264ocv9iIQ6hZqIiJiGrqmJiIhpKNRERMQ0FGoiImIaCjURETENhZqIiJiGQk1ERExDoSYiIqahUBMREdNQqImIiGko1ERExDT+H72XRNiM0mrqAAAAAElFTkSuQmCC\n",
    472       "text/plain": [
    473        "<Figure size 432x288 with 1 Axes>"
    474       ]
    475      },
    476      "metadata": {},
    477      "output_type": "display_data"
    478     }
    479    ],
    480    "source": [
    481     "sns.distplot(train.text.str.len(), kde=False);"
    482    ]
    483   },
    484   {
    485    "cell_type": "code",
    486    "execution_count": 15,
    487    "metadata": {
    488     "ExecuteTime": {
    489      "end_time": "2018-11-22T19:18:20.259126Z",
    490      "start_time": "2018-11-22T19:18:20.143288Z"
    491     }
    492    },
    493    "outputs": [
    494     {
    495      "data": {
    496       "text/plain": [
    497        "count                 1566668\n",
    498        "unique                 765666\n",
    499        "top       2009-06-15 12:53:14\n",
    500        "freq                       20\n",
    501        "first     2009-04-06 22:19:45\n",
    502        "last      2009-06-25 10:28:31\n",
    503        "Name: date, dtype: object"
    504       ]
    505      },
    506      "execution_count": 15,
    507      "metadata": {},
    508      "output_type": "execute_result"
    509     }
    510    ],
    511    "source": [
    512     "train.date.describe()"
    513    ]
    514   },
    515   {
    516    "cell_type": "code",
    517    "execution_count": 16,
    518    "metadata": {
    519     "ExecuteTime": {
    520      "end_time": "2018-11-22T19:18:20.488156Z",
    521      "start_time": "2018-11-22T19:18:20.260138Z"
    522     }
    523    },
    524    "outputs": [
    525     {
    526      "data": {
    527       "text/plain": [
    528        "650606"
    529       ]
    530      },
    531      "execution_count": 16,
    532      "metadata": {},
    533      "output_type": "execute_result"
    534     }
    535    ],
    536    "source": [
    537     "train.user.nunique()"
    538    ]
    539   },
    540   {
    541    "cell_type": "code",
    542    "execution_count": 17,
    543    "metadata": {
    544     "ExecuteTime": {
    545      "end_time": "2018-11-22T19:16:29.418393Z",
    546      "start_time": "2018-11-22T19:16:28.813193Z"
    547     }
    548    },
    549    "outputs": [
    550     {
    551      "data": {
    552       "text/plain": [
    553        "lost_dog           549\n",
    554        "webwoke            341\n",
    555        "SallytheShizzle    276\n",
    556        "VioletsCRUK        275\n",
    557        "mcraddictal        274\n",
    558        "tsarnick           247\n",
    559        "what_bugs_u        246\n",
    560        "Karen230683        237\n",
    561        "DarkPiano          232\n",
    562        "SongoftheOss       226\n",
    563        "Name: user, dtype: int64"
    564       ]
    565      },
    566      "execution_count": 17,
    567      "metadata": {},
    568      "output_type": "execute_result"
    569     }
    570    ],
    571    "source": [
    572     "train.user.value_counts().head(10)"
    573    ]
    574   },
    575   {
    576    "cell_type": "markdown",
    577    "metadata": {},
    578    "source": [
    579     "### Create text vectorizer"
    580    ]
    581   },
    582   {
    583    "cell_type": "markdown",
    584    "metadata": {},
    585    "source": [
    586     "We create a document-term matrix with 934 tokens as follows:"
    587    ]
    588   },
    589   {
    590    "cell_type": "code",
    591    "execution_count": 18,
    592    "metadata": {
    593     "ExecuteTime": {
    594      "end_time": "2018-11-22T19:19:01.584161Z",
    595      "start_time": "2018-11-22T19:18:47.830361Z"
    596     }
    597    },
    598    "outputs": [],
    599    "source": [
    600     "vectorizer = CountVectorizer(min_df=.001, max_df=.8, stop_words='english')\n",
    601     "train_dtm = vectorizer.fit_transform(train.text)"
    602    ]
    603   },
    604   {
    605    "cell_type": "code",
    606    "execution_count": 19,
    607    "metadata": {
    608     "ExecuteTime": {
    609      "end_time": "2018-11-22T19:19:01.587749Z",
    610      "start_time": "2018-11-22T19:19:01.585491Z"
    611     }
    612    },
    613    "outputs": [
    614     {
    615      "data": {
    616       "text/plain": [
    617        "<1566668x934 sparse matrix of type '<class 'numpy.int64'>'\n",
    618        "\twith 6332930 stored elements in Compressed Sparse Row format>"
    619       ]
    620      },
    621      "execution_count": 19,
    622      "metadata": {},
    623      "output_type": "execute_result"
    624     }
    625    ],
    626    "source": [
    627     "train_dtm"
    628    ]
    629   },
    630   {
    631    "cell_type": "code",
    632    "execution_count": 20,
    633    "metadata": {
    634     "ExecuteTime": {
    635      "end_time": "2018-11-22T19:19:13.384051Z",
    636      "start_time": "2018-11-22T19:19:13.378622Z"
    637     }
    638    },
    639    "outputs": [],
    640    "source": [
    641     "test_dtm = vectorizer.transform(test.text)"
    642    ]
    643   },
    644   {
    645    "cell_type": "markdown",
    646    "metadata": {},
    647    "source": [
    648     "### Train Naive Bayes Classifier"
    649    ]
    650   },
    651   {
    652    "cell_type": "code",
    653    "execution_count": 21,
    654    "metadata": {
    655     "ExecuteTime": {
    656      "end_time": "2018-11-22T19:27:27.856821Z",
    657      "start_time": "2018-11-22T19:27:27.695934Z"
    658     }
    659    },
    660    "outputs": [
    661     {
    662      "data": {
    663       "text/plain": [
    664        "MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)"
    665       ]
    666      },
    667      "execution_count": 21,
    668      "metadata": {},
    669      "output_type": "execute_result"
    670     }
    671    ],
    672    "source": [
    673     "nb = MultinomialNB()\n",
    674     "nb.fit(train_dtm, train.polarity)"
    675    ]
    676   },
    677   {
    678    "cell_type": "markdown",
    679    "metadata": {},
    680    "source": [
    681     "### Predict Test Polarity"
    682    ]
    683   },
    684   {
    685    "cell_type": "code",
    686    "execution_count": 22,
    687    "metadata": {},
    688    "outputs": [],
    689    "source": [
    690     "predicted_polarity = nb.predict(test_dtm)"
    691    ]
    692   },
    693   {
    694    "cell_type": "markdown",
    695    "metadata": {},
    696    "source": [
    697     "### Evaluate Results"
    698    ]
    699   },
    700   {
    701    "cell_type": "code",
    702    "execution_count": 24,
    703    "metadata": {
    704     "ExecuteTime": {
    705      "end_time": "2018-11-22T19:27:47.481529Z",
    706      "start_time": "2018-11-22T19:27:47.468974Z"
    707     }
    708    },
    709    "outputs": [
    710     {
    711      "data": {
    712       "text/plain": [
    713        "0.7768361581920904"
    714       ]
    715      },
    716      "execution_count": 24,
    717      "metadata": {},
    718      "output_type": "execute_result"
    719     }
    720    ],
    721    "source": [
    722     "accuracy_score(test.polarity, predicted_polarity)"
    723    ]
    724   },
    725   {
    726    "cell_type": "markdown",
    727    "metadata": {},
    728    "source": [
    729     "### TextBlob for Sentiment Analysis"
    730    ]
    731   },
    732   {
    733    "cell_type": "code",
    734    "execution_count": 25,
    735    "metadata": {
    736     "ExecuteTime": {
    737      "end_time": "2018-11-22T19:57:48.007733Z",
    738      "start_time": "2018-11-22T19:57:48.001084Z"
    739     }
    740    },
    741    "outputs": [
    742     {
    743      "name": "stdout",
    744      "output_type": "stream",
    745      "text": [
    746       "Ok its cake and ice cream time! Ha! See what I'm talking about! The temptation is there! \n"
    747      ]
    748     },
    749     {
    750      "data": {
    751       "text/plain": [
    752        "1.0"
    753       ]
    754      },
    755      "execution_count": 25,
    756      "metadata": {},
    757      "output_type": "execute_result"
    758     }
    759    ],
    760    "source": [
    761     "sample_positive = train.text.loc[256332]\n",
    762     "print(sample_positive)\n",
    763     "parsed_positive = TextBlob(sample_positive)\n",
    764     "parsed_positive.polarity"
    765    ]
    766   },
    767   {
    768    "cell_type": "code",
    769    "execution_count": 26,
    770    "metadata": {
    771     "ExecuteTime": {
    772      "end_time": "2018-11-22T19:57:48.496070Z",
    773      "start_time": "2018-11-22T19:57:48.488459Z"
    774     }
    775    },
    776    "outputs": [
    777     {
    778      "name": "stdout",
    779      "output_type": "stream",
    780      "text": [
    781       " i hate this place\n"
    782      ]
    783     },
    784     {
    785      "data": {
    786       "text/plain": [
    787        "-0.8"
    788       ]
    789      },
    790      "execution_count": 26,
    791      "metadata": {},
    792      "output_type": "execute_result"
    793     }
    794    ],
    795    "source": [
    796     "sample_negative = train.text.loc[636079]\n",
    797     "print(sample_negative)\n",
    798     "parsed_negative = TextBlob(sample_negative)\n",
    799     "parsed_negative.polarity"
    800    ]
    801   },
    802   {
    803    "cell_type": "code",
    804    "execution_count": 27,
    805    "metadata": {
    806     "ExecuteTime": {
    807      "end_time": "2018-11-22T19:01:50.649282Z",
    808      "start_time": "2018-11-22T19:01:50.644939Z"
    809     }
    810    },
    811    "outputs": [],
    812    "source": [
    813     "def estimate_polarity(text):\n",
    814     "    return TextBlob(text).sentiment.polarity"
    815    ]
    816   },
    817   {
    818    "cell_type": "code",
    819    "execution_count": 28,
    820    "metadata": {
    821     "ExecuteTime": {
    822      "end_time": "2018-11-22T19:57:50.952685Z",
    823      "start_time": "2018-11-22T19:57:50.872680Z"
    824     }
    825    },
    826    "outputs": [
    827     {
    828      "data": {
    829       "text/html": [
    830        "<div>\n",
    831        "<style scoped>\n",
    832        "    .dataframe tbody tr th:only-of-type {\n",
    833        "        vertical-align: middle;\n",
    834        "    }\n",
    835        "\n",
    836        "    .dataframe tbody tr th {\n",
    837        "        vertical-align: top;\n",
    838        "    }\n",
    839        "\n",
    840        "    .dataframe thead th {\n",
    841        "        text-align: right;\n",
    842        "    }\n",
    843        "</style>\n",
    844        "<table border=\"1\" class=\"dataframe\">\n",
    845        "  <thead>\n",
    846        "    <tr style=\"text-align: right;\">\n",
    847        "      <th></th>\n",
    848        "      <th>text</th>\n",
    849        "      <th>sentiment</th>\n",
    850        "    </tr>\n",
    851        "  </thead>\n",
    852        "  <tbody>\n",
    853        "    <tr>\n",
    854        "      <th>286878</th>\n",
    855        "      <td>Waiting to board the plane. Frustrated that Sa...</td>\n",
    856        "      <td>-0.141667</td>\n",
    857        "    </tr>\n",
    858        "    <tr>\n",
    859        "      <th>608505</th>\n",
    860        "      <td>I FEEL SO LOST RIGHT NOW.  wtf..</td>\n",
    861        "      <td>-0.107143</td>\n",
    862        "    </tr>\n",
    863        "    <tr>\n",
    864        "      <th>1049211</th>\n",
    865        "      <td>Chocolate cookies with cocoa nibs and lime rec...</td>\n",
    866        "      <td>0.000000</td>\n",
    867        "    </tr>\n",
    868        "    <tr>\n",
    869        "      <th>1054879</th>\n",
    870        "      <td>@GrahamNelson You're a cubs fan?! Oh boy. http...</td>\n",
    871        "      <td>0.000000</td>\n",
    872        "    </tr>\n",
    873        "    <tr>\n",
    874        "      <th>261809</th>\n",
    875        "      <td>work tomorrow. goodbye weekend</td>\n",
    876        "      <td>0.000000</td>\n",
    877        "    </tr>\n",
    878        "    <tr>\n",
    879        "      <th>776057</th>\n",
    880        "      <td>damn mood off..leavimg m dear home..hyderabad....</td>\n",
    881        "      <td>0.000000</td>\n",
    882        "    </tr>\n",
    883        "    <tr>\n",
    884        "      <th>1296985</th>\n",
    885        "      <td>is packing her bag and wants to dive into the ...</td>\n",
    886        "      <td>0.066667</td>\n",
    887        "    </tr>\n",
    888        "    <tr>\n",
    889        "      <th>1180514</th>\n",
    890        "      <td>yay new moon is a trending topic on twitter</td>\n",
    891        "      <td>0.136364</td>\n",
    892        "    </tr>\n",
    893        "    <tr>\n",
    894        "      <th>350779</th>\n",
    895        "      <td>Forget same page... I think I'm reading a whol...</td>\n",
    896        "      <td>0.175000</td>\n",
    897        "    </tr>\n",
    898        "    <tr>\n",
    899        "      <th>425694</th>\n",
    900        "      <td>@tommcfly you would get on really well with my...</td>\n",
    901        "      <td>0.200000</td>\n",
    902        "    </tr>\n",
    903        "  </tbody>\n",
    904        "</table>\n",
    905        "</div>"
    906       ],
    907       "text/plain": [
    908        "                                                      text  sentiment\n",
    909        "286878   Waiting to board the plane. Frustrated that Sa...  -0.141667\n",
    910        "608505                    I FEEL SO LOST RIGHT NOW.  wtf..  -0.107143\n",
    911        "1049211  Chocolate cookies with cocoa nibs and lime rec...   0.000000\n",
    912        "1054879  @GrahamNelson You're a cubs fan?! Oh boy. http...   0.000000\n",
    913        "261809                     work tomorrow. goodbye weekend    0.000000\n",
    914        "776057   damn mood off..leavimg m dear home..hyderabad....   0.000000\n",
    915        "1296985  is packing her bag and wants to dive into the ...   0.066667\n",
    916        "1180514       yay new moon is a trending topic on twitter    0.136364\n",
    917        "350779   Forget same page... I think I'm reading a whol...   0.175000\n",
    918        "425694   @tommcfly you would get on really well with my...   0.200000"
    919       ]
    920      },
    921      "execution_count": 28,
    922      "metadata": {},
    923      "output_type": "execute_result"
    924     }
    925    ],
    926    "source": [
    927     "train[['text']].sample(10).assign(sentiment=lambda x: x.text.apply(estimate_polarity)).sort_values('sentiment')"
    928    ]
    929   },
    930   {
    931    "cell_type": "markdown",
    932    "metadata": {},
    933    "source": [
    934     "### Compare with TextBlob Polarity Score"
    935    ]
    936   },
    937   {
    938    "cell_type": "markdown",
    939    "metadata": {},
    940    "source": [
    941     "We also obtain TextBlob sentiment scores for the tweets and note (see left panel in below figure) that positive test tweets receive a significantly higher sentiment estimate. We then use the MultinomialNB ‘s model .predict_proba() method to compute predicted probabilities and compare both models using the respective Area Under the Curve (see right panel below)."
    942    ]
    943   },
    944   {
    945    "cell_type": "code",
    946    "execution_count": 29,
    947    "metadata": {
    948     "ExecuteTime": {
    949      "end_time": "2018-11-22T19:19:35.423684Z",
    950      "start_time": "2018-11-22T19:19:35.301114Z"
    951     }
    952    },
    953    "outputs": [],
    954    "source": [
    955     "test['sentiment'] = test.text.apply(estimate_polarity)"
    956    ]
    957   },
    958   {
    959    "cell_type": "code",
    960    "execution_count": 30,
    961    "metadata": {
    962     "ExecuteTime": {
    963      "end_time": "2018-11-22T19:39:00.506536Z",
    964      "start_time": "2018-11-22T19:39:00.492227Z"
    965     }
    966    },
    967    "outputs": [
    968     {
    969      "data": {
    970       "text/plain": [
    971        "0.7429378531073446"
    972       ]
    973      },
    974      "execution_count": 30,
    975      "metadata": {},
    976      "output_type": "execute_result"
    977     }
    978    ],
    979    "source": [
    980     "accuracy_score(test.polarity, (test.sentiment>0).astype(int))"
    981    ]
    982   },
    983   {
    984    "cell_type": "markdown",
    985    "metadata": {},
    986    "source": [
    987     "#### ROC AUC Scores"
    988    ]
    989   },
    990   {
    991    "cell_type": "code",
    992    "execution_count": 31,
    993    "metadata": {
    994     "ExecuteTime": {
    995      "end_time": "2018-11-22T19:24:36.678618Z",
    996      "start_time": "2018-11-22T19:24:36.673660Z"
    997     }
    998    },
    999    "outputs": [
   1000     {
   1001      "data": {
   1002       "text/plain": [
   1003        "0.8254948914431672"
   1004       ]
   1005      },
   1006      "execution_count": 31,
   1007      "metadata": {},
   1008      "output_type": "execute_result"
   1009     }
   1010    ],
   1011    "source": [
   1012     "roc_auc_score(y_true=test.polarity, y_score=test.sentiment)"
   1013    ]
   1014   },
   1015   {
   1016    "cell_type": "code",
   1017    "execution_count": 32,
   1018    "metadata": {
   1019     "ExecuteTime": {
   1020      "end_time": "2018-11-22T19:24:59.154671Z",
   1021      "start_time": "2018-11-22T19:24:59.150504Z"
   1022     }
   1023    },
   1024    "outputs": [
   1025     {
   1026      "data": {
   1027       "text/plain": [
   1028        "0.848595146871009"
   1029       ]
   1030      },
   1031      "execution_count": 32,
   1032      "metadata": {},
   1033      "output_type": "execute_result"
   1034     }
   1035    ],
   1036    "source": [
   1037     "roc_auc_score(y_true=test.polarity, y_score=nb.predict_proba(test_dtm)[:, 1])"
   1038    ]
   1039   },
   1040   {
   1041    "cell_type": "code",
   1042    "execution_count": 33,
   1043    "metadata": {
   1044     "ExecuteTime": {
   1045      "end_time": "2018-11-22T19:35:57.575353Z",
   1046      "start_time": "2018-11-22T19:35:57.568683Z"
   1047     }
   1048    },
   1049    "outputs": [],
   1050    "source": [
   1051     "fpr_tb, tpr_tb, _ = roc_curve(y_true=test.polarity, y_score=test.sentiment)\n",
   1052     "roc_tb = pd.Series(tpr_tb, index=fpr_tb)\n",
   1053     "fpr_nb, tpr_nb, _ = roc_curve(y_true=test.polarity, y_score=nb.predict_proba(test_dtm)[:, 1])\n",
   1054     "roc_nb = pd.Series(tpr_nb, index=fpr_nb)"
   1055    ]
   1056   },
   1057   {
   1058    "cell_type": "markdown",
   1059    "metadata": {},
   1060    "source": [
   1061     "The Naive Bayes model outperforms TextBlob in this case."
   1062    ]
   1063   },
   1064   {
   1065    "cell_type": "code",
   1066    "execution_count": 34,
   1067    "metadata": {
   1068     "ExecuteTime": {
   1069      "end_time": "2018-11-22T19:38:33.287623Z",
   1070      "start_time": "2018-11-22T19:38:32.991173Z"
   1071     }
   1072    },
   1073    "outputs": [
   1074     {
   1075      "data": {
   1076       "image/png": "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sAFPT09cXFxwdHSkUaNGLFmyBJVKZTC2Hj16UL16dUqUKEGlSpVwd3dnypQpaDSaHJ0zIV4n0gIuXlsRERF06NCByMhImjZtSsuWLXny5AnBwcH07t2b2bNnM3r0aACUSiXr16+nefPmDBs2jNDQUG2X3ICAAAICAmjUqJH2qXf//v3ZvHkzJ06coHPnzlStWlW7XwsLi2xjS0xMJDw8HEjvop4djUZD3759CQoKwtnZmU8++QSFQsGuXbuYOHEihw4dYvPmzRgZGelt17t3b65du0b79u0B2LlzJzNmzODChQusXr06230XK1YMSE+mY2Njsbe3z3YbeLHzn9m1a9do0aIF1apVo3fv3sTExPDrr7/SvXt3du/eTYMGDYDcuQYdOnRArVbTqVMnHjx4wNatW+nVqxc7duxgwYIF3Lx5k1atWqFSqQgMDGT06NE4Ojri6empU9fcuXNZtGgRDg4OeHp6Urx4cc6dO8eqVasIDg5m//79ODg46MXg4+PD4cOHadWqFS1atODQoUOsXbuWW7dusWXLFgAqVarE559/zpIlSyhevDiDBg3Sbl+vXr0sj/Flr921a9fo1KkTd+7coVatWgwYMACNRsP169dZt24d3bp1o2jRogBcuXKFdu3acf/+fdzd3fHy8uLOnTts376dvXv3smrVKrp166a3j4sXL+Lp6UmtWrXo3bs3sbGxmJmZAeldIz/66CMePXpEq1at6NChA/fv3ycoKIj27duzevVqnS+F/fv3Z+/evdSoUYNevXqhVCr5999/+eOPPwgODta7XkIIkVdMTHS/Gm/cuJGUlBQ6deqU5Stynp6e1K5dmzNnzrB9+3b69OkDwPr164H0B82lSpXKct/m5ubZxnfz5k1CQkJQKpWMHTs22/VzUmdOfPHFFxw/fhxPT09at25NkSJF6NmzJ19++SUBAQGMGjVKb5tff/2VpKQkevbsqf1+k5qayscff0xwcDCVKlXio48+wtzcnKNHjzJ79mx+//13AgMDtddh79699OjRA2tra9q0aUPp0qWJi4vjn3/+YdWqVcyaNUvvmgnxupNPrHhtDR48mDt37rB582ad95cePnzIhx9+yKxZs2jXrh0VK1YEoHLlyixevJihQ4cyaNAgduzYwT///IOPjw/FihVj7dq1GBsbA+lf+K9du8aJEyfo0qVLll3IT506pX0irFariY2NZe/evcTGxjJjxgzq1KmT7bFs2LCBoKAg6tWrx44dO7C0tARg+vTpdOrUieDgYNavX6+TnEF6y2B0dDTh4eEUKVIEgClTpuDp6cmWLVvo0qULbdq0yXLfNjY2tGzZkv379+Pp6Um/fv1o0KABNWrUyLLr8oue/wwhISHMmzePESNGaMvatWtHv379WLFihU4CntNrYEhERATdu3fHz89Pe13ff/99vL296dGjB3Xr1iUsLEybzHfu3JmuXbuydOlSnYRu3759LFq0iKZNm7J582asra21y9atW8e4ceOYOnWqtnUjswsXLhAeHk6JEiUAUKlUtG7dmr179/L333/j6uqqk4A7ODgYfCXjeV7m2mk0Gvr378+dO3eYPn06n3/+uc7yuLg47fkCGD16NPfv32fOnDk6X6CGDRuGp6cn3t7euLu7670KcPToUaZNm8a4ceN0ypOTk+nbty/Jycns27dP5yFDZGQkzZs3Z8yYMbRo0QI7Ozvu3r3L3r17adSoEUFBQXoPoXLSI0UIIV7FtWvXCAsLA9AbLDPjYbuHh0e29Xh4eHDmzBnCw8O1CXhGr5/mzZvnSqwZ9dWuXfu5rdl54fz58xw+fFivx1Xz5s3Zv38/Z86coXbt2jrLMt6n7927t7bsq6++Ijg4mCFDhjB//nzt/UitVjN27Fi+//571q5dy7Bhw4D0708ajYYdO3ZQq1YtnfofPHggybcolKQLungtnThxgj/++AMvLy+9wUOKFi2Kj48PaWlp/PzzzzrLevToQZ8+fQgLC2PmzJn079+fhIQE/Pz8XnpKr9OnT7NgwQIWLFjAokWL8Pf35/bt27Ro0SLHLXMbN24EYPbs2drkG9JbejO6xX///fcGt500aZI2+QawtrZm4sSJOvVmx8/PD09PT65du8a0adPw9PTE2dmZxo0bM2fOHO7du6ez/suef4B33nmH4cOH65R16tSJYsWKcfr06RzFmxMKhYJ58+bpJJNeXl4APH78mJkzZ+q0pHt4eODg4MD58+d16vHz8wNg2bJlOsk3wKBBg6hYsSLbt283ODrt5MmTtck3gJmZmfaLRm4d64teu6NHj/LXX39Rp04dg60jdnZ22uO8evUq4eHhVKhQQeeBCaT37OjTpw/x8fH88ssvevU4Ozvj7e2tV75jxw5u377NZ599ptfC7+zs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nXeMjgQf4err8Y4dOzR48GBZLBZdd911SkhI8FJS3+LKuK5fv16jR49W+/btFRoaqiFDhmjTpk1eTOsbqvrZYffu3QoODtb111/v4YS+ydVxLSws1HPPPaeePXuqRYsW6t69u5YsWeKltL7D1XF9//33dcMNN+iqq65Sx44d9dBDDykjI8NLaau/qnzO+f777zVs2DC1bNlSXbp00cKFC2W3V25yMQpw1Chr1qxRbGysnnzySW3btk2RkZEaO3asjh07ZnQ0wGdduHBBXbt21fPPP6+6desaHQc+wtXX47S0NI0bN06RkZHatm2b/vjHP2rWrFlat26dl5NXb66O686dOzVo0CAlJiZq27ZtGjp0qO655x6+nP6dqn52yMnJ0dSpUzV48GAvJfUtVRnXBx54QJ999pleeeUV7d+/X3//+9/VrVs3L6au/lwd1z179igmJkYTJkzQ7t279c477+jQoUN68MEHvZy8+nL1c865c+c0evRotWjRQps3b9bzzz+vV199Va+99lqlno95wFGjDBkyRN26ddPf/vY3R1vv3r01cuRIzZ0718BkQM1wzTXX6IUXXtDdd99tdBRUc66+Hs+dO1dJSUn68ssvHW2PPvqoDh06pE8++cQrmX2BO97noqOjdf311+u5557zVEyfUtUxveeee9S9e3fZ7XatX79eu3fv9kZcn+HquG7evFn33XefvvrqKwUHB3szqk9xdVxfffVVLV26VN99952j7e2339bs2bN14sQJr2T2JZX5nLNixQr97//+r3788UdHwR4fH6+EhAQdPHhQJpOp3OfgCDhqjMLCQh04cEDR0dFO7dHR0dq7d69BqQCg9qnK6/G+fftK9B8yZIi++uorFRUVeSyrL3HX+1xubq6aNGni7ng+qapjunz5cmVmZmrmzJmejuiTqjKuGzduVK9evbR48WJ17dpVvXv31qxZs5Sbm+uNyD6hKuMaFRWljIwM/etf/5Ldbld2drbWrFmjoUOHeiNyjbRv3z5df/31TkfLhwwZolOnTumXX36pcH0KcNQY2dnZslqtCgkJcWoPCQlRZmamQakAoPapyutxZmZmqf2Li4uVnZ3tsay+xB3vc2+++aZOnjyp8ePHeyKiz6nKmH7//fdauHChli1bJrPZ7I2YPqcq45qWlqY9e/bou+++08qVKxUfH6/PPvtMDz/8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\n",
   1077       "text/plain": [
   1078        "<Figure size 1008x432 with 2 Axes>"
   1079       ]
   1080      },
   1081      "metadata": {},
   1082      "output_type": "display_data"
   1083     }
   1084    ],
   1085    "source": [
   1086     "fig, axes = plt.subplots(ncols=2, figsize=(14, 6))\n",
   1087     "sns.boxplot(x='polarity', y='sentiment', data=test, ax=axes[0])\n",
   1088     "axes[0].set_title('TextBlob Sentiment Scores')\n",
   1089     "roc_nb.plot(ax=axes[1], label='Naive Bayes', legend=True, lw=1, title='ROC Curves')\n",
   1090     "roc_tb.plot(ax=axes[1], label='TextBlob', legend=True, lw=1)\n",
   1091     "fig.tight_layout();"
   1092    ]
   1093   }
   1094  ],
   1095  "metadata": {
   1096   "celltoolbar": "Slideshow",
   1097   "kernelspec": {
   1098    "display_name": "Python 3",
   1099    "language": "python",
   1100    "name": "python3"
   1101   },
   1102   "language_info": {
   1103    "codemirror_mode": {
   1104     "name": "ipython",
   1105     "version": 3
   1106    },
   1107    "file_extension": ".py",
   1108    "mimetype": "text/x-python",
   1109    "name": "python",
   1110    "nbconvert_exporter": "python",
   1111    "pygments_lexer": "ipython3",
   1112    "version": "3.6.8"
   1113   },
   1114   "toc": {
   1115    "base_numbering": 1,
   1116    "nav_menu": {},
   1117    "number_sections": true,
   1118    "sideBar": true,
   1119    "skip_h1_title": true,
   1120    "title_cell": "Table of Contents",
   1121    "title_sidebar": "Contents",
   1122    "toc_cell": false,
   1123    "toc_position": {
   1124     "height": "calc(100% - 180px)",
   1125     "left": "10px",
   1126     "top": "150px",
   1127     "width": "316px"
   1128    },
   1129    "toc_section_display": true,
   1130    "toc_window_display": true
   1131   }
   1132  },
   1133  "nbformat": 4,
   1134  "nbformat_minor": 2
   1135 }