ml-finance-python

python scripts for finance machine learning

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

03_document_term_matrix.ipynb

(229781B)


      1 {
      2  "cells": [
      3   {
      4    "cell_type": "markdown",
      5    "metadata": {
      6     "slideshow": {
      7      "slide_type": "slide"
      8     }
      9    },
     10    "source": [
     11     "# From tokens to numbers: the document-term matrix"
     12    ]
     13   },
     14   {
     15    "cell_type": "markdown",
     16    "metadata": {},
     17    "source": [
     18     "The bag of words model represents a document based on the frequency of the terms or tokens it contains. Each document becomes a vector with one entry for each token in the vocabulary that reflects the token’s relevance to the document.\n",
     19     "\n",
     20     "The document-term matrix is straightforward to compute given the vocabulary. However, it is also a crude simplification because it abstracts from word order and grammatical relationships. Nonetheless, it often achieves good results in text classification quickly and, thus, a very useful starting point.\n",
     21     "\n",
     22     "There are several ways to weigh a token’s vector entry to capture its relevance to the document. We will illustrate below how to use sklearn to use binary flags that indicate presence or absence, counts, and weighted counts that account for differences in term frequencies across all documents, i.e., in the corpus. "
     23    ]
     24   },
     25   {
     26    "cell_type": "markdown",
     27    "metadata": {},
     28    "source": [
     29     "## Imports & Settings"
     30    ]
     31   },
     32   {
     33    "cell_type": "code",
     34    "execution_count": 11,
     35    "metadata": {
     36     "ExecuteTime": {
     37      "end_time": "2018-11-26T03:42:04.412794Z",
     38      "start_time": "2018-11-26T03:42:04.173698Z"
     39     },
     40     "slideshow": {
     41      "slide_type": "fragment"
     42     }
     43    },
     44    "outputs": [],
     45    "source": [
     46     "%matplotlib inline\n",
     47     "import warnings\n",
     48     "from collections import Counter, OrderedDict\n",
     49     "from pathlib import Path\n",
     50     "\n",
     51     "import numpy as np\n",
     52     "import pandas as pd\n",
     53     "from scipy import sparse\n",
     54     "from scipy.spatial.distance import pdist, squareform\n",
     55     "\n",
     56     "# Visualization\n",
     57     "import matplotlib.pyplot as plt\n",
     58     "from matplotlib.ticker import FuncFormatter, ScalarFormatter\n",
     59     "import seaborn as sns\n",
     60     "import ipywidgets as widgets\n",
     61     "from ipywidgets import interact, FloatRangeSlider\n",
     62     "\n",
     63     "# spacy for language processing\n",
     64     "import spacy\n",
     65     "\n",
     66     "# sklearn for feature extraction & modeling\n",
     67     "from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer, TfidfTransformer\n",
     68     "from sklearn.model_selection import train_test_split\n",
     69     "from sklearn.externals import joblib"
     70    ]
     71   },
     72   {
     73    "cell_type": "code",
     74    "execution_count": 12,
     75    "metadata": {
     76     "ExecuteTime": {
     77      "end_time": "2018-11-26T03:42:04.416595Z",
     78      "start_time": "2018-11-26T03:42:04.414080Z"
     79     }
     80    },
     81    "outputs": [],
     82    "source": [
     83     "plt.style.use('fivethirtyeight')\n",
     84     "plt.rcParams['figure.figsize'] = (14.0, 8.7)\n",
     85     "warnings.filterwarnings('ignore')\n",
     86     "pd.options.display.float_format = '{:,.2f}'.format"
     87    ]
     88   },
     89   {
     90    "cell_type": "markdown",
     91    "metadata": {
     92     "slideshow": {
     93      "slide_type": "skip"
     94     }
     95    },
     96    "source": [
     97     "## Load BBC data"
     98    ]
     99   },
    100   {
    101    "cell_type": "code",
    102    "execution_count": 13,
    103    "metadata": {
    104     "ExecuteTime": {
    105      "end_time": "2018-11-24T18:52:26.088715Z",
    106      "start_time": "2018-11-24T18:52:25.610767Z"
    107     },
    108     "slideshow": {
    109      "slide_type": "skip"
    110     }
    111    },
    112    "outputs": [],
    113    "source": [
    114     "path = Path('data', 'bbc')\n",
    115     "files = path.glob('**/*.txt')\n",
    116     "doc_list = []\n",
    117     "for i, file in enumerate(files):\n",
    118     "    topic = file.parts[-2]\n",
    119     "    article = file.read_text(encoding='latin1').split('\\n')\n",
    120     "    heading = article[0].strip()\n",
    121     "    body = ' '.join([l.strip() for l in article[1:]]).strip()\n",
    122     "    doc_list.append([topic, heading, body])"
    123    ]
    124   },
    125   {
    126    "cell_type": "markdown",
    127    "metadata": {
    128     "slideshow": {
    129      "slide_type": "skip"
    130     }
    131    },
    132    "source": [
    133     "### Convert to DataFrame"
    134    ]
    135   },
    136   {
    137    "cell_type": "code",
    138    "execution_count": 14,
    139    "metadata": {
    140     "ExecuteTime": {
    141      "end_time": "2018-11-24T18:52:28.765174Z",
    142      "start_time": "2018-11-24T18:52:28.744236Z"
    143     },
    144     "slideshow": {
    145      "slide_type": "skip"
    146     }
    147    },
    148    "outputs": [
    149     {
    150      "name": "stdout",
    151      "output_type": "stream",
    152      "text": [
    153       "<class 'pandas.core.frame.DataFrame'>\n",
    154       "RangeIndex: 2225 entries, 0 to 2224\n",
    155       "Data columns (total 3 columns):\n",
    156       "topic      2225 non-null object\n",
    157       "heading    2225 non-null object\n",
    158       "body       2225 non-null object\n",
    159       "dtypes: object(3)\n",
    160       "memory usage: 52.2+ KB\n"
    161      ]
    162     }
    163    ],
    164    "source": [
    165     "docs = pd.DataFrame(doc_list, columns=['topic', 'heading', 'body'])\n",
    166     "docs.info()"
    167    ]
    168   },
    169   {
    170    "cell_type": "markdown",
    171    "metadata": {
    172     "slideshow": {
    173      "slide_type": "slide"
    174     }
    175    },
    176    "source": [
    177     "### Inspect results"
    178    ]
    179   },
    180   {
    181    "cell_type": "code",
    182    "execution_count": 15,
    183    "metadata": {
    184     "ExecuteTime": {
    185      "end_time": "2018-11-24T18:52:29.816663Z",
    186      "start_time": "2018-11-24T18:52:29.791511Z"
    187     },
    188     "slideshow": {
    189      "slide_type": "fragment"
    190     }
    191    },
    192    "outputs": [
    193     {
    194      "data": {
    195       "text/html": [
    196        "<div>\n",
    197        "<style scoped>\n",
    198        "    .dataframe tbody tr th:only-of-type {\n",
    199        "        vertical-align: middle;\n",
    200        "    }\n",
    201        "\n",
    202        "    .dataframe tbody tr th {\n",
    203        "        vertical-align: top;\n",
    204        "    }\n",
    205        "\n",
    206        "    .dataframe thead th {\n",
    207        "        text-align: right;\n",
    208        "    }\n",
    209        "</style>\n",
    210        "<table border=\"1\" class=\"dataframe\">\n",
    211        "  <thead>\n",
    212        "    <tr style=\"text-align: right;\">\n",
    213        "      <th></th>\n",
    214        "      <th>topic</th>\n",
    215        "      <th>heading</th>\n",
    216        "      <th>body</th>\n",
    217        "    </tr>\n",
    218        "  </thead>\n",
    219        "  <tbody>\n",
    220        "    <tr>\n",
    221        "      <th>53</th>\n",
    222        "      <td>tech</td>\n",
    223        "      <td>Hotspot users gain free net calls</td>\n",
    224        "      <td>People using wireless net hotspots will soon b...</td>\n",
    225        "    </tr>\n",
    226        "    <tr>\n",
    227        "      <th>578</th>\n",
    228        "      <td>sport</td>\n",
    229        "      <td>A November to remember</td>\n",
    230        "      <td>Last Saturday, one newspaper proclaimed that E...</td>\n",
    231        "    </tr>\n",
    232        "    <tr>\n",
    233        "      <th>808</th>\n",
    234        "      <td>sport</td>\n",
    235        "      <td>Barcelona title hopes hit by loss</td>\n",
    236        "      <td>Barcelona's pursuit of the Spanish title took ...</td>\n",
    237        "    </tr>\n",
    238        "    <tr>\n",
    239        "      <th>58</th>\n",
    240        "      <td>tech</td>\n",
    241        "      <td>Ban hits Half-Life 2 pirates hard</td>\n",
    242        "      <td>About 20,000 people have been banned from play...</td>\n",
    243        "    </tr>\n",
    244        "    <tr>\n",
    245        "      <th>1548</th>\n",
    246        "      <td>business</td>\n",
    247        "      <td>Business fears over sluggish EU economy</td>\n",
    248        "      <td>As European leaders gather in Rome on Friday t...</td>\n",
    249        "    </tr>\n",
    250        "    <tr>\n",
    251        "      <th>1884</th>\n",
    252        "      <td>entertainment</td>\n",
    253        "      <td>Famed music director Viotti dies</td>\n",
    254        "      <td>Conductor Marcello Viotti, director of Venice'...</td>\n",
    255        "    </tr>\n",
    256        "    <tr>\n",
    257        "      <th>681</th>\n",
    258        "      <td>sport</td>\n",
    259        "      <td>Johnson accuses British sprinters</td>\n",
    260        "      <td>Former Olympic champion Michael Johnson has ac...</td>\n",
    261        "    </tr>\n",
    262        "    <tr>\n",
    263        "      <th>1609</th>\n",
    264        "      <td>business</td>\n",
    265        "      <td>Japanese mogul arrested for fraud</td>\n",
    266        "      <td>One of Japan's best-known businessmen was arre...</td>\n",
    267        "    </tr>\n",
    268        "    <tr>\n",
    269        "      <th>807</th>\n",
    270        "      <td>sport</td>\n",
    271        "      <td>Sydney return for Henin-Hardenne</td>\n",
    272        "      <td>Olympic champion Justine Henin-Hardenne will r...</td>\n",
    273        "    </tr>\n",
    274        "    <tr>\n",
    275        "      <th>1434</th>\n",
    276        "      <td>business</td>\n",
    277        "      <td>'Post-Christmas lull' in lending</td>\n",
    278        "      <td>UK mortgage lending showed a \"post-Christmas l...</td>\n",
    279        "    </tr>\n",
    280        "  </tbody>\n",
    281        "</table>\n",
    282        "</div>"
    283       ],
    284       "text/plain": [
    285        "              topic                                  heading  \\\n",
    286        "53             tech        Hotspot users gain free net calls   \n",
    287        "578           sport                   A November to remember   \n",
    288        "808           sport        Barcelona title hopes hit by loss   \n",
    289        "58             tech        Ban hits Half-Life 2 pirates hard   \n",
    290        "1548       business  Business fears over sluggish EU economy   \n",
    291        "1884  entertainment         Famed music director Viotti dies   \n",
    292        "681           sport        Johnson accuses British sprinters   \n",
    293        "1609       business        Japanese mogul arrested for fraud   \n",
    294        "807           sport         Sydney return for Henin-Hardenne   \n",
    295        "1434       business         'Post-Christmas lull' in lending   \n",
    296        "\n",
    297        "                                                   body  \n",
    298        "53    People using wireless net hotspots will soon b...  \n",
    299        "578   Last Saturday, one newspaper proclaimed that E...  \n",
    300        "808   Barcelona's pursuit of the Spanish title took ...  \n",
    301        "58    About 20,000 people have been banned from play...  \n",
    302        "1548  As European leaders gather in Rome on Friday t...  \n",
    303        "1884  Conductor Marcello Viotti, director of Venice'...  \n",
    304        "681   Former Olympic champion Michael Johnson has ac...  \n",
    305        "1609  One of Japan's best-known businessmen was arre...  \n",
    306        "807   Olympic champion Justine Henin-Hardenne will r...  \n",
    307        "1434  UK mortgage lending showed a \"post-Christmas l...  "
    308       ]
    309      },
    310      "execution_count": 15,
    311      "metadata": {},
    312      "output_type": "execute_result"
    313     }
    314    ],
    315    "source": [
    316     "docs.sample(10)"
    317    ]
    318   },
    319   {
    320    "cell_type": "markdown",
    321    "metadata": {
    322     "slideshow": {
    323      "slide_type": "slide"
    324     }
    325    },
    326    "source": [
    327     "### Data drawn from 5 different categories"
    328    ]
    329   },
    330   {
    331    "cell_type": "code",
    332    "execution_count": 16,
    333    "metadata": {
    334     "ExecuteTime": {
    335      "end_time": "2018-11-24T18:52:32.338601Z",
    336      "start_time": "2018-11-24T18:52:32.236295Z"
    337     },
    338     "slideshow": {
    339      "slide_type": "fragment"
    340     }
    341    },
    342    "outputs": [
    343     {
    344      "data": {
    345       "text/html": [
    346        "<style  type=\"text/css\" >\n",
    347        "</style><table id=\"T_2d5282a0_63be_11e9_890c_6045cb72e6b3\" ><thead>    <tr>        <th class=\"blank level0\" ></th>        <th class=\"col_heading level0 col0\" >count</th>    </tr></thead><tbody>\n",
    348        "                <tr>\n",
    349        "                        <th id=\"T_2d5282a0_63be_11e9_890c_6045cb72e6b3level0_row0\" class=\"row_heading level0 row0\" >sport</th>\n",
    350        "                        <td id=\"T_2d5282a0_63be_11e9_890c_6045cb72e6b3row0_col0\" class=\"data row0 col0\" >22.97%</td>\n",
    351        "            </tr>\n",
    352        "            <tr>\n",
    353        "                        <th id=\"T_2d5282a0_63be_11e9_890c_6045cb72e6b3level0_row1\" class=\"row_heading level0 row1\" >business</th>\n",
    354        "                        <td id=\"T_2d5282a0_63be_11e9_890c_6045cb72e6b3row1_col0\" class=\"data row1 col0\" >22.92%</td>\n",
    355        "            </tr>\n",
    356        "            <tr>\n",
    357        "                        <th id=\"T_2d5282a0_63be_11e9_890c_6045cb72e6b3level0_row2\" class=\"row_heading level0 row2\" >politics</th>\n",
    358        "                        <td id=\"T_2d5282a0_63be_11e9_890c_6045cb72e6b3row2_col0\" class=\"data row2 col0\" >18.74%</td>\n",
    359        "            </tr>\n",
    360        "            <tr>\n",
    361        "                        <th id=\"T_2d5282a0_63be_11e9_890c_6045cb72e6b3level0_row3\" class=\"row_heading level0 row3\" >tech</th>\n",
    362        "                        <td id=\"T_2d5282a0_63be_11e9_890c_6045cb72e6b3row3_col0\" class=\"data row3 col0\" >18.02%</td>\n",
    363        "            </tr>\n",
    364        "            <tr>\n",
    365        "                        <th id=\"T_2d5282a0_63be_11e9_890c_6045cb72e6b3level0_row4\" class=\"row_heading level0 row4\" >entertainment</th>\n",
    366        "                        <td id=\"T_2d5282a0_63be_11e9_890c_6045cb72e6b3row4_col0\" class=\"data row4 col0\" >17.35%</td>\n",
    367        "            </tr>\n",
    368        "    </tbody></table>"
    369       ],
    370       "text/plain": [
    371        "<pandas.io.formats.style.Styler at 0x7fa88e2d8e48>"
    372       ]
    373      },
    374      "execution_count": 16,
    375      "metadata": {},
    376      "output_type": "execute_result"
    377     }
    378    ],
    379    "source": [
    380     "docs.topic.value_counts(normalize=True).to_frame('count').style.format({'count': '{:,.2%}'.format})"
    381    ]
    382   },
    383   {
    384    "cell_type": "markdown",
    385    "metadata": {},
    386    "source": [
    387     "## Explore Corpus"
    388    ]
    389   },
    390   {
    391    "cell_type": "markdown",
    392    "metadata": {},
    393    "source": [
    394     "### Token Count via Counter()"
    395    ]
    396   },
    397   {
    398    "cell_type": "code",
    399    "execution_count": 17,
    400    "metadata": {
    401     "ExecuteTime": {
    402      "end_time": "2018-11-24T18:52:34.840079Z",
    403      "start_time": "2018-11-24T18:52:34.712383Z"
    404     },
    405     "slideshow": {
    406      "slide_type": "fragment"
    407     }
    408    },
    409    "outputs": [
    410     {
    411      "name": "stdout",
    412      "output_type": "stream",
    413      "text": [
    414       "Total word count: 842,910 | per article: 379\n"
    415      ]
    416     }
    417    ],
    418    "source": [
    419     "# word count\n",
    420     "word_count = docs.body.str.split().str.len().sum()\n",
    421     "print(f'Total word count: {word_count:,d} | per article: {word_count/len(docs):,.0f}')"
    422    ]
    423   },
    424   {
    425    "cell_type": "code",
    426    "execution_count": 18,
    427    "metadata": {
    428     "ExecuteTime": {
    429      "end_time": "2018-11-24T18:52:35.395934Z",
    430      "start_time": "2018-11-24T18:52:35.069717Z"
    431     }
    432    },
    433    "outputs": [
    434     {
    435      "name": "stdout",
    436      "output_type": "stream",
    437      "text": [
    438       "500 1000 1500 2000 "
    439      ]
    440     }
    441    ],
    442    "source": [
    443     "token_count = Counter()\n",
    444     "for i, doc in enumerate(docs.body.tolist(), 1):\n",
    445     "    if i % 500 == 0:\n",
    446     "        print(i, end=' ', flush=True)\n",
    447     "    token_count.update([t.strip() for t in doc.split()])"
    448    ]
    449   },
    450   {
    451    "cell_type": "code",
    452    "execution_count": 19,
    453    "metadata": {
    454     "ExecuteTime": {
    455      "end_time": "2018-11-24T18:52:39.380684Z",
    456      "start_time": "2018-11-24T18:52:39.311958Z"
    457     }
    458    },
    459    "outputs": [],
    460    "source": [
    461     "tokens = (pd.DataFrame(token_count.most_common(), columns=['token', 'count'])\n",
    462     "          .set_index('token')\n",
    463     "          .squeeze())"
    464    ]
    465   },
    466   {
    467    "cell_type": "code",
    468    "execution_count": 20,
    469    "metadata": {
    470     "ExecuteTime": {
    471      "end_time": "2018-11-24T18:52:40.334798Z",
    472      "start_time": "2018-11-24T18:52:39.488587Z"
    473     }
    474    },
    475    "outputs": [
    476     {
    477      "data": {
    478       "image/png": "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KgcHB506dUp//PGHSpYsmevjRkdHKyoqSl5eXlq7dq3KlCkjSfrwww8VGBiorVu3KiIiQv/85z8tr6/x48drx44d8vPzU7du3Wx6fj/88IOkO6/VunXrKi0tzbKvUKFCeuuttzRhwgQVLlzY6ridO3dq2rRpGjlypNWXHAXh0qVLWrlypYoUKZLtFxXZ+fnnnxUXF6dy5cpZfTll1r17d0VHR+vrr7/WoUOH9MILL1iuUf3hhx/Uv39//eMf/8jzcbp166bffvst1/M8ZswYHT58WN26ddP06dMtX2oMHz5czZo108SJE9W6dWs9//zz2T7GtWvX1L9/f61YsULdu3dXWFiY1XvL119/rblz56p9+/aaPXu27O3tLfsmTpyoTz75ROPHj9enn36ape+UlBQlJCRYZhWMHj1aL774opYtW6YxY8bI1dVV0p33SpPJpNWrV2d5nV+4cIGQCuC+MPUXAHRnJOb27dv68ssvJUmnTp3Sxo0b9corr1iNTNwtISFBR44c0XPPPZdltdSXXnpJ7du31/nz5/Xtt99KuvNB3mQyqXjx4lk+yEtShQoVCvhZ5axt27bZjuTNnTtX165d06effmoVUqU71we2bdtWSUlJOnTokKQ75yk2NlZPPPFElmnJrVu3vq+wl50NGzbo559/1ltvvZVldNjV1VWDBg1SZmamVq1aleXYRo0aZQnMb7zxhooUKWIJXgVhwIABWr9+vY4dO6aTJ08qNjZW/v7+Onz4sDp27JhlpVjzlEtzqLyXeXt2UzPvtWjRIkl3gund/RUrVswSQBYsWJD/J3UP83TXsWPHqlGjRkpISNCJEye0atUqValSRbNnz7ZMdTVLT09Xv379VKdOHcuU5oK0dOlS/fHHH2rbtq0lOOXFPJratWtXlShRIsv+EiVKaM2aNfrHP/6hpKQkRUZGavr06dq1a5eaNGliWVzpQd24cUPLli1TyZIlNXbsWKuR90qVKuntt9+WyWTSwoULsz0+LS1NHTt21IoVKxQSEqJp06ZlCYUREREqXLiwwsPDrUKqJL399tuqUKGCli1blm3/Y8aMsZr67uDgoFdffVW3b9/W3r17LdvNo9jZfaFy7yrMAGArvuICAEl169ZV7dq1tXjxYo0cOVJffvmlZRQvJ/v27ZMkNWnSJNv9L730klavXq19+/apc+fOKl26tNq1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8YfGjh1rdb/R1NRUTZ48WXZ2dnrjjTdy7P/ll1/W4sWLdenSJfn5+WW5nnXAgAG6ceOGgoODdfHixSzHX758WXv27LHpueRky5YtWWYMSP8dEc5uwSoAyAvXqALAXSpVqmRZLCQvdnZ2ioyMVMeOHS33RzXfR9U80vP5559bpm7+5z//UcuWLeXp6am6deuqUqVKunLlijZv3qxjx47p5ZdftrpmztfXV8uWLdMrr7yixo0bq3jx4qpZs6batm37UJ67dGc6akREhAYMGKBGjRqpRYsWevrpp3Xr1i2dOnVKCQkJunbtmn777TfLMf/617/UsmVLjR49Wlu3blXt2rX166+/KiYmRm3atNG6deuyPE6/fv20ePFiDR8+XNu2bZOHh4eOHDmizZs36+WXX86yem/RokW1aNEiderUSV27dlW9evVUp04dyy1ckpKSlJycrG3btj3QKqPNmjXT1KlTNW7cOB06dMgylXX48OG5Hjdz5kytWbNGPj4+qlSpkooXL67k5GRt3LjRsihXYGCg1TFVqlTRRx99pHfffVe+vr7q1KmTihYtqpiYGJ06dUoDBw5UgwYNbKr7lVde0bp16xQVFaWGDRvKz8/Pch/Vn3/+WU2bNs2yKvP9cHBwUEREhF577TV16NBB7du3V6VKlfT9999bRiqnTJnywI9jHtHOLUyav+TIaUGke129elVff/21ChUqlOsiadKd1W4TEhK0bNky7d27V02bNlXhwoW1a9cu7d27V46Ojho7dqxNj9u0aVMVKlRIn3/+uS5evGi5HjUoKEhly5bVhx9+qPj4eC1cuFBJSUl66aWXLLeyunjxot59990cFz8za9mypZYtW6auXbuqQ4cOio6OtsxC6Natm/bt26dZs2apbt26at68udzd3XXp0iX99ttv2rlzp3x9ffXVV1/Z9Hyy8/777+u3337TCy+8IHd3d5UoUUIHDhzQpk2bVL58+TzPNwBkh6AKAA/gueee05YtWzRx4kRt2bJFmzZtUtmyZeXn56d33nnH6p6R7u7ulkVaduzYoXPnzqls2bJ66qmnNHjw4Cyrdk6YMEGFChVSbGysEhISdOvWLXXp0uWhBlVJCgwMVM2aNTVjxgxt3bpVsbGxKlGihFxdXdWiRYssC6M8/fTT2rhxo8aMGaMtW7Zo586d8vLy0uLFi3Xu3Llsg2rV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\n",
    479       "text/plain": [
    480        "<Figure size 1008x288 with 1 Axes>"
    481       ]
    482      },
    483      "metadata": {},
    484      "output_type": "display_data"
    485     }
    486    ],
    487    "source": [
    488     "n = 50\n",
    489     "(tokens\n",
    490     " .iloc[:50]\n",
    491     " .plot\n",
    492     " .bar(figsize=(14, 4), title=f'Most frequent {n} of {len(tokens):,d} tokens'));"
    493    ]
    494   },
    495   {
    496    "cell_type": "markdown",
    497    "metadata": {
    498     "slideshow": {
    499      "slide_type": "slide"
    500     }
    501    },
    502    "source": [
    503     "## Document-Term Matrix with `CountVectorizer`"
    504    ]
    505   },
    506   {
    507    "cell_type": "markdown",
    508    "metadata": {},
    509    "source": [
    510     "The scikit-learn preprocessing module offers two tools to create a document-term matrix. The [CountVectorizer](http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html) uses binary or absolute counts to measure the term frequency tf(d, t) for each document d and token t.\n",
    511     "\n",
    512     "The [TfIDFVectorizer](https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html), in contrast, weighs the (absolute) term frequency by the inverse document frequency (idf). As a result, a term that appears in more documents will receive a lower weight than a token with the same frequency for a given document but lower frequency across all documents. \n",
    513     "\n",
    514     "The resulting tf-idf vectors for each document are normalized with respect to their absolute or squared totals (see the sklearn documentation for details). The tf-idf measure was originally used in information retrieval to rank search engine results and has subsequently proven useful for text classification or clustering."
    515    ]
    516   },
    517   {
    518    "cell_type": "markdown",
    519    "metadata": {},
    520    "source": [
    521     "Both tools use the same interface and perform tokenization and further optional preprocessing of a list of documents before vectorizing the text by generating token counts to populate the document-term matrix.\n",
    522     "\n",
    523     "Key parameters that affect the size of the vocabulary include:\n",
    524     "\n",
    525     "- `stop_words`: use a built-in or provide a list of (frequent) words to exclude\n",
    526     "- `ngram_range`: include n-grams in a range for n defined by a tuple of (nmin, nmax)\n",
    527     "- `lowercase`: convert characters accordingly (default is True)\n",
    528     "- `min_df `/ max_df: ignore words that appear in less / more (int) or a smaller / larger share of documents (if float [0.0,1.0])\n",
    529     "- `max_features`: limit number of tokens in vocabulary accordingly\n",
    530     "- `binary`: set non-zero counts to 1 True"
    531    ]
    532   },
    533   {
    534    "cell_type": "markdown",
    535    "metadata": {},
    536    "source": [
    537     "### Key parameters"
    538    ]
    539   },
    540   {
    541    "cell_type": "code",
    542    "execution_count": 21,
    543    "metadata": {
    544     "ExecuteTime": {
    545      "end_time": "2018-11-20T15:57:39.362331Z",
    546      "start_time": "2018-11-20T15:57:39.360293Z"
    547     },
    548     "scrolled": false,
    549     "slideshow": {
    550      "slide_type": "fragment"
    551     }
    552    },
    553    "outputs": [
    554     {
    555      "name": "stdout",
    556      "output_type": "stream",
    557      "text": [
    558       "Convert a collection of text documents to a matrix of token counts\n",
    559       "\n",
    560       "    This implementation produces a sparse representation of the counts using\n",
    561       "    scipy.sparse.csr_matrix.\n",
    562       "\n",
    563       "    If you do not provide an a-priori dictionary and you do not use an analyzer\n",
    564       "    that does some kind of feature selection then the number of features will\n",
    565       "    be equal to the vocabulary size found by analyzing the data.\n",
    566       "\n",
    567       "    Read more in the :ref:`User Guide <text_feature_extraction>`.\n",
    568       "\n",
    569       "    Parameters\n",
    570       "    ----------\n",
    571       "    input : string {'filename', 'file', 'content'}\n",
    572       "        If 'filename', the sequence passed as an argument to fit is\n",
    573       "        expected to be a list of filenames that need reading to fetch\n",
    574       "        the raw content to analyze.\n",
    575       "\n",
    576       "        If 'file', the sequence items must have a 'read' method (file-like\n",
    577       "        object) that is called to fetch the bytes in memory.\n",
    578       "\n",
    579       "        Otherwise the input is expected to be the sequence strings or\n",
    580       "        bytes items are expected to be analyzed directly.\n",
    581       "\n",
    582       "    encoding : string, 'utf-8' by default.\n",
    583       "        If bytes or files are given to analyze, this encoding is used to\n",
    584       "        decode.\n",
    585       "\n",
    586       "    decode_error : {'strict', 'ignore', 'replace'}\n",
    587       "        Instruction on what to do if a byte sequence is given to analyze that\n",
    588       "        contains characters not of the given `encoding`. By default, it is\n",
    589       "        'strict', meaning that a UnicodeDecodeError will be raised. Other\n",
    590       "        values are 'ignore' and 'replace'.\n",
    591       "\n",
    592       "    strip_accents : {'ascii', 'unicode', None}\n",
    593       "        Remove accents and perform other character normalization\n",
    594       "        during the preprocessing step.\n",
    595       "        'ascii' is a fast method that only works on characters that have\n",
    596       "        an direct ASCII mapping.\n",
    597       "        'unicode' is a slightly slower method that works on any characters.\n",
    598       "        None (default) does nothing.\n",
    599       "\n",
    600       "        Both 'ascii' and 'unicode' use NFKD normalization from\n",
    601       "        :func:`unicodedata.normalize`.\n",
    602       "\n",
    603       "    lowercase : boolean, True by default\n",
    604       "        Convert all characters to lowercase before tokenizing.\n",
    605       "\n",
    606       "    preprocessor : callable or None (default)\n",
    607       "        Override the preprocessing (string transformation) stage while\n",
    608       "        preserving the tokenizing and n-grams generation steps.\n",
    609       "\n",
    610       "    tokenizer : callable or None (default)\n",
    611       "        Override the string tokenization step while preserving the\n",
    612       "        preprocessing and n-grams generation steps.\n",
    613       "        Only applies if ``analyzer == 'word'``.\n",
    614       "\n",
    615       "    stop_words : string {'english'}, list, or None (default)\n",
    616       "        If 'english', a built-in stop word list for English is used.\n",
    617       "        There are several known issues with 'english' and you should\n",
    618       "        consider an alternative (see :ref:`stop_words`).\n",
    619       "\n",
    620       "        If a list, that list is assumed to contain stop words, all of which\n",
    621       "        will be removed from the resulting tokens.\n",
    622       "        Only applies if ``analyzer == 'word'``.\n",
    623       "\n",
    624       "        If None, no stop words will be used. max_df can be set to a value\n",
    625       "        in the range [0.7, 1.0) to automatically detect and filter stop\n",
    626       "        words based on intra corpus document frequency of terms.\n",
    627       "\n",
    628       "    token_pattern : string\n",
    629       "        Regular expression denoting what constitutes a \"token\", only used\n",
    630       "        if ``analyzer == 'word'``. The default regexp select tokens of 2\n",
    631       "        or more alphanumeric characters (punctuation is completely ignored\n",
    632       "        and always treated as a token separator).\n",
    633       "\n",
    634       "    ngram_range : tuple (min_n, max_n)\n",
    635       "        The lower and upper boundary of the range of n-values for different\n",
    636       "        n-grams to be extracted. All values of n such that min_n <= n <= max_n\n",
    637       "        will be used.\n",
    638       "\n",
    639       "    analyzer : string, {'word', 'char', 'char_wb'} or callable\n",
    640       "        Whether the feature should be made of word or character n-grams.\n",
    641       "        Option 'char_wb' creates character n-grams only from text inside\n",
    642       "        word boundaries; n-grams at the edges of words are padded with space.\n",
    643       "\n",
    644       "        If a callable is passed it is used to extract the sequence of features\n",
    645       "        out of the raw, unprocessed input.\n",
    646       "\n",
    647       "    max_df : float in range [0.0, 1.0] or int, default=1.0\n",
    648       "        When building the vocabulary ignore terms that have a document\n",
    649       "        frequency strictly higher than the given threshold (corpus-specific\n",
    650       "        stop words).\n",
    651       "        If float, the parameter represents a proportion of documents, integer\n",
    652       "        absolute counts.\n",
    653       "        This parameter is ignored if vocabulary is not None.\n",
    654       "\n",
    655       "    min_df : float in range [0.0, 1.0] or int, default=1\n",
    656       "        When building the vocabulary ignore terms that have a document\n",
    657       "        frequency strictly lower than the given threshold. This value is also\n",
    658       "        called cut-off in the literature.\n",
    659       "        If float, the parameter represents a proportion of documents, integer\n",
    660       "        absolute counts.\n",
    661       "        This parameter is ignored if vocabulary is not None.\n",
    662       "\n",
    663       "    max_features : int or None, default=None\n",
    664       "        If not None, build a vocabulary that only consider the top\n",
    665       "        max_features ordered by term frequency across the corpus.\n",
    666       "\n",
    667       "        This parameter is ignored if vocabulary is not None.\n",
    668       "\n",
    669       "    vocabulary : Mapping or iterable, optional\n",
    670       "        Either a Mapping (e.g., a dict) where keys are terms and values are\n",
    671       "        indices in the feature matrix, or an iterable over terms. If not\n",
    672       "        given, a vocabulary is determined from the input documents. Indices\n",
    673       "        in the mapping should not be repeated and should not have any gap\n",
    674       "        between 0 and the largest index.\n",
    675       "\n",
    676       "    binary : boolean, default=False\n",
    677       "        If True, all non zero counts are set to 1. This is useful for discrete\n",
    678       "        probabilistic models that model binary events rather than integer\n",
    679       "        counts.\n",
    680       "\n",
    681       "    dtype : type, optional\n",
    682       "        Type of the matrix returned by fit_transform() or transform().\n",
    683       "\n",
    684       "    Attributes\n",
    685       "    ----------\n",
    686       "    vocabulary_ : dict\n",
    687       "        A mapping of terms to feature indices.\n",
    688       "\n",
    689       "    stop_words_ : set\n",
    690       "        Terms that were ignored because they either:\n",
    691       "\n",
    692       "          - occurred in too many documents (`max_df`)\n",
    693       "          - occurred in too few documents (`min_df`)\n",
    694       "          - were cut off by feature selection (`max_features`).\n",
    695       "\n",
    696       "        This is only available if no vocabulary was given.\n",
    697       "\n",
    698       "    Examples\n",
    699       "    --------\n",
    700       "    >>> from sklearn.feature_extraction.text import CountVectorizer\n",
    701       "    >>> corpus = [\n",
    702       "    ...     'This is the first document.',\n",
    703       "    ...     'This document is the second document.',\n",
    704       "    ...     'And this is the third one.',\n",
    705       "    ...     'Is this the first document?',\n",
    706       "    ... ]\n",
    707       "    >>> vectorizer = CountVectorizer()\n",
    708       "    >>> X = vectorizer.fit_transform(corpus)\n",
    709       "    >>> print(vectorizer.get_feature_names())\n",
    710       "    ['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']\n",
    711       "    >>> print(X.toarray())  # doctest: +NORMALIZE_WHITESPACE\n",
    712       "    [[0 1 1 1 0 0 1 0 1]\n",
    713       "     [0 2 0 1 0 1 1 0 1]\n",
    714       "     [1 0 0 1 1 0 1 1 1]\n",
    715       "     [0 1 1 1 0 0 1 0 1]]\n",
    716       "\n",
    717       "    See also\n",
    718       "    --------\n",
    719       "    HashingVectorizer, TfidfVectorizer\n",
    720       "\n",
    721       "    Notes\n",
    722       "    -----\n",
    723       "    The ``stop_words_`` attribute can get large and increase the model size\n",
    724       "    when pickling. This attribute is provided only for introspection and can\n",
    725       "    be safely removed using delattr or set to None before pickling.\n",
    726       "    \n"
    727      ]
    728     }
    729    ],
    730    "source": [
    731     "print(CountVectorizer().__doc__)"
    732    ]
    733   },
    734   {
    735    "cell_type": "markdown",
    736    "metadata": {},
    737    "source": [
    738     "### Document Frequency Distribution"
    739    ]
    740   },
    741   {
    742    "cell_type": "code",
    743    "execution_count": 22,
    744    "metadata": {
    745     "ExecuteTime": {
    746      "end_time": "2018-11-24T18:52:47.934359Z",
    747      "start_time": "2018-11-24T18:52:47.183922Z"
    748     }
    749    },
    750    "outputs": [],
    751    "source": [
    752     "binary_vectorizer = CountVectorizer(max_df=1.0,\n",
    753     "                                    min_df=1,\n",
    754     "                                    binary=True)\n",
    755     "\n",
    756     "binary_dtm = binary_vectorizer.fit_transform(docs.body)"
    757    ]
    758   },
    759   {
    760    "cell_type": "code",
    761    "execution_count": 23,
    762    "metadata": {
    763     "ExecuteTime": {
    764      "end_time": "2018-11-24T18:52:47.939882Z",
    765      "start_time": "2018-11-24T18:52:47.936330Z"
    766     }
    767    },
    768    "outputs": [
    769     {
    770      "data": {
    771       "text/plain": [
    772        "<2225x29275 sparse matrix of type '<class 'numpy.int64'>'\n",
    773        "\twith 445870 stored elements in Compressed Sparse Row format>"
    774       ]
    775      },
    776      "execution_count": 23,
    777      "metadata": {},
    778      "output_type": "execute_result"
    779     }
    780    ],
    781    "source": [
    782     "binary_dtm"
    783    ]
    784   },
    785   {
    786    "cell_type": "code",
    787    "execution_count": 24,
    788    "metadata": {
    789     "ExecuteTime": {
    790      "end_time": "2018-11-24T18:52:47.949391Z",
    791      "start_time": "2018-11-24T18:52:47.941558Z"
    792     }
    793    },
    794    "outputs": [],
    795    "source": [
    796     "n_docs, n_tokens = binary_dtm.shape"
    797    ]
    798   },
    799   {
    800    "cell_type": "code",
    801    "execution_count": 25,
    802    "metadata": {
    803     "ExecuteTime": {
    804      "end_time": "2018-11-24T18:52:49.055433Z",
    805      "start_time": "2018-11-24T18:52:49.008016Z"
    806     }
    807    },
    808    "outputs": [],
    809    "source": [
    810     "tokens_dtm = binary_vectorizer.get_feature_names()"
    811    ]
    812   },
    813   {
    814    "cell_type": "markdown",
    815    "metadata": {},
    816    "source": [
    817     "#### CountVectorizer skips certain tokens by default"
    818    ]
    819   },
    820   {
    821    "cell_type": "code",
    822    "execution_count": 26,
    823    "metadata": {
    824     "ExecuteTime": {
    825      "end_time": "2018-11-24T18:52:51.971382Z",
    826      "start_time": "2018-11-24T18:52:51.770580Z"
    827     }
    828    },
    829    "outputs": [
    830     {
    831      "data": {
    832       "text/plain": [
    833        "Index(['!', '\"', '\"\"unconscionable,', '\"'I', '\"'Oh', '\"'We', '\"'You', '\"(When',\n",
    834        "       '\"...it', '\"100%',\n",
    835        "       ...\n",
    836        "       '£900m', '£910m).', '£93.6bn)', '£933m', '£947m', '£960m',\n",
    837        "       '£98)', '£99', '£9m', '£9m,'],\n",
    838        "      dtype='object', length=47927)"
    839       ]
    840      },
    841      "execution_count": 26,
    842      "metadata": {},
    843      "output_type": "execute_result"
    844     }
    845    ],
    846    "source": [
    847     "tokens.index.difference(pd.Index(tokens_dtm))"
    848    ]
    849   },
    850   {
    851    "cell_type": "markdown",
    852    "metadata": {},
    853    "source": [
    854     "#### Persist Result"
    855    ]
    856   },
    857   {
    858    "cell_type": "code",
    859    "execution_count": 27,
    860    "metadata": {
    861     "ExecuteTime": {
    862      "end_time": "2018-11-24T18:53:13.288849Z",
    863      "start_time": "2018-11-24T18:53:13.239281Z"
    864     }
    865    },
    866    "outputs": [],
    867    "source": [
    868     "dtm_path = Path('data/binary_dtm.npz')\n",
    869     "if not dtm_path.exists():\n",
    870     "    sparse.save_npz(dtm_path, binary_dtm)\n",
    871     "else:\n",
    872     "    binary_dtm = sparse.load_npz(dtm_path)"
    873    ]
    874   },
    875   {
    876    "cell_type": "code",
    877    "execution_count": 28,
    878    "metadata": {
    879     "ExecuteTime": {
    880      "end_time": "2018-11-24T18:53:32.082522Z",
    881      "start_time": "2018-11-24T18:53:32.047370Z"
    882     }
    883    },
    884    "outputs": [],
    885    "source": [
    886     "token_path = Path('data/tokens.csv')\n",
    887     "if not token_path.exists():\n",
    888     "    pd.Series(tokens_dtm).to_csv(token_path, index=False)\n",
    889     "else:\n",
    890     "    tokens = pd.read_csv(token_path, header=None, squeeze=True)"
    891    ]
    892   },
    893   {
    894    "cell_type": "code",
    895    "execution_count": 29,
    896    "metadata": {
    897     "ExecuteTime": {
    898      "end_time": "2018-11-24T18:53:32.539378Z",
    899      "start_time": "2018-11-24T18:53:32.529323Z"
    900     }
    901    },
    902    "outputs": [],
    903    "source": [
    904     "doc_freq = pd.Series(np.array(binary_dtm.sum(axis=0)).squeeze()).div(n_docs)\n",
    905     "max_unique_tokens = np.array(binary_dtm.sum(axis=1)).squeeze().max()"
    906    ]
    907   },
    908   {
    909    "cell_type": "markdown",
    910    "metadata": {},
    911    "source": [
    912     "### `min_df` vs `max_df`: Interactive Visualization"
    913    ]
    914   },
    915   {
    916    "cell_type": "markdown",
    917    "metadata": {},
    918    "source": [
    919     "The notebook contains an interactive visualization that explores the impact of the min_df and max_df settings on the size of the vocabulary. We read the articles into a DataFrame, set the CountVectorizer to produce binary flags and use all tokens, and call its .fit_transform() method to produce a document-term matrix:"
    920    ]
    921   },
    922   {
    923    "cell_type": "markdown",
    924    "metadata": {},
    925    "source": [
    926     "The visualization shows that requiring tokens to appear in at least 1%  and less than 50% of documents restricts the vocabulary to around 10% of the almost 30K tokens. \n",
    927     "This leaves a mode of slightly over 100 unique tokens per document (left panel), and the right panel shows the document frequency histogram for the remaining tokens."
    928    ]
    929   },
    930   {
    931    "cell_type": "code",
    932    "execution_count": 30,
    933    "metadata": {
    934     "ExecuteTime": {
    935      "end_time": "2018-11-24T18:53:35.859046Z",
    936      "start_time": "2018-11-24T18:53:34.349292Z"
    937     }
    938    },
    939    "outputs": [
    940     {
    941      "data": {
    942       "application/vnd.jupyter.widget-view+json": {
    943        "model_id": "1ca772d550d444189c6388ca5bbf9c0b",
    944        "version_major": 2,
    945        "version_minor": 0
    946       },
    947       "text/plain": [
    948        "interactive(children=(FloatRangeSlider(value=(0.0, 1.0), description='Doc. Freq.', layout=Layout(width='800px'…"
    949       ]
    950      },
    951      "metadata": {},
    952      "output_type": "display_data"
    953     }
    954    ],
    955    "source": [
    956     "df_range = FloatRangeSlider(value=[0.0, 1.0],\n",
    957     "                            min=0,\n",
    958     "                            max=1,\n",
    959     "                            step=0.0001,\n",
    960     "                            description='Doc. Freq.',\n",
    961     "                            disabled=False,\n",
    962     "                            continuous_update=True,\n",
    963     "                            orientation='horizontal',\n",
    964     "                            readout=True,\n",
    965     "                            readout_format='.1%',\n",
    966     "                            layout={'width': '800px'})\n",
    967     "\n",
    968     "@interact(df_range=df_range)\n",
    969     "def document_frequency_simulator(df_range):\n",
    970     "    min_df, max_df = df_range\n",
    971     "    keep = doc_freq.between(left=min_df, right=max_df)\n",
    972     "    left = keep.sum()\n",
    973     "\n",
    974     "    fig, axes = plt.subplots(ncols=2, figsize=(14, 6))\n",
    975     "\n",
    976     "    updated_dtm = binary_dtm.tocsc()[:, np.flatnonzero(keep)]\n",
    977     "    unique_tokens_per_doc = np.array(updated_dtm.sum(axis=1)).squeeze()\n",
    978     "    sns.distplot(unique_tokens_per_doc, ax=axes[0], kde=False, norm_hist=False)\n",
    979     "    axes[0].set_title('Unique Tokens per Doc')\n",
    980     "    axes[0].set_yscale('log')\n",
    981     "    axes[0].set_xlabel('# Unique Tokens')\n",
    982     "    axes[0].set_ylabel('# Documents (log scale)')\n",
    983     "    axes[0].set_xlim(0, max_unique_tokens)    \n",
    984     "    axes[0].yaxis.set_major_formatter(ScalarFormatter())\n",
    985     "\n",
    986     "    term_freq = pd.Series(np.array(updated_dtm.sum(axis=0)).squeeze())\n",
    987     "    sns.distplot(term_freq, ax=axes[1], kde=False, norm_hist=False)\n",
    988     "    axes[1].set_title('Document Frequency')\n",
    989     "    axes[1].set_ylabel('# Tokens')\n",
    990     "    axes[1].set_xlabel('# Documents')\n",
    991     "    axes[1].set_yscale('log')\n",
    992     "    axes[1].set_xlim(0, n_docs)\n",
    993     "    axes[1].yaxis.set_major_formatter(ScalarFormatter())\n",
    994     "\n",
    995     "    title = f'Document/Term Frequency Distribution | # Tokens: {left:,d} ({left/n_tokens:.2%})'\n",
    996     "    fig.suptitle(title, fontsize=14)\n",
    997     "    fig.tight_layout()\n",
    998     "    fig.subplots_adjust(top=.9)"
    999    ]
   1000   },
   1001   {
   1002    "cell_type": "markdown",
   1003    "metadata": {},
   1004    "source": [
   1005     "### Most similar documents"
   1006    ]
   1007   },
   1008   {
   1009    "cell_type": "markdown",
   1010    "metadata": {},
   1011    "source": [
   1012     "The CountVectorizer result lets us find the most similar documents using the `pdist()` function for pairwise distances provided by the `scipy.spatial.distance` module. \n",
   1013     "\n",
   1014     "It returns a  condensed distance matrix with entries corresponding to the upper triangle of a square matrix. \n",
   1015     "\n",
   1016     "We use `np.triu_indices()` to translate the index that minimizes the distance to the row and column indices that in turn correspond to the closest token vectors. "
   1017    ]
   1018   },
   1019   {
   1020    "cell_type": "code",
   1021    "execution_count": 84,
   1022    "metadata": {
   1023     "ExecuteTime": {
   1024      "end_time": "2018-11-20T17:32:49.333518Z",
   1025      "start_time": "2018-11-20T17:32:12.587301Z"
   1026     }
   1027    },
   1028    "outputs": [],
   1029    "source": [
   1030     "m = binary_dtm.todense()\n",
   1031     "pairwise_distances = pdist(m, metric='cosine')"
   1032    ]
   1033   },
   1034   {
   1035    "cell_type": "code",
   1036    "execution_count": 86,
   1037    "metadata": {
   1038     "ExecuteTime": {
   1039      "end_time": "2018-11-20T17:34:07.184576Z",
   1040      "start_time": "2018-11-20T17:34:07.180425Z"
   1041     }
   1042    },
   1043    "outputs": [],
   1044    "source": [
   1045     "closest = np.argmin(pairwise_distances)"
   1046    ]
   1047   },
   1048   {
   1049    "cell_type": "code",
   1050    "execution_count": 91,
   1051    "metadata": {
   1052     "ExecuteTime": {
   1053      "end_time": "2018-11-20T17:35:56.681409Z",
   1054      "start_time": "2018-11-20T17:35:56.636021Z"
   1055     }
   1056    },
   1057    "outputs": [
   1058     {
   1059      "data": {
   1060       "text/plain": [
   1061        "(11, 75)"
   1062       ]
   1063      },
   1064      "execution_count": 91,
   1065      "metadata": {},
   1066      "output_type": "execute_result"
   1067     }
   1068    ],
   1069    "source": [
   1070     "rows, cols = np.triu_indices(n_docs)\n",
   1071     "rows[closest], cols[closest]"
   1072    ]
   1073   },
   1074   {
   1075    "cell_type": "code",
   1076    "execution_count": 125,
   1077    "metadata": {
   1078     "ExecuteTime": {
   1079      "end_time": "2018-11-20T19:19:35.960445Z",
   1080      "start_time": "2018-11-20T19:19:35.949452Z"
   1081     }
   1082    },
   1083    "outputs": [],
   1084    "source": [
   1085     "docs.iloc[11].to_frame(11).join(docs.iloc[75].to_frame(75)).to_csv('data/most_similar.csv')"
   1086    ]
   1087   },
   1088   {
   1089    "cell_type": "code",
   1090    "execution_count": 113,
   1091    "metadata": {
   1092     "ExecuteTime": {
   1093      "end_time": "2018-11-20T17:44:51.872870Z",
   1094      "start_time": "2018-11-20T17:44:51.867311Z"
   1095     }
   1096    },
   1097    "outputs": [
   1098     {
   1099      "data": {
   1100       "text/plain": [
   1101        "topic                                                   tech\n",
   1102        "heading                     BT program to beat dialler scams\n",
   1103        "body        BT is introducing two initiatives to help bea...\n",
   1104        "Name: 75, dtype: object"
   1105       ]
   1106      },
   1107      "execution_count": 113,
   1108      "metadata": {},
   1109      "output_type": "execute_result"
   1110     }
   1111    ],
   1112    "source": [
   1113     "docs.iloc[75]"
   1114    ]
   1115   },
   1116   {
   1117    "cell_type": "code",
   1118    "execution_count": 114,
   1119    "metadata": {
   1120     "ExecuteTime": {
   1121      "end_time": "2018-11-20T17:45:01.657240Z",
   1122      "start_time": "2018-11-20T17:45:01.651280Z"
   1123     }
   1124    },
   1125    "outputs": [
   1126     {
   1127      "data": {
   1128       "text/plain": [
   1129        "0    28873\n",
   1130        "1      344\n",
   1131        "2       58\n",
   1132        "dtype: int64"
   1133       ]
   1134      },
   1135      "execution_count": 114,
   1136      "metadata": {},
   1137      "output_type": "execute_result"
   1138     }
   1139    ],
   1140    "source": [
   1141     "pd.DataFrame(binary_dtm[[11,75], :].todense()).sum(0).value_counts()"
   1142    ]
   1143   },
   1144   {
   1145    "cell_type": "markdown",
   1146    "metadata": {
   1147     "slideshow": {
   1148      "slide_type": "slide"
   1149     }
   1150    },
   1151    "source": [
   1152     "### Baseline document-term matrix"
   1153    ]
   1154   },
   1155   {
   1156    "cell_type": "code",
   1157    "execution_count": 21,
   1158    "metadata": {
   1159     "ExecuteTime": {
   1160      "end_time": "2018-11-20T15:57:41.142584Z",
   1161      "start_time": "2018-11-20T15:57:40.747411Z"
   1162     },
   1163     "slideshow": {
   1164      "slide_type": "fragment"
   1165     }
   1166    },
   1167    "outputs": [
   1168     {
   1169      "data": {
   1170       "text/plain": [
   1171        "<2225x29275 sparse matrix of type '<class 'numpy.int64'>'\n",
   1172        "\twith 445870 stored elements in Compressed Sparse Row format>"
   1173       ]
   1174      },
   1175      "execution_count": 21,
   1176      "metadata": {},
   1177      "output_type": "execute_result"
   1178     }
   1179    ],
   1180    "source": [
   1181     "# Baseline: number of unique tokens\n",
   1182     "vectorizer = CountVectorizer() # default: binary=False\n",
   1183     "doc_term_matrix = vectorizer.fit_transform(docs.body)\n",
   1184     "doc_term_matrix"
   1185    ]
   1186   },
   1187   {
   1188    "cell_type": "code",
   1189    "execution_count": 22,
   1190    "metadata": {
   1191     "ExecuteTime": {
   1192      "end_time": "2018-11-20T15:57:41.146307Z",
   1193      "start_time": "2018-11-20T15:57:41.143506Z"
   1194     },
   1195     "slideshow": {
   1196      "slide_type": "fragment"
   1197     }
   1198    },
   1199    "outputs": [
   1200     {
   1201      "data": {
   1202       "text/plain": [
   1203        "(2225, 29275)"
   1204       ]
   1205      },
   1206      "execution_count": 22,
   1207      "metadata": {},
   1208      "output_type": "execute_result"
   1209     }
   1210    ],
   1211    "source": [
   1212     "doc_term_matrix.shape"
   1213    ]
   1214   },
   1215   {
   1216    "cell_type": "markdown",
   1217    "metadata": {
   1218     "slideshow": {
   1219      "slide_type": "slide"
   1220     }
   1221    },
   1222    "source": [
   1223     "### Inspect tokens"
   1224    ]
   1225   },
   1226   {
   1227    "cell_type": "code",
   1228    "execution_count": 23,
   1229    "metadata": {
   1230     "ExecuteTime": {
   1231      "end_time": "2018-11-20T15:57:41.174891Z",
   1232      "start_time": "2018-11-20T15:57:41.147274Z"
   1233     },
   1234     "slideshow": {
   1235      "slide_type": "fragment"
   1236     }
   1237    },
   1238    "outputs": [
   1239     {
   1240      "data": {
   1241       "text/plain": [
   1242        "['00',\n",
   1243        " '000',\n",
   1244        " '0001',\n",
   1245        " '000bn',\n",
   1246        " '000m',\n",
   1247        " '000s',\n",
   1248        " '000th',\n",
   1249        " '001',\n",
   1250        " '001and',\n",
   1251        " '001st']"
   1252       ]
   1253      },
   1254      "execution_count": 23,
   1255      "metadata": {},
   1256      "output_type": "execute_result"
   1257     }
   1258    ],
   1259    "source": [
   1260     "# vectorizer keeps words\n",
   1261     "words = vectorizer.get_feature_names()\n",
   1262     "words[:10]"
   1263    ]
   1264   },
   1265   {
   1266    "cell_type": "markdown",
   1267    "metadata": {
   1268     "slideshow": {
   1269      "slide_type": "slide"
   1270     }
   1271    },
   1272    "source": [
   1273     "### Inspect doc-term matrix"
   1274    ]
   1275   },
   1276   {
   1277    "cell_type": "code",
   1278    "execution_count": 24,
   1279    "metadata": {
   1280     "ExecuteTime": {
   1281      "end_time": "2018-11-20T15:57:51.015345Z",
   1282      "start_time": "2018-11-20T15:57:41.175853Z"
   1283     },
   1284     "slideshow": {
   1285      "slide_type": "fragment"
   1286     }
   1287    },
   1288    "outputs": [
   1289     {
   1290      "data": {
   1291       "text/html": [
   1292        "<div>\n",
   1293        "<style scoped>\n",
   1294        "    .dataframe tbody tr th:only-of-type {\n",
   1295        "        vertical-align: middle;\n",
   1296        "    }\n",
   1297        "\n",
   1298        "    .dataframe tbody tr th {\n",
   1299        "        vertical-align: top;\n",
   1300        "    }\n",
   1301        "\n",
   1302        "    .dataframe thead th {\n",
   1303        "        text-align: right;\n",
   1304        "    }\n",
   1305        "</style>\n",
   1306        "<table border=\"1\" class=\"dataframe\">\n",
   1307        "  <thead>\n",
   1308        "    <tr style=\"text-align: right;\">\n",
   1309        "      <th></th>\n",
   1310        "      <th>00</th>\n",
   1311        "      <th>000</th>\n",
   1312        "      <th>0001</th>\n",
   1313        "      <th>000bn</th>\n",
   1314        "      <th>000m</th>\n",
   1315        "      <th>000s</th>\n",
   1316        "      <th>000th</th>\n",
   1317        "      <th>001</th>\n",
   1318        "      <th>001and</th>\n",
   1319        "      <th>001st</th>\n",
   1320        "      <th>...</th>\n",
   1321        "      <th>zooms</th>\n",
   1322        "      <th>zooropa</th>\n",
   1323        "      <th>zornotza</th>\n",
   1324        "      <th>zorro</th>\n",
   1325        "      <th>zubair</th>\n",
   1326        "      <th>zuluaga</th>\n",
   1327        "      <th>zurich</th>\n",
   1328        "      <th>zutons</th>\n",
   1329        "      <th>zvonareva</th>\n",
   1330        "      <th>zvyagintsev</th>\n",
   1331        "    </tr>\n",
   1332        "  </thead>\n",
   1333        "  <tbody>\n",
   1334        "    <tr>\n",
   1335        "      <th>0</th>\n",
   1336        "      <td>nan</td>\n",
   1337        "      <td>1.00</td>\n",
   1338        "      <td>nan</td>\n",
   1339        "      <td>nan</td>\n",
   1340        "      <td>nan</td>\n",
   1341        "      <td>nan</td>\n",
   1342        "      <td>nan</td>\n",
   1343        "      <td>nan</td>\n",
   1344        "      <td>nan</td>\n",
   1345        "      <td>nan</td>\n",
   1346        "      <td>...</td>\n",
   1347        "      <td>nan</td>\n",
   1348        "      <td>nan</td>\n",
   1349        "      <td>nan</td>\n",
   1350        "      <td>nan</td>\n",
   1351        "      <td>nan</td>\n",
   1352        "      <td>nan</td>\n",
   1353        "      <td>nan</td>\n",
   1354        "      <td>nan</td>\n",
   1355        "      <td>nan</td>\n",
   1356        "      <td>nan</td>\n",
   1357        "    </tr>\n",
   1358        "    <tr>\n",
   1359        "      <th>1</th>\n",
   1360        "      <td>nan</td>\n",
   1361        "      <td>1.00</td>\n",
   1362        "      <td>nan</td>\n",
   1363        "      <td>nan</td>\n",
   1364        "      <td>nan</td>\n",
   1365        "      <td>nan</td>\n",
   1366        "      <td>nan</td>\n",
   1367        "      <td>nan</td>\n",
   1368        "      <td>nan</td>\n",
   1369        "      <td>nan</td>\n",
   1370        "      <td>...</td>\n",
   1371        "      <td>nan</td>\n",
   1372        "      <td>nan</td>\n",
   1373        "      <td>nan</td>\n",
   1374        "      <td>nan</td>\n",
   1375        "      <td>nan</td>\n",
   1376        "      <td>nan</td>\n",
   1377        "      <td>nan</td>\n",
   1378        "      <td>nan</td>\n",
   1379        "      <td>nan</td>\n",
   1380        "      <td>nan</td>\n",
   1381        "    </tr>\n",
   1382        "    <tr>\n",
   1383        "      <th>2</th>\n",
   1384        "      <td>nan</td>\n",
   1385        "      <td>nan</td>\n",
   1386        "      <td>nan</td>\n",
   1387        "      <td>nan</td>\n",
   1388        "      <td>nan</td>\n",
   1389        "      <td>nan</td>\n",
   1390        "      <td>nan</td>\n",
   1391        "      <td>nan</td>\n",
   1392        "      <td>nan</td>\n",
   1393        "      <td>nan</td>\n",
   1394        "      <td>...</td>\n",
   1395        "      <td>1.00</td>\n",
   1396        "      <td>nan</td>\n",
   1397        "      <td>nan</td>\n",
   1398        "      <td>nan</td>\n",
   1399        "      <td>nan</td>\n",
   1400        "      <td>nan</td>\n",
   1401        "      <td>nan</td>\n",
   1402        "      <td>nan</td>\n",
   1403        "      <td>nan</td>\n",
   1404        "      <td>nan</td>\n",
   1405        "    </tr>\n",
   1406        "    <tr>\n",
   1407        "      <th>3</th>\n",
   1408        "      <td>nan</td>\n",
   1409        "      <td>nan</td>\n",
   1410        "      <td>nan</td>\n",
   1411        "      <td>nan</td>\n",
   1412        "      <td>nan</td>\n",
   1413        "      <td>nan</td>\n",
   1414        "      <td>nan</td>\n",
   1415        "      <td>nan</td>\n",
   1416        "      <td>nan</td>\n",
   1417        "      <td>nan</td>\n",
   1418        "      <td>...</td>\n",
   1419        "      <td>nan</td>\n",
   1420        "      <td>nan</td>\n",
   1421        "      <td>nan</td>\n",
   1422        "      <td>nan</td>\n",
   1423        "      <td>nan</td>\n",
   1424        "      <td>nan</td>\n",
   1425        "      <td>nan</td>\n",
   1426        "      <td>nan</td>\n",
   1427        "      <td>nan</td>\n",
   1428        "      <td>nan</td>\n",
   1429        "    </tr>\n",
   1430        "    <tr>\n",
   1431        "      <th>4</th>\n",
   1432        "      <td>nan</td>\n",
   1433        "      <td>nan</td>\n",
   1434        "      <td>nan</td>\n",
   1435        "      <td>nan</td>\n",
   1436        "      <td>nan</td>\n",
   1437        "      <td>nan</td>\n",
   1438        "      <td>nan</td>\n",
   1439        "      <td>nan</td>\n",
   1440        "      <td>nan</td>\n",
   1441        "      <td>nan</td>\n",
   1442        "      <td>...</td>\n",
   1443        "      <td>nan</td>\n",
   1444        "      <td>nan</td>\n",
   1445        "      <td>nan</td>\n",
   1446        "      <td>nan</td>\n",
   1447        "      <td>nan</td>\n",
   1448        "      <td>nan</td>\n",
   1449        "      <td>nan</td>\n",
   1450        "      <td>nan</td>\n",
   1451        "      <td>nan</td>\n",
   1452        "      <td>nan</td>\n",
   1453        "    </tr>\n",
   1454        "  </tbody>\n",
   1455        "</table>\n",
   1456        "<p>5 rows × 29275 columns</p>\n",
   1457        "</div>"
   1458       ],
   1459       "text/plain": [
   1460        "   00  000  0001  000bn  000m  000s  000th  001  001and  001st     ...       \\\n",
   1461        "0 nan 1.00   nan    nan   nan   nan    nan  nan     nan    nan     ...        \n",
   1462        "1 nan 1.00   nan    nan   nan   nan    nan  nan     nan    nan     ...        \n",
   1463        "2 nan  nan   nan    nan   nan   nan    nan  nan     nan    nan     ...        \n",
   1464        "3 nan  nan   nan    nan   nan   nan    nan  nan     nan    nan     ...        \n",
   1465        "4 nan  nan   nan    nan   nan   nan    nan  nan     nan    nan     ...        \n",
   1466        "\n",
   1467        "   zooms  zooropa  zornotza  zorro  zubair  zuluaga  zurich  zutons  \\\n",
   1468        "0    nan      nan       nan    nan     nan      nan     nan     nan   \n",
   1469        "1    nan      nan       nan    nan     nan      nan     nan     nan   \n",
   1470        "2   1.00      nan       nan    nan     nan      nan     nan     nan   \n",
   1471        "3    nan      nan       nan    nan     nan      nan     nan     nan   \n",
   1472        "4    nan      nan       nan    nan     nan      nan     nan     nan   \n",
   1473        "\n",
   1474        "   zvonareva  zvyagintsev  \n",
   1475        "0        nan          nan  \n",
   1476        "1        nan          nan  \n",
   1477        "2        nan          nan  \n",
   1478        "3        nan          nan  \n",
   1479        "4        nan          nan  \n",
   1480        "\n",
   1481        "[5 rows x 29275 columns]"
   1482       ]
   1483      },
   1484      "execution_count": 24,
   1485      "metadata": {},
   1486      "output_type": "execute_result"
   1487     }
   1488    ],
   1489    "source": [
   1490     "# from scipy compressed sparse row matrix to sparse DataFrame\n",
   1491     "doc_term_matrix_df = pd.SparseDataFrame(doc_term_matrix, columns=words)\n",
   1492     "doc_term_matrix_df.head()"
   1493    ]
   1494   },
   1495   {
   1496    "cell_type": "markdown",
   1497    "metadata": {
   1498     "slideshow": {
   1499      "slide_type": "slide"
   1500     }
   1501    },
   1502    "source": [
   1503     "### Most frequent terms"
   1504    ]
   1505   },
   1506   {
   1507    "cell_type": "code",
   1508    "execution_count": 25,
   1509    "metadata": {
   1510     "ExecuteTime": {
   1511      "end_time": "2018-11-20T15:57:52.465747Z",
   1512      "start_time": "2018-11-20T15:57:51.016520Z"
   1513     },
   1514     "slideshow": {
   1515      "slide_type": "fragment"
   1516     }
   1517    },
   1518    "outputs": [
   1519     {
   1520      "data": {
   1521       "text/plain": [
   1522        "the    52574\n",
   1523        "to     24767\n",
   1524        "of     19930\n",
   1525        "and    18574\n",
   1526        "in     17553\n",
   1527        "dtype: int64"
   1528       ]
   1529      },
   1530      "execution_count": 25,
   1531      "metadata": {},
   1532      "output_type": "execute_result"
   1533     }
   1534    ],
   1535    "source": [
   1536     "word_freq = doc_term_matrix_df.sum(axis=0).astype(int)\n",
   1537     "word_freq.sort_values(ascending=False).head() "
   1538    ]
   1539   },
   1540   {
   1541    "cell_type": "markdown",
   1542    "metadata": {
   1543     "slideshow": {
   1544      "slide_type": "slide"
   1545     }
   1546    },
   1547    "source": [
   1548     "### Compute relative term frequency"
   1549    ]
   1550   },
   1551   {
   1552    "cell_type": "code",
   1553    "execution_count": 27,
   1554    "metadata": {
   1555     "ExecuteTime": {
   1556      "end_time": "2018-11-20T16:24:12.882068Z",
   1557      "start_time": "2018-11-20T16:24:12.466336Z"
   1558     },
   1559     "slideshow": {
   1560      "slide_type": "fragment"
   1561     }
   1562    },
   1563    "outputs": [
   1564     {
   1565      "data": {
   1566       "text/plain": [
   1567        "(2225, 29275)"
   1568       ]
   1569      },
   1570      "execution_count": 27,
   1571      "metadata": {},
   1572      "output_type": "execute_result"
   1573     }
   1574    ],
   1575    "source": [
   1576     "vectorizer = CountVectorizer(binary=True)\n",
   1577     "doc_term_matrix = vectorizer.fit_transform(docs.body)\n",
   1578     "doc_term_matrix.shape"
   1579    ]
   1580   },
   1581   {
   1582    "cell_type": "code",
   1583    "execution_count": 28,
   1584    "metadata": {
   1585     "ExecuteTime": {
   1586      "end_time": "2018-11-20T16:24:12.909035Z",
   1587      "start_time": "2018-11-20T16:24:12.883593Z"
   1588     },
   1589     "slideshow": {
   1590      "slide_type": "slide"
   1591     }
   1592    },
   1593    "outputs": [
   1594     {
   1595      "data": {
   1596       "text/plain": [
   1597        "the    1.00\n",
   1598        "to     1.00\n",
   1599        "of     0.99\n",
   1600        "and    0.99\n",
   1601        "in     0.99\n",
   1602        "for    0.93\n",
   1603        "on     0.91\n",
   1604        "is     0.86\n",
   1605        "it     0.86\n",
   1606        "said   0.85\n",
   1607        "dtype: float64"
   1608       ]
   1609      },
   1610      "execution_count": 28,
   1611      "metadata": {},
   1612      "output_type": "execute_result"
   1613     }
   1614    ],
   1615    "source": [
   1616     "words = vectorizer.get_feature_names()\n",
   1617     "word_freq = doc_term_matrix.sum(axis=0)\n",
   1618     "\n",
   1619     "# reduce to 1D array\n",
   1620     "word_freq_1d = np.squeeze(np.asarray(word_freq))\n",
   1621     "\n",
   1622     "pd.Series(word_freq_1d, index=words).div(\n",
   1623     "    docs.shape[0]).sort_values(ascending=False).head(10)"
   1624    ]
   1625   },
   1626   {
   1627    "cell_type": "markdown",
   1628    "metadata": {
   1629     "slideshow": {
   1630      "slide_type": "slide"
   1631     }
   1632    },
   1633    "source": [
   1634     "### Visualize Doc-Term Matrix"
   1635    ]
   1636   },
   1637   {
   1638    "cell_type": "code",
   1639    "execution_count": 29,
   1640    "metadata": {
   1641     "ExecuteTime": {
   1642      "end_time": "2018-11-20T16:25:13.950705Z",
   1643      "start_time": "2018-11-20T16:24:12.910252Z"
   1644     },
   1645     "slideshow": {
   1646      "slide_type": "fragment"
   1647     }
   1648    },
   1649    "outputs": [
   1650     {
   1651      "data": {
   1652       "image/png": "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\n",
   1653       "text/plain": [
   1654        "<Figure size 1008x576 with 2 Axes>"
   1655       ]
   1656      },
   1657      "metadata": {},
   1658      "output_type": "display_data"
   1659     }
   1660    ],
   1661    "source": [
   1662     "sns.heatmap(pd.DataFrame(doc_term_matrix.todense(), columns=words), cmap='Blues')\n",
   1663     "plt.gcf().set_size_inches(14, 8);"
   1664    ]
   1665   },
   1666   {
   1667    "cell_type": "markdown",
   1668    "metadata": {
   1669     "slideshow": {
   1670      "slide_type": "slide"
   1671     }
   1672    },
   1673    "source": [
   1674     "### Using thresholds to reduce the number of tokens "
   1675    ]
   1676   },
   1677   {
   1678    "cell_type": "code",
   1679    "execution_count": 42,
   1680    "metadata": {
   1681     "ExecuteTime": {
   1682      "end_time": "2018-11-20T17:01:04.862550Z",
   1683      "start_time": "2018-11-20T17:01:04.478818Z"
   1684     },
   1685     "slideshow": {
   1686      "slide_type": "fragment"
   1687     }
   1688    },
   1689    "outputs": [
   1690     {
   1691      "data": {
   1692       "text/plain": [
   1693        "(2225, 12789)"
   1694       ]
   1695      },
   1696      "execution_count": 42,
   1697      "metadata": {},
   1698      "output_type": "execute_result"
   1699     }
   1700    ],
   1701    "source": [
   1702     "vectorizer = CountVectorizer(max_df=.2, min_df=3, stop_words='english')\n",
   1703     "doc_term_matrix = vectorizer.fit_transform(docs.body)\n",
   1704     "doc_term_matrix.shape"
   1705    ]
   1706   },
   1707   {
   1708    "cell_type": "markdown",
   1709    "metadata": {
   1710     "slideshow": {
   1711      "slide_type": "slide"
   1712     }
   1713    },
   1714    "source": [
   1715     "### Use CountVectorizer with Lemmatization"
   1716    ]
   1717   },
   1718   {
   1719    "cell_type": "markdown",
   1720    "metadata": {
   1721     "slideshow": {
   1722      "slide_type": "fragment"
   1723     }
   1724    },
   1725    "source": [
   1726     "#### Building a custom `tokenizer` for Lemmatization with `spacy`"
   1727    ]
   1728   },
   1729   {
   1730    "cell_type": "code",
   1731    "execution_count": null,
   1732    "metadata": {
   1733     "ExecuteTime": {
   1734      "end_time": "2018-11-20T16:25:22.203881Z",
   1735      "start_time": "2018-11-20T16:25:22.195Z"
   1736     },
   1737     "slideshow": {
   1738      "slide_type": "fragment"
   1739     }
   1740    },
   1741    "outputs": [],
   1742    "source": [
   1743     "nlp = spacy.load('en')\n",
   1744     "def tokenizer(doc):\n",
   1745     "    return [w.lemma_ for w in nlp(doc) \n",
   1746     "                if not w.is_punct | w.is_space]"
   1747    ]
   1748   },
   1749   {
   1750    "cell_type": "code",
   1751    "execution_count": null,
   1752    "metadata": {
   1753     "ExecuteTime": {
   1754      "end_time": "2018-11-20T16:25:22.204568Z",
   1755      "start_time": "2018-11-20T16:25:22.197Z"
   1756     },
   1757     "run_control": {
   1758      "marked": false
   1759     },
   1760     "slideshow": {
   1761      "slide_type": "slide"
   1762     }
   1763    },
   1764    "outputs": [],
   1765    "source": [
   1766     "vectorizer = CountVectorizer(tokenizer=tokenizer, binary=True)\n",
   1767     "doc_term_matrix = vectorizer.fit_transform(docs.body)\n",
   1768     "doc_term_matrix.shape"
   1769    ]
   1770   },
   1771   {
   1772    "cell_type": "code",
   1773    "execution_count": null,
   1774    "metadata": {
   1775     "ExecuteTime": {
   1776      "end_time": "2018-11-20T16:25:22.205391Z",
   1777      "start_time": "2018-11-20T16:25:22.199Z"
   1778     },
   1779     "slideshow": {
   1780      "slide_type": "fragment"
   1781     }
   1782    },
   1783    "outputs": [],
   1784    "source": [
   1785     "lemmatized_words = vectorizer.get_feature_names()\n",
   1786     "word_freq = doc_term_matrix.sum(axis=0)\n",
   1787     "word_freq_1d = np.squeeze(np.asarray(word_freq))\n",
   1788     "word_freq_1d = pd.Series(word_freq_1d, index=lemmatized_words).div(docs.shape[0])\n",
   1789     "word_freq_1d.sort_values().tail(20)"
   1790    ]
   1791   },
   1792   {
   1793    "cell_type": "markdown",
   1794    "metadata": {
   1795     "slideshow": {
   1796      "slide_type": "fragment"
   1797     }
   1798    },
   1799    "source": [
   1800     "Unlike verbs and common nouns, there's no clear base form of a personal pronoun. Should the lemma of \"me\" be \"I\", or should we normalize person as well, giving \"it\" — or maybe \"he\"? spaCy's solution is to introduce a novel symbol, -PRON-, which is used as the lemma for all personal pronouns."
   1801    ]
   1802   },
   1803   {
   1804    "cell_type": "markdown",
   1805    "metadata": {
   1806     "slideshow": {
   1807      "slide_type": "slide"
   1808     }
   1809    },
   1810    "source": [
   1811     "## Document-Term Matrix with `TfIDFVectorizer`"
   1812    ]
   1813   },
   1814   {
   1815    "cell_type": "markdown",
   1816    "metadata": {},
   1817    "source": [
   1818     "The TfIDFTransfomer computes the tf-idf weights from a document-term matrix of token counts like the one produced by the CountVectorizer. \n",
   1819     "\n",
   1820     "The TfIDFVectorizer performs both computations in a single step. It adds a few parameters to the CountVectorizer API that controls the smoothing behavior."
   1821    ]
   1822   },
   1823   {
   1824    "cell_type": "markdown",
   1825    "metadata": {},
   1826    "source": [
   1827     "### Key Parameters"
   1828    ]
   1829   },
   1830   {
   1831    "cell_type": "markdown",
   1832    "metadata": {},
   1833    "source": [
   1834     "The `TfIDFTransformer` builds on the `CountVectorizer` output; the `TfIDFVectorizer` integrates both"
   1835    ]
   1836   },
   1837   {
   1838    "cell_type": "code",
   1839    "execution_count": 43,
   1840    "metadata": {
   1841     "ExecuteTime": {
   1842      "end_time": "2018-11-21T14:12:51.219338Z",
   1843      "start_time": "2018-11-21T14:12:51.214216Z"
   1844     },
   1845     "slideshow": {
   1846      "slide_type": "fragment"
   1847     }
   1848    },
   1849    "outputs": [
   1850     {
   1851      "name": "stdout",
   1852      "output_type": "stream",
   1853      "text": [
   1854       "Transform a count matrix to a normalized tf or tf-idf representation\n",
   1855       "\n",
   1856       "    Tf means term-frequency while tf-idf means term-frequency times inverse\n",
   1857       "    document-frequency. This is a common term weighting scheme in information\n",
   1858       "    retrieval, that has also found good use in document classification.\n",
   1859       "\n",
   1860       "    The goal of using tf-idf instead of the raw frequencies of occurrence of a\n",
   1861       "    token in a given document is to scale down the impact of tokens that occur\n",
   1862       "    very frequently in a given corpus and that are hence empirically less\n",
   1863       "    informative than features that occur in a small fraction of the training\n",
   1864       "    corpus.\n",
   1865       "\n",
   1866       "    The formula that is used to compute the tf-idf of term t is\n",
   1867       "    tf-idf(d, t) = tf(t) * idf(d, t), and the idf is computed as\n",
   1868       "    idf(d, t) = log [ n / df(d, t) ] + 1 (if ``smooth_idf=False``),\n",
   1869       "    where n is the total number of documents and df(d, t) is the\n",
   1870       "    document frequency; the document frequency is the number of documents d\n",
   1871       "    that contain term t. The effect of adding \"1\" to the idf in the equation\n",
   1872       "    above is that terms with zero idf, i.e., terms  that occur in all documents\n",
   1873       "    in a training set, will not be entirely ignored.\n",
   1874       "    (Note that the idf formula above differs from the standard\n",
   1875       "    textbook notation that defines the idf as\n",
   1876       "    idf(d, t) = log [ n / (df(d, t) + 1) ]).\n",
   1877       "\n",
   1878       "    If ``smooth_idf=True`` (the default), the constant \"1\" is added to the\n",
   1879       "    numerator and denominator of the idf as if an extra document was seen\n",
   1880       "    containing every term in the collection exactly once, which prevents\n",
   1881       "    zero divisions: idf(d, t) = log [ (1 + n) / (1 + df(d, t)) ] + 1.\n",
   1882       "\n",
   1883       "    Furthermore, the formulas used to compute tf and idf depend\n",
   1884       "    on parameter settings that correspond to the SMART notation used in IR\n",
   1885       "    as follows:\n",
   1886       "\n",
   1887       "    Tf is \"n\" (natural) by default, \"l\" (logarithmic) when\n",
   1888       "    ``sublinear_tf=True``.\n",
   1889       "    Idf is \"t\" when use_idf is given, \"n\" (none) otherwise.\n",
   1890       "    Normalization is \"c\" (cosine) when ``norm='l2'``, \"n\" (none)\n",
   1891       "    when ``norm=None``.\n",
   1892       "\n",
   1893       "    Read more in the :ref:`User Guide <text_feature_extraction>`.\n",
   1894       "\n",
   1895       "    Parameters\n",
   1896       "    ----------\n",
   1897       "    norm : 'l1', 'l2' or None, optional\n",
   1898       "        Norm used to normalize term vectors. None for no normalization.\n",
   1899       "\n",
   1900       "    use_idf : boolean, default=True\n",
   1901       "        Enable inverse-document-frequency reweighting.\n",
   1902       "\n",
   1903       "    smooth_idf : boolean, default=True\n",
   1904       "        Smooth idf weights by adding one to document frequencies, as if an\n",
   1905       "        extra document was seen containing every term in the collection\n",
   1906       "        exactly once. Prevents zero divisions.\n",
   1907       "\n",
   1908       "    sublinear_tf : boolean, default=False\n",
   1909       "        Apply sublinear tf scaling, i.e. replace tf with 1 + log(tf).\n",
   1910       "\n",
   1911       "    Attributes\n",
   1912       "    ----------\n",
   1913       "    idf_ : array, shape (n_features)\n",
   1914       "        The inverse document frequency (IDF) vector; only defined\n",
   1915       "        if  ``use_idf`` is True.\n",
   1916       "\n",
   1917       "    References\n",
   1918       "    ----------\n",
   1919       "\n",
   1920       "    .. [Yates2011] `R. Baeza-Yates and B. Ribeiro-Neto (2011). Modern\n",
   1921       "                   Information Retrieval. Addison Wesley, pp. 68-74.`\n",
   1922       "\n",
   1923       "    .. [MRS2008] `C.D. Manning, P. Raghavan and H. Schütze  (2008).\n",
   1924       "                   Introduction to Information Retrieval. Cambridge University\n",
   1925       "                   Press, pp. 118-120.`\n",
   1926       "    \n"
   1927      ]
   1928     }
   1929    ],
   1930    "source": [
   1931     "print(TfidfTransformer().__doc__)"
   1932    ]
   1933   },
   1934   {
   1935    "cell_type": "markdown",
   1936    "metadata": {},
   1937    "source": [
   1938     "### How Term Frequency - Inverse Document Frequency works"
   1939    ]
   1940   },
   1941   {
   1942    "cell_type": "markdown",
   1943    "metadata": {},
   1944    "source": [
   1945     "The TFIDF computation works as follows for a small text sample"
   1946    ]
   1947   },
   1948   {
   1949    "cell_type": "code",
   1950    "execution_count": 7,
   1951    "metadata": {
   1952     "ExecuteTime": {
   1953      "end_time": "2018-11-26T03:42:13.337727Z",
   1954      "start_time": "2018-11-26T03:42:13.335666Z"
   1955     }
   1956    },
   1957    "outputs": [],
   1958    "source": [
   1959     "sample_docs = ['call you tomorrow', \n",
   1960     "                'Call me a taxi', \n",
   1961     "                'please call me... PLEASE!']"
   1962    ]
   1963   },
   1964   {
   1965    "cell_type": "markdown",
   1966    "metadata": {
   1967     "ExecuteTime": {
   1968      "end_time": "2018-11-21T14:05:08.089371Z",
   1969      "start_time": "2018-11-21T14:05:08.069616Z"
   1970     }
   1971    },
   1972    "source": [
   1973     "#### Compute term frequency"
   1974    ]
   1975   },
   1976   {
   1977    "cell_type": "code",
   1978    "execution_count": 8,
   1979    "metadata": {
   1980     "ExecuteTime": {
   1981      "end_time": "2018-11-26T03:42:13.897476Z",
   1982      "start_time": "2018-11-26T03:42:13.884041Z"
   1983     }
   1984    },
   1985    "outputs": [],
   1986    "source": [
   1987     "vectorizer = CountVectorizer()\n",
   1988     "tf_dtm = vectorizer.fit_transform(sample_docs).todense()\n",
   1989     "tokens = vectorizer.get_feature_names()"
   1990    ]
   1991   },
   1992   {
   1993    "cell_type": "code",
   1994    "execution_count": 9,
   1995    "metadata": {
   1996     "ExecuteTime": {
   1997      "end_time": "2018-11-26T03:42:15.256907Z",
   1998      "start_time": "2018-11-26T03:42:15.249285Z"
   1999     }
   2000    },
   2001    "outputs": [
   2002     {
   2003      "name": "stdout",
   2004      "output_type": "stream",
   2005      "text": [
   2006       "   call  me  please  taxi  tomorrow  you\n",
   2007       "0     1   0       0     0         1    1\n",
   2008       "1     1   1       0     1         0    0\n",
   2009       "2     1   1       2     0         0    0\n"
   2010      ]
   2011     }
   2012    ],
   2013    "source": [
   2014     "term_frequency = pd.DataFrame(data=tf_dtm, \n",
   2015     "                              columns=tokens)\n",
   2016     "print(term_frequency)"
   2017    ]
   2018   },
   2019   {
   2020    "cell_type": "markdown",
   2021    "metadata": {},
   2022    "source": [
   2023     "#### Compute document frequency"
   2024    ]
   2025   },
   2026   {
   2027    "cell_type": "code",
   2028    "execution_count": 10,
   2029    "metadata": {
   2030     "ExecuteTime": {
   2031      "end_time": "2018-11-26T03:45:03.866286Z",
   2032      "start_time": "2018-11-26T03:45:03.860510Z"
   2033     }
   2034    },
   2035    "outputs": [],
   2036    "source": [
   2037     "vectorizer = CountVectorizer(binary=True)\n",
   2038     "df_dtm = vectorizer.fit_transform(sample_docs).todense().sum(axis=0)"
   2039    ]
   2040   },
   2041   {
   2042    "cell_type": "code",
   2043    "execution_count": 12,
   2044    "metadata": {
   2045     "ExecuteTime": {
   2046      "end_time": "2018-11-26T03:45:10.146363Z",
   2047      "start_time": "2018-11-26T03:45:10.141058Z"
   2048     }
   2049    },
   2050    "outputs": [
   2051     {
   2052      "name": "stdout",
   2053      "output_type": "stream",
   2054      "text": [
   2055       "   call  me  please  taxi  tomorrow  you\n",
   2056       "0     3   2       1     1         1    1\n"
   2057      ]
   2058     }
   2059    ],
   2060    "source": [
   2061     "document_frequency = pd.DataFrame(data=df_dtm,\n",
   2062     "                                  columns=tokens)\n",
   2063     "print(document_frequency)"
   2064    ]
   2065   },
   2066   {
   2067    "cell_type": "markdown",
   2068    "metadata": {},
   2069    "source": [
   2070     "#### Compute TfIDF"
   2071    ]
   2072   },
   2073   {
   2074    "cell_type": "code",
   2075    "execution_count": 13,
   2076    "metadata": {
   2077     "ExecuteTime": {
   2078      "end_time": "2018-11-26T03:45:40.849454Z",
   2079      "start_time": "2018-11-26T03:45:40.835951Z"
   2080     }
   2081    },
   2082    "outputs": [
   2083     {
   2084      "name": "stdout",
   2085      "output_type": "stream",
   2086      "text": [
   2087       "   call   me  please  taxi  tomorrow  you\n",
   2088       "0  0.33 0.00    0.00  0.00      1.00 1.00\n",
   2089       "1  0.33 0.50    0.00  1.00      0.00 0.00\n",
   2090       "2  0.33 0.50    2.00  0.00      0.00 0.00\n"
   2091      ]
   2092     }
   2093    ],
   2094    "source": [
   2095     "tfidf = pd.DataFrame(data=tf_dtm/df_dtm, columns=tokens)\n",
   2096     "print(tfidf)"
   2097    ]
   2098   },
   2099   {
   2100    "cell_type": "markdown",
   2101    "metadata": {},
   2102    "source": [
   2103     "#### The effect of smoothing"
   2104    ]
   2105   },
   2106   {
   2107    "cell_type": "markdown",
   2108    "metadata": {
   2109     "ExecuteTime": {
   2110      "end_time": "2018-11-21T14:07:22.382406Z",
   2111      "start_time": "2018-11-21T14:07:22.373832Z"
   2112     }
   2113    },
   2114    "source": [
   2115     "The TfidfVectorizer uses smoothing for document and term frequencies:\n",
   2116     "- `smooth_idf`: add one to document frequency, as if an extra document contained every token in the vocabulary\n",
   2117     "     once to prevents zero divisions\n",
   2118     "- `sublinear_tf`: scale term Apply sublinear tf scaling, i.e. replace tf with 1 + log(tf)"
   2119    ]
   2120   },
   2121   {
   2122    "cell_type": "code",
   2123    "execution_count": 14,
   2124    "metadata": {
   2125     "ExecuteTime": {
   2126      "end_time": "2018-11-26T03:48:21.263198Z",
   2127      "start_time": "2018-11-26T03:48:21.247768Z"
   2128     }
   2129    },
   2130    "outputs": [
   2131     {
   2132      "name": "stdout",
   2133      "output_type": "stream",
   2134      "text": [
   2135       "   call   me  please  taxi  tomorrow  you\n",
   2136       "0  0.39 0.00    0.00  0.00      0.65 0.65\n",
   2137       "1  0.43 0.55    0.00  0.72      0.00 0.00\n",
   2138       "2  0.27 0.34    0.90  0.00      0.00 0.00\n"
   2139      ]
   2140     }
   2141    ],
   2142    "source": [
   2143     "vect = TfidfVectorizer(smooth_idf=True, \n",
   2144     "                       norm='l2',            # squared weights sum to 1 by document\n",
   2145     "                       sublinear_tf=False,   # if True, use 1+log(tf)\n",
   2146     "                       binary=False)\n",
   2147     "print(pd.DataFrame(vect.fit_transform(sample_docs).todense(), \n",
   2148     "             columns=vect.get_feature_names()))"
   2149    ]
   2150   },
   2151   {
   2152    "cell_type": "markdown",
   2153    "metadata": {
   2154     "ExecuteTime": {
   2155      "end_time": "2018-11-21T14:10:41.311223Z",
   2156      "start_time": "2018-11-21T14:10:41.298041Z"
   2157     }
   2158    },
   2159    "source": [
   2160     "### TfIDF with new articles"
   2161    ]
   2162   },
   2163   {
   2164    "cell_type": "markdown",
   2165    "metadata": {},
   2166    "source": [
   2167     "Due to their ability to assign meaningful token weights, TFIDF vectors are also used to summarize text data. E.g., reddit's autotldr function is based on a similar algorithm."
   2168    ]
   2169   },
   2170   {
   2171    "cell_type": "code",
   2172    "execution_count": 126,
   2173    "metadata": {
   2174     "ExecuteTime": {
   2175      "end_time": "2018-11-21T14:45:45.820056Z",
   2176      "start_time": "2018-11-21T14:45:45.408284Z"
   2177     },
   2178     "slideshow": {
   2179      "slide_type": "slide"
   2180     }
   2181    },
   2182    "outputs": [
   2183     {
   2184      "data": {
   2185       "text/plain": [
   2186        "(2225, 28980)"
   2187       ]
   2188      },
   2189      "execution_count": 126,
   2190      "metadata": {},
   2191      "output_type": "execute_result"
   2192     }
   2193    ],
   2194    "source": [
   2195     "tfidf = TfidfVectorizer(stop_words='english')\n",
   2196     "dtm_tfidf = tfidf.fit_transform(docs.body)\n",
   2197     "tokens = tfidf.get_feature_names()\n",
   2198     "dtm_tfidf.shape"
   2199    ]
   2200   },
   2201   {
   2202    "cell_type": "code",
   2203    "execution_count": 127,
   2204    "metadata": {
   2205     "ExecuteTime": {
   2206      "end_time": "2018-11-21T14:45:52.951449Z",
   2207      "start_time": "2018-11-21T14:45:52.933127Z"
   2208     },
   2209     "slideshow": {
   2210      "slide_type": "fragment"
   2211     }
   2212    },
   2213    "outputs": [],
   2214    "source": [
   2215     "token_freq = (pd.DataFrame({'tfidf': dtm_tfidf.sum(axis=0).A1,\n",
   2216     "                            'token': tokens})\n",
   2217     "              .sort_values('tfidf', ascending=False))"
   2218    ]
   2219   },
   2220   {
   2221    "cell_type": "code",
   2222    "execution_count": 128,
   2223    "metadata": {
   2224     "ExecuteTime": {
   2225      "end_time": "2018-11-21T14:45:53.527323Z",
   2226      "start_time": "2018-11-21T14:45:53.502932Z"
   2227     }
   2228    },
   2229    "outputs": [
   2230     {
   2231      "data": {
   2232       "text/html": [
   2233        "<div>\n",
   2234        "<style scoped>\n",
   2235        "    .dataframe tbody tr th:only-of-type {\n",
   2236        "        vertical-align: middle;\n",
   2237        "    }\n",
   2238        "\n",
   2239        "    .dataframe tbody tr th {\n",
   2240        "        vertical-align: top;\n",
   2241        "    }\n",
   2242        "\n",
   2243        "    .dataframe thead th {\n",
   2244        "        text-align: right;\n",
   2245        "    }\n",
   2246        "</style>\n",
   2247        "<table border=\"1\" class=\"dataframe\">\n",
   2248        "  <thead>\n",
   2249        "    <tr style=\"text-align: right;\">\n",
   2250        "      <th></th>\n",
   2251        "      <th>tfidf</th>\n",
   2252        "    </tr>\n",
   2253        "    <tr>\n",
   2254        "      <th>token</th>\n",
   2255        "      <th></th>\n",
   2256        "    </tr>\n",
   2257        "  </thead>\n",
   2258        "  <tbody>\n",
   2259        "    <tr>\n",
   2260        "      <th>said</th>\n",
   2261        "      <td>87.25</td>\n",
   2262        "    </tr>\n",
   2263        "    <tr>\n",
   2264        "      <th>mr</th>\n",
   2265        "      <td>58.22</td>\n",
   2266        "    </tr>\n",
   2267        "    <tr>\n",
   2268        "      <th>year</th>\n",
   2269        "      <td>41.98</td>\n",
   2270        "    </tr>\n",
   2271        "    <tr>\n",
   2272        "      <th>people</th>\n",
   2273        "      <td>37.30</td>\n",
   2274        "    </tr>\n",
   2275        "    <tr>\n",
   2276        "      <th>new</th>\n",
   2277        "      <td>34.20</td>\n",
   2278        "    </tr>\n",
   2279        "    <tr>\n",
   2280        "      <th>film</th>\n",
   2281        "      <td>29.73</td>\n",
   2282        "    </tr>\n",
   2283        "    <tr>\n",
   2284        "      <th>government</th>\n",
   2285        "      <td>28.79</td>\n",
   2286        "    </tr>\n",
   2287        "    <tr>\n",
   2288        "      <th>world</th>\n",
   2289        "      <td>27.03</td>\n",
   2290        "    </tr>\n",
   2291        "    <tr>\n",
   2292        "      <th>time</th>\n",
   2293        "      <td>26.36</td>\n",
   2294        "    </tr>\n",
   2295        "    <tr>\n",
   2296        "      <th>best</th>\n",
   2297        "      <td>26.30</td>\n",
   2298        "    </tr>\n",
   2299        "    <tr>\n",
   2300        "      <th>baked</th>\n",
   2301        "      <td>0.01</td>\n",
   2302        "    </tr>\n",
   2303        "    <tr>\n",
   2304        "      <th>pavlovian</th>\n",
   2305        "      <td>0.01</td>\n",
   2306        "    </tr>\n",
   2307        "    <tr>\n",
   2308        "      <th>buzzcocks</th>\n",
   2309        "      <td>0.01</td>\n",
   2310        "    </tr>\n",
   2311        "    <tr>\n",
   2312        "      <th>sisterhood</th>\n",
   2313        "      <td>0.01</td>\n",
   2314        "    </tr>\n",
   2315        "    <tr>\n",
   2316        "      <th>siouxsie</th>\n",
   2317        "      <td>0.01</td>\n",
   2318        "    </tr>\n",
   2319        "    <tr>\n",
   2320        "      <th>sioux</th>\n",
   2321        "      <td>0.01</td>\n",
   2322        "    </tr>\n",
   2323        "    <tr>\n",
   2324        "      <th>bane</th>\n",
   2325        "      <td>0.01</td>\n",
   2326        "    </tr>\n",
   2327        "    <tr>\n",
   2328        "      <th>biassed</th>\n",
   2329        "      <td>0.01</td>\n",
   2330        "    </tr>\n",
   2331        "    <tr>\n",
   2332        "      <th>duetted</th>\n",
   2333        "      <td>0.01</td>\n",
   2334        "    </tr>\n",
   2335        "    <tr>\n",
   2336        "      <th>speechless</th>\n",
   2337        "      <td>0.01</td>\n",
   2338        "    </tr>\n",
   2339        "  </tbody>\n",
   2340        "</table>\n",
   2341        "</div>"
   2342       ],
   2343       "text/plain": [
   2344        "            tfidf\n",
   2345        "token            \n",
   2346        "said        87.25\n",
   2347        "mr          58.22\n",
   2348        "year        41.98\n",
   2349        "people      37.30\n",
   2350        "new         34.20\n",
   2351        "film        29.73\n",
   2352        "government  28.79\n",
   2353        "world       27.03\n",
   2354        "time        26.36\n",
   2355        "best        26.30\n",
   2356        "baked        0.01\n",
   2357        "pavlovian    0.01\n",
   2358        "buzzcocks    0.01\n",
   2359        "sisterhood   0.01\n",
   2360        "siouxsie     0.01\n",
   2361        "sioux        0.01\n",
   2362        "bane         0.01\n",
   2363        "biassed      0.01\n",
   2364        "duetted      0.01\n",
   2365        "speechless   0.01"
   2366       ]
   2367      },
   2368      "execution_count": 128,
   2369      "metadata": {},
   2370      "output_type": "execute_result"
   2371     }
   2372    ],
   2373    "source": [
   2374     "token_freq.head(10).append(token_freq.tail(10)).set_index('token')"
   2375    ]
   2376   },
   2377   {
   2378    "cell_type": "markdown",
   2379    "metadata": {},
   2380    "source": [
   2381     "### Summarizing news articles using TfIDF weights"
   2382    ]
   2383   },
   2384   {
   2385    "cell_type": "markdown",
   2386    "metadata": {},
   2387    "source": [
   2388     "#### Select random article"
   2389    ]
   2390   },
   2391   {
   2392    "cell_type": "code",
   2393    "execution_count": 140,
   2394    "metadata": {
   2395     "ExecuteTime": {
   2396      "end_time": "2018-11-21T14:48:01.876361Z",
   2397      "start_time": "2018-11-21T14:48:01.867321Z"
   2398     }
   2399    },
   2400    "outputs": [],
   2401    "source": [
   2402     "article = docs.sample(1).squeeze()\n",
   2403     "article_id = article.name"
   2404    ]
   2405   },
   2406   {
   2407    "cell_type": "code",
   2408    "execution_count": 141,
   2409    "metadata": {
   2410     "ExecuteTime": {
   2411      "end_time": "2018-11-21T14:48:02.098264Z",
   2412      "start_time": "2018-11-21T14:48:02.092582Z"
   2413     },
   2414     "scrolled": true
   2415    },
   2416    "outputs": [
   2417     {
   2418      "name": "stdout",
   2419      "output_type": "stream",
   2420      "text": [
   2421       "Topic:\tPolitics\n",
   2422       "\n",
   2423       "MPs issued with Blackberry threat\n",
   2424       "\n",
   2425       "MPs will be thrown out of the Commons if they use Blackberries in the chamber Speaker Michael Martin has ruled.  The £200 handheld computers can be used as a phone, pager or to send e-mails. The devices gained new prominence this week after Alastair Campbell used his to accidentally send an expletive-laden message to a Newsnight journalist. Mr Martin revealed some MPs had been using their Blackberries during debates and he also cautioned members against using hidden earpieces.  The use of electronic devices in the Commons chamber has long been frowned on. The sound of a mobile phone or a pager can result in a strong rebuke from either the Speaker or his deputies. The Speaker chairs debates in the Commons and is charged with ensuring order in the chamber and enforcing rules and conventions of the House. He or she is always an MP chosen by colleagues who, once nominated, gives up all party political allegiances.\n"
   2426      ]
   2427     }
   2428    ],
   2429    "source": [
   2430     "print(f'Topic:\\t{article.topic.capitalize()}\\n\\n{article.heading}\\n')\n",
   2431     "print(article.body.strip())"
   2432    ]
   2433   },
   2434   {
   2435    "cell_type": "markdown",
   2436    "metadata": {},
   2437    "source": [
   2438     "#### Select most relevant tokens by tfidf value"
   2439    ]
   2440   },
   2441   {
   2442    "cell_type": "code",
   2443    "execution_count": 142,
   2444    "metadata": {
   2445     "ExecuteTime": {
   2446      "end_time": "2018-11-21T14:48:02.779436Z",
   2447      "start_time": "2018-11-21T14:48:02.755370Z"
   2448     }
   2449    },
   2450    "outputs": [
   2451     {
   2452      "data": {
   2453       "text/plain": [
   2454        "speaker        0.33\n",
   2455        "chamber        0.31\n",
   2456        "blackberries   0.27\n",
   2457        "pager          0.26\n",
   2458        "debates        0.23\n",
   2459        "commons        0.22\n",
   2460        "send           0.15\n",
   2461        "devices        0.15\n",
   2462        "mps            0.15\n",
   2463        "martin         0.14\n",
   2464        "dtype: float64"
   2465       ]
   2466      },
   2467      "execution_count": 142,
   2468      "metadata": {},
   2469      "output_type": "execute_result"
   2470     }
   2471    ],
   2472    "source": [
   2473     "article_tfidf = dtm[article_id].todense().A1\n",
   2474     "article_tokens = pd.Series(article_tfidf, index=tokens)\n",
   2475     "article_tokens.sort_values(ascending=False).head(10)"
   2476    ]
   2477   },
   2478   {
   2479    "cell_type": "markdown",
   2480    "metadata": {},
   2481    "source": [
   2482     "#### Compare to random selection"
   2483    ]
   2484   },
   2485   {
   2486    "cell_type": "code",
   2487    "execution_count": 144,
   2488    "metadata": {
   2489     "ExecuteTime": {
   2490      "end_time": "2018-11-21T14:48:19.646496Z",
   2491      "start_time": "2018-11-21T14:48:19.636875Z"
   2492     }
   2493    },
   2494    "outputs": [
   2495     {
   2496      "data": {
   2497       "text/plain": [
   2498        "['Campbell',\n",
   2499        " 'after',\n",
   2500        " 'in',\n",
   2501        " 'deputies.',\n",
   2502        " 'as',\n",
   2503        " 'strong',\n",
   2504        " 'using',\n",
   2505        " 'Speaker',\n",
   2506        " 'either',\n",
   2507        " 'be']"
   2508       ]
   2509      },
   2510      "execution_count": 144,
   2511      "metadata": {},
   2512      "output_type": "execute_result"
   2513     }
   2514    ],
   2515    "source": [
   2516     "pd.Series(article.body.split()).sample(10).tolist()"
   2517    ]
   2518   },
   2519   {
   2520    "cell_type": "markdown",
   2521    "metadata": {
   2522     "slideshow": {
   2523      "slide_type": "slide"
   2524     }
   2525    },
   2526    "source": [
   2527     "## Create Train & Test Sets"
   2528    ]
   2529   },
   2530   {
   2531    "cell_type": "markdown",
   2532    "metadata": {},
   2533    "source": [
   2534     "### Stratified `train_test_split`"
   2535    ]
   2536   },
   2537   {
   2538    "cell_type": "code",
   2539    "execution_count": 34,
   2540    "metadata": {
   2541     "ExecuteTime": {
   2542      "end_time": "2018-11-20T16:25:22.796627Z",
   2543      "start_time": "2018-11-20T16:25:22.787077Z"
   2544     },
   2545     "slideshow": {
   2546      "slide_type": "fragment"
   2547     }
   2548    },
   2549    "outputs": [],
   2550    "source": [
   2551     "train_docs, test_docs = train_test_split(docs, \n",
   2552     "                                         stratify=docs.topic, \n",
   2553     "                                         test_size=50, \n",
   2554     "                                         random_state=42)"
   2555    ]
   2556   },
   2557   {
   2558    "cell_type": "code",
   2559    "execution_count": 35,
   2560    "metadata": {
   2561     "ExecuteTime": {
   2562      "end_time": "2018-11-20T16:25:22.811468Z",
   2563      "start_time": "2018-11-20T16:25:22.798274Z"
   2564     },
   2565     "slideshow": {
   2566      "slide_type": "fragment"
   2567     }
   2568    },
   2569    "outputs": [
   2570     {
   2571      "data": {
   2572       "text/plain": [
   2573        "((2175, 3), (50, 3))"
   2574       ]
   2575      },
   2576      "execution_count": 35,
   2577      "metadata": {},
   2578      "output_type": "execute_result"
   2579     }
   2580    ],
   2581    "source": [
   2582     "train_docs.shape, test_docs.shape"
   2583    ]
   2584   },
   2585   {
   2586    "cell_type": "code",
   2587    "execution_count": 36,
   2588    "metadata": {
   2589     "ExecuteTime": {
   2590      "end_time": "2018-11-20T16:25:22.828264Z",
   2591      "start_time": "2018-11-20T16:25:22.812429Z"
   2592     },
   2593     "slideshow": {
   2594      "slide_type": "fragment"
   2595     }
   2596    },
   2597    "outputs": [
   2598     {
   2599      "data": {
   2600       "text/plain": [
   2601        "sport            12\n",
   2602        "business         11\n",
   2603        "entertainment     9\n",
   2604        "tech              9\n",
   2605        "politics          9\n",
   2606        "Name: topic, dtype: int64"
   2607       ]
   2608      },
   2609      "execution_count": 36,
   2610      "metadata": {},
   2611      "output_type": "execute_result"
   2612     }
   2613    ],
   2614    "source": [
   2615     "pd.Series(test_docs.topic).value_counts()"
   2616    ]
   2617   },
   2618   {
   2619    "cell_type": "markdown",
   2620    "metadata": {
   2621     "slideshow": {
   2622      "slide_type": "slide"
   2623     }
   2624    },
   2625    "source": [
   2626     "### Vectorize train & test sets"
   2627    ]
   2628   },
   2629   {
   2630    "cell_type": "code",
   2631    "execution_count": 38,
   2632    "metadata": {
   2633     "ExecuteTime": {
   2634      "end_time": "2018-11-20T16:26:51.602955Z",
   2635      "start_time": "2018-11-20T16:26:51.221094Z"
   2636     },
   2637     "slideshow": {
   2638      "slide_type": "fragment"
   2639     }
   2640    },
   2641    "outputs": [
   2642     {
   2643      "data": {
   2644       "text/plain": [
   2645        "<2175x2000 sparse matrix of type '<class 'numpy.int64'>'\n",
   2646        "\twith 178572 stored elements in Compressed Sparse Row format>"
   2647       ]
   2648      },
   2649      "execution_count": 38,
   2650      "metadata": {},
   2651      "output_type": "execute_result"
   2652     }
   2653    ],
   2654    "source": [
   2655     "vectorizer = CountVectorizer(max_df=.2, \n",
   2656     "                             min_df=3, \n",
   2657     "                             stop_words='english', \n",
   2658     "                             max_features=2000)\n",
   2659     "\n",
   2660     "train_dtm = vectorizer.fit_transform(train_docs.body)\n",
   2661     "words = vectorizer.get_feature_names()\n",
   2662     "train_dtm"
   2663    ]
   2664   },
   2665   {
   2666    "cell_type": "code",
   2667    "execution_count": 40,
   2668    "metadata": {
   2669     "ExecuteTime": {
   2670      "end_time": "2018-11-20T16:27:00.374626Z",
   2671      "start_time": "2018-11-20T16:27:00.342073Z"
   2672     },
   2673     "scrolled": true,
   2674     "slideshow": {
   2675      "slide_type": "fragment"
   2676     }
   2677    },
   2678    "outputs": [
   2679     {
   2680      "data": {
   2681       "text/plain": [
   2682        "<50x2000 sparse matrix of type '<class 'numpy.int64'>'\n",
   2683        "\twith 4160 stored elements in Compressed Sparse Row format>"
   2684       ]
   2685      },
   2686      "execution_count": 40,
   2687      "metadata": {},
   2688      "output_type": "execute_result"
   2689     }
   2690    ],
   2691    "source": [
   2692     "test_dtm = vectorizer.transform(test_docs.body)\n",
   2693     "test_dtm"
   2694    ]
   2695   },
   2696   {
   2697    "cell_type": "code",
   2698    "execution_count": null,
   2699    "metadata": {},
   2700    "outputs": [],
   2701    "source": []
   2702   }
   2703  ],
   2704  "metadata": {
   2705   "celltoolbar": "Slideshow",
   2706   "hide_input": false,
   2707   "kernelspec": {
   2708    "display_name": "Python 3",
   2709    "language": "python",
   2710    "name": "python3"
   2711   },
   2712   "language_info": {
   2713    "codemirror_mode": {
   2714     "name": "ipython",
   2715     "version": 3
   2716    },
   2717    "file_extension": ".py",
   2718    "mimetype": "text/x-python",
   2719    "name": "python",
   2720    "nbconvert_exporter": "python",
   2721    "pygments_lexer": "ipython3",
   2722    "version": "3.6.8"
   2723   },
   2724   "name": "_merged",
   2725   "toc": {
   2726    "base_numbering": 1,
   2727    "nav_menu": {},
   2728    "number_sections": true,
   2729    "sideBar": true,
   2730    "skip_h1_title": true,
   2731    "title_cell": "Table of Contents",
   2732    "title_sidebar": "Contents",
   2733    "toc_cell": false,
   2734    "toc_position": {
   2735     "height": "379.503px",
   2736     "left": "24px",
   2737     "right": "1064px",
   2738     "top": "66.3352px",
   2739     "width": "343.575px"
   2740    },
   2741    "toc_section_display": true,
   2742    "toc_window_display": true
   2743   }
   2744  },
   2745  "nbformat": 4,
   2746  "nbformat_minor": 2
   2747 }