Skip to content

Instantly share code, notes, and snippets.

@Zedmor
Created October 12, 2016 23:42
Show Gist options
  • Save Zedmor/1001c8ad6cc28153e65369bfdf6de08b to your computer and use it in GitHub Desktop.
Save Zedmor/1001c8ad6cc28153e65369bfdf6de08b to your computer and use it in GitHub Desktop.
homework_week2
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Homework with McDonald's sentiment data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Imaginary problem statement\n",
"\n",
"McDonald's receives **thousands of customer comments** on their website per day, and many of them are negative. Their corporate employees don't have time to read every single comment, but they do want to read a subset of comments that they are most interested in. In particular, the media has recently portrayed their employees as being rude, and so they want to review comments about **rude service**.\n",
"\n",
"McDonald's has hired you to develop a system that ranks each comment by the **likelihood that it is referring to rude service**. They will use your system to build a \"rudeness dashboard\" for their corporate employees, so that employees can spend a few minutes each day examining the **most relevant recent comments**.\n",
"\n",
"## Description of the data\n",
"\n",
"Before hiring you, McDonald's used the [CrowdFlower platform](http://www.crowdflower.com/data-for-everyone) to pay humans to **hand-annotate** about 1500 comments with the **type of complaint**. The complaint types are listed below, with the encoding used in the data listed in parentheses:\n",
"\n",
"- Bad Food (BadFood)\n",
"- Bad Neighborhood (ScaryMcDs)\n",
"- Cost (Cost)\n",
"- Dirty Location (Filthy)\n",
"- Missing Item (MissingFood)\n",
"- Problem with Order (OrderProblem)\n",
"- Rude Service (RudeService)\n",
"- Slow Service (SlowService)\n",
"- None of the above (na)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Task 1\n",
"\n",
"Read **`mcdonalds.csv`** into a pandas DataFrame and examine it. (It can be found in the **`data`** directory of the course repository.)\n",
"\n",
"- The **policies_violated** column lists the type of complaint. If there is more than one type, the types are separated by newline characters.\n",
"- The **policies_violated:confidence** column lists CrowdFlower's confidence in the judgments of its human annotators for that row (higher is better).\n",
"- The **city** column is the McDonald's location.\n",
"- The **review** column is the actual text comment."
]
},
{
"cell_type": "code",
"execution_count": 554,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import sklearn\n",
"from sklearn import metrics\n",
"from sklearn.cross_validation import train_test_split\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 555,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df = pd.read_csv('../data/mcdonalds.csv')"
]
},
{
"cell_type": "code",
"execution_count": 556,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(1525, 11)"
]
},
"execution_count": 556,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Task 2\n",
"\n",
"Remove any rows from the DataFrame in which the **policies_violated** column has a **null value**. Check the shape of the DataFrame before and after to confirm that you only removed about 50 rows.\n",
"\n",
"- **Note:** Null values are also known as \"missing values\", and are encoded in pandas with the special value \"NaN\". This is distinct from the \"na\" encoding used by CrowdFlower to denote \"None of the above\". Rows that contain \"na\" should **not** be removed.\n",
"- **Hint:** [How do I handle missing values in pandas?](https://www.youtube.com/watch?v=fCMrO_VzeL8&list=PL5-da3qGB5ICCsgW1MxlZ0Hq8LL5U3u9y&index=16) explains how to do this."
]
},
{
"cell_type": "code",
"execution_count": 557,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"df.dropna(axis=0,subset=['policies_violated'],inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 558,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(1471, 11)"
]
},
"execution_count": 558,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.shape"
]
},
{
"cell_type": "code",
"execution_count": 559,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>_unit_id</th>\n",
" <th>_golden</th>\n",
" <th>_unit_state</th>\n",
" <th>_trusted_judgments</th>\n",
" <th>_last_judgment_at</th>\n",
" <th>policies_violated</th>\n",
" <th>policies_violated:confidence</th>\n",
" <th>city</th>\n",
" <th>policies_violated_gold</th>\n",
" <th>review</th>\n",
" <th>Unnamed: 10</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>679455653</td>\n",
" <td>False</td>\n",
" <td>finalized</td>\n",
" <td>3</td>\n",
" <td>2/21/15 0:36</td>\n",
" <td>RudeService\\r\\nOrderProblem\\r\\nFilthy</td>\n",
" <td>1.0\\r\\n0.6667\\r\\n0.6667</td>\n",
" <td>Atlanta</td>\n",
" <td>NaN</td>\n",
" <td>I'm not a huge mcds lover, but I've been to better ones. This is by far the worst one I've ever been too! It's filthy inside and if you get drive through they completely screw up your order every time! The staff is terribly unfriendly and nobody seems to care.</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>679455654</td>\n",
" <td>False</td>\n",
" <td>finalized</td>\n",
" <td>3</td>\n",
" <td>2/21/15 0:27</td>\n",
" <td>RudeService</td>\n",
" <td>1</td>\n",
" <td>Atlanta</td>\n",
" <td>NaN</td>\n",
" <td>Terrible customer service. ξI came in at 9:30pm and stood in front of the register and no one bothered to say anything or help me for 5 minutes. ξThere was no one else waiting for their food inside either, just outside at the window. ξ I left and went to Chickfila next door and was greeted before I was all the way inside. This McDonalds is also dirty, the floor was covered with dropped food. Obviously filled with surly and unhappy workers.</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>679455655</td>\n",
" <td>False</td>\n",
" <td>finalized</td>\n",
" <td>3</td>\n",
" <td>2/21/15 0:26</td>\n",
" <td>SlowService\\r\\nOrderProblem</td>\n",
" <td>1.0\\r\\n1.0</td>\n",
" <td>Atlanta</td>\n",
" <td>NaN</td>\n",
" <td>First they \"lost\" my order, actually they gave it to someone one else than took 20 minutes to figure out why I was still waiting for my order.They after I was asked what I needed I replied, \"my order\".They asked for my ticket and the asst mgr looked at the ticket then incompletely filled it.I had to ask her to check to see if she filled it correctly.She acted as if she couldn't be bothered with that so I asked her again.She begrudgingly checked to she did in fact miss something on the ticket.So after 22 minutes I finally had my breakfast biscuit platter.As I left an woman approached and identified herself as the manager, she was dressed as if she had just awoken in an old t-shirt and sweat pants.She said she had heard what happened and said she'd take care of it.Well why didn't she intervene when she saw I was growing annoyed with the incompetence?</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>679455656</td>\n",
" <td>False</td>\n",
" <td>finalized</td>\n",
" <td>3</td>\n",
" <td>2/21/15 0:27</td>\n",
" <td>na</td>\n",
" <td>0.6667</td>\n",
" <td>Atlanta</td>\n",
" <td>NaN</td>\n",
" <td>I see I'm not the only one giving 1 star. Only because there is not a -25 Star!!! That's all I need to say!</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>679455657</td>\n",
" <td>False</td>\n",
" <td>finalized</td>\n",
" <td>3</td>\n",
" <td>2/21/15 0:27</td>\n",
" <td>RudeService</td>\n",
" <td>1</td>\n",
" <td>Atlanta</td>\n",
" <td>NaN</td>\n",
" <td>Well, it's McDonald's, so you know what the food is. ξThis review reflects solely on the poor service. ξI have been to this location countless times over the years. ξThey consistently fail on the service end of things. ξThe order takers tend to be rude, no smiles, and a lot of \"sighs\" and \"lip smacking\" when you talk to them. ξSo why go back you ask? This store benefits from being the only place to eat in this area. ξThe next stop is at least 12 minutes away on the other side of town. ξAlso I strongly believe in 2nd chances and know that not every business can satisfy everyone 100% of the time. ξI have given them many chances at earning a positive review. ξI could not recommend this location any less. ξIf you can wait, take a pass. ξThere are better McDonald's stores in Griffin, GA.</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" _unit_id _golden _unit_state _trusted_judgments _last_judgment_at \\\n",
"0 679455653 False finalized 3 2/21/15 0:36 \n",
"1 679455654 False finalized 3 2/21/15 0:27 \n",
"2 679455655 False finalized 3 2/21/15 0:26 \n",
"3 679455656 False finalized 3 2/21/15 0:27 \n",
"4 679455657 False finalized 3 2/21/15 0:27 \n",
"\n",
" policies_violated policies_violated:confidence \\\n",
"0 RudeService\\r\\nOrderProblem\\r\\nFilthy 1.0\\r\\n0.6667\\r\\n0.6667 \n",
"1 RudeService 1 \n",
"2 SlowService\\r\\nOrderProblem 1.0\\r\\n1.0 \n",
"3 na 0.6667 \n",
"4 RudeService 1 \n",
"\n",
" city policies_violated_gold \\\n",
"0 Atlanta NaN \n",
"1 Atlanta NaN \n",
"2 Atlanta NaN \n",
"3 Atlanta NaN \n",
"4 Atlanta NaN \n",
"\n",
" review \\\n",
"0 I'm not a huge mcds lover, but I've been to better ones. This is by far the worst one I've ever been too! It's filthy inside and if you get drive through they completely screw up your order every time! The staff is terribly unfriendly and nobody seems to care. \n",
"1 Terrible customer service. ξI came in at 9:30pm and stood in front of the register and no one bothered to say anything or help me for 5 minutes. ξThere was no one else waiting for their food inside either, just outside at the window. ξ I left and went to Chickfila next door and was greeted before I was all the way inside. This McDonalds is also dirty, the floor was covered with dropped food. Obviously filled with surly and unhappy workers. \n",
"2 First they \"lost\" my order, actually they gave it to someone one else than took 20 minutes to figure out why I was still waiting for my order.They after I was asked what I needed I replied, \"my order\".They asked for my ticket and the asst mgr looked at the ticket then incompletely filled it.I had to ask her to check to see if she filled it correctly.She acted as if she couldn't be bothered with that so I asked her again.She begrudgingly checked to she did in fact miss something on the ticket.So after 22 minutes I finally had my breakfast biscuit platter.As I left an woman approached and identified herself as the manager, she was dressed as if she had just awoken in an old t-shirt and sweat pants.She said she had heard what happened and said she'd take care of it.Well why didn't she intervene when she saw I was growing annoyed with the incompetence? \n",
"3 I see I'm not the only one giving 1 star. Only because there is not a -25 Star!!! That's all I need to say! \n",
"4 Well, it's McDonald's, so you know what the food is. ξThis review reflects solely on the poor service. ξI have been to this location countless times over the years. ξThey consistently fail on the service end of things. ξThe order takers tend to be rude, no smiles, and a lot of \"sighs\" and \"lip smacking\" when you talk to them. ξSo why go back you ask? This store benefits from being the only place to eat in this area. ξThe next stop is at least 12 minutes away on the other side of town. ξAlso I strongly believe in 2nd chances and know that not every business can satisfy everyone 100% of the time. ξI have given them many chances at earning a positive review. ξI could not recommend this location any less. ξIf you can wait, take a pass. ξThere are better McDonald's stores in Griffin, GA. \n",
"\n",
" Unnamed: 10 \n",
"0 NaN \n",
"1 NaN \n",
"2 NaN \n",
"3 NaN \n",
"4 NaN "
]
},
"execution_count": 559,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Task 3\n",
"\n",
"Add a new column to the DataFrame called **\"rude\"** that is 1 if the **policies_violated** column contains the text \"RudeService\", and 0 if the **policies_violated** column does not contain \"RudeService\". The \"rude\" column is going to be your response variable, so check how many zeros and ones it contains.\n",
"\n",
"- **Hint:** [How do I use string methods in pandas?](https://www.youtube.com/watch?v=bofaC0IckHo&list=PL5-da3qGB5ICCsgW1MxlZ0Hq8LL5U3u9y&index=12) shows how to search for the presence of a substring, and [How do I change the data type of a pandas Series?](https://www.youtube.com/watch?v=V0AWyzVMf54&list=PL5-da3qGB5ICCsgW1MxlZ0Hq8LL5U3u9y&index=13) shows how to convert the boolean results (True/False) to integers (1/0)."
]
},
{
"cell_type": "code",
"execution_count": 560,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"df['rude']=df.policies_violated.isin(['RudeService'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Task 4\n",
"\n",
"1. Define X (the **review** column) and y (the **rude** column).\n",
"2. Split X and y into training and testing sets (using the parameter **`random_state=1`**).\n",
"3. Use CountVectorizer (with the **default parameters**) to create document-term matrices from X_train and X_test."
]
},
{
"cell_type": "code",
"execution_count": 561,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"X = df.review\n",
"y = df.rude\n",
"X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,random_state=1)"
]
},
{
"cell_type": "code",
"execution_count": 562,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from sklearn.feature_extraction.text import CountVectorizer\n",
"vect = CountVectorizer()"
]
},
{
"cell_type": "code",
"execution_count": 563,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(1176, 7611)"
]
},
"execution_count": 563,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_train_dtm = vect.fit_transform(X_train)\n",
"X_train_dtm.shape"
]
},
{
"cell_type": "code",
"execution_count": 564,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(295, 7611)"
]
},
"execution_count": 564,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_test_dtm = vect.transform(X_test)\n",
"X_test_dtm.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Task 5\n",
"\n",
"Fit a Multinomial Naive Bayes model to the training set, calculate the **predicted probabilites** (not the class predictions) for the testing set, and then calculate the **AUC**. Repeat this task using a logistic regression model to see which of the two models achieves a better AUC.\n",
"\n",
"- **Note:** Because McDonald's only cares about ranking the comments by the likelihood that they refer to rude service, **classification accuracy** is not the relevant evaluation metric. **Area Under the Curve (AUC)** is a more useful evaluation metric for this scenario, since it measures the ability of the classifier to assign higher predicted probabilities to positive instances than to negative instances.\n",
"- **Hint:** [Evaluating a classification model](https://github.com/justmarkham/scikit-learn-videos/blob/master/09_classification_metrics.ipynb) explains how to calculate predicted probabilities and AUC, and my [blog post and video](http://www.dataschool.io/roc-curves-and-auc-explained/) explain AUC in-depth."
]
},
{
"cell_type": "code",
"execution_count": 565,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def DrawROC(y_test,y_pred_prob,name):\n",
" # IMPORTANT: first argument is true values, second argument is predicted probabilities\n",
" fpr, tpr, thresholds = metrics.roc_curve(y_test, y_pred_prob)\n",
" plt.plot(fpr, tpr)\n",
" plt.xlim([0.0, 1.0])\n",
" plt.ylim([0.0, 1.0])\n",
" plt.title('ROC curve for'+name+' '+str(metrics.auc(fpr,tpr)))\n",
" plt.xlabel('False Positive Rate (1 - Specificity)')\n",
" plt.ylabel('True Positive Rate (Sensitivity)')\n",
" plt.grid(True)\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 566,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nTiSwYQwqVAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x25d048a24e0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# import and instantiate MultinomialNB\n",
"from sklearn.naive_bayes import MultinomialNB\n",
"nb = MultinomialNB()\n",
"\n",
"# train the model using X_train_dtm\n",
"nb.fit(X_train_dtm, y_train)\n",
"\n",
"# make class predictions for X_test_dtm\n",
"y_pred_class = nb.predict(X_test_dtm)\n",
"\n",
"\n",
"DrawROC(y_test,nb.predict_proba(X_test_dtm)[:,1],'MultinomialNB')"
]
},
{
"cell_type": "code",
"execution_count": 567,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEZCAYAAACNebLAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmYXGWZ9/HvL4QAQiDdgAphCaDIAEJwySA4GkAhKI6O\nuACCRFSYVxGRcQTHUdxmkHHQiIi+jEgcRcAFBAEVBmkREUEggMiObAEZMYmE9Q3J/f7xPM05qVRV\nV1fqVFV3/z7Xda6us99196nznPM8Z1FEYGZmVmtSrwMwM7P+5ALCzMzqcgFhZmZ1uYAwM7O6XECY\nmVldLiDMzKwuFxATkKQzJC2SdHWvYxkm6eOSTmtz3qWSZnQ2ov4n6feSXtPrOGz8mhAFhKR7JT0p\n6TFJD+Ud5PNqptlN0mV5msWSzpf0NzXTTJU0T9J9ebo7JX1J0mB3v1H7JL0a2AvYNCJ2bXMZKyRt\n3cm4IuKEiDi8hXVfLumwmnmnRsS9o1mfpNdKWp7/j3+VdKukuaOLurciYseIuKLTy5U0RdK3cl4e\nkvSREabfSNKZkpZI+ouk79SMf52k6yQ9Lul+SW8rjdszj/urpLskvb9m3q0k/ST/n/5X0hdK45bm\n4Y/lz89K+kpp/Pvyb/QxSRdL2qQ07qOSbs7j7pb00Qbf7bV5e/9szbDlpfU+JumQ0vgvSrojf6c/\nlMeN9J0lvVPSbXncn/K+ar1m+a9URIz7DvgjsEf+/HxgAfC50vhXAUuBI4F1gWnA54BFwIw8zZrA\ntcDPgZfkYRsB/wLMqTD2NTq8vIOBK1YnFmA5sHWP/peXA4d1YDmvBe4v9e8LLANe3O//wy7k+ATg\nl8D6wHbAw8DeTaa/AvgisB6wBrBzadz2wCPA3qQD0gFgqzxuMrAEeF/uf0X+Hb40968J3AV8GFgb\nmALs2CCGdYHHgN1z/+y83u3yek4FhkrTfxSYmWPaFrgXeEfNMicDNwBXAZ9ttO3UieX44e0ImJX3\nI7u2+J03A56fPz8P+C4wr2fbQq83xi5t8H8E9iz1nwj8pGYD/2qd+S4G5ufP78s/lHVGsd4dgEuA\nv+R5j8vDz6izwT1QE+/HgBuBp/LnH9Qs+yvDG07+IX8TeAh4gFS4qU48h+XlLcs/puPz8PcDdwKP\nAj8GNinNswL4AHAHcHdp2CoFBCDgX/OP7U/AfGD90vh353F/ztM993/JP6rv5M9rAd/J8SwGfgts\nDHweeBZ4Msd/cm08pB3JSXk9i/P/dq06sa7yIyftUPYv9W9X+v/dCry9NG4Q+Anw1xzf54BfjZC3\nZst7A3BL/l4PAMfk4Rvm9SzO8/2y3nZN2nnOAxYCDwJfBtYsb1/AMfk7LgTmNtluFwJ7lfo/A3yv\nwbSvB+6hzvaWx58JfKbBuOeTDjbWLg27Bnhnabv8ZaM4a5Z1KHBXqf+LwCml/k3y/2SrBvN/BfhK\nzbBjgS8A32IUBUSdZZ8PfKSV71wz33rAt4ELW11Xp7uerLTrX3LlH9JmwE3Al3L/OqSdzmvrzDcX\nWJg/nwWcMYp1rkfaYR+df7zrAq/M4+oVEPfXxHs9sClpZ7kF8Diwbh4/KS97eHnnkY6Q1iad1VwN\nvL9BXIdSOoMA9iTtsHcmHbGdzMo7oRWks6Zp5B0tjQuIw0g7xC1JRz8/Av47j9uedKT0KtJR1BeB\nZ1i5gBie9vD8o1qLVOjsAqyXx61yBkHpjAb4GvAL4IV53l3JO8qaeZ7LeZ7u7/N2sHMe9jzgflKh\nppyfPwPb5fFnA9/LMf5NnvaKRnlrYXkPAbvlzxsAM/Pnf8//20mko/PdG2zXnyUd6W6Yu1+Td8z5\nuy7LOV6DdLb0BLBBnbxMy7FvXBr2VuDGBtvTJ4GfURTovwVeUxp/d47tJlLB89/AQGn8d0kF6aS8\nbfyJVP0JcHqe/uKcq1/Q+AziMuBTpf7aAmJ6/l5vajD/9cDhpf4tgdvy/63e7/Vp0kHf3cCXgOc1\nWO46+X+79wjfeXpp/O6ks4wVpN/MXvWW3Y2u5zvvrnzJ9EN6LHcrgEvJR7alDWfbOvPtAzyTP18C\n/Pso1nkAcF2Dca0UEIfWzHMFcHD+/Hrgzvz5BXljXatm3b9osO7aAuKbwBdK/esC/w/YIvevoKbw\npHEB8T/AP5b6tyUVApNIO5IzS+PWoXEB8R7gSvJpd8066hUQK4CtSTveJ2mwE6mZ57WkgmVRzt8y\n4KjS+HdQc/QKfCN/j0k5Ry8qjfscqxYQr21lefnzvaQj5qk103yGdACwTYPtejh/dwH7lMbtDdxT\n+q5PAJNK4x8BZtVZ5mY5L1NKw143vKw60//fPP1cUuHzTtLZzmAe/wzpDGMb0s72h8B3S/PvR9pB\nLss5fW9p3M/z/HuTDio+StohT66JYcs8/5alYXvl77hj3tb+L+kAoN6R+mdIVUlrlob9GHhbg9/r\n8ykK9i1J1XFfb5CfbwMX1Qxr+J1rptsE+BQVVHu22k2IRurszRGxPunHsh3pSBvSxryC9M+otQnp\nqAjS6X29aRrZnLQxt+vBmv6zgAPz5wNJR6+Qzi7WBB7OVyYtJu14NqI1mwL3DfdExBOk7zq9SSwt\nLSt/nkwqxDYlVXMMr+epvJ56vkPaOZwt6UFJJ0pao4X1b0Q6Wr+nxXgXRsQgMJV05rRnadyWwK45\np8N5PSh/l43z9yrn5QFWVR7fbHkA+wNvBO7LDfHDFxD8B2k7uiQ3aB7b4LtsSjpDGXZfHjbsLxGx\notT/JOkst9bj+e/6pWEbkI5k63kKuDci5kfE8og4h5SL3UvjvxURd0fEk6Qzon0BJG0HnEM68FmT\nVCV7rKR9S/NeGRGXRMSzEfGfpLOjlS4eAQ7J05W348uATwPnkraHe/J3WGlblnQkqV3uDRGxLA97\nE6mg/mG9LxwR/xsRt+XP95GqgPevnU7SF0lnzu8sDXvJCN+5vJ6Hyb+DenF0w0QqIAQQEb8ileon\n5f4ngd8Ab68zzztIR8Xkv/tIWqfF9T1AOmqq5wnS0dSwegVP1PT/AJgtaTrwDxQFxAOkI+ANI2Iw\nIgYiYlpE7NRinA+Rdl4ASFqX9CMs/5BqY2lpWfnzs6QjuYdJR6fD61knr2cVeWfwuYjYAdiNdMT1\n7hZieZSUi0Z5ryvvGI4DdpL093nwA6RGzcFSXtePiCNJ1R3Lyt+HdECwyqJLn5stj4i4LiLeQip8\nzge+n4c/EREfjYhtSNVgx0jao8666uX+odHkIa9vCel/tXNp8M6k9pF6bmLV/0nUjG9kB+C2iPif\nvO47gYvIBUiDZddzCKm9a+UgIr4eEdtGxCakgmIy8Pvh8flquI+RzsIeLs26J/BySQ9Lepi0gz9a\n0nlNYlhpXyrpM6QaiNdHxOOlUTvS/DvXWpN0dtwbvTp16WbHqo3UG5GOlIavHNid4iqm9UhXWnye\nVP2wTZ5mCql+9WLgJaQCZ0Pg49S5iikvZyFwVJ53PfIpPanB+w95PS8kFVC1VUx71lnmxaSqrutq\nhp9HaqCcmuPamlI9cM20tVVMw6fiO5GOvr/CqlUlW9csYwXpKG6tUjcJeC9wOzAjf98fAN/O82xP\natDdlbTRn0jjKqbZpB/SJFJj8ALg3XncWcDn68Qz3AZxCqkKcZM8/4htEKVhHxzObY7/j6Sjy8k5\n5ldQXMF2FqkueR3SGel9zfLWZHnb5c8HUVR7vhf4Y/78RoptcPO8Tb2mdjshVXFdSdq2NwJ+xcpt\nELXfte42lsedQKrKm5b/zw+TdnT1ph0gnQkekvP9NlJBPVzF9B7SGdBWpIOicygu/Ng6bxPDVxhu\nQ7pY4r25f1vS73TPvOyP5PGTS+vfjfTbXbcmrrWAHfLnLfL3KV+5+K78vV5S5zutS6pGGu7OJh1Q\nTittn8NVsJvnZX+zNP/HSW1xz6+z7JG+80HA5vnzlsAQNReodHXf2asVd/VLptPLPWuGfa2c+Lyh\nXZ43tiWkK0f+pmaeqaQGqftJ7Rl3Av9JqdGtZvrtSWcei0hHcx8rbbxn5w1lAekyvvubxZuHH0yq\n7z2mTlynko5SFwPXUXPJXmnalQqIPOxwUh32o8AF5EbCPG6VS1rzsOFuRf57WB73rzk/j5DO1DYo\nzfdu0o70z8AncrzDlyWWC4gDSA2ES/OP+Mvk+nPSDv920k5pXm2MpIb6L5HOgBbnH1irVzGtA/wv\n8Mbc/2Lgwjzsz/l/uVMet1Eet4R04HACcOkIeau7PFIB8dP8nYaX96o8z9GknfnSnNd/qbed5G1q\nHmk7W5hzNqXJd627jeVxU0gNxH/N+f9wzfilrNxYvjvpaP8x0hU5u9VMf3z+zo+QjvTL28TbgJvz\nuu6npp0PeAvpd7aE1Ehd+5v8BrnAqRm+AekqwKU5J5+ndKVV/v7P5JiX5r+nNsjHGazcBvGRvH09\nTtqev0ypgCL9Jp6qWfZxrXznHOcDpf/312mwf+lGpxxUJSSdTqoeeCQaVHlIOpniqoq5EbGgsoCs\nb+SqrCWkht77Rpq+3+UbuF4QEe/pdSxmnVJ1G8QZpHq4unLDzDYR8WLgCNLRgI1TkvaTtE4uHE4C\nbhqrhYOkl0h6af48i1QtdG5vozLrrEoLiIi4knSa38ibSdc5ExG/BTaQ9IIm09vY9mbS6f6DpLrX\nA3obzmqZCpwr6XFSe8QXI+InPY7JrKMm93j901n58sCFedgjvQnHqhQR7ydd6z/mRcTvSG0KZuPW\nRLrM1czMRqHXZxALWfn68c3ysFVIqq413cxsHIsItTNfN84glLt6LiDfAJXvHF0SEQ2rl3p1qVe/\ndccff3zPY+iXzrlwLiZSLqCdedpX6RmEpO+RbirZUNL9pOuhpwAREadFxMWS3iDpLtJlrr5EsAX3\n3ntvr0PoG85FwbkoOBedUWkBEREHtTDNkVXGYGZm7XEj9Rg0d+7cXofQN5yLgnNRcC46o9I7qTtJ\nUoyVWM3MqiDBaHeDkog+bqS2DhsaGup1CH3DuSg4FwXnojN6fZmrmdm4NTgIi5s9S2KUBgY6t6xW\nuIrJzKwi7VQJdT4GVzGZmVmHuYAYg1y/WnAuCs5FwbnoDBcQZmZWl9sgzMwq4jYIMzMbl1xAjEGu\nXy04FwXnolCbi8HBdDTf7a7bl6V2mu+DMLNxb/Hi3lf1jEVugzCzca8f2gJ6xW0QZmbWcS4gxiDX\nNReci4JzUXAuOsMFhJmZ1eU2CDMb99wG4TYIMzPrIBcQY5DrVwvORWEi52LV+xyGxtX9CL3iAsLM\nxrzh+xyGu8svX7l/0aJeRzg2uQ3CzMa8idzGMBK3QZiZWce5gBiDJnJdcy3nouBcFJyLznABYWZm\ndbkNwszGPLdBNOY2CDMbV0b7eG5fxloNFxBjkOtXC85FYTzlovay1ZG62stYx1MueskFhJmZ1eU2\nCDPrO25T6By3QZiZWce5gBiDXL9acC4KzkXBuegMFxBmZlaX2yDMrO+4DaJzVqcNYvIIC34lcDDw\nd8AmwFPA74GLgO9FxNJ2Vmpm49fgYLpMdXX4vob+0LCKSdJFwJHAL4G3AFsBLwM+D0wDLpK0XzeC\ntJW5frXgXBT6JRejvYehlfsaRqtfcjHWNTuDOCwiHqkZ9jRwTe5OlPT8yiIzM7OeGrENQtL/IVUn\n/bWtFUhzgHmks5XTI+LEmvHrA98FtgDWAE6KiPl1luM2CLMxwO0H/aXq+yC2BK6X9D1JrxtlYJOA\nU4B9gB2AAyVtVzPZB4FbImImsAdwkqSmbSNmZla9EQuIiDgOeDFwJvCPku6U9FlJM1pY/izgzoi4\nLyKWAWcDb65dBTA1f54K/CUinm0x/gnJ9asF56LgXBSci85o6T6IiFgB3Ju7FaQrms6XdMIIs04H\nHij1P5iHlZ0CbC/pIeBG4MOtxGRmZtUasSpH0geBQ4HHgNOBT0TEM7n66C7g46sZwz7ADRGxp6Rt\ngEsl7RQRj9dOOHfuXGbMmAHAtGnTmDlzJrNnzwaKI4aJ0D979uy+isf9/dM/bHWXN3XqEI8/DjB7\neIn578j9AwO9z8fwsF7/P3rRPzQ0xPz58wGe21+2q5VG6n8DvhURd9cZt2NE/L7JvLsCn46IObn/\nOCDKDdWSLgROiIhf5/7LgGMj4nc1y3IjtVmXuKF5/Ki6kXp6beEgaT5As8IhuxZ4kaQtJU0BDgAu\nqJnmPuB1ebkvALYF7mkhrgmr9mhxInMuCs5FwbnojFauFtqp3JOrll7ZysIjYrmkI4FLKC5zvVXS\nEWl0nEa68W6+pJvybB+LiNW8TcbMzFZXwyomSccCx5GuLHpseDDpqqPTI+KfuxJhEY+rmMy6xFVM\n48fqVDE1KyBEunHtBFJBAaSzgnZWtLpcQJh1jwuI8aOqNogX5fsRvkO6yW0HYAdJO0naqcl8VjHX\nrxaci4JzUXAuOqNZG8RxwHuBr9UZF8BrKonIzMz6gt8HYTbGdeLx2rUGBlb/iarWHyppgygt/Hrg\nLOD7EXFfOyvpBBcQZvW5vcCaqfo+iLcDawIXSPqNpKMlbdrOyqwzXL9acC4KzkXBueiMVh7Wd3dE\n/HtE7AwcRnpp0P2VR2ZmZj3VUhuEpM2AdwDvJDVsf7/2vQ5VcxWTWX2uYrJmKnsndV74VcB6wA+A\ngyPiznZWZGZmY0srbRDvj4idIuJzLhz6g+tXC85FwbkoOBed0fAMQtKBEXEWsJekvWrHR8TJlUZm\nNs516vLUgYHVX4ZZPc0etfGBiDhV0ufqjI6I+FS1oa0Sj9sgbFxx24F1Q9X3QewaEVePNKxqLiBs\nvHEBYd1Q9X0Qp9YZVu/xG9Ylrl8tOBcF56LgXHRGszaIWcCrgI0lHVUatT7pxjkzMxvHmrVB7AHs\nCbwP+GZp1FLg/Ii4vfrwVorHVUw2rriKybqh6jaIrSOi568AdQFh440LCOuGStogJJ2UP54k6dza\nrq1IrSNcv1pwLgrORcG56Ixmd1Kfk/+e0o1AzMaSTtzD4PsXrN+N6n0QkjYApkfEH6oLqeG6XcVk\nfcPVQzZWVHqZq6TLJK0vaQBYAHxH0hfbWZmZmY0drdwHMRgRjwFvBb4bES8H9qk2LGvG9asF56Lg\nXBSci85opYCYLGlj0ouDflJxPGZm1idaucz1AOBTwJURcbikrYEvR8SbuxFgKQ63QVjfcBuEjRWV\n3gfRL1xAWD9xAWFjRdWN1BtJ+pikUyWdNty1szLrDNevFtrJxeBg2sGvTtePl6h6uyg4F50x4hvl\ngPOBq4ErgeXVhmNWvcWLffRv1opW2iAWRMTMLsXTLA5XMVlHuHrIJpKqH/f9U0l7t7NwMzMbu1op\nIP4R+JmkxyUtkrRY0qKqA7PGXL9acC4KzkXBueiMVtogNqo8CjMz6zstXeaa74XYOiL+XdJmwAsi\n4rrKo1s5BrdBWEe4DcImkqovcz0F2AM4JA96EvhGOyszq8JoL1vtx0tUzfpRK20Qu0XEEcDTABGx\nCJhSaVTWlOtXC0NDQ89dttpqt2ictqB5uyg4F53RSgGxTNIkIAAkbQisqDQqMzPruVbug3g38A/A\nK4BvAe8APhMRZ7e0AmkOMI9UGJ0eESfWmWY28GVgTeDPEbFHnWncBmF1uU3BrLHKn8UkaQfgdbn3\nsoj4fYuBTQLuAPYCHgKuBQ6IiNtK02wAXAXsHRELJW0UEY/WWZYLCKvLBYRZY1W9k3ptSWsARMQt\nwEWkqqWtR7H8WcCdEXFfRCwDzgZqnwJ7EPCjiFiY17VK4WArc/1qwbkoOBcF56IzmrVB/BzYBkDS\nNsA1wPbAMZL+rcXlTwceKPU/mIeVbQsMSrpc0rWSDsHMzHquYRWTpJsj4qX582eBjSLiA5LWAn43\nPK7pwqX9gX0i4vDcfzAwKyKOKk3zVeDlwJ7AusBvgDdExF01y3IVk9XlKiazxlaniqnZndTln9ye\nwEkAEfGMpFavYloIbFHq3ywPK3sQeDQingaelnQFsDNwV810zJ07lxkzZgAwbdo0Zs6cyezZs4Hi\nlNL9/dc/OAiLF6d+mJ3/dq5/YKC/vq/73d/L/qGhIebPnw/w3P6yXc3OIM4C7iPt0D8JbBURT+RG\n5V9FxE4jLjy1YdxOaqR+mFRNdWBE3FqaZjvgq8AcYC3gt8A7I+IPNcvyGUQ2NDT03IYxFlR5hD/W\nclEl56LgXBSqupP6fcDjwHbAnIh4Ig/fEfhSKwuPiOXAkcAlwC3A2RFxq6QjJB2ep7mN1N5xE+m9\nE6fVFg5mZtZ9fuWoVc5tBGa9U9Vlrj+WtK+kVdopJG0p6VOSDmtnpWZm1v+aVTF9EHg9cIek30i6\nQNIlku4CzgBuiYhvdSVKW8lwg5Q5F2XORcG56IyGVzHlG9eOId338CJgE+Ap4PaIWNql+MzMrEfc\nBmFNpUtUV28ZAwPj9wmqZv2u8mcx9QMXEL3hBmazsa3SFwZZ/3H9asG5KDgXBeeiM1oqICRNye0Q\nZmY2QbTyPog3km6MmxIRW0maCRwfEf/QjQBLcbiKqQdcxWQ2tlVdxfRZ4G+BJQARsQDw2YSZ2TjX\n0itHI2JJzTAfU/aQ61cLzkXBuSg4F53R7Gmuw26V9A5gkqStgKNIz0wyM7NxrJU2iHWBTwF750E/\nJ72T+qmKY6uNw20Qo9CJ+xfA9zCYjXWV3gch6a0Rce5Iw6rmAmJ03LhsZlB9I/W/1hn2iXZWZp3h\n+tWCc1FwLgrORWc0bIOQtA/pJT7TJZXf/7A+0Oob5czMbIxq9ka5XYCXkdofPlsatRT4RUQ8Wn14\nK8XjKqZRcBWTmUH1bRBr5/dF95QLiNFxAWFmUH0bxHRJZ0u6SdIdw107K7POcP1qwbkoOBcF56Iz\nWikg5pNeECRgX+D7wDkVxmQtGBxMZwmNuoGBXkdoZmNdK1VM10XEyyXdHBEvzcN+FxGv6EqERRyu\nYipxFZKZtWJ1qphauZP6GUmTgLsl/SOwEJjazsrMzGzsaKWK6SPAuqRHbOwOvB84rMqgrDnXrxac\ni4JzUXAuOmPEM4iI+G3+uBQ4BEDS9CqDMjOz3mvaBiHplcB04MqIeFTSDsCxwJ4RsVmXYhyOxW0Q\nJW6DMLNWVHKZq6QTgDOBdwE/k/Rp4HLgRmDbdlZmZmZjR7M2iDcDO0fE20lPcv1nYNeIOCkinuxK\ndFaX61cLzkXBuSg4F53RrA3i6eFHekfEIkl3RMQ9XYrLskaP7fZ9DmZWtWbPYloC/GK4F9ij1E9E\nvLXy6FaOZ0K2QbitwcxWRyXPYpK0V7MZI+KydlbYLhcQZmajV0kjdURc1qxrP1xbXa5fLTgXBeei\n4Fx0Ris3ypmZ2QQ04rOY+oWrmMzMRq/qx30Pr2StdlZgZmZj04gFhKRZkm4G7sz9O0v6auWRjSMj\nPZp7tI/tdv1qwbkoOBcF56IzWjmDOBnYD/gLQETcSLrk1Vq0eHGqJmqnW7So19Gb2UTVyvsgromI\nWZJuiIhd8rAbI2LnrkRYxDFm2yDcjmBmvVJ1G8QDkmYBIWkNSUcDLb9yVNIcSbflV5Ue22S6V0pa\nJqmrN+CZmVl9rRQQ/wc4BtgCeATYNQ8bUX7R0CnAPsAOwIGStmsw3ReAn7cW9sTm+tWCc1FwLgrO\nRWe08ka5ZyPigDaXPwu4MyLuA5B0NukhgLfVTPch4IfAK9tcj5mZdVgrbRB3A7cD5wDnRsTSlhcu\n7Q/sExGH5/6DgVkRcVRpmk2BMyNiD0lnAD+JiHPrLMttEGZmo1RpG0REbAN8Hng5cLOkH0tq94yi\nnnmklxANa+uLmJlZZ7VSxUREXAVclV8aNI/0IqGzW5h1IantYthmeVjZK4CzJQnYCNhX0rKIuKB2\nYXPnzmXGjBkATJs2jZkzZzJ79mygqHPsVP/UqUM8/jjA7Lz2ofx39P0DA52Nr1y/WtX3Hyv9w8P6\nJZ5e9i9YsICjjz66b+LpZf+8efMq3T/0c//Q0BDz588HeG5/2a5WqpjWI7UbHAD8DXA+8P3Su6qb\nzbsGqXpqL+Bh4BrgwIi4tcH0fVPF1M/VQkNDQ89tGBOdc1FwLgrORaGSx32XFn4v8BNSofCrNoKb\nA3yFVJ11ekR8QdIRQETEaTXTfgu40AWEmVlnVF1ATIqIFW1F1kEuIMzMRq+SRmpJJ+WPP5J0bm3X\nVqTWEeX694nOuSg4FwXnojOaNVKfk/+e0o1AzMysv7RSxXRkRJwy0rCquYrJzGz0qn4W02F1hr23\nnZWZmdnY0awN4p2SzgO2qml/uBRY0r0QrZbrVwvORcG5KDgXndGsDeIa0jsgNgO+Vhq+FLihyqDM\nzKz3/E7qhutzG4SZjX2r0wbR8AxC0i8j4rWSFgPlXaVIN7kNtrNCMzMbG5o1Ug+/VnQjYONSN9xv\nPeL61YJzUXAuCs5FZzQsIEp3T28OrBERy4FXAUcA63YhNjMz66FW7oNYQHqRzxbAz4ALgRdHxH7V\nh7dSHG6DMDMbparvg1gREcuAtwJfjYiPANPbWZmZmY0drRQQz0p6O3AI6ewBYM3qQrKRuH614FwU\nnIuCc9EZrd5JvQfwHxFxj6StgLOqDcvMzHqtpfsgJE0GXpR774qIZyuNqn4MboMwMxulSu6DKC38\n74DvkF4VKuCFkg6JiF+3s0IzMxsbWqli+jLwhojYPSJ2A95IekOc9YjrVwvORcG5KDgXndFKATEl\nIv4w3JPfJz2lupDMzKwftHIfxHzgaeC7edC7gOdFxKHVhrZKHJW2QQwOwuLFRf/AACxaVNnqzMy6\noup3Uq8NHAW8Og/6Fel+iKfbWWG7qi4g3ChtZuNRZTfKSXopMAc4LyL+Pndf7HbhYCtz/WrBuSg4\nFwXnojOavTDoX4Afk6qULpVU781yZmY2TjWsYpJ0CzArIp6QtDFwcUS8sqvRrRyPq5jMzEapqiqm\nZyLiCYCI+PMI05qZ2TjTbKe/dek91OcB25TfTd2tAG1Vrl8tOBcF56LgXHRGszup96/pP6XKQLqt\n3mWtZmZWmLDvpHabg5lNBFW/D8LMzCYgFxBjkOtXC85FwbkoOBed0XIBIWmtKgMxM7P+0sqjNmYB\npwMbRMTps67jAAAOZUlEQVQWknYG3hcRH+pGgKU43AZhZjZKVbdBnAzsB/wFICJuJL1hzszMxrFW\nCohJEXFfzbDlVQRjrXH9asG5KDgXBeeiM1opIB7I1UwhaQ1JRwN3VBxXxwwOpuqk2s73PZiZNddK\nG8TzSdVMr8uD/gc4MiIerTi22jjaaoNwW4OZTWSVvg+iX7iAMDMbvUobqSX9l6TTartRBDdH0m2S\n7pB0bJ3xB0m6MXdX5ndQWBOuXy04FwXnouBcdEazZzEN+5/S57WBfwAeaGXhkiaRnuG0F/AQcK2k\n8yPittJk9wCviYi/SpoD/BewayvLNzOz6oy6iinv9K+MiN1amHZX4PiI2Df3HwdERJzYYPppwM0R\nsXmdca5iMjMbpW4/i2kr4AUtTjudlc82HszDGnkf8NM2YjIzsw4bsYpJ0mJg+Bh8ErAIOK7TgUja\nA3gP8OpG08ydO5cZM2YAMG3aNGbOnMns2bOBos6x3P+mN8HAQOPxY7W/XL/aD/H0sn94WL/E08v+\nBQsWcPTRR/dNPL3snzdv3oj7h/HaPzQ0xPz58wGe21+2q2kVkyQBmwML86AVo6nnyVVMn46IObm/\nbhWTpJ2AHwFzIuLuBssadRXTeK1eGhoaem7DmOici4JzUXAuCpVe5irp9xGxY5uBrQHcTmqkfhi4\nBjgwIm4tTbMFcBlwSERc3WRZLiDMzEZpdQqIVq5iWiBpl4i4YbQLj4jlko4ELiFVT50eEbdKOiKN\njtOATwKDwKn5jGVZRMwa7brMzKyzGp5BSJocEc9KugV4CXA38AQg0s79Zd0L02cQZT59LjgXBeei\n4FwUqjqDuAZ4GfD3bUVlZmZjWrMziBsiYpcux9OQzyDMzEavqjOIjSUd02hkRHypnRWamdnY0OxG\nuTWA9YCpDTrrkfI9ABOdc1FwLgrORWc0O4N4OCI+27VIzMysr7gNwsxsHKvkRjlJgxGxaLUi6yAX\nEGZmo1fJw/r6qXCwlbl+teBcFJyLgnPRGe08zdXMzCaAcf3KUVcxmdlE1+33QfSdwcFUGNR2AwO9\njszMbOwaFwXE4sXpTKG2WzROW1Fcv1pwLgrORcG56IxxUUCYmVnnjYs2CLc1mJnVN+HbIMzMrPNc\nQIxBrl8tOBcF56LgXHSGCwgzM6trTLdBDA6mK5gGBsbvFUtmZqujkmcx9Zt6BYQbp83MmnMj9QTj\n+tWCc1FwLgrORWe4gDAzs7pcxWRmNo65isnMzDrOBcQY5PrVgnNRcC4KzkVnuIAwM7O6xlQbxMBA\nsHhxMcz3P5iZNTdh7oOAcKO0mdkouJF6gnH9asG5KDgXBeeiM1xAmJlZXa5iMjMbx1zFZGZmHecC\nYgxy/WrBuSg4FwXnojPGVAExMNDrCMzMJo4x1QYxVmI1M+sXboMwM7OOq7yAkDRH0m2S7pB0bINp\nTpZ0p6QFkmZWHdNY5/rVgnNRcC4KzkVnVFpASJoEnALsA+wAHChpu5pp9gW2iYgXA0cA36gypvFg\nwYIFvQ6hbzgXBeei4Fx0RtVnELOAOyPivohYBpwNvLlmmjcD/w0QEb8FNpD0gorjGtOWLFnS6xD6\nhnNRcC4KzkVnVF1ATAceKPU/mIc1m2ZhnWnMzKzL3Eg9Bt177729DqFvOBcF56LgXHRGpZe5StoV\n+HREzMn9xwERESeWpvkGcHlEnJP7bwNeGxGP1CzL17iambWh3ctcJ3c6kBrXAi+StCXwMHAAcGDN\nNBcAHwTOyQXKktrCAdr/gmZm1p5KC4iIWC7pSOASUnXW6RFxq6Qj0ug4LSIulvQGSXcBTwDvqTIm\nMzNrzZi5k9rMzLqr7xqpfWNdYaRcSDpI0o25u1LSS3sRZze0sl3k6V4paZmkt3Yzvm5q8TcyW9IN\nkn4v6fJux9gtLfxG1pd0Qd5X3Cxpbg/CrJyk0yU9IummJtOMfr8ZEX3TkQqsu4AtgTWBBcB2NdPs\nC1yUP/8tcHWv4+5hLnYFNsif50zkXJSmuwy4EHhrr+Pu4XaxAXALMD33b9TruHuYi48DJwznAfgL\nMLnXsVeQi1cDM4GbGoxva7/Zb2cQvrGuMGIuIuLqiPhr7r2a8Xv/SCvbBcCHgB8C/9vN4LqslVwc\nBPwoIhYCRMSjXY6xW1rJRQBT8+epwF8i4tkuxtgVEXElsLjJJG3tN/utgPCNdYVWclH2PuCnlUbU\nOyPmQtKmwFsi4uvAeL7irZXtYltgUNLlkq6VdEjXouuuVnJxCrC9pIeAG4EPdym2ftPWfrPqy1yt\nCyTtQbr669W9jqWH5gHlOujxXEiMZDLwMmBPYF3gN5J+ExF39TasntgHuCEi9pS0DXCppJ0i4vFe\nBzYW9FsBsRDYotS/WR5WO83mI0wzHrSSCyTtBJwGzImIZqeYY1kruXgFcLYkkeqa95W0LCIu6FKM\n3dJKLh4EHo2Ip4GnJV0B7Eyqrx9PWsnFe4ATACLibkl/BLYDfteVCPtHW/vNfqtieu7GOklTSDfW\n1f7ALwDeDc/dqV33xrpxYMRcSNoC+BFwSETc3YMYu2XEXETE1rnbitQO8YFxWDhAa7+R84FXS1pD\n0vNIjZK3djnObmglF/cBrwPIde7bAvd0NcruEY3PnNvab/bVGUT4xrrntJIL4JPAIHBqPnJeFhGz\nehd1NVrMxUqzdD3ILmnxN3KbpJ8DNwHLgdMi4g89DLsSLW4Xnwfmly7//FhELOpRyJWR9D1gNrCh\npPuB44EprOZ+0zfKmZlZXf1WxWRmZn3CBYSZmdXlAsLMzOpyAWFmZnW5gDAzs7pcQJiZWV0uICYY\nScslXZ8fBX19vtmu0bRbSrq5A+u8PD+SeYGkX0l6cRvLOELSwfnzoZJeWBp3mqTtOhznb/Nd6iPN\n82FJa7exri9LenX+/MH8GOblkgbbWNa2OfYbJN2i9BrfjpH0Jkkfy583knS1pOskvVrShZLWbzJv\nw/9bk3kulbRB576Bta3Xj6l1190OeGwU025Jg8cHj3KdlwO75M/vB87vwPJeXkFuynHOBS5pYZ4/\nAoOjXM8gcFWpf2fSIyPuGe2y8vw/A/Yr9e9Q4fZzAOnGu8r+b8AhwL9U9R3ctd75DGLiWeVW/Hym\ncIWk3+Vu1zrTbJ+Pqq/PR9jb5OHvKg3/er6ju9l6rwCG590rz3ejpG9KWjMP/4LSi24WSPqPPOx4\nSf8kaX/Sc5e+m+ddOx89vywfrf5HKeZDJZ3cZpy/ATYtLetUSdcovXTm+DzsQ3mayyVdloftLemq\nnMdz8qMuau1P2qkDEBE3RsT91PnftOiFlJ6rExG3lL7/j3N+bpf0qdL3qZsPpRfwXJdzf2lpOV+V\ntDNwIvCWUu7/OHzWI+nd+X95g6Rv52GN/m9vkHReKZ7XSTo39/6EVd9db73Q6xLKXXc74FngeuAG\n0jsDANYGpuTPLwKuzZ+fO4MATgYOzJ8nA2uRHnp2AbBGHv414OA667wceFn+/M/AWXn++4Ft8vBv\nA0eRjq5vK827fv57PHBMaXm71C6f9JC+O0vDLwZ2azPODwOfL42blv9OytPtmPvvAQby5w2BXwLr\n5P6PAZ+ss575wBvrDB/12Uieby6wBLgIOJriJVKHkgqOafl/fHPOU9185PzdD2xR850PBU6u/Vz6\n/oPA9sBtpVwMz9vs//YHYMP8+cxyToDbh5flrnddXz2LybriyYh4Wc2wKcApSq8hXA7UayP4DfAJ\nSZsD50bEXZL2Iu1wrs1HoGsDjR4Adqakp4B7SS/2eQlwTxQPGfw28AHSzuopSd8k7fAubLC8VY62\nI+JRSXdLmkV6culLIuIqSR8cZZxrkR6TXX4t4wGS3k8qHF9I2iH+npUfkLZrHv7rvJ41SXmrtQnw\n5wbrH7WImC/pZ6S3Cr4FODwf7QNcGhFLACT9iPRI+OXAy1k1H7sCv4x0NsPwfC3aE/hB5CcKN5m3\n/H/7DnCwpPl53eX3VvyZdHY2Xp9QPCa4gDCAjwB/ioidJK0BPFU7QUScJelqYD/gIqUHogn4dkR8\nooV1HBQRNwz3SNqQ+jv55XkHvxfwduDI/LlV5wDvJB3NDldhjDrOXFV1CrC/pBnAP5Hqzx+TdAZp\np1pLpHaLd42wjqcazN/wwWiSvgXsAiyMiP1WmTHiT6Qzk/lKFxbsWGeZKvXPr82HpP1YvfdojHbe\n+aTqpGdIhcuK0ri1qbMdWne5DWLiqfcj3gB4OH9+N7DGKjNJW0XEHyPiq6TqiZ1I739+m6SN8zQD\nanxVVO16bwe2lLR17j8E+GWus58WET8DjsnrqbUUaHTlzHmk1yseQHoFJW3G+SngbyVtm9f1OLBU\n6ZHR+5amf6wUy9XA7qX2meep/hVbt5Kq8uqtu+5ONiIOi4hd6hUOkvaRNDl/fiGpyme4TeL1kqZJ\nWod0dvFr4BfUz8fVwN9J2nJ4eL1Y6sRMaZnD7RH15l3p/xYRDwMPAZ8AzqiZ9gWks03rIRcQE0+9\no9RTgbmSbiA9L/+JOtO8Izcc3wDsAPx3RNwK/CtwiaQbSY9drncZ4yrrjIhnSI8c/mGedznwDdIO\n5MI87ArS2U2t+cA3hhtKy8vPVRu3kurRf5eHjTrOSC/bOQn454i4CViQl/td4MrSPP8F/EzSZZHe\n/fwe4Ky8nqtIVWm1LgL2GO6R9CFJD5BeAXmjpNrHl49kb2D4f/NT4KMRMfxe7muAc3P8P4iI6xvl\nI8d/OHBeXtbZtSuqIwAiPU7830iF/A2k3NWaT/F/WysPOxN4ICJuH55I0suBq2vOKKwH/Lhvsx5Q\nesvbfhHxWIXrOJRULXZUVetYXZK+ClwfEWeUhs0jXQp9ee8iM/AZhFmv/BMrvy5zwpH0O+ClpLOy\nsptdOPQHn0GYmVldPoMwM7O6XECYmVldLiDMzKwuFxBmZlaXCwgzM6vLBYSZmdX1/wF6hCDq3s7V\nvAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x25d7e3a6908>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Logistic Regression\n",
"from sklearn.linear_model import LogisticRegression\n",
"lr = LogisticRegression()\n",
"\n",
"# train the model using X_train_dtm\n",
"lr.fit(X_train_dtm, y_train)\n",
"\n",
"# make class predictions for X_test_dtm\n",
"y_pred_class = lr.predict(X_test_dtm)\n",
"\n",
"DrawROC(y_test,lr.predict_proba(X_test_dtm)[:,1],'Logistic Regression')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Task 6\n",
"\n",
"Using either Naive Bayes or logistic regression (whichever one had a better AUC in the previous step), try **tuning CountVectorizer** using some of the techniques we learned in class. Check the testing set **AUC** after each change, and find the set of parameters that increases AUC the most.\n",
"\n",
"- **Hint:** It is highly recommended that you adapt the **`tokenize_test()`** function from class for this purpose, since it will allow you to iterate quickly through different sets of parameters."
]
},
{
"cell_type": "code",
"execution_count": 568,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn import metrics\n",
"\n",
"# define a function that accepts a vectorizer and calculates the accuracy\n",
"def tokenize_test(vect):\n",
" \n",
" # create document-term matrices using the vectorizer\n",
" X_train_dtm = vect.fit_transform(X_train)\n",
" X_test_dtm = vect.transform(X_test)\n",
" \n",
" # print the number of features that were generated\n",
" print('Features: ', X_train_dtm.shape[1])\n",
" \n",
" # use Multinomial Naive Bayes to predict the star rating\n",
" clf = LogisticRegression()\n",
" clf.fit(X_train_dtm, y_train)\n",
" y_pred_class = clf.predict(X_test_dtm)\n",
" \n",
" # print the accuracy of its predictions\n",
" print('Accuracy: ', metrics.accuracy_score(y_test, y_pred_class))\n",
" \n",
" print(\"confusion matrix:\")\n",
" print(metrics.confusion_matrix(y_test, y_pred_class))\n",
" \n",
" DrawROC(y_test,clf.predict_proba(X_test_dtm)[:,1],'Logistic Regression')"
]
},
{
"cell_type": "code",
"execution_count": 569,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Features: 7611\n",
"Accuracy: 0.884745762712\n",
"confusion matrix:\n",
"[[255 10]\n",
" [ 24 6]]\n"
]
},
{
"data": {
"image/png": "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\nvAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x25d7e34bbe0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# use the default parameters\n",
"vect = CountVectorizer()\n",
"tokenize_test(vect)"
]
},
{
"cell_type": "code",
"execution_count": 570,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Features: 9106\n",
"Accuracy: 0.894915254237\n",
"confusion matrix:\n",
"[[256 9]\n",
" [ 22 8]]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x25d048cc748>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# don't convert to lowercase\n",
"vect = CountVectorizer(lowercase=False)\n",
"tokenize_test(vect)"
]
},
{
"cell_type": "code",
"execution_count": 571,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Features: 61020\n",
"Accuracy: 0.891525423729\n",
"confusion matrix:\n",
"[[258 7]\n",
" [ 25 5]]\n"
]
},
{
"data": {
"image/png": "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\nSUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x25d0431e358>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# include 1-grams and 2-grams\n",
"vect = CountVectorizer(ngram_range=(1, 2))\n",
"tokenize_test(vect)"
]
},
{
"cell_type": "code",
"execution_count": 572,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Features: 972\n",
"Accuracy: 0.864406779661\n",
"confusion matrix:\n",
"[[248 17]\n",
" [ 23 7]]\n"
]
},
{
"data": {
"image/png": "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\nNfT/AdaN3JjseCpxAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x25d04554a90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# ignore terms that appear in more than 50% of the documents\n",
"vect = CountVectorizer(max_df=0.5,min_df=11)\n",
"tokenize_test(vect)"
]
},
{
"cell_type": "code",
"execution_count": 573,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'œæsteer', 'œæuntil', 'œæhmmmmm', 'overwhelming', 'œæmorning', 'thur', 'appreciate', 'yelper', 'œælet', 'movies', 'restroom', 'added', 'rojas', 'cities', 'œæwow', 'gson', 'swallowed', 'pits', 'exert', 'jr', 'participation', 'neighborhoods', 'roaches', 'hated', 'market', 'honking', 'obscenities', 'gushing', 'structure', 'traditional', 'prowess', 'decaf', 'guards', 'œægave', 'mcdy', 'warned', 'neat', 'embarrassed', 'lightly', 'slaps', '3rd', 'alike', 'marginal', 'easily', 'earns', 'shiny', 'dime', 'eeoc', 'comparing', 'seperate', '324', 'carefully', 'buns', 'mcmeal', 'œæmiami', 'lo', 'œæthanks', 'false', 'vanilla', 'wednesdays', 'cons', 'mn', 'luv', 'looooong', 'ooh', 'weekend', 'œæyears', '12minutes', 'tank', 'goilng', 'areas', 'jams', 'cashiers', 'changing', 'hood', 'driveway', 'san', 'scam', 'hashbrown', 'winked', 'angsty', 'sub', 'yesteryear', 'tapping', 'œænothing', 'graveyard', 'tomatoes', 'looting', 'dt', 'bible', 'œæneither', 'promotional', 'guard', 'enjoying', 'booth', 'install', 'footpath', 'outpost', '89', 'œæfull', 'doh', 'kostner', 'rayon', 'boxed', 'spending', 'odors', 'invariable', 'article', 'beverage', 'œæperfect', 'heinz', 'mommies', 'allot', 'œæsince', 'cord', 'tightly', 'performing', 'proceeded', 'bin', 'noodles', 'riverside', 'payment', 'toes', 'deciding', 'œæoccasionally', 'occurs', 'packaging', 'safety', 'bolts', 'pastries', 'undeniable', 'onto', 'unhelpful', 'brewed', 'reform', 'markedly', 'lump', 'easier', 'insignificant', 'pizza', 'wal', 'intervene', 'sh', 'condiment', 'dish', 'trick', 'recycled', 'ck', 'jobless', 'unreal', 'vegetarian', 'pumping', 'ass', 'freezer', 'lrg', 'mug', 'em', 'broke', 'nauseating', 'suggestion', 'chitty', 'fabulous', 'barbecue', 'books', 'stranger', 'rape', 'stationed', 'feature', 'œækinda', 'comically', '45pm', 'include', 'cane', 'begged', 'lectrical', 'subsequent', 'interesting', 'diet', 'paychecks', 'œæwas', 'sensors', 'wen', 'sets', 'sun', 'psst', 'katelyn', 'dose', 'firstly', 'thehomless', 'unhappy', 'nonexistent', 'samantha', 'goers', 'attend', 'relax', 'fire', 'ups', 'dozen', 'lead', 'sprinkled', 'vandalized', 'began', 'listening', 'latino', 'œæevery', 'schedule', 'tooth', 'darkness', 'stone', 'qt', 'reality', 'artists', 'smaller', 'retired', 'minimal', 'atrocious', 'œæyep', 'necessarily', 'davidson', 'dec', 'wars', 'paradise', 'moral', 'employ', 'difficulty', 'brief', 'qty', 'rings', 'incidentally', 'resist', 'storm', 'speakeri', 'quibbling', 'dishes', 'section', 'mutters', 'compared', 'revealed', 'prevent', 'immature', 'excuse', 'server', 'inaccurate', 'starving', 'conquer', 'shitty', 'sanitizer', 'accosted', 'passion', 'fil', 'inform', 'vary', 'popeyes', 'helps', 'direct', 'uggggghh', 'access', 'website', 'everyones', 'crappy', 'cosby', 'œ_', 'charleston', 'wealthier', 'snooty', '365', 'durango', 'insincere', 'mccraving', 'frustration', 'spiced', 'acted', 'plants', 'jalapeí', 'lip', 'eats', 'accents', 'frappes', 'begins', 'outing', 'yelpcdn', 'puts', 'changed', 'indoors', 'efficiently', 'errors', 'inability', 'rainbow', 'disregard', 'blood', 'replica', 'trouble', 'turns', 'consumption', 'decatur', 'dr', 'rebuilt', 'twas', 'pp', 'remain', 'œætaste', 'communicating', 'puzzled', 'laugh', 'encourages', 'larger', 'la', 'goddamn', 'italian', 'naturally', 'combos', 'flipped', 'fizz', 'drivers', 'paintings', 'granted', 'krispy', 'choir', 'trendy', 'reprieve', 'behavior', 'unbelievably', 'scene', 'waiteven', 'attire', 'startled', 'heroin', 'moderately', 'crappiest', 'joint', 'steak', 'einstein', 'bagcount', 'infestation', 'frogger', 'lowlife', 'soggy', 'tear', 'blade', 'captive', 'œæacross', '15so', 'mcdud', 'ruined', 'affixing', 'colder', 'assaulted', 'phlegm', 'gifed', 'beneficial', 'crashing', 'œæfour', 'prevailed', 'tying', 'smoothies', 'spare', 'porta', '7am', 'contacted', 'morbid', 'œæcold', 'ive', 'scarce', 'sell', 'exude', 'thorough', 'solid', 'throws', 'doled', 'version', 'mochas', 'hideout', 'creepers', 'towels', 'oct', 'fillet', 'dq', 'gentle', 'impatient', 'amongst', 'sound', 'flow', 'mins', 'faces', 'jersey', 'coins', 'details', 'justified', '430am', 'offish', 'mckingdom', 'cove', 'tdoit', 'clocked', 'additional', 'frequent', 'redemption', 'el', 'ultra', 'scale', 'versa', 'rid', 'pack', 'hooligans', 'readily', 'cautious', 'rung', 'strangely', 'psychotic', 'exploit', 'omen', 'secret', 'pc', 'driver', 'belligerent', 'melted', 'focus', 'wikipedia', 'harmless', 'amazingly', 'wells', 'boston', 'lily', 'falling', 'circles', 'cinnamon', 'glisan', 'œætalk', 'cont', 'smug', 'watery', 'provide', 'keeps', 'prolly', 'fuse', 'mayonnaise', 'certificate', 'vacation', 'dryer', 'smoothie', 'atleast', 'digital', 'obey', 'ya', 'wipedown', 'chola', 'mccarran', 'dolly', 'dipping', 'info', 'privileged', 'dreams', 'beneath', 'neatly', 'rge', 'ocassions', 'bu', 'hoops', 'horded', 'track', 'sandy', 'crawled', 'appears', 'solve', 'tailgate', 'sliding', 'exaggerating', 'wondered', 'winter', 'cravings', 'toi', 'afternoon', 'excruciatingly', 'reliant', 'revolution', 'nodding', 'containers', 'show', 'packers', 'stories', '1value', 'sodas', 'imaginary', 'islands', 'liiiiitle', 'highest', 'nights', 'asst', 'gladiator', 'feed', 'unspoken', 'gawd', 'rallys', 'catches', 'disclaimer', 'needing', 'notable', 'arriving', 'publicity', 'aparents', 'confirmed', 'blackwater', 'desk', 'demanded', 'hooker', 'swear', 'sized', 'dockside', 'happening', 'overdone', 'differences', 'swore', 'success', 'œæfive', 'œæpatties', 'someday', 'flavors', 'eternal', 'sundays', 'electrician', '9pm', 'fuck', 'solicited', 'turning', 'poses', 'dignity', 'filling', 'inches', 'unisex', 'fuel', 'pressure', 'œæneed', 'dill', 'œæ5', 'precious', 'ing', 'melts', 'apologize', 'utterly', 'œæsorry', '21', 'œæsend', 'elite', 'bud', 'fucking', 'unpleasant', 'chatted', 'tempted', 'standardization', 'shape', 'ewww', 'animal', 'turnover', 'learn', '285', 'œægod', 'xtra', 'stoned', 'bound', 'to', 'castup', 'neon', 'vitamin', 'sarah', 'merge', 'concise', 'itthat', 'smattered', 'œæseriously', 'lazily', 'inexplicably', 'minuite', 'grow', 'violations', 'button', 'smirk', 'edible', 'frantically', 'gasoline', 'refunding', 'produce', 'salsa', 'clique', 'trough', '07', 'gestured', 'exclusively', 'mccafees', 'racing', 'serviced', 'pumpkin', 'cop', 'unlit', 'emailed', 'heads', 'hilarious', 'forms', 'desserts', 'greeting', 'nearly', 'œæhis', 'œædear', 'blunders', 'tapatia', 'œælike', 'mentoned', 'majority', 'pandora', 'wake', 'bang', 'unfit', 'outstanding', 'razor', 'games', 'pimp', 'begs', 'decade', 'mediocre', 'touching', 'mcsatan', 'patrons', 'batch', 'vouch', 'specialty', 'œæmoral', 'workplace', 'trim', 'trusty', 'œæmenu', 'complainers', 'deep', 'oxymoron', 'travel', 'dream', 'succumb', 'boat', 'exchanges', 'palate', 'mayra', 'die', 'profile', 'drop', 'presumably', 'cake', 'pry', 'paul', 'pause', 'google', 'represent', 'doesnt', 'odds', 'dí', 'munchi', 'lottery', 'subpar', 'hater', 'hispanic', 'œælol', 'sharp', 'dense', 'cross', 'œælate', 'peoples', 'infinity', 'providing', 'premiere', 'facial', '10mins', 'conditioned', 'baked', 'defiantly', 'œæcustomer', 'snatchings', 'swarm', 'basics', 'clue', 'respond', 'mini', 'feet', 'obesity', 'intentionally', 'props', 'obligated', 'choreographed', 'adjust', 'natural', 'government', 'awake', 'childhood', 'œæstep', 'organs', 'tech', 'forgets', 'blows', 'earlier', 'protein', 'grade', 'lagging', 'crunchy', 'rodrigo', 'prompting', 'sporadically', 'yarn', 'œæpathetic', 'jan', 'inedible', 'œæalso', 'jack', 'clown', 'appearance', 'throughout', 'didnt', 'proximity', 'bushes', 'fit', 'presidents', 'budget', 'miracle', 'œædid', 'mile', 'board', 'moment', 'bikes', 'beltilne', 'bcas', 'œæmcdouble', 'toward', 'witty', 'default', '0600', 'easter', 'theory', 'hangs', 'contemplate', 'installed', 'lightening', 'boasting', 'lackadaisical', 'salvador', 'commenters', 'œæcome', 'vending', 'stopping', 'tours', 'stared', 'framed', 'farmer', 'leather', 'independence', 'painful', 'lunchtime', 'ocd', 'nats', 'irony', 'october', 'speakers', 'replacement', 'art', 'hwy', 'stole', 'mccarter', 'castle', 'sports', 'charging', 'monthly', 'recognize', 'beechnut', 'blech', 'prostitutes', 'ghost', 'cramped', 'the', 'perfect', 'geeky', 'visiting', 'vicinity', 'secretly', 'fixed', 'awfulness', 'chosen', 'cafeteria', 'appreciation', 'œæis', 'geared', 'dock', '0service', 'husband', 'grant', 'œæstay', 'wouldnt', 'œænormally', '95th', 'dfw', 'whose', 'charades', 'email', 'wasnt', 'smelly', 'creme', 'vomit', 'shoes', 'cor', 'rv', 'uhhh', 'bowery', 'radical', 'overthen', 'moderation', 'monkeys', 'waved', 'tricky', 'hic', 'obsessed', 'hates', 'idiota', 'tiniest', 'endless', 'worry', 'quilt', 'opt', 'spacious', 'œæworst', 'usc', 'usual', 'grumpy', 'fee', 'reminds', 'mob', 'contaminated', 'forsook', 'begrudgingly', 'raining', 'plane', 'industry', 'unstable', 'moist', 'shortly', 'exclamation', 'authentic', 'heckling', 'negligence', 'passing', 'pen', 'tally', 'van', 'maddening', 'alright', 'touch2play', 'decorations', 'acts', 'gov', 'lacrosse', 'revamping', 'dared', 'company', 'reactionary', 'que', 'deals', 'comments', 'prepare', 'willingness', 'coworker', 'yummy', 'milwaukee', 'escape', 'previous', 'thailand', 'œæmaybe', '10131', 'australia', 'œæhands', 'letters', 'drivin', 'beef', '2011', 'logic', 'bits', 'honor', 'statement', 'reese', 'personnel', 'nine', 'livingsocial', 'sticker', 'difference', 'taught', 'whyyyy', 'banana', 'messes', 'chewy', 'riviera', 'weekday', 'angus', 'needlessly', 'tix', 'resturaunt', 'throughevery', 'trashed', 'œæ3', 'united', 'disparate', 'slightly', 'pockets', 'suffice', 'construction', 'posted', 'authentically', 'heard', '52', 'pronto', 'lives', 'bisy', 'mcnugget', 'midnight', 'lattes', 'juan', 'anythingfinally', 'individuals', 'chocolatte', 'writing', 'creamy', 'followed', 'stealing', 'culinary', 'excellent', 'ideas', 'œætwo', 'thorugh', 'turnaround', 'superiors', 'mill', 'citizens', 'listener', 'major', 'span', 'sorts', 'homie', 'anythingguy', 'pizzas', '28', 'spinal', 'makin', 'mcnasty', 'alley', 'fluke', '49', 'smeared', 'storefront', 'suv', 'tap', 'œæimpossible', 'arguably', 'shoe', 'launched', 'cking', 'foursquare', 'aubrey', 'blew', 'nut', 'classy', 'tid', 'incomprehensible', 'passenger', 'expressed', 'suddenly', 'œætoo', 'suspected', 'intel', 'themed', 'operates', 'spread', 'consumable', 'noting', 'effort', 'dvd', 'flys', 'fangled', 'ugly', 'premises', 'instant', 'confirmation', 'congrats', 'risked', 'overly', 'amex', 'cut', 'fryer', 'tiem', 'biscut', 'holding', 'workflows', 'teams', 'valid', 'icecream', 'plans', 'soldiers', 'uniform', 'internal', 'œæsandwiches', 'dipper', 'bronzeville', 'operational', 'acknowledge', 'event', 'disaster', 'hording', 'persons', 'tolerate', 'remarkably', 'hunk', 'arteries', 'fructose', 'gate', 'originally', 'shared', 'macdonalds', 'apartments', 'laughed', 'accepting', 'advocate', 'clad', 'excited', 'exaggeration', 'disturbing', 'understood', 'servicealso', 'predictable', 'civility', 'style', 'disinterested', 'true', 'breakfasts', 'proverbial', 'owns', 'tourist', 'fucker', 'sip', 'pieces', 'mental', '100', 'costumers', 'œæmachine', 'joyful', 'crowd', 'œænuff', 'oval', 'smashed', 'theme', '2004', 'arrive', 'instructed', 'range', 'butter', 'conversing', 'essentially', 'priorities', 'staleness', 'reference', 'wanna', 'ton', 'oatmealskip', 'œætotally', 'worried', 'hd', 'similar', 'cases', 'eater', 'indeed', 'accosting', 'olivia', 'washed', 'œægo', 'quarterly', 'hialeah', 'plastic', 'efforttypically', 'earned', 'ride', 'launching', 'lowest', 'galleria', 'derelict', 'tastey', 'nearing', 'smoking', 'supermarket', 'professionally', 'corners', 'quiet', 'practice', 'œæplease', 'toooo', 'œæasked', 'un', 'doldrums', 'boosted', 'bless', 'charles', 'œæinitially', 'anonymous', 'seattle', '56', 'œæat', 'showering', 'corn', 'renderings', 'dressing', 'stuck', 'gus', 'roll', 'alarms', 'constraints', 'œæanyway', 'screwing', 'rivers', 'pornographic', '53', 'jessica', 'preferred', 'interrupting', 'gloves', 'chin', 'springs', 'œæwarriors', 'offers', 'marketing', 'horse', 'vera', 'hobo', 'sorted', 'weeks', 'space', 'settle', 'expecting', 'temper', '29th', 'wander', 'compelled', 'bums', 'œæcostmers', 'laughter', 'pumps', 'fingering', 'indicate', 'ml', 'œæonly', 'sinfully', 'spark', 'limited', 'staffing', 'buds', 'slight', 'fourth', 'rushing', 'groupings', 'convinced', '8th', 'œæthats', 'noisy', 'goodness', 'individually', 'disturbingly', 'fifty', 'bro', 'unappealing', 'electric', 'ned', 'storage', 'undercooked', 'muahahahaha', 'hang', 'retarded', 'remedial', 'genially', 'sucker', 'dookie', 'rudely', 'forest', 'appetite', 'weighed', 'portraits', 'regulated', 'ex', 'butterfinger', 'jumping', 'depp', 'cringe', 'actions', '11', 'ricky', 'oreo', 'vehicle', 'overkill', 'sos', 'names', 'tantalizing', 'fond', 'paper', 'patron', 'pages', 'prostitute', 'swedish', 'stays', 'lap', 'buuuuut', 'manner', 'crime', 'dvds', 'guilty', 'inconvenience', 'playplace', 'bank', '__', 'blackberry', 'prices', 'ellen', 'smash', 'illegally', 'utensils', 'mushroom', 'hunting', 'redecorating', 'populate', 'donation', 'creek', 'outlet', 'reputation', 'throat', 'treated', 'nugget', 'reveal', 'payed', 'pet', 'rahm', 'comical', 'cleanest', 'œægot', 'dumbfounded', 'alternative', 'nutritionally', 'toss', 'meaning', 'addison', 'œædepending', 'th', 'puck', 'emphasize', 'familiar', 'flooded', 'playeruh', 'barbeque', 'appropriate', 'stolen', 'important', 'cab', 'unfiltered', 'mood', 'raw', 'accent', 'honolulu', 'tvs', 'œæbe', 'hook', 'dads', 'chatting', 'dismissed', 'fishy', 'allowing', 'tomorrow', 'mcrib', 'cheat', 'œænow', 'beach', 'reopen', 'macdonald', 'fidunkin', 'slurpee', 'stairs', 'relayed', 'science', 'vinyl', 'reaction', 'error', 'operated', 'flavorless', 'frozen', 'feedback', 'circle', 'greasy', 'term', 'machines', 'profit', 'pants', 'teenagers', 'avenues', 'reviled', 'œæstill', 'maker', 'venues', 'for', 'noooooooo', 'dragged', 'needless', 'fallen', 'nationwide', 'signedribby', 'boca', 'organized', 'effect', 'mixed', 'xanax', 'fought', 'user', 'policy', 'sent', 'attendees', 'œæcare', 'easiest', 'bueno', 'swiss', 'excruciating', 'fridays', 'disorganization', 'retraining', 'œæalliance', 'shithole', 'brutal', 'convention', 'smiled', 'mills', 'greatly', 'lionheart', 'dangerous', 'combination', 'halfway', 'wrote', '1pm', 'respecting', 'pixellated', 'hesitant', 'amazed', 'sean', 'activity', '15mins', 'grossed', 'cesspool', 'jodido', 'creeping', 'legacy', 'situating', 'overhead', 'frat', 'mall', 'ribs', 'answers', 'œæam', 'watered', 'backhanded', 'ground', 'speedy', 'deserts', 'tossing', 'batter', 'dubious', 'extends', 'basement', 'growing', 'federal', 'maryland', 'probability', 'nightmare', 'œæsays', 'rise', 'longish', 'surprisingly', 'sesame', 'thee', 'emitting', 'infected', 'crystal', 'peace', 'casino', 'stride', 'exterior', 'fashion', '30pm', 'ewwwwthese', 'view', 'planters', 'parker', 'facade', 'businesssss', 'euros', 'vice', 'costco', 'shed', 'smoke', 'booths', 'eww', 'toy', 'negativity', 'swiped', 'ham', 'boot', 'darn', 'state', 'arrow', 'objectively', 'reviewed', 'fueled', 'fulfilled', 'constant', 'screwed', 'dismaying', 'tax', 'tastefully', 'elveru', 'spit', '488', 'sloowwwwww', 'advantage', 'cooking', 'œæwanna', 'is', 'expediter', 'gruel', 'cactus', 'mcclurg', 'defensive', 'casinos', 'unwrapping', 'remembered', 'threaded', '11pm', 'attest', 'fletcher', 'personally', 'sleeping', 'drifting', 'suggested', 'annoyed', 'artwork', 'improved', 'antiques', 'smelled', 'fantabulous', 'clubs', 'assumed', 'approximately', 'dash', 'wolfson', '10pm', 'sister', 'œæjoanne', 'œæfreshness', 'ringing', 'nearby', '50s', 'floors', 'bigins', 'dips', 'grosser', 'acceptance', 'œæway', 'shorted', 'potty', 'perhaps', 'parfait', 'unfortunatly', 'laced', 'manageable', 'stingiest', 'shrine', 'hospitals', 'lord', 'wallet', 'œæguess', 'stretch', 'evidence', 'wouldhorrible', 'hehe', 'ee', 'nicely', 'prep', 'mon', 'blasting', 'soup', 'œæwait', 'relieve', 'œæjesus', 'bobbed', 'letter', 'character', 'heat', 'meh', 'reminder', 'emory', 'misbehaving', 'address', 'sluggish', 'mayor', 'releases', 'ruins', 'œæeither', 'ew', 'motivation', 'foodemployees', 'cannot', 'devoid', 'hq', 'pickle', 'born', 'hairnets', '59', 'finds', 'slutty', 'african', '97220', 'outweighs', 'upside', 'properly', 'knocking', 'crossing', 'stepped', 'sanity', 'nursing', 'pile', 'boyfriend', 'œædrove', 'bomb', 'catch', 'position', 'jacked', 'relates', 'highlighted', 'appreciated', 'nimber', 'agonizingly', 'tailed', 'loc', 'puddles', 'thuggery', 'timed', 'nyny', 'apologetic', 'express', 'speriance', 'jalepeno', 'scarfing', 'dundee', 'intelligent', 'scott', 'regret', 'siblings', 'outdoors', '2002', 'splash', 'vouchers', 'hearty', 'fuss', 'report', 'qualify', 'œæanywhere', 'bringing', 'œæreally', 'urgent', 'comed', 'aquarium', 'slove', 'inhumanity', 'appeal', 'mycdonalds', 'questions', 'seatings', 'unwind', 'pairs', 'bullshit', 'weed', 'danger', 'mmmmmm', 'maek', 'œæto', '04am', 'showered', 'œæchaos', 'efficient', 'œæmine', 'grandma', 'spoiled', 'documents', 'œæredbox', 'sprite', '45am', 'grabbed', 'fading', 'biscuits', 'smell', 'june', 'incomplete', 'reservedly', 'bastards', 'canceling', 'offense', 'dismiss', 'shortest', 'metro', 'œæsounded', 'desperate', 'staple', 'becoming', 'reflects', 'contrast', 'snap', 'gossiping', 'movie', 'waiter', 'œæhey', 'wth', 'painless', 'unpaid', 'œæbrought', '14', 'œæwhile', 'vs', 'curry', 'confuse', 'tooi', 'œæ11', 'staffs', 'deficiencies', '15minutes', 'lower', 'relatives', 'outlets', 'gregarious', 'numbers', 'specified', 'decidedly', 'thingys', 'clueless', 'dress', 'feces', 'grey', '500', 'servicing', 'avail', 'breathing', 'œægrrr', 'relaying', 'irresponsible', 'understaffed', 'forgetful', 'conclusion', 'youth', 'intestines', 'lighting', 'ahemlax', 'witnessing', 'panhandlers', 'œæalong', 'œæcappuccinos', 'œædon', 'occasion', 'maxwell', 'husbands', 'fi', 'branches', 'shit', 'tides', 'leading', 'offstrip', 'servers', 'stifle', 'curb', 'laptops', 'sam', 'nickel', 'eggwhite', 'clients', 'balls', 'volunteering', 'entrances', 'acknowledgement', '7pm', 'hallmark', 'retro', 'replace', 'delivery', 'unit', 'sadness', 'six', 'questioned', 'ease', 'intention', 'reiterated', 'bully', 'code', 'satisfy', 'tail', 'usuallly', 'badly', 'engineer', 'pooped', 'pre', 'ingress', 'stands', 'suppose', 'depends', 'protocol', 'badass', 'male', 'functioning', 'materialize', 'cds', 'wallets', 'sincere', 'covenanted', 'portion', 'audacity', 'trash', 'converse', 'countries', 'burrito', 'vampire', 'peak', 'offthestrip', 'suck', 'bottles', 'œænone', 'load', 'oriental', 'peppermint', 'quarterpounders', 'gray', 'torture', 'shelter', 'intertwine', 'wallpaper', 'o_o', 'bland', 'œæhigh', 'patrolling', 'indie', 'œæagain', 'older', 'florescent', '170', 'northfield', 'œæimagine', 'lterally', 'urgency', 'mexican', 'supper', 'circumstances', 'church', 'permitted', 'starved', 'fascist', 'every1', 'divided', 'beats', 'suspiciously', 'thanksguy', '35mins', 'eatery', 'wi', 'œæpaid', 'orson', 'courtesy', 'hustle', 'walmarts', 'terminology', '11am', 'cushioned', 'implicating', 'suggestions', 'crack', 'pair', 'interiors', 'recipe', 'loaded', 'humanity', 'department', 'explains', 'lacking', 'chicen', 'œæokay', 'behaviors', 'spinning', 'wrappers', 'ad', 'air', 'clarifying', 'expediency', 'thug', 'fetched', 'furture', 'thai', 'proof', 'crackhead', 'moves', 'washing', 'unmotivated', 'relative', 'muscle', 'grumpysaurus', 'phew', 'pros', 'sake', 'pan', 'dynamic', 'omg', 'craps', 'human', 'compute', 'lbs', 'œæservic', 'wound', 'ni', 'reheated', 'nonstop', 'saloon', 'extent', 'skimped', 'œæmuch', 'cards', 'overwhelmed', 'regulars', 'kroc', 'specific', 'btw', 'mho', 'uh', 'circling', 'œæcursing', 'ish', 'pain', 'doughnut', 'mcdo', 'collecting', 'whites', 'stash', 'intended', 'mumbling', 'er', 'lover', 'save', 'de', 'rushed', 'shortchanged', 'supervising', 'lunchtimei', 'spurlock', 'vegetables', 'oatmeal', '5if', 'carnegie', 'marinara', 'smack', 'nearest', '09', 'brass', 'towed', 'shifts', 'œæconnoisseur', 'checked', 'exceeds', 'identification', 'forgetting', 'reserved', 'œætake', 'explaining', 'expose', 'midtown', '1i', 'cares', 'redone', 'unsure', 'œæheck', 'cute', 'basis', 'thoughone', 'plaid', 'crowbar', 'oil', 'bottlecaps', 'œæunderstand', 'lovin', 'intersection', 'model', 'œæodd', 'fays', 'flipping', 'incompetency', 'becomes', 'proceeds', 'ftr', 'disgustingly', 'communicate', 'carbon', '49c', 'trays', 'neck', 'popped', 'caused', 'œæmcrib', '24hrs', 'luck', 'measly', 'patty', 'assuming', 'œædue', 'œæ1st', 'macedonia', 'truck', 'shopped', 'miles', 'grrrrrrrrrrr', 'languages', 'individual', 'phones', 'unusual', 'kill', 'scottish', 'timers', 'mccafí', 'sty', 'prefers', 'amazing', 'unleaded', 'foul', 'glowers', 'lowell', 'amusing', 'practices', 'tact', 'œæseverely', 'œæmayonnaise', '130am', 'incorrect', 'menacing', 'unsafe', 'insult', 'espresso', 'categories', 'inserting', 'sighed', 'œæsweet', 'liquid', 'milks', 'heavier', 'paranormal', 'worthwhile', 'priced', 'cooks', 'horrified', '05i', 'awnser', 'extremley', 'pitstop', 'œæfranchise', 'resell', 'œædivide', 'popcorn', 'behest', 'sewage', 'tower', 'daring', 'cardinal', 'nutrition', 'hangover', 'twin', 'columbus', 'œæwill', 'smoothienoget', 'spoke', 'œæeverything', 'video', 'outer', 'warmer', 'douglas', 'charter', 'apprehensive', 'discusting', 'congregating', 'yelpers', 'œæpurchased', 'doors', 'consistant', 'grandkids', 'educated', 'stated', '96', 'forbid', 'harassing', 'imagined', 'female', '00am', 'satisfactory', 'bench', '04', 'spanish', 'sanitary', 'notbeing', 'œæmcdonald', 'twins', 'mediterranean', 'œæforgot', 'feening', 'condiments', 'cheating', 'university', 'regardless', 'royally', 'travesty', 'winds', 'diners', 'dog', 'mintues', 'semi', 'seasonal', 'backpack', 'watched', 'cursory', 'trashy', 'stark', 'fund', 'monopoly', 'slam', 'ed', 'recourse', 'amplified', 'bravo', 'powers', 'retuning', 'ln', 'list', 'maze', 'according', 'difficult', 'minus', 'foreign', 'slid', 'fooled', 'benchmarks', 'beggars', 'scream', 'houses', 'newly', 'villages', 'reorganization', 'award', 'mgr', 'alternated', 'growl', 'œæthree', 'martin', 'energetic', 'greater', 'shouting', 'upbeat', 'policemen', 'canada', 'outright', 'loiterer', 'entree', 'fresher', '1cleanliness', 'spoons', 'grabs', 'regard', 'reasonably', 'woot', 'leftovers', 'wrapped', 'reply', 'dispense', 'ation', 'œæok', 'œækeep', 'unapologetic', 'somewhat', 'puff', '380', 'broiler', 'tub', 'damnedest', 'reliabilty', '99c', 'living', 'descent', 'morgan', 'œæugh', 'œæobviously', 'summerlin', 'littering', 'plated', 'surprising', 'compliment', 'shade', 'seven', 'woo', 'reported', 'pork', 'gamble', 'andes', 'orderactually', 'apologizes', 'candy', 'thousand', 'mt', 'accept', 'efficiency', 'rip', 'choices', 'continuously', 'teammates', 'runny', 'overlooked', 'œæsadly', 'planet', 'yay', 'rough', 'irvine', 'dine', 'golf', 'argue', 'screwy', 'loony', 'handsome', 'heading', 'click', 'œægrease', 'bummed', 'orderthose', 'inferior', 'affluent', 'idiots', 'saturdaybe', 'zombies', 'herb', 'temporary', 'zoom', 'mensroom', 'nye', 'surprises', 'frequently', 'lids', 'luke', '23', 'œærent', 'superbug', 'reports', 'blatant', 'finger', 'foodwise', 'enjoyment', 'œæbusy', 'types', 'became', 'raging', '60', 'appearing', 'intervention', 'insurance', 'prop', 'insert', 'taller', 'spirits', 'apples', '29', 'radaway', 'œæme', 'elephant', 'trust', 'sadly', 'freakin', 'mcgriddle', 'unsavory', '50c', 'œæcheers', 'famous', 'outhow', 'cliental', 'vaguely', 'hole', 'entitled', 'youngest', 'movement', '90', 'hun', 'œæmmmmmm', 'chairs', 'knock', 'existing', 'chick', 'thrus', 'briefly', 'egress', 'weirdest', 'redropped', 'formal', 'operate', 'cones', 'supplies', 'substituting', 'debit', 'handicap', 'hrmmm', 'thief', 'fluffy', 'appointment', 'fake', 'thingy', 'maintained', 'absolute', 'essential', 'applies', 'rant', 'houston', 'speedway', 'insufficiently', 'slower', 'pencil', 'dinning', 'costing', 'reeehhhhhhhhhhhhhh', 'bridge', 'beng', 'import', 'beggar', 'œæwork', 'tad', 'knees', 'anthony', 'swiping', 'yippies', 'hickey', 'preparing', 'teacher', 'custom', 'vowed', 'test', 'react', 'memory', 'steer', 'occasionally', 'sameer', 'ongoing', 'design', 'demographic', 'thirty', 'sucka', 'beltway', 'bellow', 'il', 'fitting', 'incompletely', 'œæjust', 'unappetizing', 'hermosillo', 'sevice', 'mic', 'incredible', 'sandwichesdon', 'fulfillment', 'franchised', 'deserving', 'craigslist', 'mclover', 'immediate', 'laissez', 'specifically', 'œæwon', 'quarters', 'guns', 'doll', 'crud', 'pasted', 'bites', 'instance', 'refuse', 'bones', 'boy', 'barriers', 'carmel', 'meatballs', 'drinksohgodwhy', 'ewwww', 'surpassing', 'thirst', 'filler', 'quicker', 'music', 'whaaa', 'pilsen', 'overs', 'stabding', 'livessave', 'gym', 'nudge', 'wiki', 'main', 'afghanistan', 'yup', 'œæeverytime', 'requests', 'fall', 'epic', 'angry', 'panhandling', 'historic', 'offering', 'misery', 'cornflakes', 'foolishly', 'retardly', 'thereof', 'this', 'responds', 'humungo', 'brings', 'force', 'hide', 'socks', 'execute', 'critical', 'headphones', 'refuge', 'unaware', 'verga', 'œæ100', 'hellhole', 'forthcoming', 'seal', 'songs', 'mcmoney', 'status', 'preference', 'seed', 'joking', 'subsequently', '7710', 'ramsay', 'gordon', 'tuesday', 'crave', 'protip', 'suffers', 'debate', 'brother', 'suspect', 'theyre', 'source', 'inconvenient', 'hella', 'dealing', 'blended', 'atrociously', 'information', 'cholesterol', 'brain', 'certainty', 'meds', 'numerous', 'wear', 'bulb', 'straw', 'bird', 'burn', 'services', 'disinfect', 'weirdo', 'org', 'lesson', 'destination', 'hipster', 'photos', 'dump', 'consumes', 'silicone', 'identity', 'discovered', 'seekers', 'jpg', 'cheer', 'lbj', 'lifetime', 'photo', 'zombie', 'kings', 'layers', 'payroll', 'jonesing', 'mop', 'saint', 'owed', 'exceeded', 'impaired', 'œæupon', 'relationship', 'determines', 'œæoh', 'customize', 'œæusually', 'visual', 'cursed', 'partially', 'gift', 'patient', 'œæfood', 'note', 'addiction', 'improvements', 'nametag', 'anticipate', 'dirtiest', 'guarantee', 'stations', 'colleagues', 'tossed', 'beard', 'œæ7', 'dried', 'brisk', 'mecca', 'asian', 'kempt', 'ev', 'million', 'specially', 'journey', 'acceptable', 'camp', 'suggest', 'occasional', 'badge', 'hydrating', 'developing', 'dry', 'razed', 'heck', 'adjacent', 'permanent', 'steamed', 'refurbished', 'œæthing', '40minutes', 'staircase', 'pisses', 'lets', 'peanut', 'suspects', 'bt', 'glowing', 'clothing', 'commendable', 'sooo', 'latin', 'œætalked', 'imagine', 'umbria', 'œærude', 'covered', 'ding', 'ownership', 'œæknowing', 'busier', 'addional', 'selling', 'wants', 'sweep', 'disease', 'kinds', 'broom', 'massive', 'greet', 'misleading', 'debacle', 'included', 'dip', 'œæcuz', 'quasi', '610', 'mickyd', 'œæcars', 'community', 'noted', 'sold', 'goof', 'grimy', 'utah', 'pin', 'meatless', 'tartar', 'œæwho', 'crawler', 'mugged', 'underneath', 'sonic', 'branch', 'inconveniencing', 'kidding', 'recomend', 'peeved', 'practically', 'counts', 'teas', 'flour', 'max', 'obvious', 'di', 'fingers', 'fails', 'speaking', 'appetizing', 'reconstruction', 'definite', 'conveniently', 'œæstupid', 'judge', 'œæunfortunately', 'sites', 'voila', 'lined', 'gessner', 'blueberry', 'whenever', 'altogether', 'howevee', 'germany', 'reluctant', 'lukewarm', 'colorful', 'stutter', 'patronizing', 'œægrayson', 'unlimited', 'terminal', 'upcharge', 'extraordinary', 'shot', 'pocket', 'washington', 'patronized', 'awoken', 'refuses', 'step', 'scheduled', 'flavorings', 'tender', 'sweat', 'shirted', 'œæwant', 'striking', 'herself', 'hmmm', 'garlic', 'snapped', 'accountability', 'œænope', 'travelling', 'remake', 'pediatrician', 'distracted', 'brush', 'cc', 'jumped', '9am', 'œæordering', 'figuring', 'acting', 'whats', 'fits', 'spoil', 'pale', 'bark', 'pigs', 'koreatown', 'manages', 'downside', 'hobos', 'genuinely', 'sensitive', 'jed', 'pointless', 'staying', 'reaching', 'accepted', 'mcchichen', 'qualms', 'spits', 'everyday', 'alarmed', 'mcsuck', '6pm', 'panchito', 'incommodious', 'beaverton', 'birds', 'unlike', 'respect', 'ignorant', 'skeevy', 'smoker', 'dangit', 'waaayy', 'triple', 'manuel', 'flowers', 'charted', 'earning', 'powdered', 'ethnic', 'competition', 'cover', '2008', 'pleased', 'doused', 'desire', '2am', 'pins', 'mcfood', 'purple', 'pretended', 'spreads', 'clouds', 'plan', 'œæblitzed', 'weirded', 'œæput', 'awhile', 'addition', 'creamer', 'kudos', 'arms', 'overheard', 'throwing', 'browns', 'happier', 'aggressively', 'overrun', 'hadn', 'sugars', 'frankly', 'alas', 'computer', 'atlanta', 'necessary', 'qrt', 'monday', 'œæget', 'grand', 'salads', 'bonanza', 'humanly', 'secondly', 'required', 'rally', 'entries', 'taco', 'considered', 'wildly', 'york', 'dispensing', 'perplexes', 'throughbig', 'carter', 'surrounding', 'blast', 'kreyí_l', 'sin', 'glanced', 'display', 'stingy', 'en', 'sink', 'tired', 'picking', 'freely', 'accused', 'answersby', 'film', 'cray', 'latter', 'slimy', 'stabbed', 'stanch', 'treatening', 'minimum', 'lps', 'chinatown', 'shoot', 'bucks', 'passable', 'record', 'œægood', 'dated', 'exacerbating', 'chano', 'anorexic', 'commenting', 'advertised', 'flash', 'associates', 'armed', 'lowers', 'improves', 'daniel', 'availability', 'banned', 'screamed', 'splurge', 'coaching', 'chaotic', 'commotion', 'glance', 'killing', 'struggle', 'posh', 'hopefully', 'zesty', 'alive', 'chrissake', 'purse', 'switched', 'involve', 'crunching', 'former', 'tale', 'designed', 'hooray', 'disrespectful', 'copped', 'depend', 'cure', 'reevaluate', 'pigeons', 'laundromat', 'backed', 'safe', 'higher', 'ayisyen', 'balance', 'prior', 'enraging', 'œæultimately', 'rocket', 'returns', 'highway', 'victor', 'escalate', 'dropping', 'huddled', 'helpless', 'grease', 'loooonnnng', 'common', 'telltale', 'nother', 'skid', 'attendant', 'bloody', 'pool', 'upper', 'napkin', 'boycotted', 'memorized', 'œæbetween', 'eh', 'poorly', 'terrified', 'extensive', 'industrial', 'occur', 'silence', 'shop', 'parkway', '80', 'pronounced', 'earth', 'alumnus', 'outdated', 'curious', 'mccorporationbucks', 'ear', 'uncomfortable', 'operation', 'afford', 'finished', 'sale', 'rebuild', 'loitering', 'peeps', 'emma', 'œæthus', 'factory', 'silly', 'teen', 'airport', 'luring', 'chocolat', 'jelly', 'response', 'huh', 'tbhall', 'future', 'dirt', '205', 'hassle', 'sweeping', 'checking', 'œæhowever', 'œæby', 'getaway', 'runs', 'hiss', '0food', 'œæfortunately', 'legal', 'hopping', 'pao', 'funky', 'shirt', 'mcghetto', 'newfound', 'œæordered', 'conversation', 'teachers', 'inconsistant', 'whopper', 'overworked', 'thick', 'tracks', 'œæflies', 'indulged', 'œædrunk', 'facilities', 'odd', 'toasty', 'littler', 'surround', 'hub', 'yo', 'ther', 'anyways', 'restore', 'amends', 'plops', 'buuuuuut', 'mcdolalds', 'privileges', 'act', 'repeatedly', 'win', 'base', 'compare', 'dolla', 'recalled', 'rectify', 'damage', 'skills', 'headed', 'œæseem', 'translucent', 'rating', 'comparison', 'trans', 'bothering', 'increased', 'command', 'backs', 'vile', 'hangout', 'connection', 'smells', '1960', 'asses', 'mushy', '3pm', 'topped', 'choosy', 'bus', 'theres', 'hotels', 'suburb', 'smart', 'crawling', 'œæturns', '12am', 'lingo', 'arguing', 'winner', 'priceless', 'gracious', 'mix', 'œæbecause', 'enter', 'game', 'pissing', 'pulls', 'homeful', 'absurd', 'œæburgers', 'sticks', 'slipped', 'wipes', 'professional', 'implying', 'died', 'bottle', 'gamezthis', 'build', 'sort', 'intolerable', 'gosh', 'scratch', 'pointed', 'revisit', 'replied', 'subjected', 'paranoid', 'reasonable', 'progress', 'dissapointed', 'tips', 'serviceable', 'mcwraps', 'moreover', 'operations', 'accurate', 'traffic', 'coffeeshop', 'ancient', 'snaked', 'macnice', 'reviewers', 'œæwhich', 'amateurs', 'bleak', 'gambling', 'jaded', '15dollars', 'nerve', 'druid', 'potatoe', 'appear', 'œæan', '40', 'created', '216', 'loved', 'entered', 'encountering', 'sticky', 'hillsboro', 'downstairs', 'screws', 'œæfilthy', 'responsive', 'length', 'raving', 'lil', 'round', 'bagged', 'lie', 'dees', 'bill', 'gremlins', 'carpull', 'timer', 'extreme', '24h', 'inexperienced', 'holiday', 'sending', 'footbridge', 'thin', 'rolando', 'shaving', 'stores', 'senior', 'cremes', 'deluxe', 'student', 'diabetes', 'abusing', 'rampant', 'message', 'spice', 'wings', 'reinforcements', 'peanuts', 'playland', 'join', 'yelping', 'flight', 'incompetent', 'malfunction', 'suburbia', 'clever', 'discussed', 'choke', 'sue', 'dispensers', 'ratings', 'starla', 'hillside', 'creative', 'junk', 'pushes', 'œæmcdonalds', 'stomach', 'update', 'meeting', 'variety', 'caravan', 'hrs', 'crappier', 'king', 'weeknight', 'private', 'locales', 'reminded', 'allow', 'entertainment', 'tacky', 'queens', 'attempting', 'dmv', 'vacate', 'toilet', 'collins', 'accross', 'œæick', 'relieved', 'parent', 'motorized', 'removed', 'imply', 'insane', 'homless', 'moved', 'unfortunate', 'emerge', 'chili', 'slides', 'arrived', 'restrooms', '201012168œ_89169237', 'pickup', 'wild', 'pot', 'alcohol', 'bypass', 'spewing', 'cleveland', 'oak', 'hashy', 'dined', 'glendale', 'applied', 'fernando', 'accommodate', 'occupied', 'encountered', 'snazzy', 'excess', 'roberto', 'search', 'lamp', 'barking', 'skip', 'cola', 'consistency', 'carpet', 'inc', 'overcharged', 'sundaes', 'continued', 'shredded', 'hair', 'processed', 'maniacly', 'barrage', 'gratefully', 'facebook', 'messing', 'quizno', 'xlg', 'pattern', 'valuable', 'hatin', 'œæless', 'reflecting', 'ript', 'mallrats', 'replenish', 'landscape', 'questionable', '97', 'seniors', 'singer', 'globally', 'mistakes', 'lighter', 'invented', 'supposedly', 'fucks', 'daytime', 'named', 'liked', 'showed', 'cousin', 'text', 'isolated', 'niggas', 'stupidly', 'veggie', '26', 'bread', 'tiny', 'oooh', 'deliberately', 'acknowledged', 'obnoxiously', 'ingredients', 'visitors', 'prestigious', 'viola', 'coupons', 'gunfire', 'uninterested', 'rocking', 'bronx', 'offered', 'seamlessly', 'terribles', 'opposite', '200', 'literary', 'œæironically', 'intercom', '24oz', 'afraid', 'options2', 'suspended', 'lint', 'enthusiastic', 'blah', 'dalia', 'field', 'patiently', 'cow', 'iv', 'preparation', 'greatest', 'resort', 'œætakeout', 'ct', 'shy', 'displaying', 'overpricing', 'unprofessionally', 'mickeyds', 'arose', 'korean', 'circus', 'forty', 'redeeming', 'produced', 'ehh', 'registers', 'coated', 'developed', 'enforce', '22', '82nd', 'contamination', 'duaghters', 'yielding', 'baby', 'œæchicken', 'depot', 'veritable', 'œæmove', 'cinnabuns', 'concerned', 'static', 'yuppie', 'dressed', 'shelf', 'mustache', 'existence', 'college', 'require', 'smog', 'walls', 'dripping', 'ronald', 'particularly', 'county', 'figueroa', 'elsewhere', 'teaspoon', 'shrunk', 'idkbe', 'alone', 'artery', 'wallow', 'dudes', 'comment', 'dbl', 'ears', 'solutions', 'gods', 'mcdonaldsthen', 'perpitrator', 'playplaces', 'munch', 'fulfilling', 'resting', 'remade', 'selves', 'discrepancy', 'œæfar', 'polish', 'freaking', 'laughing', 'meant', 'package', 'immediately', 'reliably', 'meet', 'replaced', 'wiped', 'blame', 'microwaved', 'fees', 'featured', 'staffer', 'closer', 'hardly', 'uwajimaya', 'slit', 'terrific', 'pride', 'separately', 'processor', 'asap', 'haunted', 'median', 'irk', 'picky', 'form', 'calories', 'roosevelt', 'extremly', 'mannaise', 'orbited', 'blob', 'purchased', 'fahhhlat', 'painfully', 'congealed', 'century', 'poison', 'options', 'substitution', 'swat', 'loiterers', 'bearly', 'reacted', 'fear', 'renovations', 'asylum', 'theirs', 'bull', '19', 'ahhhhh', 'stocked', 'recieve', 'hooked', 'œæended', 'caddy', 'fills', 'chicket', 'eve', 'ruin', 'milkshakes', 'blustery', 'emily', 'atmosphere', 'interaction', 'license', 'rapid', 'mopping', 'purchases', 'satisfied', 'herbst', 'amazes', 'lose', 'poisoning', 'alot', 'explained', 'cart', 'carry', 'march', 'stools', 'pm', 'corporation', 'promised', 'chewed', 'disorganized', 'inserted', '46', '1030am', 'guest', 'words', 'vibe', 'promo', 'fell', 'fulfill', 'behold', 'sudden', 'waving', 'espn', 'similarly', 'pure', 'benefit', 'rear', 'action', 'hearing', 'equally', 'drinkers', 'upstairs', 'œæhow', 'supervisor', 'america', 'observed', 'advertized', 'joker', 'resulted', 'peopleghetto', 'lipscomb', 'threatened', 'refunded', 'sparse', 'stalls', 'rudeness', 'ideal', '9to5', 'limits', 'sop', 'northside', 'theater', 'chicknuggets', 'dreadful', 'sahara', 'barnwell', 'aside', 'shine', 'gm', 'sales', 'doses', 'criminal', 'saccharine', 'earliest', 'philippines', 'alternatives', 'cured', 'reviewing', 'enjoyable', 'pkwy', 'queen', 'punishing', 'wont', 'mcf', 'œæum', 'œæfew', 'sounds', 'logan', 'loose', 'provided', 'noodle', 'kildare', 'quater', 'discover', 'shittier', 'srive', 'tall', 'representing', 'loss', 'configuration', 'ds', 'ppl', 'trained', 'cafí', 'skillet', 'seafood', 'mkay', 'par', 'ripping', 'guessed', 'nastiest', 'thursday', 'boycott', 'discovery', 'cubicle', 'damaged', 'convert', 'hi', 'theyget', 'against', 'connoisseur', 'pound', 'unable', 'violation', 'bickering', 'sips', 'specifics', 'fifteen', 'floating', '4am', 'packs', 'dark', 'mayonaise', 'affordable', 'œæabout', 'fiasco', 'original', 'flashy', 'unemployed', 'spills', 'franchises', 'highlight', 'dude', 'currently', 'mugs', 'douchebag', 'indifferent', 'shawty', 'tsk', 'gadaam', 'print', 'picked', 'chuckling', 'walmart', 'neighbor', 'sigh', 'awaited', 'lacks', 'conflict', 'gota', 'ridgeville', 'challenge', 'chef', 'grave', 'apologies', 'promotion', 'œænever', 'si', 'hating', 'song', 'scraped', 'penn', 'steps', 'attempt', 'slu', 'spend', 'dangerously', 'hdtv', 'intend', 'allows', 'qualifies', 'thus', 'initially', 'bum', 'skeeved', 'undrinkable', 'simplest', 'discourteous', '770', 'staph', 'wise', 'organizing', 'population', 'vintage', 'dealership', 'playing', 'closing', 'dammit', 'haha', 'hardened', 'remodeling', 'documentary', 'rob', 'diner', 'confused', 'sweaty', 'sum', '05', 'raised', 'kansas', 'retrospect', 'ripped', 'gigantic', 'œæeveryone', 'stock', 'boxes', 'coating', 'commented', 'bladder', 'walgreens', 'showing', 'glad', 'gonna', 'sunny', 'escorted', 'religious', 'stumped', 'ratio', 'fantastic', 'robbery', 'caramel', 'finals', 'pour', 'teabag', 'improvement', 'advised', 'scratching', 'bolt', 'purpose', 'pinched', 'club', 'wendys', 'reduced', 'arlington', 'œæcan', 'bitch', 'remarkable', 'drip', 'body', 'meets', 'welcoming', 'œæo', 'master', 'mixtures', 'hence', 'bic', '78', 'pineapple', 'œæfeathering', 'supersizing', 'among', 'petite', 'œædidn', 'lot1016amoh', 'stronghold', 'delight', 'adhere', 'wee', 'coz', 'biblical', 'introduce', 'oakbrook', 'takers', 'breath', 'saggy', 'outrageous', 'ma', 'putting', 'texas', 'fucing', 'follower', 'reviewer', 'slice', '79', 'feul', 'pretend', 'eventually', 'families', 'expired', 'rejected', 'pounce', 'handled', 'painting', 'snacks', 'resturant', 'assortment', 'feels', 'huffed', 'urine', 'restaraunt', 'jpgasks', 'emptied', 'œæhell', 'greyhound', 'emphasized', 'rendition', 'rain', 'blamed', 'delayed', 'believed', '08', 'grabbing', 'œæyelp', 'œæwhite', 'afterwards', 'clairmont', 'con', '01', 'crisp', 'œæyes', 'mclovin', 'disapointed', 'describe', 'innovate', 'bombarded', 'consume', 'follow', 'description', 'chose', '360', 'repercussions', 'straight', 'clock', 'wall', 'recommendations', 'rantings', 'œæfish', 'nigh', 'perla', 'stacked', 'freezing', 'sand', 'agenda', 'inspecting', 'row', 'techron', 'seemingly', 'transients', 'walks', 'predominantly', 'updated', 'random', 'tripping', 'treating', 'pic', 'unsympathetic', 'melons', 'platform', 'fly', 'fraps', 'delivers', 'sloppy', 'knowgoin', 'merchandise', 'wood', 'collect', 'diapers', 'vibes', 'japan', 'accident', 'fax', 'holders', 'chandeliers', 'ingested', 'collection', 'shouldnt', 'threat', 'pop', 'tonights', 'nevada', 'œægoing', 'wraps', 'hung', 'directly', 'wendy', 'œæmost', 'capable', 'interested', 'ranch', 'filets', 'philosophies', 'origami', '93', 'drinking', 'gals', 'noon', 'cruising', 'asleep', 'container', 'resembles', 'primarily', 'immacuately', 'anguish', 'keeping', 'œæfine', 'spent', 'receiveing', 'highly', 'explain', 'œæshall', 'pescetarian', '6ish', 'leaf', 'kicks', 'excuses', 'downtown', 'ur', 'structured', 'expected', 'almighty', 'diffuse', 'blank', 'argumentative', 'œæor', 'avenue', 'mobs', 'lied', 'œædirty', 'tatoes', 'sweetened', 'dual', 'bigger', 'diabolical', 'heres', 'dps', 'seats', 'occupants', 'satisfaction', 'girlfriends', 'sells', 'students', 'terminator', '54', 'stupidest', 'thirsty', 'tore', 'dear', 'blaring', 'mcmahon', 'galaxy', 'chalky', 'inviting', 'desirable', 'œæhead', 'horribly', 'cracked', 'overcooked', 'screams', 'observing', 'habanero', 'iglesias', 'smith', 'tragic', 'geessshhh', 'œæcurses', 'œæaddicted', 'organic', 'accuracy', 'thankfully', 'joints', 'tom', 'dome', 'burbs', 'œæits', 'unacceptable', 'œæplenty', 'camaraderie', 'œæyour', 'boulevard', 'slap', 'oriented', 'œæfries', 'oj', 'plainly', 'carrier', 'gravy', 'sense', 'hill', 'content', 'voice', 'breathe', 'filet', 'hehehe', 'compact', 'coups', 'delays', 'trespasser', 'bat', 'ga', 'stepdaughter', 'bug', 'wink', 'waves', '12109', 'cowgirl', 'daily', 'hesitation', 'qa', 'hundred', 'hose', 'booooo', 'milk', 'inevitable', 'picante', 'moping', 'sins', 'gentleman', 'continuing', 'eccentric', 'finely', 'impression', 'piping', 'resemble', 'incredibly', 'stained', 'companions', 'œæespecially', 'technology', 'lombard', 'boulder', 'cultural', 'data', 'wasting', 'cos', '00', 'problematic', 'victims', 'œæthank', 'itany', 'noteworthy', 'graffiti', 'hordes', 'poopy', 'loop', 'christ', 'sizes', 'ment', 'ridiculousness', 'shear', 'increase', 'hasbrowns', 'carl', 'œæhorrible', 'requested', 'certain', 'belonged', 'cringing', 'personal', 'œæoften', 'repeating', 'headlights', 'fella', 'portions', 'naked', 'grandson', 'surprise', 'shots', 'friday', 'learning', 'distinctly', 'streets', 'œætrash', 'forcibly', 'apologized', 'sls', 'permit', '1982', 'venue', 'final', 'staring', 'lights', 'wondering', 'tip', 'palette', 'resolve', 'whiled', 'veen', 'anytime', 'distract', 'contend', 'œæyeah', 'nails', 'marginally', 'outgrow', 'screens', 'deliberate', 'resisting', 'residential', 'rambunctious', 'raisins', 'mercenaries', 'flip', 'œæabsolute', 'thrown', 'toasted', 'fashioned', 'written', 'examine', 'œæ2', 'boo', 'pssh', 'biggest', 'boring', 'pandemonium', 'cokes', 'aka', 'impossible', 'attached', 'jokes', 'œæmind', 'inspection', 'alan', 'route', 'chilling', 'elderly', 'œædark', 'checks', 'mornings', 'wabansia', 'drags', 'whip', 'counted', 'œætheir', 'jazzed', 'snaking', 'macarthur', 'setup', 'tasteless', 'dishonest', 'strange', 'knew', 'physically', 'frog', 'disappointing', 'adds', 'rightfully', 'stranded', 'bmw', 'references', 'pleather', 'indicating', 'dipped', 'episode', 'measure', 'sticking', 'barbie', 'jk', '9900', 'scary', 'bare', 'lame', 'servicecold', 'headquarters', 'chill', 'aforementioned', 'below', 'executes', 'diva', 'jewel', 'helluva', 'œæneutral', 'useful', 'nightall', 'southeast', 'father', 'œæquick', 'œætortilla', 'afterthought', 'threads', 'austrian', 'junior', 'operator', 'œæof', 'couv', 'snapping', 'attempted', 'beginning', 'retrieval', 'myriad', 'glass', 'howling', 'lmao', 'tlc', 'ourselves', 'sloppily', 'premium', 'impress', 'cooter', 'following', 'mcwrap', 'dropped', 'appeared', 'traveling', 'ethics', 'reevaluated', 'ramble', 'likey', 'abuse', '0200', 'teens', 'fuming', 'burdening', 'burden', 'ludlam', 'niece', 'oldand', 'abundance', 'œæword', 'doomed', 'dogs', 'thankful', 'foreigners', 'œæcheck', 'confession', 'coffees', '07am', 'via', 'chit', 'newness', 'characters', 'anomoly', 'sketch', 'poked', 'tart', 'wally', 'ridiculously', 'corridor', 'tangy', 'electronic', 'fortune', 'complained', 'incidents', 'approached', 'havent', 'sorting', 'savoring', 'contractors', 'benefits', '17p', 'court', 'celebratory', 'outfits', 'disturbance', 'globe', 'overhears', 'œæavoid', 'flights', 'slowly', 'unbelievable', 'burned', 'menuget', 'œæbeing', 'yence', 'otherwise', 'mechanism', 'blown', 'tradition', 'institution', 'teenager', 'inspect', 'mountains', 'costumer', 'motorists', 'refused', 'functional', 'exists', 'œædeliciouso', 'hamburglar', 'frappí', 'john', 'doc', 'barricade', 'matrix', 'crown', 'excitedly', 'stayed', 'politeness', 'skilled', 'crumpled', 'bet', 'nope', 'debilitating', '55am', 'edited', 'coast', 'core', 'prejudice', 'œæother', 'opposed', 'stinky', 'silent', 'id', 'dsw', 'versus', 'sidenote', 'latte', 'saturday', 'in', 'holy', 'soul', 'mister', 'daycare', 'œætheres', 'exciting', 'police', 'jealous', 'episodes', 'joins', 'inspired', 'law', 'discipline', 'nothings', 'swamp', 'arizona', 'confusing', 'west', 'profitable', 'loudest', 'implemented', 'precise', 'commercial', 'offensive', 'flat', 'cage', 'unexpected', 'urh', 'belt', 'lining', 'dumbasses', 'filing', 'rancid', 'handful', 'piercings', 'testament', 'edge', 'lab', 'dug', 'tony', 'drug', 'scheme', 'crossed', 'freeway', 'solon', 'detailed', 'roscoe', 'holes', 'signals', 'addressing', 'begging', 'grimmace', 'nuggies', 'mixture', '13777', 'beings', 'grown', 'sighs', 'unbuckle', 'minority', 'uselessly', 'rubbery', 'onward', 'tv', 'national', 'pcs', 'exclaims', 'offended', 'mango', 'anywho', 'favor', 'playground', 'prob', 'owned', 'sipping', 'œæbefore', 'contaminating', 'iceberg', 'sloshed', '1980s', 'aftertaste', 'counters', 'giant', 'mmmmm', 'flavor', 'grittier', 'wore', 'opens', 'remodels', 'baffling', 'attended', 'convince', 'handcuffs', 'subtotal', 'um', 'lyon', 'habits', 'sweater', 'mainly', 'alluded', 'clinton', 'apocalypse', 'file', 'regional', 'œæboo', 'healthscore', 'calling', 'passed', 'ticked', 'sea', 'greeted', 'proceed', '30am', 'biked', 'coincidently', 'stating', 'posting', 'weekends', 'pump', 'gathers', 'played', 'attractive', 'tough', 'œæfinally', 'headsets', 'jump', 'happily', '18minutes', 'confrontation', 'piss', 'hamburgers', 'uncomfortably', 'garwood', 'dollars', 'village', 'grocery', 'thieves', 'wonders', 'nail', 'chikfila', 'scalding', 'earn', 'cheerful', 'numbskulls', 'and', 'dessert', 'carrot', 'dissapointing', 'tighten', 'messy', 'assertive', 'touch', 'nite', 'freak', 'mccafe', 'stare', 'œæbarely', 'grenade', 'œæinside', 'mr', 'reilly', 'procrastinating', 'july', 'library', 'bbq', 'jam', 'account', 'œæanother', 'hitting', 'kevin', 'œæya', 'bothers', 'terribly', 'tucked', 'fruit', 'crock', 'helpful', 'monoxide', 'skim', 'chains', 'sketchy', 'ole', 'lions', 'shady', 'fraction', 'weirder', 'habit', 'inconsistent', 'herd', 'replacing', 'wearing', 'tb', 'mcintosh', 'compensation', 'sneak', 'safer', 'wet', 'busted', 'supsect', 'kit', 'œælocation', 'dread', 'ditch', 'beaten', 'adult', 'owners', 'charges', 'seated', 'sorriest', 'chillin', 'hasn', '75', 'brew', 'largest', 'headache', 'facing', 'chaos', 'dimwits', 'œæwhat', 'boats', 'flies', 'œæservice', '2apple', 'justify', 'remodel', 'wide', 'itis', 'stomachs', 'duh', 'trade', 'famished', 'tho', 'pleasei', 'dee', 'dancing', 'œæperhaps', 'œæmanager', 'tag', 'dick', 'sucked', 'bands', 'attacking', 'sinking', 'anybody', 'roadside', 'hazard', 'questioning', 'channels', 'lodge', 'decisions', 'attacks', 'dead', 'probable', 'upsell', 'considerations', 'mosques', 'aaaaaaaahhhhhhhhhhh', 'skin', 'inexpensive', 'kedzie', 'topping', 'malaysia', 'menui', 'œæboth', 'œæfunny', 'towards', 'laid', 'ladies', 'wears', 'advertisements', 'jobs', 'herepeppermint', 'regarding', 'œæeven', 'covers', 'chorizo', 'puke', 'baseball', 'popularity', 'proven', 'hoo', 'proper', 'œædoubt', '1s', 'assist', 'mcmuffins', 'injury', 'boys', 'abbreviated', 'œæthese', 'wiping', 'costs', '8am', 'chik', 'depriving', 'displays', 'offerings', 'bronzed', 'comprehension', 'unsweet', 'unwrapped', 'exist', 'declined', 'prove', 'differ', 'crucial', 'rib', 'reached', 'conversations', 'tops', 'recent', 'cicero', 'rep', 'te', 'straws', 'choosing', '0overall', 'rules', 'race', 'hairs', 'determine', 'environment', 'campus', 'fighters', 'shreadded', 'airports', 'newsworthy', 'heckled', 'œæthankfully', 'preacher', 'season', 'schooler', 'champ', 'tweekers', 'weightier', 'scratches', 'men', 'decides', 'cpd', 'churches', 'munching', 'approaches', 'levels', 'surgery', 'donalds', 'demand', 'st', '4th', 'heart', 'lifeless', 'stephanie', 'gob', 'gent', '13after', 'zip', 'icy', 'shows', 'tee', 'support', 'includes', '179', 'surely', 'media', 'duties', 'œælong', 'quest', 'weight', 'refunds', 'businesses', 'urge', 'hatred', 'cleanliness', 'œætry', 'mcdonnalds', 'warning', 'classiest', 'valle', 'disabled', 'seeing', 'upcoming', 'strike', 'meantime', 'platter', 'confirms', 'considering', 'james', 'exhibiting', 'exceptions', 'yea', 'deserves', 'satisfying', 'runner', 'lucky', 'mid', 'meth', 'jog', 'dekalb', 'demanding', 'sweetest', 'chip', 'decide', 'racket', 'resides', 'unpalatable', 'œænext', 'nighttime', 'nellis', 'awe', 'related', 'smh', 'hiring', 'cry', 'shaved', 'rent', 'ventured', 'cops', 'yellow', 'hotcakes', 'shamrock', 'brewery', 'coloring', 'pleasure', 'diaper', 'itchy', 'forces', 'contents', 'wonder', 'idiotic', '41pm', 'luxor', 'strangest', 'humbling', 'vermont', 'wipe', 'œæadditionally', 'designated', 'cleaned', 'culture', 'pulverize', 'cuss', 'scared', 'countless', 'brand', 'risk', 'residue', 'texture', 'smushed', 'truly', 'anarchy', '1st', 'mäó_', 'loathe', 'incident', 'shameful', 'spike', 'frack', 'classics', 'willing', 'correction', 'evil', 'scum', 'theirservice', 'exit', 'pagoda', 'union', 'closely', 'refrigerator', 'popping', 'outdoor', 'execs', 'informative', 'key', 'iyf', 'fatal', 'lousy', 'heights', 'papers', 'smoothly', 'shooting', 'soccer', 'honk', 'consisted', 'loudly', 'prison', 'waist', 'cordial', 'ghastly', 'mundane', 'chinese', 'identified', 'star_big_5', 'rapes', 'protect', 'transferred', 'rap', 'zee', 'amateur', 'crowds', 'dislike', 'fodd', 'fucked', 'pace', 'drops', 'self', 'crevices', 'demons', 'unsweetened', 'po', 'waits', 'merging', 'detail', 'auditorium', 'directed', 'exclaimed', 'pro', 'truethey', 'regularly', 'hidden', 'llo', 'arrest', 'toxic', 'ferociously', 'north', 'alameda', 'surveillance', 'dun', 'beg', 'site', 'rudest', 'manage', 'power', 'sittin', 'legendary', 'groceries', 'barrier', 'treatment', 'news', 'harder', 'mother', 'inferno', 'bilingual', 'logged', 'adding', 'thinks', 'challenged', 'corp', 'sheets', 'eff', 'inventing', 'ashamed', 'dirtier', 'œæsee', 'unwanted', 'tray', 'feb', 'gently', 'mccrap', 'copy', 'moments', 'beater', 'unnecessary', '10p', 'aunt', 'awkwardly', 'constantly', 'perk', 'surroundings', 'fo', 'fair', 'œæhalf', 'mozzarella', 'release', 'taker', 'œæturn', 'unvamped', 'hug', '55', 'useless', 'wasted', 'utter', 'mail', 'handles', 'energy', 'coit', 'scamming', 'dumbass', 'mass', 'lovely', 'forced', 'jedi', 'arrival', 'himself', 'œæcame', 'grub', 'œæorder', 'helped', 'mart', 'examined', 'benches', 'harmed', 'irritated', 'fired', 'mustard', 'risking', 'furniture', 'œæsheesh', 'fkin', 'œæoverall', 'beacon', 'spring', 'warmand', 'previews', 'attentive', 'completed', 'quote', 'garbage', 'mcdolands', 'cheery', 'consulate', 'painted', 'risks', 'bf', 'salty', 'examples', 'understatement', 'mighty', 'creeper', 'bleh', 'shopping', 'degenerate', 'likes', 'miserable', 'jean', 'lazy', 'sugary', 'tring', 'gal', 'soooo', 'accidentally', 'œægreat', 'blvd', 'pennies', 'awkward', 'locally', 'sane', 'team', 'cafes', 'ray', 'spilling', 'eyed', 'arches', 'burgerville', 'œæsounds', 'magical', 'result', 'cabron', 'b4', 'uncooked', 'parked', 'manger', 'understandable', 'obnoxious', 'afterall', 'centers', 'sincerely', 'pickles', 'crematorium', 'dumb', 'snarky', 'alertdo', 'joe', 'renovated', 'infested', 'likely', 'sober', 'grill', 'placate', 'amok', 'centralized', 'starve', 'belongs', 'strangers', 'orderright', 'upgrade', 'priority', 'slim', '17', '88', 'ave', 'establishments', 'hopes', 'impacts', 'searching', 'frape', 'curiosity', 'rated', 'menunaire', 'retail', 'perspective', 'hoped', 'grounds', 'sprayed', 'wheelchairs', 'pareces', 'cherry', 'blue', 'shut', 'mcdees', 'international', 'praise', 'slide', 'maintenance', 'indoor', 'horrid', 'chemical', 'square', 'stumbled', 'party', 'ability', 'chips', 'closes', 'kiddos', 'grasp', 'reliable', 'welcome', 'muffin', 'refills', 'limit', 'ernesto', 'onion', 'diamonds', 'timing', 'deadlines', 'frappucino', 'actual', 'smarter', 'everybody', 'trips', 'peachtree', 'confirm', 'shuttle', 'callin', 'highland', 'liner', 'hippie', 'buffoons', 'actively', 'pads', 'fanciful', 'ops', '6x', 'ads', 'fascists', 'opportunity', 'elegant', 'whom', 'bowel', 'yard', 'critique', 'lounging', 'defending', 'wrapping', 'environmental', 'doubled', 'whaddaya', 'allowed', 'knowledge', 'generous', 'busload', 'differently', 'approaching', 'appetites', 'glen', 'patties', 'cus', 'thumbs', 'uniforms', 'memorable', 'blankly', 'spite', 'mickeyd', 'implies', 'carton', 'whack', 'hasnt', 'œæon', 'audibly', 'thousands', 'honest', 'accuse', 'pitched', 'locathttp', '27', 'newsflash', 'lemonades', 'changes', 'radius', 'engineered', 'perfectly', 'agreeing', 'provides', 'observatory', 'jacket', 'temple', 'brewing', 'promptly', 'yum', 'surfaces', 'congestion', '57', 'dismissive', 'escaping', 'abrams', 'members', 'emergencies', 'dull', 'harshbrowns', 'œælast', 'screaming', 'gender', 'subtracts', 'nugz', 'melt', 'siting', 'œæp', 'carries', 'oddly', 'chauffeur', 'warrants', 'associate', 'women', 'pie', 'eggshells', 'drugs', 'hubby', 'okeedokee', 'climb', 'fatty', 'ikea', 'draw', 'yorker', 'redo', 'blurts', 'crumble', 'solely', 'upped', 'defend', 'rolling', 'advertise', 'installations', 'stage', 'drag', '5am', 'missed', 'lastly', 'schizophrenic', 'bills', 'nameplate', 'therewe', 'cussed', 'increases', 'refried', 'œælots', 'loooooove', 'responsibility', 'berating', 'homemade', 'equipment', 'westop', 'euclid', 'events', 'insides', 'thugs', 'folded', 'laptop', 'control', 'hahanow', 'racked', 'lock', 'caution', 'textbook', 'architectural', 'hotter', 'œæmain', 'smothered', 'advertising', 'dade', 'œæughhh', 'welfare', 'wilted', 'mcflurrys', 'insulted', 'ummmm', 'raisin', 'buttermilk', 'locals', 'hmm', 'image', 'lots', 'advertisement', 'investigate', 'œæwell', 'œæcrispy', 'servicable', 'damme', 'eyeroll', 'lessons', 'peeking', 'ggrrr', 'swing', 'utinsils', 'œæburger', 'aloud', 'latina', 'inept', 'frame', '85', 'aware', 'wilding', 'œævery', 'sundae', 'verify', 'dannon', 'causes', 'lay', 'richardson', 'til', 'ditched', 'punched', 'venture', 'birthday', 'strategy', 'courteous', 'geesh', 'mcdeez', 'twist', 'mcgriddles', 'occassions', 'deli', 'racist', 'contained', '998', 'garden', 'revamped', 'cheapest', 'drenched', 'hockey', 'saving', 'jerk', 'headset', 'whazoo', 'endure', 'mishaps', '4ish', 'œæbad', 'chat', 'logo', 'nog', 'centrally', 'tide', 'sometime', 'apartment', '18', 'bc', 'brekky', 'defeats', 'shout', 'ordere', 'bars', 'afterward', 'registerre', 'joy', 'equal', 'press', 'trys', 'updates', 'sherwin', 'œæmanagement', 'current', 'pathetic', 'hashbrowns', 'sensory', 'œæunreal', 'arrives', 'classic', 'unleash', 'gunfireif', 'œæuseless', 'schoolers', 'œæmixing', 'nightso', 'routinely', 'south', 'nuts', 'question', 'socal', 'listen', 'twenty', 'claimed', 'pjs', 'hike', 'heaven', 'interrupt', 'resolutions', 'portland', 'ain', '1979', 'conditioner', 'seventh', 'carohshit', 'œæawful', 'bending', 'œæotherwise', 'contact', 'ordinary', 'bitter', 'tasty', 'œætons', 'tone', 'œæwhy', 'stall', 'ignoring', 'lacked', 'stack', 'veh', 'buck', 'amnesty', 'honey', 'swift', 'computers', 'droplets', 'rat', 'bloomie', 'pee', 'roller', 'fairly', 'honda', '515', 'encourage', 'mcdon', 'tarter', 'manhattan', 'secondary', 'spoon', 'temporarily', 'consumer', 'œæpullleeezzzeee', 'randomly', 'œæadults', 'œæwhatever', 'paddy', 'boost', 'mode', 'slammed', 'clerk', 'rights', 'traumatizing', 'scrambled', 'wage', 'prerequisite', 'mushrooms', 'sleepy', 'receiving', 'adjustment', '4pm', 'atm', 'judgement', 'locked', 'relief', 'displayed', 'œæpeople', 'blocked', 'mentioning', 'pepper', 'steal', 'fool', 'parents', 'hazelnut', 'travelers', 'paint', 'escort', 'bullet', 'web', 'opinion', 'dab', 'chow', 'moon', 'dumping', 'fight', 'pig', 'pulse', '3x', 'rolled', 'raiding', '3am', 'cacti', 'careful', 'public', 'exception', 'california', 'refilled', 'poster', 'dispenser', 'desperately', 'yelled', 'wins', 'dilated', 'holcomb', 'harlem', 'feeding', 'thurs', 'brook', 'mcdonaldsi', 'somethingbut', 'serves', 'scracted', 'healthiest', 'debris', 'amassing', 'huff', 'conclusions', 'decorated', 'anxiously', 'bathe', 'opening', 'function', 'handlers', 'exceptionally', 'middling', 'coca', 'shakes', 'draws', 'garland', 'finish', 'johns', 'œægiven', 'toys', 'pedestrians', 'doubt', 'rim', 'throuh', 'œæhave', '69', 'chances', 'œæprobably', 'tent', 'kfc', 'gun', 'memories', 'announces', 'beforehand', 'seedy', 'security', 'œæpoor', 'leaves', 'ticket', 'volume', 'credentials', 'slices', 'abrasive', 'dying', 'dieting', 'notch', 'stopgap', '366', 'commercials', 'œæmultiple', 'carbs', 'successful', 'manila', 'annoyance', 'completion', 'canal', 'bottled', '1star', 'kindness', 'klassy', 'sneaking', 'technically', 'withing', 'rags', 'knowledgeable', 'wished', 'complaining', 'juice', 'decision', 'truthful', 'feminine', 'freshness', 'biz', 'fellow', 'improve', 'buttons', 'responsible', 'artsy', 'clogging', 'notice', 'answer', '1time', 'floored', 'silently', 'blackmac', 'preying', 'founder', 'initial', 'bubbles', 'franchisees', 'partying', 'whoever', 'cloggin', 'chevy', 'goofing', 'yell', '2pm', 'replies', 'reasons', 'mchicken', 'fare', 'enforced', 'griffin', 'œæstupida', 'of', 'inmates', 'farther', 'disappoint', 'pressed', 'presented', 'rants', 'youre', 'otther', 'wispy', 'opted', 'pit', 'stil', 'escalator', 'bushy', 'overpriced', 'calls', 'olympic', 'harley', 'bagging', 'specify', 'fried', '2007', 'œæsay', 'positive', 'territory', 'prime', 'interfering', 'cozy', 'completing', 'smiles', 'jaunt', 'tx', 'buses', 'gunshots', 'œæ8', 'exhausted', 'cutting', 'hairspray', 'mark', 'example', 'rocks', 'loves', 'pinch', 'espaí', 'attitudes', 'legs', 'ginormous', 'lanes', 'online', 'delivered', 'helping', 'cantata', 'knowing', 'calmer', 'curt', 'gunpoint', 'encounter', 'assume', 'verde', 'salted', 'wording', 'hudson', 'generic', 'usu', 'fancy', 'chocolates', 'imagination', 'patients', 'schedules', 'goal', 'adventure', 'cattle', 'œælately', 'unusually', 'apply', 'problemwith', 'bagel', 'œæfree', 'buffet', 'gasped', 'mint', 'whatsoever', 'disgusted', 'reverberating', 'furious', 'œæyet', 'stupidity', 'scavengers', 'possibly', 'disappointment', 'bizarre', 'causing', 'optimally', 'œæapparently', 'mcrape', 'chic', 'shock', 'bottomline', 'center', 'luckily', 'œædoesn', 'dawn', 'œæsometimes', 'flooring', 'mailer', 'chatty', 'hoarder', 'redbox', 'workz', 'applebee', 'iq', 'comfy', 'fyi', 'animals', 'radio', 'hawthorn', 'instructions', 'experiment', 'foods', 'es', 'mcdumbasses', 'bar', 'deconstructed', 'throttle', 'perceptions', 'nephew', 'œæergh', 'esp', 'clientele', 'dna', 'coupled', 'tendency', 'lawsuits', '40ish', 'multiple', 'rare', '40am', 'ms', 'foo', 'depending', '6th', 'al', 'windshield', 'oficial', 'sex', 'deuces', 'condone', 'whaaaaaaaaaaaaaat', 'sing', 'pointing', 'hoping', 'surrounded', 'weapon', 'dare', 'couldnt', 'tire', 'blanket', 'murdered', 'frustrated', 'kick', 'creepy', 'argh', 'prompted', 'background', 'œæpay', 'girlfriend', 'hookers', 'wreck', 'establishing', 'œæsurprise', 'receives', 'member', 'hills', 'dysfunctional', 'œæeating', 'book', 'limb', 'notices', 'shituation', 'assistance', 'elbowed', 'entering', 'neither', 'reads', 'glenoaks', 'œænice', 'tends', 'œæeach', 'explanation', 'œæonce', 'bigots', 'allergic', 'frustrating', 'pushy', 'ages', 'throw', 'ha', 'entertained', 'replaceable', 'substance', 'reiley', 'friendlies', 'monotone', 'lemonade', '10th', 'indulge', 'pecos', 'enrique', 'complains', 'handcuffing', 'yahoo', '509am', 'pulling', 'combo', 'woulf', 'chipotle', 'kindly', 'further', 'beast', 'lately', 'mcribberson', 'cooled', 'stylish', 'cent', 'selena', 'œæfollowing', '80s', 'sobering', 'permanently', 'œæsad', 'rubble', 'plotting', '30mins', '28th', 'yawning', 'tempting', 'remains', 'œæhad', 'fewer', 'failure', 'cheeze', 'œæbased', 'mixtry', 'overflowing', 'rounds', 'regrets', 'cartoon', 'media4', 'perplexed', 'inspected', 'guesses', 'connected', 'œæmany', 'groomed', 'wayne', 'yrs', 'magazine', 'cakes', 'fully', 'period', 'fortunate', 'horror', 'lime', 'green', 'chair', 'œæplus', 'appearances', 'dis', 'guessing', 'sparkling', 'concept', 'returning', 'despise', 'idk', 'crowded', 'pushed', 'cooker', 'surly', 'fwy', 'miguel', 'tthe', 'summer', 'blender', 'arm', 'youare', 'crackheads', 'minor', 'cheddar', 'bugs', 'fighting', 'quit', 'borderline', 'paso', 'rock', 'disapproval', 'impolite', 'enuff', 'patently', 'excalibur', 'generated', 'unbearable', '13th', 'cuz', 'shes', 'introduced', 'accountants', 'hip', 'cummings', 'category', 'duty', 'incompetence', 'prerecorded', 'personality', 'maria', 'eatable', 'tills', 'flabbergasted', 'starting', 'mommy', 'newest', 'paycheck', 'stressed', 'moca', 'woodstock', 'grove', 'cancel', 'ick', '400', 'toppings', 'sparsely', 'honored', 'œæinstead', 'learned', 'broodlings', 'focused', 'unruly', 'reversing', 'safely', 'sentence', 'glaring', 'nevermind', 'education', 'heavy', 'makeover', 'œæyesterday', 'edit', 'dallas', 'along', 'goosebumps', 'hotline', 'ring', 'someway', 'spotless', 'automated', 'sloths', 'frappuccinos', 'fans', 'transformed', 'openings', '090', 'shove', 'cursing', 'direction', 'realistically', 'nor', 'unhealthy', 'perimeter', 'wonderful', 'district', 'rambling', 'advice', 'grr', 'bend', 'bloodstream', 'adorbs', 'eduardo', 'œæworkers', 'chandelier', 'polluting', 'finishes', 'spilled', 'hungover', 'barter', 'latest', 'everytime', 'shower', 'ons', 'lured', 'twitter', 'smiling', 'lesser', 'tomato', 'truth', 'argues', 'insisted', 'œæfrom', 'lid', 'sleep', 'darth', 'anyhow', 'deny', 'opaque', 'œæ10', 'shortage', 'junkie', 'pours', 'œægross', 'shoddy', 'displeased', 'stellar', 'exploring', 'label', 'strawberry', 'sewn', 'continental', 'roach', 'rage', 'flippin', 'engulfs', 'gay', 'claim', 'scarf', 'suäó_and', 'morons', 'boggling', 'itself', 'fastfood', 'mumbled', 'universe', 'skeptical', 'innovating', '8pm', 'vader', 'choc', 'œæfrustrated', 'eatmorechicken', 'appealing', 'overnight', 'fled', 'pitiful', 'present', 'apparantly', 'discoveries', 'œæfare', 'somehow', 'east', 'haunt', 'œæplaced', 'acquire', 'encore', 'bot', 'bubbly', 'creating', 'macs', 'caught', 'cafe', 'rand', 'lowered', 'process', 'blinding', 'despite', 'attracts', 'bins', 'custumers', 'strong', 'refill', 'exaggerations', 'tru', 'remind', 'freshly', 'cutie', 'boss', 'fenced', 'owe', 'patio', 'yields', 'upscale', 'diligent', 'previously', 'failed', 'md', 'œælove', 'blatantly', 'adequate', 'layout', 'beware', 'mangers', 'decadence', 'mcgangbang', 'mouth', 'purposely', 'avoiding', 'buying', 'thanked', 'southwest', 'drew', 'slept', 'respective', 'bargain', 'delights', 'orderi', 'panhandler', 'stuffed', '21st', 'œæwould', 'chevron', 'nyc', 'built', 'harmful', '13', 'nutshell', 'cheaper', 'pristine', 'origin', 'accomplishes', 'recooked', 'mikey', 'forks', 'fluent', 'led', 'aggravating', 'assured', 'scares', 'informed', 'forgotten', 'gang', 'lift', 'jalapeno', 'sunrise', 'overfilled', 'ughhh', 'uploaded', 'forwarded', 'electronics', 'friggin', 'lingering', 'œæalthough', 'tons', 'ways', 'sick', 'littered', 'pearland', 'neighbors', 'zak', 'masa', 'strongly', '03pm', 'answered', 'cheaply', 'mcdonals', 'planned', 'witnessed', 'assholes', 'ckn', 'atlantic', 'push', 'olive', 'infamous', 'gameplan', 'œæwith', 'therefore', 'overnights', 'ne', 'logical', 'trapped', 'reverse', 'orderly', 'mcdoubles', 'snow', 'airbrush', 'tight', 'lotta', 'œæcalled', 'œæyay', 'pancakes', 'œæeducational', 'berated', 'usm', 'disgust', 'pipeneed', 'teach', 'nation', 'enjoyed', 'faulty', 'pray', 'snippy', 'milkshake', 'dang', 'geez', 'kung', 'donuts', 'tidy', 'handicapped', 'œæenjoy', 'reminding', 'dozed', 'starbuck', 'operating', 'tortilla', 'austria', 'continues', 'longest', 'incorrectly', 'busiest', 'crawl', 'christmas', 'grape', 'wretched', 'mannnn', 'speed', 'babysitter', 'internet', 'angel', 'leak', 'apologists', 'muffins', 'com', 'œælooks', 'laziness', 'spell', 'history', 'gene', 'obv', 'suburbs', 'meanest', 'client', 'pushing', 'level', 'œæplain', 'kang', 'player', 'vulgar', 'œædrop', 'goup', 'œædo', 'pouring', 'sheep', 'independent', 'nuff', 'craig', 'damp', 'fiancee', 'gripe', 'barrel', 'guests', 'gettin', 'sq', 'root', 'rituals', 'hankering', 'lest', 'receptacles', 'strung', 'hurts', 'corrected', 'plugs', 'signed', 'œæorders', 'jimmy', 'repeated', 'placing', 'expectation', 'sharpest', 'flavored', 'alllllllllllllllllll', 'lying', 'tto', 'funny', 'weekly', 'recieved', 'sooooo', '3200', 'southern', 'buffalo', 'condescending', 'slump', 'hearts', 'ache', 'downright', 'hits', 'asshole', 'coma', 'quiznos', 'undesirables', 'string', 'approach', 'werewolf', 'teeth', 'selection', 'town', 'ezra', 'sworn', 'losing', 'chase', 'foot', 'tries', 'listed', 'cousins', 'kreme', 'arch', 'fame', 'delivering', 'mixing', 'blocking', 'competing', 'newer', 'sakes', 'handy', 'stepping', 'magically', 'starters', 'œæspread', 'eyes', 'officially', 'sunset', '115th', 'chew', 'statistical', 'warn', 'menus', 'torturing', 'worthy', 'products', 'employers', 'whiff', 'untrained', 'usa', 'clothes', 'franchisee', 'mediums', 'argument', 'eloquent', 'sounding', 'basic', 'kaaay', 'uncompfortable', 'evenings', 'decor', 'soy', 'hartsfield', 'cowboy', 'avoidance', 'proportion', 'œæback', 'afb', 'specials', 'texting', 'sounded', 'fixtures', 'fed', 'gold', 'metrocard', 'nose', 'swept', 'dumped', 'smoother', 'mascot', 'pillow', 'letting', 'motion', 'burning', 'cardboard', 'become', 'drama', 'yogurt', 'coolest', 'favorite', 'ripening', 'wilde', '16', 'equivalent', 'relatively', 'thoughts', 'noise', 'intimidating', 'mama', 'dreggs', 'based', 'yesterdays', 'slightest', 'transaction', 'frappe', 'dozens', 'hoolligans', 'country', 'richmond', 'realizing', 'pissed', 'contraption', 'verdict', 'socializing', 'rave', 'automatically', 'till', 'planning', 'dodge', 'flying', 'ill', 'sides', 'fudge', '91', '1000', 'purchase', 'œæhonestly', 'ignored', 'unproductive', 'beat', 'clark', 'mistakingly', 'northbound', 'points', 'belly', 'peice', 'rank', 'œæconsidering', 'killer', 'colloquial', 'effin', 'reach', 'singing', 'experiences', 'eschewing', 'filthiest', 'hln', 'seedier', 'aftering', 'œæwish', 'situated', 'hmfic', 'twelve', 'unsuccessfully', 'ol', 'holds', 'factor', 'exact', 'trail', 'dong', 'œædrive', 'cared', 'blessed', 'œæhope', 'vivid', 'impressive', 'blend', 'states', '10am', 'vagrants', 'overcharging', 'siders', 'mortified', 'yourselves', 'accurately', 'denied', '95', 'chickfila', 'valley', 'dumbest', 'claude', 'splenda', 'rate', 'warmly', 'backdrop', 'roommate', 'fastest', 'per', 'defies', 'driven', 'transient', 'loving', 'unsanitary', 'mentality', 'match', 'mistaken', 'œæalways', 'ac', 'œæduhhh', 'temperature', 'spill', 'limbo', 'mentally', 'depressed', 'mutual', 'renowned', 'thrice', 'distance', 'insanely', '35', 'mildly', 'humor', 'nicer', 'rang', 'sisters', 'hunger', 'mouthing', 'advance', 'welcomed', 'starts', 'alma', 'trend', 'stick', 'witness', 'mammals', 'impound', 'œætoday', 'ita', 'ought', 'instad', 'linger', 'active', 'countertops', 'social', 'posse', 'ambassadorial', 'transactions', 'demeanor', '20mins', 'curled', 'partial', 'toddler', 'trop', 'hiking', 'deciphering', 'fer', 'deco', 'ball', 'diamond', 'it', 'insisting', 'cum', 'automation', 'thats', 'communicable', '24hr', 'rule', 'podcast', '195', 'sandwhich', 'kamp', '6am', 'unique', 'subway', 'notta', 'greetyou', 'tongue', 'cleaning', 'mccheese', 'virus', 'wash', '2012', 'yours', 'lightning', 'summertime', 'œæare', 'cookies', 'œæ1', 'typically', 'hav', 'decades', 'blur', 'avarage', 'packaged', 'somebody', 'certainly', '7th', 'dole', 'ignorance', 'stares', 'bell', 'fat', 'central', 'spotted', 'flustered', 'dad', 'lull', 'disappoints', 'sidewalks', 'boots', 'ship', 'array', 'snakes', 'selections', 'pronounce', 'œætrust', 'expression', 'language', 'red', 'consumed', 'color', 'vowing', 'mingled', 'stress', 'infections', 'absorb', 'rounded', 'chuckles', 'œæneedless', 'deemed', 'buddy', 'comprised', 'yak', 'stats', 'yall', 'angle', 'generosity', 'dat', 'glasses', 'haggled', 'quadruple', 'tells', 'œælow', 'gourmet', '911', 'officer', 'clarify', 'various', 'œæcrap', 'contemporary', 'œægive', 'denny', 'carb', 'stink', 'begin', 'snail', 'suit', 'yuck', 'flamingo', 'lived', 'elaborate', 'agreed', 'entirely', 'quarterpounder', 'assaults', 'hundreds', 'popular', 'bright', 'concern', 'boytoy', 'hoarded', 'ends', 'coworkers', 'prompt', 'homies', 'horriblerecommendation', 'above', 'mine', 'pleasant', 'exited', '2014', 'chicago', 'smacking', 'ey', 'creams', 'explosive', 'fountain', 'diarrhea', 'nuked', 'figured', 'complicated', 'life3', 'interrupts', 'separating', 'ohh', 'greated', '45', 'simultaneously', 'armageddon', 'unimpressed', 'requirement', 'weapons', 'mechanical', 'audience', 'highlands', 'forth', 'prevents', 'brought', 'disappeared', 'residents', 'bsing', 'ashley', 'pictures', 'phony', 'characteristics', 'mom', 'landed', 'œæ24', 'œæout', 'bananas', 'panchitos', 'hm', 'olmsted', 'rd', 'vast', 'œæwasn', 'clinic', 'mimicked', 'ico', 'chi', 'horrendous', 'lifeby', 'beautiful', 'intern', 'dante', 'unwarned', 'formed', 'redeem', 'awesome', 'ward', 'aroud', 'executive', 'buzzing', 'dissatisfied', 'tourists', 'politely', 'desired', 'auto', 'exiting', 'cheesy', 'demo', 'sloiwest', 'complainting', 'spoken', 'œægives', 'exchange', 'cant', 'aggressive', 'hotbed', 'umm', 'alway', 'œæughhhhh', 'packet', 'teenage', 'œæshowed', 'lifting', 'limp', 'bonus', 'mcfix', 'miami', 'canadian', 'nicest', 'œæsome', 'feeling', 'germs', 'careless', 'deflated', 'valentine', 'consuming', 'pricing', 'legitimate', 'wind', 'ny', 'tasting', 'moms', 'clump', 'mag', 'wolf', 'œæpretty', 'paseo', 'tool', 'termination', 'pole', 'condition', 'robbed', 'bucket', 'handlebar', 'ignore', 'nowhere', 'hop', 'sarcastic', 'handing', 'met', 'seeping', 'œæhomeless', 'sack', 'land', 'shriveled', 'postal', 'handling', 'shrug', 'nuthin', 'lopsided', 'butt', 'youtube', 'younger', 'promoting', 'cell', 'trashcan', 'def', 'shocking', 'waiters', 'smooth', 'oscar', 'yikes', 'waitresses', 'smiley', 'altercation', 'melty', 'fate', 'umbrella', 'newspaper', 'pounders', 'addictive', 'bored', 'chatter', 'prides', 'convenience', 'interest', 'coincidence', 'temparture', 'disciplining', 'penny', 'fannin', 'œæcool', 'crying', 'improving', 'sharing', 'argued', 'goldman', 'crazies', 'sweltering', 'comfortable', 'promise', 'ting', 'chucks', 'tweens', 'complaint', 'handle', 'adults', 'hired', 'excise', 'montrose', 'western', 'breakfaat', 'send', 'burritos', 'organization', 'restraint', 'assistant', 'fixes', 'professionalism', 'trashing', 'contestant', 'date', 'evidently', 'smuggle', 'œæcashier', 'tools', 'œæwtf', 'œæone', 'competent', 'excerpts', 'mcnoodles', 'bumped', 'cleaner', 'impressed', 'void', 'shades', 'chicks', 'responded', 'mentioned', 'grewup', 'cats', 'escapees', 'inch', 'beer', 'held', 'mercy', 'parts', 'prefer', 'cycling', 'contacting', 'eggs', 'renovation', 'fun', 'age', 'bags', 'catching', 'plump', 'crushing', 'stops', 'roof', 'charity', 'faced', 'study', 'unsettling', 'survey', 'antsy', 'class', 'eyesore', 'dinging', 'hospital', 'idiot', 'yep', 'œækey', 'msg', 'deaf', 'satan', 'haves', 'spaces', 'apology', 'totaling', 'motivate', 'american', 'filipino', 'patience', 'consider', 'beside', 'delightful', 'nightooh', 'cred', 'liar', 'choked', 'œæhere', 'moniker', 'share', 'cans'}\n"
]
}
],
"source": [
"print(vect.stop_words_)"
]
},
{
"cell_type": "code",
"execution_count": 574,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Features: 1000\n",
"Accuracy: 0.861016949153\n",
"confusion matrix:\n",
"[[247 18]\n",
" [ 23 7]]\n"
]
},
{
"data": {
"image/png": "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\n/wF5hWaL4VyScQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x25d7e978908>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# only keep the top 1000 most frequent terms\n",
"vect = CountVectorizer(max_features=1000)\n",
"tokenize_test(vect)"
]
},
{
"cell_type": "code",
"execution_count": 575,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Features: 3629\n",
"Accuracy: 0.881355932203\n",
"confusion matrix:\n",
"[[253 12]\n",
" [ 23 7]]\n"
]
},
{
"data": {
"image/png": "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\nAQ1EP0ZuvRW9AAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x25d03f84c18>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# only keep terms that appear in at least 2 documents\n",
"vect = CountVectorizer(min_df=2)\n",
"tokenize_test(vect)"
]
},
{
"cell_type": "code",
"execution_count": 576,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Features: 15343\n",
"Accuracy: 0.88813559322\n",
"confusion matrix:\n",
"[[257 8]\n",
" [ 25 5]]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x25d048d0860>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# include 1-grams and 2-grams, and only keep terms that appear in at least 2 documents\n",
"vect = CountVectorizer(ngram_range=(1, 2), min_df=2)\n",
"tokenize_test(vect)"
]
},
{
"cell_type": "code",
"execution_count": 577,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Features: 3620\n",
"Accuracy: 0.88813559322\n",
"confusion matrix:\n",
"[[254 11]\n",
" [ 22 8]]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x25d0436ac50>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# ignore terms that appear in more than 50% of the documents\n",
"vect = CountVectorizer(max_df=0.5,min_df=2)\n",
"tokenize_test(vect)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's try other algorithms"
]
},
{
"cell_type": "code",
"execution_count": 578,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"\n",
"X_train_dtm = vect.fit_transform(X_train)\n",
"X_test_dtm = vect.transform(X_test)"
]
},
{
"cell_type": "code",
"execution_count": 579,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"================================================================================\n",
"Ridge Classifier\n",
"________________________________________________________________________________\n",
"Training: \n",
"RidgeClassifier(alpha=1.0, class_weight=None, copy_X=True, fit_intercept=True,\n",
" max_iter=None, normalize=False, random_state=None, solver='lsqr',\n",
" tol=0.01)\n",
"train time: 0.020s\n",
"test time: 0.001s\n",
"accuracy: 0.892\n",
"dimensionality: 3620\n",
"density: 1.000000\n",
"\n",
"confusion matrix:\n",
"[[262 3]\n",
" [ 29 1]]\n",
"\n",
"================================================================================\n",
"Perceptron\n",
"________________________________________________________________________________\n",
"Training: \n",
"Perceptron(alpha=0.0001, class_weight=None, eta0=1.0, fit_intercept=True,\n",
" n_iter=50, n_jobs=1, penalty=None, random_state=0, shuffle=True,\n",
" verbose=0, warm_start=False)\n",
"train time: 0.006s\n",
"test time: 0.001s\n",
"accuracy: 0.861\n",
"dimensionality: 3620\n",
"density: 0.758564\n",
"\n",
"confusion matrix:\n",
"[[245 20]\n",
" [ 21 9]]\n",
"\n",
"================================================================================\n",
"Passive-Aggressive\n",
"________________________________________________________________________________\n",
"Training: \n",
"PassiveAggressiveClassifier(C=1.0, class_weight=None, fit_intercept=True,\n",
" loss='hinge', n_iter=50, n_jobs=1, random_state=None,\n",
" shuffle=True, verbose=0, warm_start=False)\n",
"train time: 0.009s\n",
"test time: 0.000s\n",
"accuracy: 0.847\n",
"dimensionality: 3620\n",
"density: 0.870994\n",
"\n",
"confusion matrix:\n",
"[[239 26]\n",
" [ 19 11]]\n",
"\n",
"================================================================================\n",
"kNN\n",
"________________________________________________________________________________\n",
"Training: \n",
"KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n",
" metric_params=None, n_jobs=1, n_neighbors=10, p=2,\n",
" weights='uniform')\n",
"train time: 0.000s\n",
"test time: 0.020s\n",
"accuracy: 0.898\n",
"confusion matrix:\n",
"[[265 0]\n",
" [ 30 0]]\n",
"\n",
"================================================================================\n",
"Random forest\n",
"________________________________________________________________________________\n",
"Training: \n",
"RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n",
" max_depth=None, max_features='auto', max_leaf_nodes=None,\n",
" min_samples_leaf=1, min_samples_split=2,\n",
" min_weight_fraction_leaf=0.0, n_estimators=100, n_jobs=1,\n",
" oob_score=False, random_state=None, verbose=0,\n",
" warm_start=False)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\ridge.py:299: UserWarning: In Ridge, only 'sag' solver can currently fit the intercept when X is sparse. Solver has been automatically changed into 'sag'.\n",
" warnings.warn(\"In Ridge, only 'sag' solver can currently fit the \"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"train time: 0.458s\n",
"test time: 0.015s\n",
"accuracy: 0.895\n",
"confusion matrix:\n",
"[[263 2]\n",
" [ 29 1]]\n",
"\n",
"================================================================================\n",
"L2 penalty\n",
"________________________________________________________________________________\n",
"Training: \n",
"LinearSVC(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
" intercept_scaling=1, loss='l2', max_iter=1000, multi_class='ovr',\n",
" penalty='l2', random_state=None, tol=0.001, verbose=0)\n",
"train time: 0.067s\n",
"test time: 0.000s\n",
"accuracy: 0.858\n",
"dimensionality: 3620\n",
"density: 1.000000\n",
"\n",
"confusion matrix:\n",
"[[241 24]\n",
" [ 18 12]]\n",
"\n",
"________________________________________________________________________________\n",
"Training: \n",
"SGDClassifier(alpha=0.0001, average=False, class_weight=None, epsilon=0.1,\n",
" eta0=0.0, fit_intercept=True, l1_ratio=0.15,\n",
" learning_rate='optimal', loss='hinge', n_iter=50, n_jobs=1,\n",
" penalty='l2', power_t=0.5, random_state=None, shuffle=True,\n",
" verbose=0, warm_start=False)\n",
"train time: 0.007s\n",
"test time: 0.000s\n",
"accuracy: 0.844\n",
"dimensionality: 3620\n",
"density: 0.833702\n",
"\n",
"confusion matrix:\n",
"[[239 26]\n",
" [ 20 10]]\n",
"\n",
"================================================================================\n",
"L1 penalty\n",
"________________________________________________________________________________\n",
"Training: \n",
"LinearSVC(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
" intercept_scaling=1, loss='l2', max_iter=1000, multi_class='ovr',\n",
" penalty='l1', random_state=None, tol=0.001, verbose=0)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Anaconda3\\lib\\site-packages\\sklearn\\svm\\classes.py:197: DeprecationWarning: loss='l2' has been deprecated in favor of loss='squared_hinge' as of 0.16. Backward compatibility for the loss='l2' will be removed in 1.0\n",
" DeprecationWarning)\n",
"C:\\Anaconda3\\lib\\site-packages\\sklearn\\svm\\classes.py:197: DeprecationWarning: loss='l2' has been deprecated in favor of loss='squared_hinge' as of 0.16. Backward compatibility for the loss='l2' will be removed in 1.0\n",
" DeprecationWarning)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"train time: 0.266s\n",
"test time: 0.001s\n",
"accuracy: 0.854\n",
"dimensionality: 3620\n",
"density: 0.097238\n",
"\n",
"confusion matrix:\n",
"[[244 21]\n",
" [ 22 8]]\n",
"\n",
"________________________________________________________________________________\n",
"Training: \n",
"SGDClassifier(alpha=0.0001, average=False, class_weight=None, epsilon=0.1,\n",
" eta0=0.0, fit_intercept=True, l1_ratio=0.15,\n",
" learning_rate='optimal', loss='hinge', n_iter=50, n_jobs=1,\n",
" penalty='l1', power_t=0.5, random_state=None, shuffle=True,\n",
" verbose=0, warm_start=False)\n",
"train time: 0.033s\n",
"test time: 0.000s\n",
"accuracy: 0.851\n",
"dimensionality: 3620\n",
"density: 0.569061\n",
"\n",
"confusion matrix:\n",
"[[243 22]\n",
" [ 22 8]]\n",
"\n",
"================================================================================\n",
"Elastic-Net penalty\n",
"________________________________________________________________________________\n",
"Training: \n",
"SGDClassifier(alpha=0.0001, average=False, class_weight=None, epsilon=0.1,\n",
" eta0=0.0, fit_intercept=True, l1_ratio=0.15,\n",
" learning_rate='optimal', loss='hinge', n_iter=50, n_jobs=1,\n",
" penalty='elasticnet', power_t=0.5, random_state=None, shuffle=True,\n",
" verbose=0, warm_start=False)\n",
"train time: 0.033s\n",
"test time: 0.000s\n",
"accuracy: 0.858\n",
"dimensionality: 3620\n",
"density: 0.747790\n",
"\n",
"confusion matrix:\n",
"[[246 19]\n",
" [ 23 7]]\n",
"\n",
"================================================================================\n",
"NearestCentroid (aka Rocchio classifier)\n",
"________________________________________________________________________________\n",
"Training: \n",
"NearestCentroid(metric='euclidean', shrink_threshold=None)\n",
"train time: 0.002s\n",
"test time: 0.000s\n",
"accuracy: 0.715\n",
"confusion matrix:\n",
"[[196 69]\n",
" [ 15 15]]\n",
"\n",
"================================================================================\n",
"Naive Bayes\n",
"________________________________________________________________________________\n",
"Training: \n",
"MultinomialNB(alpha=0.01, class_prior=None, fit_prior=True)\n",
"train time: 0.001s\n",
"test time: 0.001s\n",
"accuracy: 0.895\n",
"dimensionality: 3620\n",
"density: 1.000000\n",
"\n",
"confusion matrix:\n",
"[[259 6]\n",
" [ 25 5]]\n",
"\n",
"________________________________________________________________________________\n",
"Training: \n",
"BernoulliNB(alpha=0.01, binarize=0.0, class_prior=None, fit_prior=True)\n",
"train time: 0.002s\n",
"test time: 0.000s\n",
"accuracy: 0.861\n",
"dimensionality: 3620\n",
"density: 1.000000\n",
"\n",
"confusion matrix:\n",
"[[248 17]\n",
" [ 24 6]]\n",
"\n",
"================================================================================\n",
"LinearSVC with L1-based feature selection\n",
"________________________________________________________________________________\n",
"Training: \n",
"Pipeline(steps=[('feature_selection', LinearSVC(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
" intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
" multi_class='ovr', penalty='l1', random_state=None, tol=0.001,\n",
" verbose=0)), ('classification', LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,\n",
" intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
" multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,\n",
" verbose=0))])\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\__init__.py:93: DeprecationWarning: Function transform is deprecated; Support to use estimators as feature selectors will be removed in version 0.19. Use SelectFromModel instead.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\__init__.py:93: DeprecationWarning: Function transform is deprecated; Support to use estimators as feature selectors will be removed in version 0.19. Use SelectFromModel instead.\n",
" warnings.warn(msg, category=DeprecationWarning)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"train time: 0.271s\n",
"test time: 0.001s\n",
"accuracy: 0.854\n",
"confusion matrix:\n",
"[[242 23]\n",
" [ 20 10]]\n",
"\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAvAAAAIxCAYAAAArEoxrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xm8VXW5+PHPAyKigoHDAfEAIplYlqjXITVF08qkm0Pl\nkGCDmuacpl3NSO1q5Rh6aXIic8rsV2JOJVfNeUBSC705gBM4VQxODM/vj70Obo4H2ZyBfRbn8369\nzsu1v+u7vutZ5+ziWd/9rO+OzESSJElSOXSrdwCSJEmSamcCL0mSJJWICbwkSZJUIibwkiRJUomY\nwEuSJEklYgIvSZIklYgJvCRJklQiJvCSpBVWRGwXEXdFxL8i4tWIuDMiNq93XJLUFivVOwBJkjpC\nRPQGrgcOAX4DrAxsD7zdjufolpkL22s8SaqFM/CSpBXVhkBm5jVZ8XZm/ikzHwOIiIMi4m8RMSsi\nHouITYv2jSJiUkT8MyIejYhRTQNGxCUR8T8RcUNEzAZ2jIiVI+KsiJgWES8V+3vW55IldQUm8JKk\nFdWTwIKIuDQiPh0RH2jaERFfAE4BvpyZfYDPAa9FxEpUZu1vAtYGjgR+HREfrBp3X+C0zOwN3AX8\nEBgGfLT478BibEnqEJGZ9Y5BkqQOEREfAk4APgkMAG4ADgYmADdk5rhm/bcDrsnMdavargCmZuap\nEXEJlX87D6zaPwfYJDOfKV5vA/w6M4d26MVJ6rKsgZckrbAy8wngqwARsSFwOXAesB7wVAuHrAs8\n16xtGpVZ9SaL9kfE2sCqwEMR0dTcDQgkqYNYQiNJ6hIy80ngMuAjVJLwYS10exFobNY2CHiheqiq\n7VeBN4APZ2a/4ucDmblG+0UuSYszgZckrZAi4kMRcWxEDCxeN1KpX78H+CXwrYjYrNi3QbH/PuCN\niPh2RKwUETsCuwNXtnSOrNSh/gI4r5iNJyIGRsSuHXx5krowE3hJ0opqNrAVcF+xYszdwF+Bb2Xm\nb4EfAFdExCzgd0C/zJwHjAJ2ozK7fgFwQGb+XzFmSw+OnQD8A7g3Iv4F3EJlBRxJ6hA+xCpJkiSV\niDPwkiRJUomYwEuSJEklYgIvSZIklYjrwKvUIsKHOCRJUillZqu+M8IEXqXng9jlNXbsWMaOHVvv\nMNRK/v3Kz79hufn3K7eqL39bZpbQSJIkSSViAi9JkiSViAm8pLrZcccd6x2C2sC/X/n5Nyw3/35d\nl1/kpFKLiPQ9LEmSyiYifIhVkiSpbIYMGcK0adPqHYY60ODBg3n22WfbdUxn4FVqzsBLksqsmIWt\ndxjqQEv6G7dlBt4aeJVeRCzXnyGN/et9yZIkqQuzhEall2ct3/PFcTOX7wklSZKqOAMvSZIklYgJ\nvCRJklQiJvCSJElSiZjAS5IkdSL9+6/XoYsx9O+/Xr0vUW3kQ6ySJEmdyMyZLwBjO3D8jht7WWQm\nEa1aRbHLM4FX6cVxy/d8g9drWL4nlCSpTn74wx8ybtw4Zs2axcCBA/mf//kfdthhB84880wuvvhi\nXnnlFTbccEP+3//7fwwcOJC7776bo48+mv/7v/9jww035LzzzmObbbYBYOTIkWy77bb87//+L5Mn\nT+bRRx9lrbXW4phjjuHGG2+ke/fuHHjggZx66qkm9kthAq/S8wswJElqf08++SQXXnghDz30EA0N\nDUyfPp0FCxZw9tlnc/XVV3PTTTcxbNgwHn30UVZddVX++c9/svvuu3PBBRewzz77cM011/DZz36W\np556ir59+wJw+eWXc9NNN7HhhhuycOFCvvCFLzBgwACefvpp5syZw+67786gQYM46KCD6nz1nZs1\n8JIkSXqP7t2788477/DYY48xf/58Bg0axPrrr89FF13ED37wA4YNGwbAJptsQt++fbnhhhvYcMMN\n2W+//ejWrRv77LMPG220Eddff/2iMQ888EA22mgjunXrxuuvv86NN97IueeeyyqrrMJaa63F0Ucf\nzZVXXlmvSy4NZ+AlSZL0HhtssAHnnXceY8eO5fHHH+fTn/40Z599Ns899xxDhw59T/8XX3yRwYMH\nL9Y2ePBgXnjhhUWvGxsbF21PmzaNefPmMWDAAKDyiXpmMmjQoA66ohWHCbxKzzo5SapNQ2MjM6ZP\nr3cYKpF99tmHffbZhzlz5nDwwQdzwgknMGjQIJ566ik23njjxfquu+66/Pa3v12sbfr06XzmM59Z\n9Lr63+zGxkZWWWUVXnvtNf8tX0Ym8Cq/SZPqHYEklcLMkSPrHYJK5Mknn+SFF15g2223ZeWVV6ZX\nr14sXLiQr3/965x88skMHz58UQ38euutx2677caRRx7JVVddxRe+8AWuvfZa/v73vzNq1KgWx+/f\nvz+77rorxxxzDKeddhqrr746zzzzDM8//zyf+MQnlvPVlosJvCRJUifS0DCwQ5d6bGgYWFO/t99+\nmxNPPJGpU6fSo0cPPv7xj/Pzn/+cddZZh7fffptdd92V1157jY022ojf/e53rLvuukycOJEjjzyS\nQw89lGHDhnHDDTcseoC1pVn2CRMmcMIJJ7DxxhszZ84chg4dygknnNCu17siClfwUJlFRDoDL0k1\nGjnSlbs6mYjwb7KCW9LfuGhvVe2Qq9BIkiRJJWICL0mSJJWICbwkSZJUItbAq9QiwjewJNXIZSQ7\nH2vgV3wdUQPvKjQqPf+PT5IkdSWW0EiSJEklYgIvSZIklchSS2giYgEwBegB/A0Yk5lvRcRfMnO7\n1pw0IiYB38rMhyNiIrBfZs5qzViSX78sSZK6klpq4Odm5mYAEXE58A3gvNYm781l5u7tMY66srH1\nDkCSpFYaW+8AOtShhx7Keuutx0knndSufdvqiiuuYMKECdx0000dfq6OsNRVaCJiVmb2KbYPATbJ\nzMMjYnZm9o6IHYBTgdnAMOC2zDys6L8L8H1gZeAp4CuZ+UazGfhngM2B3sCNwF+AjwPPA/+ZmW9H\nxFDgQmAt4A3goMx8sn1/FSqjyio0Y+sdhiRJrTT2PYsx9B80iJnPPddhZ6x1NaL111+fiy66iJ12\n2qnDYlkepk2bxvrrr8/8+fPp1m35V4/XaxWaKE6yEvAZ4I9Fe3Uk/wEMB6YDN0fEnsDtwMnAzpn5\nZkR8GzgWOL3Z+NXjDAO+lJkHR8TVwF7AFcDPgUMy86mI2BIYD+xc+2VKkiSVw8znnoNJkzpu/JEj\n22WcBQsW0L1793YZqyNl5gq3XGcttyG9IuJh4H5gGnBxC33uz8xpWfnNXAlsB2wNbAzcFRGTgdHA\noBaOrb7zeCYzHy22HwKGRMRqVGbkf1OM8zOgoYa4JUmS1AqjR49m+vTpjBo1ij59+nDWWWcxbdo0\nunXrxsUXX8zgwYPZeefKXOoXv/hFBgwYQN++fdlxxx3529/+tmicr3zlK5xyyikA3H777TQ2NnLO\nOefQ0NDAwIEDufTSS1vV9/XXX2fUqFGsscYabLXVVnz3u99l++23b/FadthhBwA+8IEP0KdPH+67\n7z4uu+yyxfp369aN8ePHs+GGG7LGGmtwyimn8PTTT7PtttvygQ98gH322Yf58+cv6j9x4kRGjBhB\n37592W677Xj00Uffc96OVMsM/BtNNfDvo/ktTVJJzG/JzP2XIZ63q7YXAKtQucn4Zw0xSJIkqR1M\nmDCBO++8k4svvpiRxYz9tGnTALjjjjuYOnXqonKU3XbbjUsvvZQePXpwwgknsP/++zN58uQWx50x\nYwazZ8/mxRdf5JZbbmHvvfdmjz32YI011limvocddhi9e/fm5Zdf5umnn+ZTn/oUQ4YMafGcd9xx\nB0OHDmXWrFmLFr6YOnXqexbBuOWWW5g8eTLTp09nxIgR3HPPPVxxxRX069ePrbfemiuvvJIDDjiA\nyZMn87WvfY0bbriBzTffnMsvv5zPfe5zPPnkk/To0aNVv+9lVcsM/JJqc6rbt4yIwRHRDfgSlTr2\ne4FtI2IDgIhYNSI+uKznyszZwDMRsfeiThEfrSFuSZIktUHzspOI4Pvf/z69evWiZ8+eABx44IGs\nuuqq9OjRg1NOOYUpU6Ywe/bsFsdbeeWV+e53v0v37t35zGc+w+qrr84TTzyxTH0XLlzIddddx6mn\nnkrPnj0ZPnw4Y8aMWeZrae6EE05gtdVWY/jw4XzkIx9h1113ZfDgwfTu3ZvPfOYzi25KfvGLX/CN\nb3yDLbbYgojggAMOoGfPntx7771LjaG91DIDv6SrrW5/ELiAdx9i/R1ARBwIXBkRPYv+JwP/1+zY\nJW1X+zIwPiJOLmK+CvhrDbGrSxhb7wAkSeoy1ltvvUXbCxcu5L/+67+49tprefXVV4kIIoJXX32V\n3r17v+fYNddcc7EHSVdddVXmzJnT4nmW1PeVV15hwYIFi8XR2NjY5utaZ511Fm336tWLhoaGxV7P\nnDkTqHwSMWHCBMaNGwdUbgzmzZvHiy++2OYYarXUBL5pBZqltP87Mz/XQp//BbZsoX2nqu2hxebr\nwEer2s+u2n6WygO00nusSA+lSJK6ls78XSZLiq26/YorruD666/ntttuY9CgQfz73/+mb9++Hfpv\n89prr81KK63E888/z7BhwwB47n1W7Wnv33FjYyMnnXQS3/nOd9p13GXhN7FKkiTpPfr378/TTz+9\nWFvzxHz27Nn07NmTvn37MnfuXL7zne90+E1Jt27d2HPPPRk7dixvvvkmU6dOZcKECUvsv/baa9Ot\nWzeeeuqpdjn/QQcdxE9/+lPuv/9+AObOncsf//hH5s6d2y7j16KWEpr3lZm3U1kyUpIkSW3U0NjY\nbks9Lmn8Wpx44okcccQRfPvb3+bkk09mr732ek9yPnr0aG6++WYGDhzImmuuyWmnncbPfvazmmNZ\nlmS/uu+4ceM48MADGTBgAB/60IfYb7/9ePDBB1s8rlevXpx00klsu+22zJ8/v8Uvb2oex/vFtfnm\nm/OLX/yCww8/nH/84x/06tWL7bbbbtFqN8vDUr/ISerMIiJ9D0uSympFW5+8Xk488URmzpzJJZdc\nUu9Q3qMjvsjJEhpJkiSVyhNPPLFo7fX777+fiy66iD333LPOUS0/bS6hkSRJkpan2bNns++++/LS\nSy/R0NDA8ccfz6hRo+od1nJjCY1KzRIaSVKZWUKz4rOERpIkSeriTOAlSZKkEjGBlyRJkkrEBF6S\nJEkqERN4SZIkqURM4CVJktTp9O7dm2effbbeYXRKJvCSJEmdyJDG/kREh/0MaexfUxzrr78+t912\nW5uv57LLLmP77bd/3z4jR47k4osvXqxt9uzZDBkypM3nXxH5RU6SJEmdyLTnZ5Jnddz4cdzMjhu8\nBZlJRKuWO9cSOAMvSZKkxYwePZrp06czatQo+vTpw1lnVe4o7r33Xrbddlv69u3LiBEjuP322xcd\nc+mll7LBBhvQp08fNthgA6688kqmTp3KoYceyj333EPv3r3p16/fe8518sknc+edd3L44YfTp08f\njjzySAC6devG008/DcBXvvIVvvnNb7LbbrvRu3dvtt9+e2bOnMkxxxxDv3792HjjjZkyZcqiMV96\n6SX23ntv1llnHTbYYAPGjRvXkb+u5c4EXpIkSYuZMGECgwYNYuLEicyaNYvjjjuOF198kd13351T\nTjmFf/7zn5x11lnstddevPbaa7zxxhscddRR3HzzzcyaNYu7776bTTfdlI022oif/vSnbLPNNsye\nPZvXX3/9Pec6/fTT2X777bnggguYNWsWP/nJTwDeM2v/m9/8hv/+7//mtddeY+WVV2abbbZhiy22\n4LXXXmOvvfbimGOOASoz/qNGjWLEiBG89NJL/PnPf+b888/n1ltv7fhf3HJiAi9JkqQWZeai7csv\nv5zPfvazfOpTnwJg5513ZosttuCPf/wjAN27d+fRRx/lrbfeoqGhgeHDh7fbuQH22GMPNt10U1Ze\neWX22GMPevXqxf77709E8KUvfYlHHnkEgPvvv59XX32Vk046ie7duzNkyBC+/vWvc9VVV7Upns7E\nBF6lFxH0HzSo3mFIkrRCmzZtGtdccw39+vWjX79+9O3bl7vuuouXXnqJVVddlauvvprx48czYMAA\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x25d7d91e438>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import logging\n",
"import numpy as np\n",
"from optparse import OptionParser\n",
"import sys\n",
"from time import time\n",
"import matplotlib.pyplot as plt\n",
"\n",
"from sklearn.datasets import fetch_20newsgroups\n",
"from sklearn.feature_extraction.text import TfidfVectorizer\n",
"from sklearn.feature_extraction.text import HashingVectorizer\n",
"from sklearn.feature_selection import SelectKBest, chi2\n",
"from sklearn.linear_model import RidgeClassifier\n",
"from sklearn.pipeline import Pipeline\n",
"from sklearn.svm import LinearSVC\n",
"from sklearn.linear_model import SGDClassifier\n",
"from sklearn.linear_model import Perceptron\n",
"from sklearn.linear_model import PassiveAggressiveClassifier\n",
"from sklearn.naive_bayes import BernoulliNB, MultinomialNB\n",
"from sklearn.neighbors import KNeighborsClassifier\n",
"from sklearn.neighbors import NearestCentroid\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.utils.extmath import density\n",
"from sklearn import metrics\n",
"\n",
"def trim(s):\n",
" \"\"\"Trim string to fit on terminal (assuming 80-column display)\"\"\"\n",
" return s if len(s) <= 80 else s[:77] + \"...\"\n",
"def benchmark(clf):\n",
" print('_' * 80)\n",
" print(\"Training: \")\n",
" print(clf)\n",
" t0 = time()\n",
" clf.fit(X_train_dtm, y_train)\n",
" train_time = time() - t0\n",
" print(\"train time: %0.3fs\" % train_time)\n",
"\n",
" t0 = time()\n",
" pred = clf.predict(X_test_dtm)\n",
" test_time = time() - t0\n",
" print(\"test time: %0.3fs\" % test_time)\n",
"\n",
" score = metrics.accuracy_score(y_test, pred)\n",
" print(\"accuracy: %0.3f\" % score)\n",
"\n",
" if hasattr(clf, 'coef_'):\n",
" print(\"dimensionality: %d\" % clf.coef_.shape[1])\n",
" print(\"density: %f\" % density(clf.coef_))\n",
"\n",
" if False:\n",
" print(\"top 10 keywords per class:\")\n",
" for i, category in enumerate([0,1]):\n",
" top10 = np.argsort(clf.coef_[i])[-10:]\n",
" print(trim(\"%s: %s\"\n",
" % (category, \" \".join(['False','True']))))\n",
" print()\n",
"\n",
" if False:\n",
" print(\"classification report:\")\n",
" print(metrics.classification_report(y_test, pred,\n",
" target_names=categories))\n",
"\n",
" if True:\n",
" print(\"confusion matrix:\")\n",
" print(metrics.confusion_matrix(y_test, pred))\n",
"\n",
" print()\n",
" clf_descr = str(clf).split('(')[0]\n",
" return clf_descr, score, train_time, test_time\n",
"\n",
"\n",
"results = []\n",
"for clf, name in (\n",
" (RidgeClassifier(tol=1e-2, solver=\"lsqr\"), \"Ridge Classifier\"),\n",
" (Perceptron(n_iter=50), \"Perceptron\"),\n",
" (PassiveAggressiveClassifier(n_iter=50), \"Passive-Aggressive\"),\n",
" (KNeighborsClassifier(n_neighbors=10), \"kNN\"),\n",
" (RandomForestClassifier(n_estimators=100), \"Random forest\")):\n",
" print('=' * 80)\n",
" print(name)\n",
" results.append(benchmark(clf))\n",
"\n",
"for penalty in [\"l2\", \"l1\"]:\n",
" print('=' * 80)\n",
" print(\"%s penalty\" % penalty.upper())\n",
" # Train Liblinear model\n",
" results.append(benchmark(LinearSVC(loss='l2', penalty=penalty,\n",
" dual=False, tol=1e-3)))\n",
"\n",
" # Train SGD model\n",
" results.append(benchmark(SGDClassifier(alpha=.0001, n_iter=50,\n",
" penalty=penalty)))\n",
"\n",
"# Train SGD with Elastic Net penalty\n",
"print('=' * 80)\n",
"print(\"Elastic-Net penalty\")\n",
"results.append(benchmark(SGDClassifier(alpha=.0001, n_iter=50,\n",
" penalty=\"elasticnet\")))\n",
"\n",
"# Train NearestCentroid without threshold\n",
"print('=' * 80)\n",
"print(\"NearestCentroid (aka Rocchio classifier)\")\n",
"results.append(benchmark(NearestCentroid()))\n",
"\n",
"# Train sparse Naive Bayes classifiers\n",
"print('=' * 80)\n",
"print(\"Naive Bayes\")\n",
"results.append(benchmark(MultinomialNB(alpha=.01)))\n",
"results.append(benchmark(BernoulliNB(alpha=.01)))\n",
"\n",
"print('=' * 80)\n",
"print(\"LinearSVC with L1-based feature selection\")\n",
"# The smaller C, the stronger the regularization.\n",
"# The more regularization, the more sparsity.\n",
"results.append(benchmark(Pipeline([\n",
" ('feature_selection', LinearSVC(penalty=\"l1\", dual=False, tol=1e-3)),\n",
" ('classification', LinearSVC())\n",
"])))\n",
"\n",
"# make some plots\n",
"\n",
"indices = np.arange(len(results))\n",
"\n",
"results = [[x[i] for x in results] for i in range(4)]\n",
"\n",
"clf_names, score, training_time, test_time = results\n",
"training_time = np.array(training_time) / np.max(training_time)\n",
"test_time = np.array(test_time) / np.max(test_time)\n",
"\n",
"plt.figure(figsize=(12, 8))\n",
"plt.title(\"Score\")\n",
"plt.barh(indices, score, .2, label=\"score\", color='navy')\n",
"plt.barh(indices + .3, training_time, .2, label=\"training time\",\n",
" color='c')\n",
"plt.barh(indices + .6, test_time, .2, label=\"test time\", color='darkorange')\n",
"plt.yticks(())\n",
"plt.legend(loc='best')\n",
"plt.subplots_adjust(left=.25)\n",
"plt.subplots_adjust(top=.95)\n",
"plt.subplots_adjust(bottom=.05)\n",
"\n",
"for i, c in zip(indices, clf_names):\n",
" plt.text(-.3, i, c)\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## I like Random Forest better than LR. Let's try it"
]
},
{
"cell_type": "code",
"execution_count": 580,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy: 0.901694915254\n"
]
},
{
"data": {
"image/png": "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\nzP4/aXlaLfRrd/AAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x25d7d91fa58>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#RF\n",
"# ignore terms that appear in more than 50% of the documents\n",
"vect = CountVectorizer(max_df=0.5,min_df=2)\n",
"\n",
"X_train_dtm = vect.fit_transform(X_train)\n",
"X_test_dtm = vect.transform(X_test)\n",
"\n",
"from sklearn.linear_model import LogisticRegression\n",
"rf_clf = RandomForestClassifier(n_estimators=1000)\n",
"\n",
"# train the model using X_train_dtm\n",
"rf_clf.fit(X_train_dtm, y_train)\n",
"\n",
"# make class predictions for X_test_dtm\n",
"y_pred_class = rf_clf.predict(X_test_dtm)\n",
"\n",
"# print the accuracy of its predictions\n",
"print('Accuracy: ', metrics.accuracy_score(y_test, y_pred_class))\n",
"\n",
"DrawROC(y_test,rf_clf.predict_proba(X_test_dtm)[:,1],'Random Forest, n_est='+str(len(rf_clf.estimators_)))"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"Not much better than logistic regression"
]
},
{
"cell_type": "code",
"execution_count": 581,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"False 0.898305\n",
"Name: rude, dtype: float64"
]
},
"execution_count": 581,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# calculate null accuracy\n",
"y_test.value_counts().head(1) / y_test.shape"
]
},
{
"cell_type": "code",
"execution_count": 582,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"confusion matrix:\n",
"[[265 0]\n",
" [ 29 1]]\n"
]
}
],
"source": [
"print(\"confusion matrix:\")\n",
"print(metrics.confusion_matrix(y_test, y_pred_class))\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"aaand we don't predit anything really'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's examine misclassified examples and will try to get insight on how to work on vectorizer."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Looks like changing classifier will not help us! Let's dig deeper. There's one review that is classified correctly even when we use threshold of 0.7! Let's read it!"
]
},
{
"cell_type": "code",
"execution_count": 583,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"954 Wow... absolutely the worst, most shameful McDonald's I've ever been to. ξI've had better customer service at McDonald's in airports, Walmarts, and in foreign countries where they didn't speak English, no exaggeration!Drive-thru window #1 cashier didn't say a single word, not a single greeting or smile. ξShe opened window, took payment, handed back receipt, then shut window. ξ And no, she wasn't busy - we were the only ones in the drive-thru. ξNo one before us, no one after.Drive-thru window #2 expediter mimicked the first - no hello, no thank you, nothing. ξOnly thing she said was, \"waiting on your nuggets.\" ξThat's it. ξBut she had plenty to say with her coworkers (one of whom I could tell was the shift supervisor) who were standing around being absolutely unproductive.To add insult to injury, they also got our order wrong (wrong sauces) - minor, but still wrong especially with an order so small - only 1 entree! ξ(We ordered Chicken McNuggets and 2 sweet teas... pretty si...\n",
"Name: review, dtype: object\n",
"confusion matrix:\n",
"[[265 0]\n",
" [ 29 1]]\n"
]
}
],
"source": [
"y_pred_class=rf_clf.predict_proba(X_test_dtm)[:,1] > 0.7\n",
"\n",
"print(str(X_test.loc[y_pred_class==True]))\n",
"\n",
"print(\"confusion matrix:\")\n",
"print(metrics.confusion_matrix(y_test, y_pred_class))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"WOW if this is a 100% \"bad service review\" we got it"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Our good friend 954 is here and some others. Let's dive in"
]
},
{
"cell_type": "code",
"execution_count": 584,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"3991"
]
},
"execution_count": 584,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(vect.stop_words_)"
]
},
{
"cell_type": "code",
"execution_count": 585,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x25d7e658860>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Back to log. regr:\n",
"\n",
"vect = CountVectorizer(ngram_range=(1, 2), min_df=2)\n",
"\n",
"X_train_dtm = vect.fit_transform(X_train)\n",
"X_test_dtm = vect.transform(X_test)\n",
"\n",
"lr = LogisticRegression()\n",
"\n",
"# train the model using X_train_dtm\n",
"lr.fit(X_train_dtm, y_train)\n",
"\n",
"# make class predictions for X_test_dtm\n",
"y_pred_class = lr.predict(X_test_dtm)\n",
"\n",
"DrawROC(y_test,lr.predict_proba(X_test_dtm)[:,1],'Logistic Regression')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's add some stopwords from vocabulary"
]
},
{
"cell_type": "code",
"execution_count": 586,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x25d7cd54160>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import nltk\n",
"from nltk.corpus import stopwords\n",
"vect = CountVectorizer(ngram_range=(1, 2), min_df=2,stop_words=set(stopwords.words('english')))\n",
"X_train_dtm = vect.fit_transform(X_train)\n",
"X_test_dtm = vect.transform(X_test)\n",
"\n",
"lr = LogisticRegression()\n",
"\n",
"# train the model using X_train_dtm\n",
"lr.fit(X_train_dtm, y_train)\n",
"\n",
"# make class predictions for X_test_dtm\n",
"y_pred_class = lr.predict(X_test_dtm)\n",
"\n",
"DrawROC(y_test,lr.predict_proba(X_test_dtm)[:,1],'Logistic Regression')"
]
},
{
"cell_type": "code",
"execution_count": 587,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nkZjiSTsKAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x25d7d8b0710>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#How about better list?\n",
"ter_list=open(\"../data/terrier-stop.txt\", \"r\")\n",
"t_list = ter_list.readlines()\n",
"ter_list.close()\n",
"vect = CountVectorizer(ngram_range=(1, 2), min_df=2,stop_words=set(t_list))\n",
"X_train_dtm = vect.fit_transform(X_train)\n",
"X_test_dtm = vect.transform(X_test)\n",
"\n",
"lr = LogisticRegression()\n",
"\n",
"# train the model using X_train_dtm\n",
"lr.fit(X_train_dtm, y_train)\n",
"\n",
"# make class predictions for X_test_dtm\n",
"y_pred_class = lr.predict(X_test_dtm)\n",
"\n",
"DrawROC(y_test,lr.predict_proba(X_test_dtm)[:,1],'Logistic Regression')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Worse! "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ok - we got 68% - that's fine"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Task 7 (Challenge)\n",
"\n",
"The **city** column might be predictive of the response, but we are not currently using it as a feature. Let's see whether we can increase the AUC by adding it to the model:\n",
"\n",
"1. Create a new DataFrame column, **review_city**, that concatenates the **review** text with the **city** text. One easy way to combine string columns in pandas is by using the [`Series.str.cat()`](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.cat.html) method. Make sure to use the **space character** as a separator, as well as replacing **null city values** with a reasonable string value (such as 'na').\n",
"2. Redefine X as the **review_city** column, and re-split X and y into training and testing sets.\n",
"3. When you run **`tokenize_test()`**, CountVectorizer will simply treat the city as an extra word in the review, and thus it will automatically be included in the model! Check to see whether it increased or decreased the AUC of your **best model**."
]
},
{
"cell_type": "code",
"execution_count": 588,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\nmZk19P8BdXq5mdV52qEAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x25d7d8bef60>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df['review_city']=df.review.str.cat(df.city,sep=' ', na_rep='na')\n",
"\n",
"X = df.review_city\n",
"y = df.rude\n",
"X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,random_state=1)\n",
"vect = CountVectorizer(ngram_range=(1, 2), min_df=2,stop_words=set(stopwords.words('english')))\n",
"X_train_dtm = vect.fit_transform(X_train)\n",
"X_test_dtm = vect.transform(X_test)\n",
"\n",
"lr = LogisticRegression()\n",
"\n",
"# train the model using X_train_dtm\n",
"lr.fit(X_train_dtm, y_train)\n",
"\n",
"# make class predictions for X_test_dtm\n",
"y_pred_class = lr.predict(X_test_dtm)\n",
"\n",
"DrawROC(y_test,lr.predict_proba(X_test_dtm)[:,1],'Logistic Regression')"
]
},
{
"cell_type": "code",
"execution_count": 589,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy: 0.901694915254\n"
]
},
{
"data": {
"image/png": "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\nQ7wB4gAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x25d041c7f60>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"\n",
"from sklearn.linear_model import LogisticRegression\n",
"rf_clf = RandomForestClassifier(n_estimators=1000)\n",
"\n",
"# train the model using X_train_dtm\n",
"rf_clf.fit(X_train_dtm, y_train)\n",
"\n",
"# make class predictions for X_test_dtm\n",
"y_pred_class = rf_clf.predict(X_test_dtm)\n",
"\n",
"# print the accuracy of its predictions\n",
"print('Accuracy: ', metrics.accuracy_score(y_test, y_pred_class))\n",
"\n",
"DrawROC(y_test,rf_clf.predict_proba(X_test_dtm)[:,1],'Random Forest, n_est='+str(len(rf_clf.estimators_)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Random forest is doing much better! Let's see if our \"city\" feature cut into the top."
]
},
{
"cell_type": "code",
"execution_count": 590,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Feature ranking:\n"
]
},
{
"data": {
"text/plain": [
"['old cold',\n",
" 'order Ͼa',\n",
" 'wrong go',\n",
" 'food side',\n",
" 'spark',\n",
" 'min wait',\n",
" 'sandwich ordered',\n",
" 'problems',\n",
" 'today',\n",
" 'person ask',\n",
" 'lane drive',\n",
" 'order big',\n",
" 'food cheap',\n",
" 'remake food',\n",
" 'see going',\n",
" 'oj',\n",
" 'specific location',\n",
" 'fries go',\n",
" 'nice touch',\n",
" 'cup coffee',\n",
" 'offer refund',\n",
" 'careful',\n",
" 'paid',\n",
" 'satisfaction',\n",
" 'go food']"
]
},
"execution_count": 590,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"importances = rf_clf.feature_importances_\n",
"\n",
"indices = np.argsort(importances)[::-1]\n",
"\n",
"# Print the feature ranking\n",
"print(\"Feature ranking:\")\n",
"\n",
"\n",
"[list(vect.vocabulary_.keys())[i] for i in indices[:25]]"
]
},
{
"cell_type": "code",
"execution_count": 591,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"feat = pd.DataFrame([list(vect.vocabulary_.keys())[i] for i in indices], columns=['feature'])"
]
},
{
"cell_type": "code",
"execution_count": 592,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"feat['import']= sorted(rf_clf.feature_importances_,reverse=True)"
]
},
{
"cell_type": "code",
"execution_count": 593,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>feature</th>\n",
" <th>import</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>old cold</td>\n",
" <td>0.015766</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>order Ͼa</td>\n",
" <td>0.006175</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>wrong go</td>\n",
" <td>0.005997</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>food side</td>\n",
" <td>0.005682</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>spark</td>\n",
" <td>0.004681</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" feature import\n",
"0 old cold 0.015766\n",
"1 order Ͼa 0.006175\n",
"2 wrong go 0.005997\n",
"3 food side 0.005682\n",
"4 spark 0.004681"
]
},
"execution_count": 593,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"feat.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nowhere to be found. Where are they?"
]
},
{
"cell_type": "code",
"execution_count": 594,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>feature</th>\n",
" <th>import</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>926</th>\n",
" <td>portland</td>\n",
" <td>2.993842e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1093</th>\n",
" <td>houston</td>\n",
" <td>2.556222e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2562</th>\n",
" <td>los angeles</td>\n",
" <td>5.511889e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2620</th>\n",
" <td>new york</td>\n",
" <td>5.114304e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5202</th>\n",
" <td>dallas</td>\n",
" <td>7.148433e-06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5833</th>\n",
" <td>cleveland</td>\n",
" <td>5.159769e-06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6095</th>\n",
" <td>atlanta</td>\n",
" <td>4.315031e-06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6776</th>\n",
" <td>las vegas</td>\n",
" <td>1.461116e-06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7148</th>\n",
" <td>chicago</td>\n",
" <td>5.307889e-07</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" feature import\n",
"926 portland 2.993842e-04\n",
"1093 houston 2.556222e-04\n",
"2562 los angeles 5.511889e-05\n",
"2620 new york 5.114304e-05\n",
"5202 dallas 7.148433e-06\n",
"5833 cleveland 5.159769e-06\n",
"6095 atlanta 4.315031e-06\n",
"6776 las vegas 1.461116e-06\n",
"7148 chicago 5.307889e-07"
]
},
"execution_count": 594,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"feat[feat.feature.isin([x.lower() for x in list(df.city.unique())[:-1]])]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Task 8 (Challenge)\n",
"\n",
"The **policies_violated:confidence** column may be useful, since it essentially represents a measurement of the training data quality. Let's see whether we can improve the AUC by only training the model using higher-quality rows!\n",
"\n",
"To accomplish this, your first sub-task is to **calculate the mean confidence score for each row**, and then store those mean scores in a new column. For example, the confidence scores for the first row are `1.0\\r\\n0.6667\\r\\n0.6667`, so you should calculate a mean of `0.7778`. Here are the suggested steps:\n",
"\n",
"1. Using the [`Series.str.split()`](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.split.html) method, convert the **policies_violated:confidence** column into lists of one or more \"confidence scores\". Save the results as a new DataFrame column called **confidence_list**.\n",
"2. Define a function that calculates the mean of a list of numbers, and pass that function to the [`Series.apply()`](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.apply.html) method of the **confidence_list** column. That will calculate the mean confidence score for each row. Save those scores in a new DataFrame column called **confidence_mean**.\n",
" - **Hint:** [How do I apply a function to a pandas Series or DataFrame?](https://www.youtube.com/watch?v=P_q0tkYqvSk&list=PL5-da3qGB5ICCsgW1MxlZ0Hq8LL5U3u9y&index=30) explains how to use the `Series.apply()` method."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Your second sub-task is to **remove lower-quality rows from the training set**, and then repeat the model building and evaluation process. Here are the suggested steps:\n",
"\n",
"1. Remove all rows from X_train and y_train that have a **confidence_mean lower than 0.75**. Check their shapes before and after to confirm that you removed about 300 rows.\n",
"2. Use the **`tokenize_test()`** function to check whether filtering the training data increased or decreased the AUC of your **best model**.\n",
" - **Hint:** Even though X_train and y_train are separate from the mcd DataFrame, they can still be filtered using a boolean Series generated from mcd because all three objects share the same index.\n",
" - **Note:** It's important that we don't remove any rows from the testing set (X_test and y_test), because the testing set should be representative of the real-world data we will encounter in the future (which will contain both high-quality and low-quality rows)."
]
},
{
"cell_type": "code",
"execution_count": 595,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"df['confidence_list']=df['policies_violated:confidence'].str.split()"
]
},
{
"cell_type": "code",
"execution_count": 596,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def mean_str(x):\n",
" x = [float(i) for i in x]\n",
" return sum(x)/len(x)"
]
},
{
"cell_type": "code",
"execution_count": 597,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"df['confidence_list']=df['confidence_list'].apply(mean_str)"
]
},
{
"cell_type": "code",
"execution_count": 598,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"df=df[df['confidence_list']>0.75]"
]
},
{
"cell_type": "code",
"execution_count": 599,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(1067, 14)"
]
},
"execution_count": 599,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.shape"
]
},
{
"cell_type": "code",
"execution_count": 600,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEZCAYAAACNebLAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xu8pXPd//HXezAOMWYGiXEmyWEM1TRKGRSj3KncFXIY\nUrpLku6ko87S/VNC7m6FUSk6EJ25ZYcQxSAh58OQX5jJ2W/MfH5/fL/Ldc2atddee8261lp77/fz\n8ViPva7zZ33W2tf3+n6/10ERgZmZWb1xvQ7AzMz6kwsIMzNryAWEmZk15ALCzMwacgFhZmYNuYAw\nM7OGXECMQZLOlPSYpKt7HUuNpE9IOq3NZZ+QtFFnI+p/kv4q6fW9jsNGrzFRQEi6R9LTkh6X9GDe\nQa5SN89rJF2S55kv6QJJL6+bZzVJJ0q6N893u6SvS5rc3U/UPkk7ArsC60bEjDbXsVjSJp2MKyKO\ni4j3tbDtSyUdUrfsahFxz3C2J2knSYvy9/gvSbdImj28qHsrIraOiMs6vV5J4yWdkfPyoKSPNJn3\nE7mAfjy/npb0fO1/Ihdij5deCyVdUFp+cV6+to6GBwn5f3OxpHGlcZMknS/pSUl3S9q3NG0FST/J\n4xc3KkglHS/pEUn/lPTVBtM/LOmuvP6bJW1WmvapvB9YIOmHklYtTTtT0nP589Q+l0rT/0fSrfn3\nd2CD3H9D0jxJj0o6RdJyg+W/amOigAACeHNETACmAdsBn6hNlLQD8DvgfGAdYGPgRuCPtSNTSSsA\nvwdeDuyW17UD8AgwvarAK/hxbATcExHPLkMso+XqynkRMSEiVgeOAr4j6aWd3kgv/8Hb9HlgU2B9\nYBfgaEm7NZoxF+yr5TxOAI4HBiLisTx969q0PP1+4MflVQBTS+tY6iBB0n7A8iz9uzsVeBZYC9gf\n+O+6g7rLgXcDDzVY52HAW4BtgKnAv0l6X2n6ocDBwB4RsSqwJ+l/HUkH5fXuAKwLrAKcUreJ4/Pn\nqX2ucuxzgf8A/lIfF2m/tD2wJbA58Arg0w3m646IGPUv4G5gl9Lw8cAvSsOXASc3WO7XwJz8/lDS\nD23lYWx3K+Ai4NG87DF5/JnAF0rz7QTcXxfv0cANwDP5/U/q1v1N4MT8fgLwXeBB0j/gFwE1iOeQ\nvL6FwOPAsXn8e4HbSf8APwfWKS2zGPgA8HfgztK4TRqsX6Qf8z3AP4A5wITS9APztH/m+V74XoBj\nge/n9ysC38/xzAf+RNoJfAl4Hng6x39SfTzASsAJeTvz83e7YoNYdwLuqxv3MLB3aXiL0vd3C/CO\n0rTJwC+Af+X4vghcPkTemq3vTcDN+XPdDxyVx6+RtzM/L/eHRr9rYDxwIjAPeAD4BrBC+fdFKgQf\nzvPMbvK7nQfsWhr+PPDDFn/zdwL7DzJtp5yvlevytGmT9U0AbiUdhC0CxuXxqwDPlZcFzgK+0mAd\n9wOvrxv3R+DQ0vDBwJWl3/F9wM6DxPQT4D9LwzuQ/q9WavT/3eSzXQ4cWDfuWuDfS8P7Ave2us/p\n9Gus1CBeIGk9YA/SDhFJKwOvAX7aYPYfA2/M73cFfhsRz7S4nVWBi0mFzDrAZsAlTRapPzraJ8c5\nETgH2EPSi/K6xwHvAM7O854F/D9gE1Lt6I2kAm3JDUScAbwfuCrSUc3nJe0CfAX49xznfXl7ZXuR\n/kG3HOJjH0wqBHbKsaxGPrKStCXwLdIPfh1gddLRV6McHETaMUwh7YjfDzwTEZ8m/VMdnuM/om45\nSIXDdsCMvOzRpJ3QoJS8hbQzviOPW4W0M/8BsCbp+zhV0hZ5sVOBJ4AXA7NzzPXf4Qt5a2F93wXe\nG+koe2tSbRXgo6Qd3Bp5W58c5GN8Om9rKrBtfl8+8nwJ6ftYl/Tb+Jak1RvkYiLp+7mxNPoG0sFO\nU7kZZy3gvEFmORD4WYP/oT/kpqyfStqwbtpXSLl+uG785sDCiLhzuHFmW+X5Gy27PrAesI2k+yTd\nKelzTdY1jlRAl2ufH8jNV9dKenuLMQ227vUkrbYM62hfr0qmbr5IR1qP59di0o57Qp42JY/bvMFy\nuwPP5fcX0eDopMk29wH+Msi0RjWI++riPahumcvIR2akAuD2/H5tUjV7xbpt/36QbR8EXFYa/i7w\n1dLwi0iFzQZ5eDGwU906BqtB/C/w/tLw5qSjvHHAZ4CzS9NWztPKNYjv5fcHA1cA2zTYxqXAIY3i\nIR35PQ1s3cL3sxPpiPSxnL+FwBGl6e+kdLSex307f45xOUeblaZ9sS6vS+St2fry+3tINbnV6ub5\nPKnpc6mjbJasQdwB7F6athtwV+mzPkU++s7jHgamN1jnejkv40vj3lBb1xA5/S5wxiDTVibVHl5X\nN35HUvPRBOBk4CaKWsIrgevy97ohS9YgdgQerFvXoTT43dO4BvE8pf950gHcovx+h/z9/YJUqG4I\n3Aa8J09/D6lWsyHpQOeCHNur8/RpwKT8O9mDtN/ZoUFcjWoQX8zj1yQV6lfnda89VP6reI2lGsRe\nkY7OdiJV9dfM4+eTfgzrNFhmHXK7I6l632iewaxPqm6364G64R+Rjr7Jf3+Y328ArAA8pHRm0nzS\njmdNWrMucG9tICKeIn3WKU1iaWld+f3ypEJsXdI/am07z+TtNPJ9Up/QOZIeyJ2JrbTjr0lqnrqr\nxXjnRcRk0k7gJFJ7e82GwIyc01pe98ufZa38ucp5uZ+llac3Wx/A3sCbgXuVOuJrJxB8jfQ7ukjS\nHZI+PshnWZdU+6u5lyVraI9GRLkm9TSwKkt7Mv+dUBq3Oqm2NKhcE38HqVmxkb1zDJeXR0bEFRHx\nfEQ8DnyY1Ef28typ+y3gw5H2nKpb35N1MbYUZ5PlV6f47LUazvER8URE3Av8D6kZEOAM0v/jAKlA\nq9X2HsifaW5EzI+IxRHxG1JNv9VaxJeB60n9FFeQDg4WRkR9DaorxlIBIYD8Az2L1BRBRDwNXEX6\ncdd7J+momPx39/yP0Ir7SR19jTxFakOtaVTw1DdX/ASYKWkK8DaKAuJ+0hHwGhExOSImRcTEiJja\nYpwPknZeAORmrDVYcudWH0tL68rvnycdrT5EOjqtbWflvJ2l5B3GFyNiK1Lz356k5omhYnmElIvB\n8t5QRCwEjgGm5qYmSHkdyDmt5XVCRBxO6kNZWP48pAOCpVZdet9sfUTEXyLiraTC5wJyR25EPBUR\n/xkRm5I6VY+StHODbTXK/YPDyUPe3gLSd7VtafS2pP6RZt5OKgAGO6vqQOB7Q6xDpb8TSDWIcyU9\nBFyTxz8g6bWkvp3lJZW/61birLmZJT/jtNKyt5FqiGUvfJeRfD4iNo6IDUj9SfMiYt4g22pUwDWe\nMeLZiDgiItaLiM1IB7CNOrO7oxfVlm6/WLqTek3S0cI2efi1pCOPw0lHVZNIHaKPkav2pDbGP5H6\nFF5G+sLXIJ11MKvBNlcldfYdkZddlVylJ1WF/5a38xJSAVXfxLRLg3X+mtTU9Ze68eeTOihXy3Ft\nQl2VujRvfRPTrqQd+FTS0fc3WbqpZJO6dSwmnc21Yuk1jlT1vo10FLgqqVA7Ky+zJamJYQapxnM8\ngzcxzSS1w48j9SPMJVfFSUduX2oQT62T+hRSE+I6efkZ5M7aumWWaNbL4z5Yy22O/27S2THL55hf\nCbysFMcPSE0nW5CO2AfNW5P1bZHf70fR7Pke4O78/s0Uv8H182/q9fW/E1LTxBWk3/aapGaKzzf5\nrA1/Y3nacaSmvIn5e34IeOMQ/2O/Az43yLT1SAXqxnXjtyTtpMfl/HyTtLNdLk9/cen1ypzTlwDL\n5+k/JB2dr0JqcpoPvLy0/vGkkxbuJzXLlpthDyMVCOuSass3k/qAatPnABfmuNbLcc3O0yZR/N62\nJNUi3lNadm9SU61ITX1LNK3l73ul/H0dSvr/UZ62LvkkEdJv9z5KJwx0fd/Zqw139UOmJodd6sZ9\ni9KZQaQj1UtJBcUCUvvjy+uWWQ34ev7SHid1dP8fYNIg292SVPN4jHQ0d3QevyKpI/hfpJ3fh1my\ngFgq3jx+f1J75FEN4jo1/yPUjjjeOUhMSxQQedz7SG3Yj+R/inVL0xaxdAGxqPRanP8ekqd9Oufn\nYVJNbfXScgeSdqT/BD6V431tnlYuIPYhtfE+Qdo5fYOi7XkGqRB6lOIsrhdizP94XyfVgOaTmgFa\nPYtpZeD/kk6JhtTp+Ms87p/5u5yap62Zpy0gHTgcB1w8RN4aro+0w/hN/ky19e2QlzmStDN/Iuf1\nk41+J/k3dSLpdzYv52x8k8/a8DeWp40HTif9Ph8iNfOUpz9R+97y8LrkkyQGWd8xpNpT/fidS9/z\nP0id2w3PaKKuDyKPm0Q6OHqS1Ifzrrpl7mbJ3+oict9anv7VnPNHgOMa/E/9iPR/fi/wqbrv8da8\n3bsb5Oey/NtbQGouekfd9Esp/m9qr1qh/7q8zidJhdI+ndwXDvdVK7UqIel0UvPAwzFIk4ekk0gd\nOU+RSui5lQVkfSM3ZS0gdfTeO9T8/S5faLV2RBzc61jMOqXqPogzSWcCNSRpD9IRw0tJVb5vVxyP\n9ZCkPSWtnAuHE4AbR2rhIOllkrbJ76eTmoUGO73TbESqtICIiCtIVa3B7EXuuIqIPwGrS1q7yfw2\nsu1FagJ5gNSRvE9vw1kmqwHnSXqS1BTxXxHxix7HZNZRy/d4+1NY8vTAeXlcT07psmpFxHtJ5/qP\neBHxZ5a8MMps1BlLp7mamdkw9LoGMY8lzx9fL49biqTqetPNzEaxiGjpOox63ahBiMEvErmQfAFU\nvnJ0QTS5YrCXp3v10+vYY4/teQz98nIunAvnovlrWVRag5D0Q9JFT2tIuo90rvt40sWIp0XEryW9\nSdIdpNNcfYpgC+65555eh9A3nIuCc1FwLjqj0gIiIvZrYZ7Dq4zBzMza407qEWj27Nm9DqFvOBcF\n56LgXHRGpVdSd5KkGCmxmpn1C0lEH3dSW4cNDAz0OoS+4VwUnIuCc9EZLiDMzKwhNzGZmVVg8mSY\n3+xGQ13TfhOTCwgzswpI0A+7LPdBjDFuXy04FwXnouBcdIYLCDMza8hNTGZmFXATk5mZjVouIEYg\nt68WnIuCc1FwLjrDBYSZmTXkPggz66j+Of+/tyZNgsce63UUy9YH4QLCzDqqXzpnLXEn9Rjj9tWC\nc1FwLgrORWe4gDAzs4bcxGRmHeUmpv7iJiYzM+s4FxAjkNtXC85FwbkoOBed4QLCzMwach+EWYXG\n4jUB/XL+vyW+DsKsT7nD1nrNndRjjNtXC85FwbkoOBed4QLCzMwachOTWYXcxGS95iYmMzPrOBcQ\nI5DbVwvORcG5KDgXneECwszMGnIfhFmF3AdhvbYsfRDLdzoYs17o1wvSJk3qdQRm7XMT0wjk9tVC\nLRfz56cj9X57dfOKYv8uCs5FZ7iAMDOzhtwHYaOC2/rNGqusD0LSq4D9gdcB6wDPAH8FfgX8MCKe\naGejZmbW/wZtYpL0K+Bw4A/AW4GNge2BLwETgV9J2rMbQdqS3L5acC4KzkXBueiMZjWIQyLi4bpx\nzwLX5Nfxkl5cWWRmZtZTQ/ZBSPoPUnPSv9ragDQLOJFUWzk9Io6vmz4B+AGwAbAccEJEzGmwHvdB\n2KDcB2HWWNX3YtoQuE7SDyW9YZiBjQNOAXYHtgL2lbRF3WwfBG6OiGnAzsAJknx9xhgzeXLaybf7\n8vUGZp03ZAEREccALwXOBt4v6XZJX5C0UQvrnw7cHhH3RsRC4Bxgr/pNAKvl96sBj0bE8y3GPyaN\nxvbVdq9juPTSga5fb9CvRuPvol3ORWe0dB1ERCwG7smvxaQzmi6QdNwQi04B7i8NP5DHlZ0CbCnp\nQeAG4MOtxGRmZtUasilH0geBg4DHgdOBT0XEc7n56A7gE8sYw+7A9RGxi6RNgYslTY2IJ+tnnD17\nNhtttBEAEydOZNq0acycORMojhjGwvDMmTP7Kp5ODMMAAwP9E89IHa7pl3h693tK4/olnm4ODwwM\nMGfOHIAX9pftaqWT+svAGRFxZ4NpW0fEX5ssOwP4XETMysPHAFHuqJb0S+C4iPhjHr4E+HhE/Llu\nXe6kHsXcyWxWjao7qafUFw6S5gA0Kxyya4HNJG0oaTywD3Bh3Tz3Am/I610b2By4q4W4xqz6o8Wx\nzLkoOBcF56IzWjlbaGp5IDctvaqVlUfEIkmHAxdRnOZ6i6TD0uQ4jXTh3RxJN+bFjo4IdzmamfXY\noE1Mkj4OHEM6s+jx2mjSWUenR8THuhJhEY+bmEYxNzGZVWNZmpiaFRAiXbh2HKmgAFKtoJ0NLSsX\nECNDu89lmDTJp6qaVaGqPojN8vUI3ydd5LYVsJWkqZKmNlnOKtbP7avtXs/QbuHQz7noNuei4Fx0\nRrM+iGOA9wDfajAtgNdXEpGZmfUFPw/COsp9CWb9pdLTXCVdJ+ljkjZsZwNmZjYytXIdxDuAFYAL\nJV0l6UhJ61YclzXh9tWCc1FwLgrORWe0crO+OyPiKxGxLXAI6aFB91UemZmZ9VRLfRCS1gPeCbyL\n1LH94/rnOlTNfRAjg/sgzPpLZc+kziu/ElgV+Amwf0Tc3s6GbGRZlusZzGx0aKUP4r0RMTUivujC\noT90o32129cztMttzQXnouBcdMagNQhJ+0bEj4BdJe1aPz0iTqo0MjMz66lmt9r4QEScKumLDSZH\nRHy22tCWisd9EF3kvgSz0aGSezGVVj4jIq4ealzVXEB0lwsIs9Gh6udBnNpgXKPbb1iXuH214FwU\nnIuCc9EZzfogpgM7AGtJOqI0aQLpwjkzMxvFmvVB7AzsAhwKfLc06Qnggoi4rfrwlojHTUxd5CYm\ns9Gh6j6ITSKi548AdQHRXS4gzEaHSvogJJ2Q354g6bz6V1uRWkcM1b46eXLawS/La6Rc8Oa25oJz\nUXAuOqPZldTn5r+ndCMQ65zaRW5mZstiWM+DkLQ6MCUi/lZdSINu201MLXLzkJnVVP08iEskTZA0\nCZgLfF/Sf7WzMTMzGzlauQ5ickQ8Drwd+EFEvALYvdqwrBm3rxaci4JzUXAuOqOVAmJ5SWuRHhz0\ni4rjMTOzPtHKaa77AJ8FroiI90naBPhGROzVjQBLcbgPokXugzCzmkqvg+gXLiBa5wLCzGqq7qRe\nU9LRkk6VdFrt1c7GrDMGBgaaXuswUq5h6AS3NReci4Jz0RlDPlEOuAC4GrgCWFRtONYqX+tgZlVr\npQ9ibkRM61I8zeJwE1OJm5HMrBVV3+77N5J2a2flZmY2crVSQLwf+K2kJyU9Jmm+pC4/edjK3L5a\ncC4KzkXBueiMVvog1qw8CjMz6zstneaar4XYJCK+Imk9YO2I+Evl0S0Zg/sgStwHYWatqPo011OA\nnYED8qingW+3szEzMxs5WumDeE1EHAY8CxARjwHjK43KmnL7asG5KDgXBeeiM1opIBZKGgcEgKQ1\ngMWVRmVmZj3XynUQBwJvA14JnAG8E/h8RJzT0gakWcCJpMLo9Ig4vsE8M4FvACsA/4yInRvM4z6I\nEvdBmFkrKr8Xk6StgDfkwUsi4q8tBjYO+DuwK/AgcC2wT0TcWppndeBKYLeImCdpzYh4pMG6XECU\nuIAws1ZU9UzqlSQtBxARNwO/IjUtbTKM9U8Hbo+IeyNiIXAOUH8X2P2An0XEvLytpQoHW5LbVwvO\nRcG5KDgXndGsD+J3wKYAkjYFrgG2BI6S9OUW1z8FuL80/EAeV7Y5MFnSpZKulXQAZmbWc4M2MUm6\nKSK2ye+/AKwZER+QtCLw59q0piuX9gZ2j4j35eH9gekRcURpnpOBVwC7AC8CrgLeFBF31K3LTUwl\nbmIys1YsSxNTsyupy7ufXYATACLiOUmtnsU0D9igNLxeHlf2APBIRDwLPCvpMmBb4I66+Zg9ezYb\nbbQRABMnTmTatGnMnDkTKKqUY2UYBhgY6J94POxhD/fH8MDAAHPmzAF4YX/ZrmY1iB8B95J26J8B\nNo6Ip3Kn8uURMXXIlac+jNtIndQPkZqp9o2IW0rzbAGcDMwCVgT+BLwrIv5Wty7XILKBgQF23nmm\naxCkXNT+ScY656LgXBSqqkEcCnwE2AKYFRFP5fFbA19vZeURsUjS4cBFFKe53iLpsDQ5TouIWyX9\nDriR9LyJ0+oLh5Fi8uT0nIZuGEsPBTKz3vAjRzvI/QJm1m+qOs3155L2kLRULUPShpI+K+mQdjZq\nZmb9r9lprh8E3gj8XdJVki6UdJGkO4AzgZsj4oyuRGlLqHVImXNR5lwUnIvOGLQPIl+4dhTpuofN\ngHWAZ4DbIuKJLsVnZmY94j6IDnIfhJn1m6qfSW1mZmOQC4gRyO2rBeei4FwUnIvOaKmAkDQ+90OY\nmdkY0crzIN5MujBufERsLGkacGxEvK0bAZbicB+EmdkwVd0H8QXg1cACgIiYC7g2YWY2yrX0yNGI\nWFA3zsfJPeT21YJzUXAuCs5FZzS7F1PNLZLeCYyTtDFwBHB1tWGZmVmvtdIH8SLgs8BuedTvSM+k\nfqbi2OrjcB+EmdkwVfpMaklvj4jzhhpXNRcQZmbDV3Un9acbjPtUOxuzznD7asG5KDgXBeeiMwbt\ng5C0O+khPlMklZ//MAFo9Ylyo0Yrz3rwMxrMbDRp9kS57YDtSf0PXyhNegL4fUQ8Un14S8TT0yYm\nNx+Z2UhUdR/ESvl50T3lAsLMbPiq7oOYIukcSTdK+nvt1c7GrDPcvlpwLgrORcG56IxWCog5pAcE\nCdgD+DFwboUxmZlZH2iliekvEfEKSTdFxDZ53J8j4pVdibCIw01MZmbDtCxNTK1cSf2cpHHAnZLe\nD8wDVmtnY2ZmNnK00sT0EeBFpFtsvBZ4L3BIlUFZc25fLTgXBeei4Fx0xpA1iIj4U377BHAAgKQp\nVQbVbyZP9jUOZjb2NO2DkPQqYApwRUQ8Imkr4OPALhGxXpdirMXSsz4I9z+Y2UhVyWmuko4Dzgbe\nDfxW0ueAS4EbgM3b2ZiZmY0czfog9gK2jYh3kO7k+jFgRkScEBFPdyU6a8jtqwXnouBcFJyLzmhW\nQDxbu6V3RDwG/D0i7upOWGZm1mvN7sW0APh9bRDYuTRMRLy98uiWjMd9EGZmw1TJvZgk7dpswYi4\npJ0NtssFhJnZ8FXSSR0RlzR7tR+uLSu3rxaci4JzUXAuOqOVC+XMzGwMGvJeTP2iqiamVh8E9Nhj\nHd+0mVnlKn0eRGkjK0bEc+1spBOqKiDcv2Bmo1mlz4OQNF3STcDteXhbSSe3szHrDLevFpyLgnNR\ncC46o5U+iJOAPYFHASLiBtIpr2ZmNoq18jyIayJiuqTrI2K7PO6GiNi2KxEWcbiJycxsmKp+5Oj9\nkqYDIWk5SUcCLT9yVNIsSbfmR5V+vMl8r5K0UFJXL8AzM7PGWikg/gM4CtgAeBiYkccNKT9o6BRg\nd2ArYF9JWwwy31eB37UW9tjm9tWCc1FwLgrORWe08kS55yNinzbXPx24PSLuBZB0DukmgLfWzfch\n4KfAq9rcjpmZdVgrfRB3ArcB5wLnRcQTLa9c2hvYPSLel4f3B6ZHxBGledYFzo6InSWdCfwiIs5r\nsC73QZiZDVOlfRARsSnwJeAVwE2Sfi6p3RpFIyeSHkJU09YHMTOzzmqliYmIuBK4Mj806ETSg4TO\naWHReaS+i5r18riyVwLnSBKwJrCHpIURcWH9ymbPns1GG20EwMSJE5k2bRozZ84EijbH4Q7Dsi3f\ni+Fy+2o/xNPL4dq4fomnl8Nz587lyCOP7Jt4ejl84okndmT/MBKHBwYGmDNnDsAL+8t2tdLEtCqp\n32Af4OXABcCPS8+qbrbscqTmqV2Bh4BrgH0j4pZB5ncTUwsGBgZe+GGMdc5FwbkoOBeFSm+1Ieke\n4BekQuHyNoKbBXyT1Jx1ekR8VdJhQETEaXXzngH80gWEmVlnVF1AjIuIxW1F1kEuIMzMhq+STmpJ\nJ+S3P5N0Xv2rrUitI8rt72Odc1FwLgrORWc066Q+N/89pRuBmJlZf2mlienwiDhlqHFV61QTU/3z\nH/ysBzMbzarug7guIravG/fCjfu6pVMFhPsczGwsqaoP4l2Szgc2rut/uBhY0G6wtuzcvlpwLgrO\nRcG56IxmfRDXkJ4BsR7wrdL4J4DrqwzKzMx6b8w9k9pNTGY2lixLE9OgNQhJf4iInSTNB8q7VJEu\ncpvczgbNzGxkaHazvtpjRdcE1iq9asPWI25fLTgXBeei4Fx0xqAFROnq6fWB5SJiEbADcBjwoi7E\nZmZmPdTKaa5zSQ/y2QD4LfBL4KURsWf14S0Rh/sgzMyGqepnUi+OiIXA24GTI+IjwJR2NmZmZiNH\nKwXE85LeARxAqj0ArFBdSDYUt68WnIuCc1FwLjqjlQLiEFKH9dci4i5JGwM/qjYsMzPrtZaug5C0\nPLBZHrwjIp6vNKrGMbgPwsxsmCq5DqK08tcB3yc9KlTASyQdEBF/bGeDZmY2MrTSxPQN4E0R8dqI\neA3wZtIT4qxH3L5acC4KzkXBueiMVgqI8RHxt9pAfp70+OpCMjOzftDKdRBzgGeBH+RR7wZWiYiD\nqg1tqTjcB2FmNkxVPw9iJeAIYMc86nLS9RDPtrPBdrmAMDMbvsoulJO0DTALOD8i3pJf/9XtwsGW\n5PbVgnNRcC4KzkVnNHtg0CeBn5OalC6WdEjXojIzs54btIlJ0s3A9Ih4StJawK8j4lVdjW7JeNzE\nZGY2TFU1MT0XEU8BRMQ/h5jXzMxGmWY7/U1Kz6E+H9i0/GzqbgVoS3P7asG5KDgXBeeiM5pdSb13\n3fApVQZiZmb9xc+kNjMbxap+HsSoMHlyKhwmTep1JGZmI8OYKSDmz081h8ce63Uky87tqwXnouBc\nFJyLzmi5gJC0YpWBmJlZf2nlVhvTgdOB1SNiA0nbAodGxIe6EWApjmXqg3Dfg5mNRVX3QZwE7Ak8\nChARN5CeMGdmZqNYKwXEuIi4t27coiqCsda4fbXgXBSci4Jz0RlDPlEOuD83M4Wk5YAPAX+vNiwz\nM+u1VvpqYJ4NAAAN0klEQVQgXkxqZnpDHvW/wOER8UjFsdXH4T4IM7NhqvR5EP1iWQqIyZPT39Fw\niquZ2XBU2kkt6TuSTqt/DSO4WZJulfR3SR9vMH0/STfk1xX5GRQdNX/+6Coc3L5acC4KzkXBueiM\nVvog/rf0fiXgbcD9raxc0jjSPZx2BR4ErpV0QUTcWprtLuD1EfEvSbOA7wAzWlm/mZlVZ9hNTHmn\nf0VEvKaFeWcAx0bEHnn4GCAi4vhB5p8I3BQR6zeY1nYTk/sfzGys6va9mDYG1m5x3iksWdt4II8b\nzKHAb9qIyczMOmzIJiZJ84Ha8fc44DHgmE4HImln4GBgx8HmmT17NhtttBEAEydOZNq0acycORMo\n2hzHwnC5fbUf4unlcG1cv8TTy+G5c+dy5JFH9k08vRw+8cQTx/T+Yc6cOQAv7C/b1bSJSZKA9YF5\nedTi4bTz5Camz0XErDzcsIlJ0lTgZ8CsiLhzkHW5iSkbGBh44Ycx1jkXBeei4FwUKj3NVdJfI2Lr\nNgNbDriN1En9EHANsG9E3FKaZwPgEuCAiLi6ybpcQJiZDdOyFBCtnMU0V9J2EXH9cFceEYskHQ5c\nRGqeOj0ibpF0WJocpwGfASYDp+Yay8KImD7cbZmZWWcNWoOQtHxEPC/pZuBlwJ3AU4BIO/ftuxem\naxBlrj4XnIuCc1FwLgpV1SCuAbYH3tJWVGZmNqI1q0FcHxHbdTmeQbkGYWY2fFXVINaSdNRgEyPi\n6+1s0MzMRoZmF8otB6wKrDbIy3qkfA3AWOdcFJyLgnPRGc1qEA9FxBe6FomZmfUV90GYmY1ilVwo\nJ2lyRPTNTbJdQJiZDV8lN+vrp8LBluT21YJzUXAuCs5FZ7RzN1czMxsDxsQjR93EZGZjVbefB2Fm\nZmOAC4gRyO2rBeei4FwUnIvOcAFhZmYNuQ/CzGwUcx+EmZl13KgqICZPTrWF+tekSb2OrLPcvlpw\nLgrORcG56IxWnig3Ysyf76YkM7NOGVV9EO5rMDNbkvsgzMys41xAjEBuXy04FwXnouBcdIYLCDMz\na8h9EGZmo5j7IMzMrONcQIxAbl8tOBcF56LgXHSGCwgzM2vIfRBmZqOY+yDMzKzjXECMQG5fLTgX\nBeei4Fx0hgsIMzNryH0QZmajmPsgzMys41xAjEBuXy04FwXnouBcdMaILSAaPRxotD0YyMysl0Zs\nH4T7G8zMhuY+CDMz67jKCwhJsyTdKunvkj4+yDwnSbpd0lxJ06qOaaRz+2rBuSg4FwXnojMqLSAk\njQNOAXYHtgL2lbRF3Tx7AJtGxEuBw4BvVxnTaDB37txeh9A3nIuCc1FwLjqj6hrEdOD2iLg3IhYC\n5wB71c2zF/A9gIj4E7C6pLUrjmtEW7BgQa9D6BvORcG5KDgXnVF1ATEFuL80/EAe12yeeQ3mMTOz\nLnMn9Qh0zz339DqEvuFcFJyLgnPRGZWe5ippBvC5iJiVh48BIiKOL83zbeDSiDg3D98K7BQRD9et\nyye1mpm1od3TXJfvdCB1rgU2k7Qh8BCwD7Bv3TwXAh8Ezs0FyoL6wgHa/4BmZtaeSguIiFgk6XDg\nIlJz1ukRcYukw9LkOC0ifi3pTZLuAJ4CDq4yJjMza82IuZLazMy6q+86qX1hXWGoXEjaT9IN+XWF\npG16EWc3tPK7yPO9StJCSW/vZnzd1OL/yExJ10v6q6RLux1jt7TwPzJB0oV5X3GTpNk9CLNykk6X\n9LCkG5vMM/z9ZkT0zYtUYN0BbAisAMwFtqibZw/gV/n9q4Grex13D3MxA1g9v581lnNRmu8S4JfA\n23sddw9/F6sDNwNT8vCavY67h7n4BHBcLQ/Ao8DyvY69glzsCEwDbhxkelv7zX6rQfjCusKQuYiI\nqyPiX3nwakbv9SOt/C4APgT8FPi/3Qyuy1rJxX7AzyJiHkBEPNLlGLullVwEsFp+vxrwaEQ838UY\nuyIirgDmN5mlrf1mvxUQvrCu0Eouyg4FflNpRL0zZC4krQu8NSL+GxjNZ7y18rvYHJgs6VJJ10o6\noGvRdVcruTgF2FLSg8ANwIe7FFu/aWu/WfVprtYFknYmnf21Y69j6aETgXIb9GguJIayPLA9sAvw\nIuAqSVdFxB29Dasndgeuj4hdJG0KXCxpakQ82evARoJ+KyDmARuUhtfL4+rnWX+IeUaDVnKBpKnA\nacCsiGhWxRzJWsnFK4FzJInU1ryHpIURcWGXYuyWVnLxAPBIRDwLPCvpMmBbUnv9aNJKLg4GjgOI\niDsl3Q1sAfy5KxH2j7b2m/3WxPTChXWSxpMurKv/B78QOBBeuFK74YV1o8CQuZC0AfAz4ICIuLMH\nMXbLkLmIiE3ya2NSP8QHRmHhAK39j1wA7ChpOUmrkDolb+lynN3QSi7uBd4AkNvcNwfu6mqU3SMG\nrzm3td/sqxpE+MK6F7SSC+AzwGTg1HzkvDAipvcu6mq0mIslFul6kF3S4v/IrZJ+B9wILAJOi4i/\n9TDsSrT4u/gSMKd0+ufREfFYj0KujKQfAjOBNSTdBxwLjGcZ95u+UM7MzBrqtyYmMzPrEy4gzMys\nIRcQZmbWkAsIMzNryAWEmZk15ALCzMwacgExxkhaJOm6fCvo6/LFdoPNu6GkmzqwzUvzLZnnSrpc\n0kvbWMdhkvbP7w+S9JLStNMkbdHhOP+Ur1IfapkPS1qpjW19Q9KO+f0H822YF0ma3Ma6Ns+xXy/p\nZqXH+HaMpH+TdHR+v6akqyX9RdKOkn4paUKTZQf93posc7Gk1Tv3Caxtvb5NrV/dfQGPD2PeDRnk\n9sHD3OalwHb5/XuBCzqwvldUkJtynLOBi1pY5m5g8jC3Mxm4sjS8LemWEXcNd115+d8Ce5aGt6rw\n97MP6cK7yr434ADgk1V9Br9af7kGMfYsdSl+rilcJunP+TWjwTxb5qPq6/IR9qZ5/LtL4/87X9Hd\nbLuXAbVld83L3SDpu5JWyOO/qvSgm7mSvpbHHSvpo5L2Jt136Qd52ZXy0fP2+Wj1a6WYD5J0Uptx\nXgWsW1rXqZKuUXrozLF53IfyPJdKuiSP203SlTmP5+ZbXdTbm7RTByAiboiI+2jw3bToJZTuqxMR\nN5c+/89zfm6T9NnS52mYD6UH8Pwl5/7i0npOlrQtcDzw1lLu767VeiQdmL/L6yWdlccN9r29SdL5\npXjeIOm8PPgLln52vfVCr0sov7r7Ap4HrgOuJz0zAGAlYHx+vxlwbX7/Qg0COAnYN79fHliRdNOz\nC4Hl8vhvAfs32OalwPb5/ceAH+Xl7wM2zePPAo4gHV3fWlp2Qv57LHBUaX3b1a+fdJO+20vjfw28\nps04Pwx8qTRtYv47Ls+3dR6+C5iU368B/AFYOQ8fDXymwXbmAG9uMH7YtZG83GxgAfAr4EiKh0gd\nRCo4Jubv+Kacp4b5yPm7D9ig7jMfBJxU/770+ScDWwK3lnJRW7bZ9/Y3YI38/uxyToDbauvyq3ev\nvroXk3XF0xGxfd248cApSo8hXAQ06iO4CviUpPWB8yLiDkm7knY41+Yj0JWAwW4AdrakZ4B7SA/2\neRlwVxQ3GTwL+ABpZ/WMpO+Sdni/HGR9Sx1tR8Qjku6UNJ1059KXRcSVkj44zDhXJN0mu/xYxn0k\nvZdUOL6EtEP8K0veIG1GHv/HvJ0VSHmrtw7wz0G2P2wRMUfSb0lPFXwr8L58tA9wcUQsAJD0M9It\n4RcBr2DpfMwA/hCpNkNtuRbtAvwk8h2Fmyxb/t6+D+wvaU7edvm5Ff8k1c5G6x2KRwQXEAbwEeAf\nETFV0nLAM/UzRMSPJF0N7An8SumGaALOiohPtbCN/SLi+tqApDVovJNflHfwuwLvAA7P71t1LvAu\n0tFsrQlj2HHmpqpTgL0lbQR8lNR+/rikM0k71Xoi9Vu8e4htPDPI8oPeGE3SGcB2wLyI2HOpBSP+\nQaqZzFE6sWDrButUaXhOfT4k7cmyPUdjuMvOITUnPUcqXBaXpq1Eg9+hdZf7IMaeRv/EqwMP5fcH\nAssttZC0cUTcHREnk5onppKe//zvktbK80zS4GdF1W/3NmBDSZvk4QOAP+Q2+4kR8VvgqLydek8A\ng505cz7p8Yr7kB5BSZtxfhZ4taTN87aeBJ5QumX0HqX5Hy/FcjXw2lL/zCpqfMbWLaSmvEbbbriT\njYhDImK7RoWDpN0lLZ/fv4TU5FPrk3ijpImSVibVLv4I/J7G+bgaeJ2kDWvjG8XSIGZK66z1RzRa\ndonvLSIeAh4EPgWcWTfv2qTapvWQC4ixp9FR6qnAbEnXk+6X/1SDed6ZO46vB7YCvhcRtwCfBi6S\ndAPptsuNTmNcapsR8RzplsM/zcsuAr5N2oH8Mo+7jFS7qTcH+Hato7S8/ty0cQupHf3Pedyw44z0\nsJ0TgI9FxI3A3LzeHwBXlJb5DvBbSZdEevbzwcCP8nauJDWl1fsVsHNtQNKHJN1PegTkDZLqb18+\nlN2A2nfzG+A/I6L2XO5rgPNy/D+JiOsGy0eO/33A+Xld59RvqIEAiHQ78S+TCvnrSbmrN4fie1sx\njzsbuD8ibqvNJOkVwNV1NQrrAd/u26wHlJ7ytmdEPF7hNg4iNYsdUdU2lpWkk4HrIuLM0rgTSadC\nX9q7yAxcgzDrlY+y5OMyxxxJfwa2IdXKym5y4dAfXIMwM7OGXIMwM7OGXECYmVlDLiDMzKwhFxBm\nZtaQCwgzM2vIBYSZmTX0/wFaIfmVI57zwwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x25d0484b3c8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"X = df.review_city\n",
"y = df.rude\n",
"X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,random_state=1)\n",
"vect = CountVectorizer(ngram_range=(1, 2), min_df=2,stop_words=set(stopwords.words('english')))\n",
"X_train_dtm = vect.fit_transform(X_train)\n",
"X_test_dtm = vect.transform(X_test)\n",
"\n",
"lr = LogisticRegression()\n",
"\n",
"# train the model using X_train_dtm\n",
"lr.fit(X_train_dtm, y_train)\n",
"\n",
"# make class predictions for X_test_dtm\n",
"y_pred_class = lr.predict(X_test_dtm)\n",
"\n",
"DrawROC(y_test,lr.predict_proba(X_test_dtm)[:,1],'Logistic Regression')"
]
},
{
"cell_type": "code",
"execution_count": 601,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy: 0.873831775701\n"
]
},
{
"data": {
"image/png": "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\nZS40zMyssv8P8wpA+tA/smoAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x25d7e3f8588>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"X = df.review_city\n",
"y = df.rude\n",
"X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,random_state=1)\n",
"vect = CountVectorizer(ngram_range=(1, 2), min_df=2,stop_words=set(stopwords.words('english')))\n",
"X_train_dtm = vect.fit_transform(X_train)\n",
"X_test_dtm = vect.transform(X_test)\n",
"\n",
"rf_clf = RandomForestClassifier(n_estimators=1000)\n",
"\n",
"# train the model using X_train_dtm\n",
"rf_clf.fit(X_train_dtm, y_train)\n",
"\n",
"# make class predictions for X_test_dtm\n",
"y_pred_class = rf_clf.predict(X_test_dtm)\n",
"\n",
"# print the accuracy of its predictions\n",
"print('Accuracy: ', metrics.accuracy_score(y_test, y_pred_class))\n",
"\n",
"DrawROC(y_test,rf_clf.predict_proba(X_test_dtm)[:,1],'Random Forest, n_est='+str(len(rf_clf.estimators_)))"
]
},
{
"cell_type": "code",
"execution_count": 602,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x25d04213358>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Both curves on one graph\n",
"DrawROC(y_test,lr.predict_proba(X_test_dtm)[:,1],'')\n",
"DrawROC(y_test,rf_clf.predict_proba(X_test_dtm)[:,1],'Random Forest and Log Regr, n_est='+str(len(rf_clf.estimators_)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Task 9 (Challenge)\n",
"\n",
"New comments have been submitted to the McDonald's website, and you need to **score them with the likelihood** that they are referring to rude service.\n",
"\n",
"1. Before making predictions on out-of-sample data, it is important to re-train your model on all relevant data using the tuning parameters and preprocessing steps that produced the best AUC above.\n",
" - In other words, X should be defined using either **all rows** or **only those rows with a confidence_mean of at least 0.75**, whichever produced a better AUC above.\n",
" - X should refer to either the **review column** or the **review_city column**, whichever produced a better AUC above.\n",
" - CountVectorizer should be instantiated with the **tuning parameters** that produced the best AUC above.\n",
" - **`train_test_split()`** should not be used during this process.\n",
"2. Build a document-term matrix (from X) called **X_dtm**, and examine its shape.\n",
"3. Read the new comments stored in **`mcdonalds_new.csv`** into a DataFrame called **new_comments**, and examine it.\n",
"4. If your model uses a **review_city** column, create that column in the new_comments DataFrame. (Otherwise, skip this step.)\n",
"5. Build a document_term matrix (from the **new_comments** DataFrame) called **new_dtm**, and examine its shape.\n",
"6. Train your best model (Naive Bayes or logistic regression) using **X_dtm** and **y**.\n",
"7. Predict the \"rude probability\" for each comment in **new_dtm**, and store the probabilities in an object called **new_pred_prob**.\n",
"8. Print the **full text** for each new comment alongside its **\"rude probability\"**. (You may need to [increase the max_colwidth](https://www.youtube.com/watch?v=yiO43TQ4xvc&list=PL5-da3qGB5ICCsgW1MxlZ0Hq8LL5U3u9y&index=28) to see the full text.) Examine the results, and comment on how well you think the model performed!"
]
},
{
"cell_type": "code",
"execution_count": 603,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"X = df.review_city\n",
"y = df.rude\n",
"vect = CountVectorizer(ngram_range=(1, 2), min_df=2,stop_words=set(stopwords.words('english')))\n",
"X_dtm = vect.fit_transform(X)"
]
},
{
"cell_type": "code",
"execution_count": 604,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(1067, 7343)"
]
},
"execution_count": 604,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_dtm.shape"
]
},
{
"cell_type": "code",
"execution_count": 605,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"new_comments=pd.read_csv('../data/mcdonalds_new.csv',encoding='utf-8')"
]
},
{
"cell_type": "code",
"execution_count": 606,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>city</th>\n",
" <th>review</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Las Vegas</td>\n",
" <td>Went through the drive through and ordered a #10 (cripsy sweet chili chicken wrap) without fries- the lady couldn't understand that I did not want fries and charged me for them anyways. I got the wrong order- a chicken sandwich and a large fries- my boyfriend took it back inside to get the correct order. The gentleman that ordered the chicken sandwich was standing there as well and she took the bag from my bf- glanced at the insides and handed it to the man without even offering to replace. I mean with all the scares about viruses going around... ugh DISGUSTING SERVICE. Then when she gave him the correct order my wrap not only had the sweet chili sauce on it, but the nasty (just not my first choice) ranch dressing on it!!!! I mean seriously... how lazy can you get!!!! I worked at McDonalds in Texas when I was 17 for about 8 months and I guess I was spoiled with good management. This was absolutely ridiculous. I was beyond disappointed.</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Chicago</td>\n",
" <td>Phenomenal experience. Efficient and friendly staff. Clean restrooms, good, fast service and bilingual staff. One of the best restaurants in the chain.</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Los Angeles</td>\n",
" <td>Ghetto lady helped me at the drive thru. Very rude and disrespectful to the co workers. Never coming back. Yuck!</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>New York</td>\n",
" <td>Close to my workplace. It was well manged before. Now it's OK. The parking can be tight sometimes. Like all McDonald's, prices are getting expensive.</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Portland</td>\n",
" <td>I've made at least 3 visits to this particular location just because it's right next to my office building.. and all my experience have been consistently bad. There are a few helpers taking your orders throughout the drive-thru route and they are the worst. They rush you in placing an order and gets impatient once the order gets a tad bit complicated. Don't even bother changing your mind oh NO! They will glare at you and snap at you if you want to change something. I understand its FAST food, but I want my order placed right. Not going back if I can help it.</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Houston</td>\n",
" <td>Why did I revisited this McDonald's again. I needed to use the restroom facilities and the women's bathroom didn't have soap, the floor was wet, the bathroom stink, and the toilets were nasty. This McDonald's is very nasty.</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>Atlanta</td>\n",
" <td>This specific McDonald's is the bar I hold all other fast food joints to now. Been working in this area for 3 years now and gone to this location many times for drive-through pickup. Service is always fast, food comes out right, and the staff is extremely warm and polite.</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>Dallas</td>\n",
" <td>My friend and I stopped in to get a late night snack and we were refused service. The store claimed to be 24 hours and the manager was standing right there doing paper work but would not help us. The cashier was only concerned with doing things for the drive thru and said that the manager said he wasn't allowed to help us. We thought it was a joke at first but when realized it wasn't we said goodbye and they just let us leave. I work in a restaurant and this is by far the worst service I have ever seen. I know it was late and maybe they didn't want to be there but it was completely ridiculous. I think the manager should be fired.</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>Cleveland</td>\n",
" <td>Friendly people but completely unable to deliver what was ordered at the drive through. Out of my last 6 orders they got it right 3 times. Incidentally, the billing was always correct - they just could not read the order and deliver. Very frustrating!</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>NaN</td>\n",
" <td>Having visited many McDonald's over the years, I have to say that this one is the most efficient one ever! Even though it is still fast food, the service at the drive-thru is the best. They rarely make a mistake and I never see anyone parked in the drive-thru slots where they bring food out because they don't have it ready. So, if you like McDonald's fast food, it doesn't get any better than this.</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" city \\\n",
"0 Las Vegas \n",
"1 Chicago \n",
"2 Los Angeles \n",
"3 New York \n",
"4 Portland \n",
"5 Houston \n",
"6 Atlanta \n",
"7 Dallas \n",
"8 Cleveland \n",
"9 NaN \n",
"\n",
" review \n",
"0 Went through the drive through and ordered a #10 (cripsy sweet chili chicken wrap) without fries- the lady couldn't understand that I did not want fries and charged me for them anyways. I got the wrong order- a chicken sandwich and a large fries- my boyfriend took it back inside to get the correct order. The gentleman that ordered the chicken sandwich was standing there as well and she took the bag from my bf- glanced at the insides and handed it to the man without even offering to replace. I mean with all the scares about viruses going around... ugh DISGUSTING SERVICE. Then when she gave him the correct order my wrap not only had the sweet chili sauce on it, but the nasty (just not my first choice) ranch dressing on it!!!! I mean seriously... how lazy can you get!!!! I worked at McDonalds in Texas when I was 17 for about 8 months and I guess I was spoiled with good management. This was absolutely ridiculous. I was beyond disappointed. \n",
"1 Phenomenal experience. Efficient and friendly staff. Clean restrooms, good, fast service and bilingual staff. One of the best restaurants in the chain. \n",
"2 Ghetto lady helped me at the drive thru. Very rude and disrespectful to the co workers. Never coming back. Yuck! \n",
"3 Close to my workplace. It was well manged before. Now it's OK. The parking can be tight sometimes. Like all McDonald's, prices are getting expensive. \n",
"4 I've made at least 3 visits to this particular location just because it's right next to my office building.. and all my experience have been consistently bad. There are a few helpers taking your orders throughout the drive-thru route and they are the worst. They rush you in placing an order and gets impatient once the order gets a tad bit complicated. Don't even bother changing your mind oh NO! They will glare at you and snap at you if you want to change something. I understand its FAST food, but I want my order placed right. Not going back if I can help it. \n",
"5 Why did I revisited this McDonald's again. I needed to use the restroom facilities and the women's bathroom didn't have soap, the floor was wet, the bathroom stink, and the toilets were nasty. This McDonald's is very nasty. \n",
"6 This specific McDonald's is the bar I hold all other fast food joints to now. Been working in this area for 3 years now and gone to this location many times for drive-through pickup. Service is always fast, food comes out right, and the staff is extremely warm and polite. \n",
"7 My friend and I stopped in to get a late night snack and we were refused service. The store claimed to be 24 hours and the manager was standing right there doing paper work but would not help us. The cashier was only concerned with doing things for the drive thru and said that the manager said he wasn't allowed to help us. We thought it was a joke at first but when realized it wasn't we said goodbye and they just let us leave. I work in a restaurant and this is by far the worst service I have ever seen. I know it was late and maybe they didn't want to be there but it was completely ridiculous. I think the manager should be fired. \n",
"8 Friendly people but completely unable to deliver what was ordered at the drive through. Out of my last 6 orders they got it right 3 times. Incidentally, the billing was always correct - they just could not read the order and deliver. Very frustrating! \n",
"9 Having visited many McDonald's over the years, I have to say that this one is the most efficient one ever! Even though it is still fast food, the service at the drive-thru is the best. They rarely make a mistake and I never see anyone parked in the drive-thru slots where they bring food out because they don't have it ready. So, if you like McDonald's fast food, it doesn't get any better than this. "
]
},
"execution_count": 606,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"new_comments"
]
},
{
"cell_type": "code",
"execution_count": 607,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(10, 2)"
]
},
"execution_count": 607,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"new_comments.shape"
]
},
{
"cell_type": "code",
"execution_count": 608,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"new_comments['review_city']=new_comments.review.str.cat(new_comments.city,sep=' ', na_rep='na')"
]
},
{
"cell_type": "code",
"execution_count": 609,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"new_dtm = vect.transform(new_comments.review_city)"
]
},
{
"cell_type": "code",
"execution_count": 610,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"lr = LogisticRegression()\n",
"\n",
"# train the model using X_train_dtm\n",
"lr.fit(X_dtm, y)\n",
"\n",
"# make class predictions for X_test_dtm\n",
"y_pred_class = lr.predict(new_dtm)\n",
"\n",
"rf_clf = RandomForestClassifier(n_estimators=1000)\n",
"\n",
"# train the model using X_train_dtm\n",
"rf_clf.fit(X_dtm, y)\n",
"\n",
"# make class predictions for X_test_dtm\n",
"y_pred_class_rf = rf_clf.predict(new_dtm)\n"
]
},
{
"cell_type": "code",
"execution_count": 611,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([False, False, False, False, False, False, False, True, False, False], dtype=bool)"
]
},
"execution_count": 611,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_pred_class"
]
},
{
"cell_type": "code",
"execution_count": 612,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([False, False, False, False, False, False, False, False, False, False], dtype=bool)"
]
},
"execution_count": 612,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_pred_class_rf"
]
},
{
"cell_type": "code",
"execution_count": 613,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"new_comments['rude_prob'] = lr.predict_proba(new_dtm).round(3)[:,1]\n",
"new_comments['rude_prob_random_forest'] = rf_clf.predict_proba(new_dtm).round(3)[:,1]"
]
},
{
"cell_type": "code",
"execution_count": 614,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>review_city</th>\n",
" <th>rude_prob</th>\n",
" <th>rude_prob_random_forest</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Went through the drive through and ordered a #10 (cripsy sweet chili chicken wrap) without fries- the lady couldn't understand that I did not want fries and charged me for them anyways. I got the wrong order- a chicken sandwich and a large fries- my boyfriend took it back inside to get the correct order. The gentleman that ordered the chicken sandwich was standing there as well and she took the bag from my bf- glanced at the insides and handed it to the man without even offering to replace. I mean with all the scares about viruses going around... ugh DISGUSTING SERVICE. Then when she gave him the correct order my wrap not only had the sweet chili sauce on it, but the nasty (just not my first choice) ranch dressing on it!!!! I mean seriously... how lazy can you get!!!! I worked at McDonalds in Texas when I was 17 for about 8 months and I guess I was spoiled with good management. This was absolutely ridiculous. I was beyond disappointed. Las Vegas</td>\n",
" <td>0.000</td>\n",
" <td>0.206</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Phenomenal experience. Efficient and friendly staff. Clean restrooms, good, fast service and bilingual staff. One of the best restaurants in the chain. Chicago</td>\n",
" <td>0.119</td>\n",
" <td>0.045</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Ghetto lady helped me at the drive thru. Very rude and disrespectful to the co workers. Never coming back. Yuck! Los Angeles</td>\n",
" <td>0.356</td>\n",
" <td>0.226</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Close to my workplace. It was well manged before. Now it's OK. The parking can be tight sometimes. Like all McDonald's, prices are getting expensive. New York</td>\n",
" <td>0.037</td>\n",
" <td>0.028</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>I've made at least 3 visits to this particular location just because it's right next to my office building.. and all my experience have been consistently bad. There are a few helpers taking your orders throughout the drive-thru route and they are the worst. They rush you in placing an order and gets impatient once the order gets a tad bit complicated. Don't even bother changing your mind oh NO! They will glare at you and snap at you if you want to change something. I understand its FAST food, but I want my order placed right. Not going back if I can help it. Portland</td>\n",
" <td>0.011</td>\n",
" <td>0.167</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Why did I revisited this McDonald's again. I needed to use the restroom facilities and the women's bathroom didn't have soap, the floor was wet, the bathroom stink, and the toilets were nasty. This McDonald's is very nasty. Houston</td>\n",
" <td>0.023</td>\n",
" <td>0.022</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>This specific McDonald's is the bar I hold all other fast food joints to now. Been working in this area for 3 years now and gone to this location many times for drive-through pickup. Service is always fast, food comes out right, and the staff is extremely warm and polite. Atlanta</td>\n",
" <td>0.054</td>\n",
" <td>0.037</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>My friend and I stopped in to get a late night snack and we were refused service. The store claimed to be 24 hours and the manager was standing right there doing paper work but would not help us. The cashier was only concerned with doing things for the drive thru and said that the manager said he wasn't allowed to help us. We thought it was a joke at first but when realized it wasn't we said goodbye and they just let us leave. I work in a restaurant and this is by far the worst service I have ever seen. I know it was late and maybe they didn't want to be there but it was completely ridiculous. I think the manager should be fired. Dallas</td>\n",
" <td>0.932</td>\n",
" <td>0.410</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>Friendly people but completely unable to deliver what was ordered at the drive through. Out of my last 6 orders they got it right 3 times. Incidentally, the billing was always correct - they just could not read the order and deliver. Very frustrating! Cleveland</td>\n",
" <td>0.006</td>\n",
" <td>0.014</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>Having visited many McDonald's over the years, I have to say that this one is the most efficient one ever! Even though it is still fast food, the service at the drive-thru is the best. They rarely make a mistake and I never see anyone parked in the drive-thru slots where they bring food out because they don't have it ready. So, if you like McDonald's fast food, it doesn't get any better than this. na</td>\n",
" <td>0.012</td>\n",
" <td>0.042</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" review_city \\\n",
"0 Went through the drive through and ordered a #10 (cripsy sweet chili chicken wrap) without fries- the lady couldn't understand that I did not want fries and charged me for them anyways. I got the wrong order- a chicken sandwich and a large fries- my boyfriend took it back inside to get the correct order. The gentleman that ordered the chicken sandwich was standing there as well and she took the bag from my bf- glanced at the insides and handed it to the man without even offering to replace. I mean with all the scares about viruses going around... ugh DISGUSTING SERVICE. Then when she gave him the correct order my wrap not only had the sweet chili sauce on it, but the nasty (just not my first choice) ranch dressing on it!!!! I mean seriously... how lazy can you get!!!! I worked at McDonalds in Texas when I was 17 for about 8 months and I guess I was spoiled with good management. This was absolutely ridiculous. I was beyond disappointed. Las Vegas \n",
"1 Phenomenal experience. Efficient and friendly staff. Clean restrooms, good, fast service and bilingual staff. One of the best restaurants in the chain. Chicago \n",
"2 Ghetto lady helped me at the drive thru. Very rude and disrespectful to the co workers. Never coming back. Yuck! Los Angeles \n",
"3 Close to my workplace. It was well manged before. Now it's OK. The parking can be tight sometimes. Like all McDonald's, prices are getting expensive. New York \n",
"4 I've made at least 3 visits to this particular location just because it's right next to my office building.. and all my experience have been consistently bad. There are a few helpers taking your orders throughout the drive-thru route and they are the worst. They rush you in placing an order and gets impatient once the order gets a tad bit complicated. Don't even bother changing your mind oh NO! They will glare at you and snap at you if you want to change something. I understand its FAST food, but I want my order placed right. Not going back if I can help it. Portland \n",
"5 Why did I revisited this McDonald's again. I needed to use the restroom facilities and the women's bathroom didn't have soap, the floor was wet, the bathroom stink, and the toilets were nasty. This McDonald's is very nasty. Houston \n",
"6 This specific McDonald's is the bar I hold all other fast food joints to now. Been working in this area for 3 years now and gone to this location many times for drive-through pickup. Service is always fast, food comes out right, and the staff is extremely warm and polite. Atlanta \n",
"7 My friend and I stopped in to get a late night snack and we were refused service. The store claimed to be 24 hours and the manager was standing right there doing paper work but would not help us. The cashier was only concerned with doing things for the drive thru and said that the manager said he wasn't allowed to help us. We thought it was a joke at first but when realized it wasn't we said goodbye and they just let us leave. I work in a restaurant and this is by far the worst service I have ever seen. I know it was late and maybe they didn't want to be there but it was completely ridiculous. I think the manager should be fired. Dallas \n",
"8 Friendly people but completely unable to deliver what was ordered at the drive through. Out of my last 6 orders they got it right 3 times. Incidentally, the billing was always correct - they just could not read the order and deliver. Very frustrating! Cleveland \n",
"9 Having visited many McDonald's over the years, I have to say that this one is the most efficient one ever! Even though it is still fast food, the service at the drive-thru is the best. They rarely make a mistake and I never see anyone parked in the drive-thru slots where they bring food out because they don't have it ready. So, if you like McDonald's fast food, it doesn't get any better than this. na \n",
"\n",
" rude_prob rude_prob_random_forest \n",
"0 0.000 0.206 \n",
"1 0.119 0.045 \n",
"2 0.356 0.226 \n",
"3 0.037 0.028 \n",
"4 0.011 0.167 \n",
"5 0.023 0.022 \n",
"6 0.054 0.037 \n",
"7 0.932 0.410 \n",
"8 0.006 0.014 \n",
"9 0.012 0.042 "
]
},
"execution_count": 614,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.set_option('display.max_colwidth',1000)\n",
"new_comments[['review_city','rude_prob','rude_prob_random_forest']]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Looks like logistic regression have better sensitivity but random forest - better specicifity."
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python [Root]",
"language": "python",
"name": "Python [Root]"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment