Skip to content

Instantly share code, notes, and snippets.

@priyankamandikal
Created November 2, 2015 17:04
Show Gist options
  • Save priyankamandikal/f77b68b71d0ac4bff26c to your computer and use it in GitHub Desktop.
Save priyankamandikal/f77b68b71d0ac4bff26c to your computer and use it in GitHub Desktop.
Mozilla Feedback Analyzer updated with more plots.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Mozilla Feedback Analysis\n",
"\n",
"\n",
"Mozilla Firefox releases various versions of its web browser over time. These versions are run on different platforms by users around the world. Some versions may make users happy, while some others, not so much. There is a huge amount of feedback that is generated by users across platforms and versions.\n",
"#### How do we make sense of this feedback? <br/>How can Mozilla analyze this data in order to cater to users' growing needs and tackle issues swiftly? \n",
"\n",
"In this project, the aim is to analyze the feedback data and find interesting behaviours associated with it. <br/>\n",
"The feedback is available at the following link. <br/>\n",
"https://input.mozilla.org/en-US/?product=Firefox<br/><br/>\n",
"\n",
"## Part 1: Web Scraping\n",
"\n",
"### Task: Scrape data from the site\n",
"### Completed: Scraped a month's worth of data (774 pages) using BeautifulSoup\n",
"Since the data is not readily available in the form of a table, it is necessary to scrape relevant information from the website. After a sample dataset (1 week's data) that I had scraped earlier (results can be viewed here http://nbviewer.ipython.org/gist/priyankamandikal/18bd3c13a29d7397b883), I scraped a month's worth of data for October 2015 using BeautifulSoup, a Python library for pulling data out of HTML and XML files.<br/><br/>\n",
"The code for scraping is as follows:\n"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'\\nimport requests\\nfrom pattern import web\\nfrom bs4 import BeautifulSoup\\nimport traceback\\n\\n#base url with GET dictionary\\nurl = \\'https://input.mozilla.org/en-US\\'\\nfeedback1 = open(\\'feedback1.txt\\',\\'a\\')\\nfor i in xrange(1,774): \\n#feedback4 - 1st 774 pages are valid from 01-10-2015 to 31-10-2015\\n\\ttry:\\n\\t\\tparams = dict(date_end=\\'2015-10-31\\', selected=\\'30d\\', product=\\'Firefox\\', date_start=\\'2015-10-01\\', page=i)\\n\\t\\tr = requests.get(url, params=params)\\n\\t\\tbs = BeautifulSoup(r.text)\\n\\t\\tfor opinion in bs.findAll(\\'li\\',\\'opinion\\'):\\n\\t\\t\\tsenti = opinion.find(\\'span\\',\\'sprite\\').contents[0]\\n\\t\\t\\tdatetime = opinion.find(\\'time\\')[\\'datetime\\']\\n\\t\\t\\ttime = opinion.find(\\'time\\').string #not a very useful value. We want the absolute date and time\\n\\t\\t\\t#to remove whitespaces on either side of s tring, just do for e.g. time.strip()\\n\\t\\t\\tversion = time.find_next(\\'a\\').find_next(\\'a\\').contents[0]\\n\\t\\t\\tplatform = version.find_next(\\'a\\').contents[0]\\n\\t\\t\\tlocale = platform.find_next(\\'a\\').contents[0]\\n\\t\\t\\tfeedback1.write(senti+\\'\\t\\'+datetime+\\'\\t\\'+version+\\'\\t\\'+platform+\\'\\t\\'+locale+\\'\\n\\')\\n\\texcept:\\n\\t\\t#the try catch block was added beacuse ceratin opinions in a page were geving errors as\\n\\t\\t#certain characters couldn\\'t be encoded by ascii codec. E.g. (Norwegian Bokmal), the \\'a\\' was different\\n\\t\\tprint \"Error while retreiving page \", i\\n\\t\\tprint traceback.format_exc()\\n\\t\\tcontinue\\n\\nfeedback1.close()\\n'"
]
},
"execution_count": 79,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#I have commented out the scraping code here.\n",
"\n",
"'''\n",
"import requests\n",
"from pattern import web\n",
"from bs4 import BeautifulSoup\n",
"import traceback\n",
"\n",
"#base url with GET dictionary\n",
"url = 'https://input.mozilla.org/en-US'\n",
"feedback1 = open('feedback1.txt','a')\n",
"for i in xrange(1,774): \n",
"#feedback4 - 1st 774 pages are valid from 01-10-2015 to 31-10-2015\n",
"\ttry:\n",
"\t\tparams = dict(date_end='2015-10-31', selected='30d', product='Firefox', date_start='2015-10-01', page=i)\n",
"\t\tr = requests.get(url, params=params)\n",
"\t\tbs = BeautifulSoup(r.text)\n",
"\t\tfor opinion in bs.findAll('li','opinion'):\n",
"\t\t\tsenti = opinion.find('span','sprite').contents[0]\n",
"\t\t\tdatetime = opinion.find('time')['datetime']\n",
"\t\t\ttime = opinion.find('time').string #not a very useful value. We want the absolute date and time\n",
"\t\t\t#to remove whitespaces on either side of s tring, just do for e.g. time.strip()\n",
"\t\t\tversion = time.find_next('a').find_next('a').contents[0]\n",
"\t\t\tplatform = version.find_next('a').contents[0]\n",
"\t\t\tlocale = platform.find_next('a').contents[0]\n",
"\t\t\tfeedback1.write(senti+'\\t'+datetime+'\\t'+version+'\\t'+platform+'\\t'+locale+'\\n')\n",
"\texcept:\n",
"\t\t#the try catch block was added beacuse ceratin opinions in a page were geving errors as\n",
"\t\t#certain characters couldn't be encoded by ascii codec. E.g. (Norwegian Bokmal), the 'a' was different\n",
"\t\tprint \"Error while retreiving page \", i\n",
"\t\tprint traceback.format_exc()\n",
"\t\tcontinue\n",
"\n",
"feedback1.close()\n",
"'''"
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Sad\t2015-10-31-08:00\t41.0.2\tWindows 7\tSpanish (Argentina)\r\n",
"Sad\t2015-10-31-08:00\t41.0.2\tWindows 7\tDutch\r\n",
"Sad\t2015-10-31-08:00\t41.0.2\tWindows 7\tRussian\r\n",
"Sad\t2015-10-31-08:00\t41.0.2\tWindows 7\tEnglish (US)\r\n",
"Sad\t2015-10-31-08:00\t41.0.2\tWindows Vista\tEnglish (US)\r\n",
"Sad\t2015-10-31-08:00\t10.0\tWindows XP\tEnglish (US)\r\n",
"Sad\t2015-10-31-08:00\t42.0\tOS X\tEnglish (US)\r\n",
"Sad\t2015-10-31-08:00\t41.0.2\tWindows 7\tGerman\r\n",
"Sad\t2015-10-31-08:00\t41.0.2\tWindows 8.1\tEnglish (US)\r\n",
"Sad\t2015-10-31-08:00\t40.0\tWindows XP\tEnglish (US)\r\n"
]
}
],
"source": [
"# Scraped data has been saved in feedback4.txt\n",
"!head feedback4.txt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Part 2: Converting the data into a dataframe\n",
"\n",
"It is extremely important to convert the data into the right format to be able to perform operations on it. \n",
"#### I'm using Pandas (a Python data analysis toolkit) for dataframe related operations. \n"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import matplotlib.pylab as P\n",
"import pandas as pd\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of rows: 15031\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>sentiment</th>\n",
" <th>date</th>\n",
" <th>version</th>\n",
" <th>platform</th>\n",
" <th>locale</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Sad</td>\n",
" <td>2015-10-31-08:00</td>\n",
" <td>41.0.2</td>\n",
" <td>Windows 7</td>\n",
" <td>Spanish (Argentina)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Sad</td>\n",
" <td>2015-10-31-08:00</td>\n",
" <td>41.0.2</td>\n",
" <td>Windows 7</td>\n",
" <td>Dutch</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Sad</td>\n",
" <td>2015-10-31-08:00</td>\n",
" <td>41.0.2</td>\n",
" <td>Windows 7</td>\n",
" <td>Russian</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Sad</td>\n",
" <td>2015-10-31-08:00</td>\n",
" <td>41.0.2</td>\n",
" <td>Windows 7</td>\n",
" <td>English (US)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Sad</td>\n",
" <td>2015-10-31-08:00</td>\n",
" <td>41.0.2</td>\n",
" <td>Windows Vista</td>\n",
" <td>English (US)</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" sentiment date version platform locale\n",
"0 Sad 2015-10-31-08:00 41.0.2 Windows 7 Spanish (Argentina)\n",
"1 Sad 2015-10-31-08:00 41.0.2 Windows 7 Dutch\n",
"2 Sad 2015-10-31-08:00 41.0.2 Windows 7 Russian\n",
"3 Sad 2015-10-31-08:00 41.0.2 Windows 7 English (US)\n",
"4 Sad 2015-10-31-08:00 41.0.2 Windows Vista English (US)"
]
},
"execution_count": 82,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"names = ['sentiment', 'date', 'version', 'platform', 'locale']\n",
"data = pd.read_csv('feedback4.txt', delimiter='\\t', names=names).dropna()\n",
"print \"Number of rows: %i\" % data.shape[0]\n",
"data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, we have the data in the right format.<br/>\n",
"For the next part, I'm using an ad-hoc way for dealing with the datetime column. I am going to extract only the day. However, I'll learn how to use the actual date in later analysis that I perform in the future. For now, this is a dirty way, but suffices for the sample dataset that I have scraped."
]
},
{
"cell_type": "code",
"execution_count": 83,
"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>sentiment</th>\n",
" <th>date</th>\n",
" <th>version</th>\n",
" <th>platform</th>\n",
" <th>locale</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Sad</td>\n",
" <td>31</td>\n",
" <td>41.0.2</td>\n",
" <td>Windows 7</td>\n",
" <td>Spanish (Argentina)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Sad</td>\n",
" <td>31</td>\n",
" <td>41.0.2</td>\n",
" <td>Windows 7</td>\n",
" <td>Dutch</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Sad</td>\n",
" <td>31</td>\n",
" <td>41.0.2</td>\n",
" <td>Windows 7</td>\n",
" <td>Russian</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Sad</td>\n",
" <td>31</td>\n",
" <td>41.0.2</td>\n",
" <td>Windows 7</td>\n",
" <td>English (US)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Sad</td>\n",
" <td>31</td>\n",
" <td>41.0.2</td>\n",
" <td>Windows Vista</td>\n",
" <td>English (US)</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" sentiment date version platform locale\n",
"0 Sad 31 41.0.2 Windows 7 Spanish (Argentina)\n",
"1 Sad 31 41.0.2 Windows 7 Dutch\n",
"2 Sad 31 41.0.2 Windows 7 Russian\n",
"3 Sad 31 41.0.2 Windows 7 English (US)\n",
"4 Sad 31 41.0.2 Windows Vista English (US)"
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# extracting the exact day from date\n",
"# This is not a good practice since I'm just extracting the date\n",
"# Ideally we should be extracting the entire date to compare them. Will do that later.\n",
"\n",
"data.date = [int(d.split('-')[2]) for d in data.date]\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 84,
"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>sentiment</th>\n",
" <th>version</th>\n",
" <th>platform</th>\n",
" <th>locale</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>15031</td>\n",
" <td>15031</td>\n",
" <td>15031</td>\n",
" <td>15031</td>\n",
" </tr>\n",
" <tr>\n",
" <th>unique</th>\n",
" <td>2</td>\n",
" <td>95</td>\n",
" <td>48</td>\n",
" <td>54</td>\n",
" </tr>\n",
" <tr>\n",
" <th>top</th>\n",
" <td>Sad</td>\n",
" <td>41.0.1</td>\n",
" <td>Windows 7</td>\n",
" <td>English (US)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>freq</th>\n",
" <td>12442</td>\n",
" <td>4780</td>\n",
" <td>5765</td>\n",
" <td>8491</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" sentiment version platform locale\n",
"count 15031 15031 15031 15031\n",
"unique 2 95 48 54\n",
"top Sad 41.0.1 Windows 7 English (US)\n",
"freq 12442 4780 5765 8491"
]
},
"execution_count": 84,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data[['sentiment', 'version', 'platform', 'locale']].describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So we can infer that majority of the feedabck has been negative.<br/>\n",
"The top version, platform and locale from where feedback has been coming can also be seen."
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"count 15031.000000\n",
"mean 15.303506\n",
"std 8.913861\n",
"min 1.000000\n",
"25% 7.000000\n",
"50% 15.000000\n",
"75% 23.000000\n",
"max 31.000000\n",
"Name: date, dtype: float64"
]
},
"execution_count": 85,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data['date'].describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Part 3: Analyze the data and make some Basic plots\n",
"\n",
"We can now look at answering some questions that we may have regarding the given data.<br/>\n",
"What exactly are we looking for? Some questions instantly come to mind.<br/>\n",
"#### 1. Which version is causing a lot of problems?\n",
"#### 2. Which platform is causing the most problems?\n",
"#### 3. Which localities are users sending in feedback from?\n",
"#### 4. How is the positive feedback characterized?\n",
"#### 5. Which day has had maximum feedback coming in?\n",
"\n",
"Although the above are important questions, we may want to dig a little deeper into the data to find certain<br/>\n",
"correlations between attributes.\n",
"#### 6. Is there any correlation between specific versions causing problems when used on certain platforms?\n",
"#### 7. Which versions and platforms go well together? \n",
"<br/>\n",
"I will be using Matplotlib, a Python graph-plotting library.<br/><br/>\n",
"I have written a custom function that will be used with the matplotlib to make certain modifications to the in-built graphs. This makes the graphs simple and pretty by removing uneccesary borders, etc."
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Custom function to make graphs simple and pretty\n",
"\n",
"%matplotlib inline\n",
"\n",
"#tell pandas to display wide tables as pretty HTML tables\n",
"pd.set_option('display.width', 500)\n",
"pd.set_option('display.max_columns', 100)\n",
"\n",
"#--------------------------To remove borders from the matplotlib plots-------------------------\n",
"def remove_border(axes=None, top=False, right=False, left=True, bottom=True):\n",
" \"\"\"\n",
" Minimize chartjunk by stripping out unnecesasry plot borders and axis ticks\n",
" \n",
" The top/right/left/bottom keywords toggle whether the corresponding plot border is drawn\n",
" \"\"\"\n",
" ax = axes or plt.gca()\n",
" ax.spines['top'].set_visible(top)\n",
" ax.spines['right'].set_visible(right)\n",
" ax.spines['left'].set_visible(left)\n",
" ax.spines['bottom'].set_visible(bottom)\n",
" \n",
" #turn off all ticks\n",
" ax.yaxis.set_ticks_position('none')\n",
" ax.xaxis.set_ticks_position('none')\n",
" \n",
" #now re-enable visibles\n",
" if top:\n",
" ax.xaxis.tick_top()\n",
" if bottom:\n",
" ax.xaxis.tick_bottom()\n",
" if left:\n",
" ax.yaxis.tick_left()\n",
" if right:\n",
" ax.yaxis.tick_right()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Feedback over time"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\nnnkm/fv3Z4cddgBgjz32YOutt6637ZMnT+aCCy7gnnvuYe+99wbgxhtv5K233uLoo48G4IorruCR\nRx5hwYIFbLfddgCMHTuWHXfckYsuuogLLrigNT5GSZIkSdjj1uaOPfZYtt56a84///w11t16662M\nHTuW/v37s3LlSlauXMmGG27InnvuWTupyb333svQoUNrQxvAFltssdprgDfffJOpU6ey/fbb07t3\nb3r16sU555zDkiVLePfdd5vV5t13350ddtiBmTNn1pbNnDmTmpoaBg0aVNv2UaNGMXz48Nq2ZyYf\n+MAH1johiyRJkqSWM7i1sZ49e3L66adzxRVX8NRTT6227sUXX2TmzJmsv/769OrVq/brjjvuYOnS\npQA899xza504pG7ZGWecwUUXXcQnP/lJbr75Zu677z7OOeccMrN22GVzVA+XfPXVV7nllluYPHny\nam2fN2/eGm2//PLLa9suSZIkqXU4VLIdfOxjH+O///u/mT59+mr3pW266abssssufOlLX1pjm/79\n+wMwZMgQXnjhhTXWv/DCC/Tt27f29TXXXMMpp5zCaaedVlt24403trjNkyZN4qtf/Sp33XUXixcv\n5t133+VDH/rQam3fa6+9uOyyy9bYdoMNNmjxcSVJkiStyeDWDnr16sVpp53GWWedxahRo+jVqxcA\nBx10ELNmzWLnnXemd+/ea9129OjRnHvuudx77728733vA+CZZ57h/vvvX22GxzfffLN2vwDvvPMO\nv/zlL1cLiqvWN6UHbuedd2aXXXZh5syZLF68mIMPPphNNtmkdv1BBx3EnDlzGDZsWO3wSUmSJLWN\n5jwHuO6jn9Q1GNzayYknnsh5553H3XffzQEHHADA5z73Oa644goOPPBATj75ZLbYYguWLVvGnXfe\nyf7778/kyZMZP348u+22GxMnTuT888+nd+/efOUrX2HIkCH06PGvka4HH3wwl156Kdtvvz2bbLIJ\nl156KW+99dZqF+6OO+4IwGWXXcakSZPo27cvu+66a71tnjRpEt/61rd49dVX+fGPf7zauuOOO47L\nLruMmpoaTjvtNLbddlteeukl5s+fz9ChQzn11FNb8+OTJEnq9pryPOOWPH9YnUOnC26d4R9jRKzx\nV5E+ffrw2c9+lrPPPrt23aabbsq8efM4++yz+exnP8srr7zC0KFD2X///dltt91qt509ezYnnngi\nH/3oRxkyZAhnn30211xzDf369autc8kll/DJT36ST3/60/Tp04fjjz+eD33oQ5x44om1dbbZZhsu\nvPBCvvOd73DJJZcwbNgwFi9eXNvmuiZPnsyXvvQlevfuzZFHHrnaug022IDf/e53fPnLX2bq1Kks\nW7aMzTffnL333nuNupIkSZLWTXREV2pEZEPHjQi7eBuwYsUKRowYwSmnnMLUqVM7ujnN4rmVJElq\nvohoco+bv2t1Gk0f/0on7HHrji677DJ69OjByJEjeeGFF7j44ot5++23+djHPtbRTZMkSZLUDgxu\nnUCfPn2YPn06Tz75JBHB3nvvza233sqwYcM6ummSJEmS2oFDJdWuPLeSJEnN51DJLqlZQyV9ALck\nSZIklZzBTZIkSZJKzuAmSZIkSSVncJMkSZKkkjO4SZIkSVLJNSm4RcSAiLg2Iv4SEQsiYu+IGBgR\ncyNiYUTMiYgBVfXPiohFEfFoRBzSds2XJEmSpK6vqT1u3wZuysz3AO8FHgXOBOZm5g7AbcVrImJn\nYBKwMzAO+F5EdKuevWnTptGjR4/ary233JKjjjqKxYsXt9oxevTowfe+973a1z/84Q+ZPXv2GvWG\nDx/O6aef3mrHlSRJktT+Gn0Ad0RsDOyfmVMAMnMlsCIiJgAHFNVmAHdQCW9HAFdn5tvAkoh4HBgN\nzFvXxkY061EHraq5z8PYeOONueWWWwD461//ype+9CUOOuggHnnkEfr27bvO7Zk3bx7bbrtt7esf\n/vCHvPe97+WII45Yrd7s2bPZdNNN1/l4kiRJkjpOo8EN2BZ4ISJ+BuwG3A+cCgzOzGVFnWXA4GJ5\nC1YPaUuBLVunuTC1A54n+JUW5MWePXsyevRoAEaPHs0222zDfvvtx80338yHP/zhdW7Tqn1XW1u4\n3G233db5WJIkSZI6VlOGMPYE9gS+l5l7Aq9TDItcJSuJoaFI1e0f377HHnsAsGTJEl588UWmTJnC\nZpttRr9+/RgzZgz333//avVvuOEGRo0axYYbbsjAgQPZZ599+P3vf1+7vnqoZE1NDX/84x+ZMWNG\n7fDMn//850BlqOQXvvAFAC6//HI22GADVqxYsdqxHnnkEXr06MHtt99eWzZ79mz22msv+vTpw9Ch\nQznjjDNYuXJl638wkiRJkhrVlOC2FFiamfcWr6+lEuSei4ghABExFHi+WP8MMKxq+62KstVMmzat\n9uuOO+5oYfM7jyVLlgAwePBgjjzySObOnctFF13EzJkzeffddxkzZgx//etfgcrQyqOOOoqxY8fy\nm9/8hiuvvJIPfvCDLF++fK37/v73v89OO+3EYYcdxrx585g3bx6HHXYYUBleumqI6ZFHHklEcN11\n1622/cyZMxkyZAhjxowBYNasWXz4wx9mn3324cYbb2Tq1Kn88Ic/5KyzzmqLj0aSJElSIxodKpmZ\nz0XE0xGxQ2YuBMYCjxRfU4Dpxffri01uAK6KiIupDJEcCcyvu99p06a1yhsos3feeYfMZPHixXzq\nU59io402Yr311uPuu+/mzjvvZP/99wfgwAMPZPjw4XzjG9/gsssu44EHHmCjjTZi+vTptfs69NBD\n6z3Oe97zHvr168egQYPWOoRylQEDBjBu3DhmzpzJ8ccfX1s+c+ZMjjrqKCKCzOQLX/gCU6ZM4bvf\n/S4AY8eOZYMNNuDTn/40X/ziF9lkk03W8ZORJEmS1BxNne3xZODKiPgTlVklvwZ8HTg4IhYCBxav\nycwFwCxgAXAzcFI2d2aPLuCll15i/fXXp1evXuy00048+eSTzJw5k0WLFjF48ODa0AbQt29fDj/8\ncO666y4Adt11V1asWMHxxx/P3Llzef3111utXZMmTeK2226r7b178MEHWbRoEZMmTQJg4cKFPP30\n0xx99NGsXLmy9mvMmDG8+eabPPzww63WFkmSJElN06Tglpl/ysz3ZeZumfmhzFyRmcszc2xm7pCZ\nh2TmK1X1z8vM7TNzp8y8pe2aX14bb7wx9913H/fffz/PPPMMTzzxBP/+7//Os88+y6BBg9aov/nm\nm9eGqR133JHZs2ezePFixo8fz6BBgzj22GN58cUX17ldH/zgB1l//fX51a9+BVR624YNG8a+++4L\nUHuM8ePH06tXr9qvESNGEBE8/fTT69wGSZIkSc3TlFkl1QI9e/Zkzz33XKN86NChPP/882uUL1u2\nbLVp+8ePH8/48eN57bXX+M1vfsOpp57KySefzNVXX71O7dpwww057LDDmDlzJh//+MeZNWsWRx99\ndO36gQMHAvCjH/2odkKVasOHD1+n40uSJElqvm71YOwy2GeffXj++ef5wx/+UFv2xhtv8Nvf/pb9\n9ttvjfr9+/fnmGOO4cgjj2TBggX17rdXr1784x//aFIbJk+ezJ133smNN97IE088weTJk2vX7bjj\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f3dc0bf28d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#negative and positive feedback over time\n",
"#resources: http://matplotlib.org/examples/pylab_examples/histogram_demo_extended.html\n",
"# http://matplotlib.org/examples/statistics/histogram_demo_multihist.html\n",
"\n",
"#Happy gives KeyError without .values\n",
"\n",
"fig = plt.figure(1)\n",
"fig.set_size_inches(15, 5)\n",
"#figure(figsize=(8,6))\n",
"plt.hist([[data[data.sentiment=='Sad'].date],[data[data.sentiment=='Happy'].date]],\n",
" bins=np.arange(1,32), \n",
" color=['crimson','chartreuse'],\n",
" label=['Negative','Positive'])\n",
"plt.xlabel('Date (day of October 2015)')\n",
"plt.title('Feedback over Time')\n",
"plt.legend(prop={'size': 15}, loc=2)\n",
"remove_border()\n",
"\n",
"#handles, labels = ax.get_legend_handles_labels()\n",
"#fig.savefig('fig1.png', bbox_inches='tight')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We observe that positive feedback has been low and almost constant on all days.<br/>\n",
"Negative feedback has slightly varied with time, peaking on 31-10-2015.<br/>\n",
"We can assume a bias in the result because not everyone reports positive feedback, but problems are immediately reported by users.<br/>\n",
"So we need to place more emphasis on negative feedback in our analysis in order to pinpoint areas which Mozilla needs to focus on, in order to fix issues.\n",
"### Which versions are popular?"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n6QAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f3dc1355990>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Finding the versions with the most number of positive and negative feedbacks.I am ignoring the ones which \n",
"#have a count of <20. I am also ignoring the 'Unknown' column.\n",
"#Resources: http://pandas.pydata.org/pandas-docs/version/0.13.1/visualization.html\n",
"\n",
"fig, axes = plt.subplots(nrows=1, ncols=2,figsize=(15,5))\n",
"\n",
"data[(data.sentiment=='Sad') & (data.version!='Unknown')].version.value_counts()[:9].plot(kind=\"bar\",\n",
" ax=axes[0],color='crimson')\n",
"axes[0].set_xlabel('Version')\n",
"axes[0].set_title('Versions with negative feedback')\n",
"remove_border(axes=axes[0])\n",
"\n",
"\n",
"data[(data.sentiment=='Happy') & (data.version!='Unknown')].version.value_counts()[:9].plot(kind=\"bar\",\n",
" ax=axes[1],color='chartreuse')\n",
"plt.ylim([0,4500])\n",
"axes[1].set_xlabel('Version')\n",
"axes[1].set_title('Versions with postive feedback')\n",
"remove_border(axes=axes[1])\n",
"\n",
"#fig.savefig('fig2.png', bbox_inches='tight')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We find that the versoin causing maximum problems is also the one with the most positive feedback.<br/>\n",
"This is true for other versions as well. So it is safe to assume that Version 41.0.1 seems to be the most\n",
"popular version amongst users, as it generates the most feedback (positive and negative) overall. Version 41.0.2 is also equally popular with getting feedback. But as I had already mentioned, the positive feedback doesn't really help us as the number is small. We may have to look into the text to see if there's any information in there.<br/>\n",
"<br/>If we look at the previous two plots, something seems to be spooky regarding the last day (31st) of October. Also, versions 41.0.1 and 41.0.2 seem to be really racing with each other in terms of feedback. So to investigate this unusual behaviour, I decided to plot a histogram of the two versions with time. \n",
"##### And the results were truly eye-opening!"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n/e53j1ued9xxBytXrmTXXXddI3233Xbjqaee4tZbbx23fUmSJEnqDutPdgGmqwcffJATTzyRc889\nl/XWW2/c8n344YcB2HzzzddI32KLLdZYLkmSJGn6sMZtgnz4wx9m7733Xt3xiCRJkiSNljVuE+Cm\nm27irLPO4qqrrmLFihUAq4cBWLFiBUnYZJNNRpV3X83aI488skZ6X01b33JJkiRJ04c1bhPgtttu\nY+XKley9997MmTOHOXPm8J73vAeA7bbbjmOPPXbUee+8885ssMEG3HzzzWuk33LLLcyaNYtddtll\nTGWXJEmS1H2scZsA++67L4sXL14jbdGiRZx88sksWrSInXbaadR5b7TRRuy///58+ctf5l3vetfq\n9C996Uu8/OUvZ/bs2aPOW5IkSVJ3MnCbAHPnzn3GeGw///nPgSao6xvH7frrr2fp0qXcddddACxe\nvJj777+fHXfckZe+9KUAnH322bz97W/nzjvvZPvttwfgox/9KD09Pbz//e/nkEMO4dvf/jaLFi3i\nkksuWb2/X/ziF+y8886cddZZvOlNbwLg17/+Nd/61rcAWLZsGY899hgXXngh0IwDN9rmm5IkSZIm\n1pQL3CZjAO7x0n8ctc9//vMsWLBg9bLe3l4A3vrWt3LmmWcCzRhvfZ8+++yzDxdeeCEf+chHOP30\n09lpp504//zzOfDAA1evM9B2y5cvXz3+W19ZDjvsMJJw55138vznP3/8D1qSJEnSmGUkgz8nWQ+4\nHri7qv4iyRzgS8ALgKXAYVW1ol33eODtwCrgfVV16QD51VD7TeJo7l3CayFJkjR1JKHOHWado/D7\nXXfI8Ks8baSdkxwLLAH6rvCHgMuqahfgu+08SXYHDgd2Bw4CTktiByiSJEmSNAbDBlVJtgNeC3yR\np6PCg4EF7fQC4PXt9CHA+VW1sqqWArcDe41ngSVJkiRpphlJbdingeOApzrStqqq5e30cmCrdnob\n4O6O9e4Gth1rISVJkiRpJhsycEvyOuD+qrqBQdpgti+rDdVI1ga0kiRJkjQGw/Uq+XLg4CSvBTYG\nnp3kHGB5kudV1X1Jtgbub9dfBmzfsf12bdoz9PWgCNDT00NPT8+oDkCSJEmSprsR9SoJkOQVwAfb\nXiU/BTxYVScn+RCweVV9qO2c5Dya99q2BS4HXti/C0l7lZw6vBaSJElTh71KTilr1avk2o7j1neF\n/wFYmOQdtMMBAFTVkiQLaXqgfBI4ZsgITZIkSZI0rBHXuI3rTq1xmzK8FpIkSVOHNW5TyoSM4yZJ\nkiRJmiQGbuvAsmXL2GyzzZg1axZPPPHE6vTTTjuN+fPnM3fuXGbNmsWVV1454jwvuugi9txzTzbZ\nZBP22GMPFi5cOOw2CxcuZP78+WyzzTbMnj2bl73sZVxwwQWjOiZJkiRJ686UCtySTNpnLI477jhm\nz579jHzOOeccVqxYwUEHHbT6+Ebimmuu4dBDD+WAAw7gO9/5DvPnz+eII47gsssuG3K7U089lS22\n2ILPfvazfOMb32D//ffnyCOP5HOf+9zoDkySJEnSOjGl3nEbSZvdiTCWdsBXXXUVb3jDGzjhhBM4\n7rjjePzxx9l0003XWOemm25izz33ZPHixey3337D5vnqV7+aVatWcfnll69Omz9/Po8++ihXX331\noNs99NBDzJkzZ420o446imuvvZaf//znA27jO26SJElTh++4TSm+49YtVq1axXvf+15OOukk5s6d\nO+h6a/Pg/Pa3v2Xx4sUcdthha6QffvjhXHvttTz22GODbts/aAOYN28e99xzz4j3L0mSJGndM3Cb\nQF/4whdYuXIl7373u8ctzzvuuIOVK1ey6667rpG+22678dRTT3HrrbeuVX7XXnstL37xi8etfJIk\nSZLG39qO46YRevDBBznxxBM599xzWW+99cYt34cffhiAzTfffI30LbbYYo3lI/Hd736Xiy66iLPO\nOmvcyidJkiRp/FnjNkE+/OEPs/fee6/ueKTbLF26lCOPPJLXv/71vPnNb57s4kiSJEkagjVuE+Cm\nm27irLPO4qqrrmLFihUAq4cBWLFiBUnYZJNNRpV3X83aI488skZ6X01b3/KhPPTQQ7zmNa9hxx13\n5NxzJ6G3F0mSJElrxRq3CXDbbbexcuVK9t57b+bMmcOcOXN4z3veA8B2223HscceO+q8d955ZzbY\nYANuvvnmNdJvueUWZs2axS677DLk9k888QSve93rePLJJ/nmN7/JxhtvPOqySJIkSVo3rHGbAPvu\nuy+LFy9eI23RokWcfPLJLFq0iJ122mnUeW+00Ubsv//+fPnLX+Zd73rX6vQvfelLvPzlL2f27NmD\nbvvkk0/yxje+kTvuuIPvfe97bLnllqMuhyRJkqR1x8BtAsydO/cZ47H1jZO27777rh7H7frrr2fp\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f3dc0eeb050>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#negative feedback over time for Versions 41.0.1 and 41.0.2\n",
"\n",
"fig = plt.figure(1)\n",
"fig.set_size_inches(15, 5)\n",
"plt.hist([[data[(data.sentiment=='Sad') & (data.version=='41.0.1')].date],\n",
" [data[(data.sentiment=='Sad') & (data.version=='41.0.2')].date]],\n",
" bins=np.arange(1,32), \n",
" color=['purple','orange'],\n",
" label=['41.0.1','41.0.2'])\n",
"plt.xlabel('Date (day of October 2015)')\n",
"plt.title('Negative feedback of the two popular versions over time')\n",
"plt.legend(prop={'size': 15}, loc=2)\n",
"remove_border()\n",
"\n",
"#fig.savefig('fig7.png', bbox_inches='tight')"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA2gAAAFRCAYAAAAB/I5xAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xm4JVV59/3vrxuQqRUaEkABGRRFxaAoCgY9CCqmDer7\nIgQJ4hDNExV5TIJBHDiJyaMkcUqc3jcRbAiCgApOLTZqMwiBoODAYCvSigzN2AxBTQP380fVaXYf\nzjz0qXP6+7mufXXtqlWr1q5VdXrfew2VqkKSJEmSNPPmzXQBJEmSJEkNAzRJkiRJ6ggDNEmSJEnq\nCAM0SZIkSeoIAzRJkiRJ6ggDNEmSJEnqCAM0SZ2T5N1J/m2E7UckOW8ajrtJkq8mWZXkC1Oc9+uT\nXNTz/uEku0znMSaZ118kWZnk3iRbrstjz3VJPpfkAzNdjvFKcl+SnWa6HDMhyY7t589Ml0XS3GeA\nJmnSkqxI8kD7BebWJCcn2Wyi+VXVB6vqzW3eO7XBzLye7adV1cumouyDHAL8PrCwqg6bhvxnhSQb\nAh8GDqiqx1bV3YO2P6pOpvj4/UlOnY68O6La16xSVQuqasVMl2NdaP+mvXjgfVX9qv38s67eJM0+\nBmiSpkIBr6iqBcCzgecA753iY6yLX66fCCyvqofXwbG6bFtgY+DaUdLZmjBx4z53aU1HYdr8509X\n3l01wjktvL4lzRADNElTqqpuBr4JPAMgycFJrk5yd5LvJnnqQNokf5Pk1203uusGfrEe1IJyYfvv\nqjbd83u70yX5dJJ/6i1DknOTvLNdfnySLya5Lckvkhw9VLmT/C3wPuCwtiXwDe36Nya5JsldSb6Z\nZMeefZ6aZGmSO9vyv6Zn21ZJvpLkniSXAbsOcdhFSa5PcnuSfxz4ophk1yTfSXJHu+0/kjyuJ+8d\nknyp/Ux3JPnXYT7TPyW5KMljh9j2mCQfS3JT+/poko2S7MYjgdmqJOcPkfWj6oS2Rag95l3tuT6o\n53iPS/LZJDe3df6BoVrg2n3e3VMPVybpS/LjnjRLk1ze8/6iJAe3y7snWdZebz9J8sdDnZs27bIk\nH0xyWVtP56SnO+co1+6KJMe12+9KclKSx7TbHtXdM8N0aU2yZZKvtXV5V5outk8YVMa/T/I94L+B\nnQft/zdJzhq07uNJPj7aeW/L+b0kH0lyB3BCkicluSBNN9/bk5wx1Gdo8z2lLfeKJO/puX5fn+Ti\nEa6F17fX/b3tttcOUz9DXqPttmuTLOpJu0Fb3j3b989Pcklbd1cledE4zumpwI7AV9tr8K8zqNW4\nzeMD7fm7L829vnWS09pr6fIkT+zJc9i/FZL0KFXly5cvX5N6ATfQdIcD2AH4CfC3wG7A/cABwHzg\nWOBnwIbAU4BfAdu2++0I7NIunwCc2i4/EXgYmNdzvNcDF7XL+wG/6tm2JfAATSvQPOD7NK15G9B8\nEbseeOkwn+ME4JSe969sy/uUNq/3AN9rt20G3Agc1W7bE7gd2L3dfkb72gR4OvBr4MKevB8Gvg1s\n0Z6znwJvarft2p6zDYGtgQuAj7bb5gM/pOmCuAnwGGDf3vNC88v/vwFLgI2H+ax/B1zS5r818D3g\n74Y754P2Ha5O/gd4U3v8/wXc1LP9y8Cn2zL/HnAZ8JYx1sMmwG+Ahe05Wdme+83abQ+09b4h8HPg\nuLa+9wfuBXYb5jjL2np5GrApcDaPXHfDXbsbtNtXAD8CntAe+2LgA4Ovz0H1PXB9n9yTdiHwapoW\ny82BM4EvDyrjCmB3mutsg0H57kgTZGzec33cDOw92nlvy7kaeFub98bA6cC72+0b0V5bQ3yGU9q8\nN2uvh58CbxztWmjT3wM8uX2/DfC0CVyj7wP+oyftIuDqdvkJwB3AQe37A9v3W43lnPb8TXtxz/ud\n6Lnm2zyW0/xNeSxwNc318eK2DhYDJ43lb4UvX758DX7ZgiZpKgQ4J8ndNAHCMuCDwGHA16rq21X1\nEPDPNF8U9wEeogkunp5kw2rGePyiJz+GWB7KxUAl2a99fwhwSVXdCjwX2Lqq/r6qHqyqG4B/B/5k\nhM/Re7z/BXywqn5aTbfHDwJ7pmlFewVwQ1UtrqqHq+oq4EvAa9J0Fft/gPdX1W+q6mqaL2yDP8uJ\nVbWqqm4EPgYcDlBV17fnbHVV3QF8FBhoAdgb2A44ts37d1V1SU+eG9IEhlsAf1xVvx3ms76W5svu\nHe0x/hY4suc8jGS47b+sqs9WVdF8gd8uye8n2QZ4OfDOtsy3t593TPVQVb8B/ovmHOwFXEXzZf0P\ngecDP6tmnNzzgc2q6kNtfX8X+BrteR1C0QSC11TVAzRf+g9tW0mGu3b37dn3E1V1U3vsfxjhOMOq\nqruq6stV9duquh/4PzxS1wPH+VxVXdteZw8O2v9XwA9ogjxoAoQHquryMZ73m6vqk23ev6UJrHZK\n8oSq+p9B1xawpivkYTSB3H9X1S9pfjA4sifZkNdCu+1hYI8km1TVyqq6ZpjTM9I1ejpwcJKNe9Ke\n3i7/KfCNqvpme47OB66gCeJGPadjVMDJVXVDVd1L82PI8qr6Tnu9nAU8q0077N+KCRxX0npgg5ku\ngKQ5oYBXVtV3elcm2Y6mlaxJVFVJbgSeUFUXJvnfQD9NkHYe8JdVdcu4DtzkeQbNl+OLaL6ondJu\nfiLw+DZwHDCfR7rojeaJwMeTfHjQ+ie02543KO8N2mNv3S7f2LPtVzza4O2PB2i/WH+cJgBZQPOr\n+11tuh1ovvwON07uScAzgeeN8sXz8cAvhzr+JNw6sFBVD7Q93janOR8bArfkkeE+8xj6nAznAqCP\npsXrAuBumkDmdzQ/CEBT/hsH7fdLmvoazuA6GGi1HPbaHWHfcZ+/JJvSBOAvo2mJA9g8SdrgZvBx\nhvJ5muv/VJrr/7R2/RMZ/bwPzvtdwAeAy9tr+8NVdfKgNAP1Ofj66T03Q14LVXVbksOAvwY+23Yz\n/Kuq+ukQn2vYa7Sqfp7kWpog7WvAH9ME2AOf+zVZu3vrBkDv36fRzulYrOxZ/i1w26D3m/eUZ7i/\nFZL0KLagSZpON9N8OQGaAfk0AcZNAFV1elXt16Yp4MQh8hjLrGmnA4e0Yz72Br7Yrv8VzS/XW/a8\nHltVrxgmn8HH+hVNd7De/TerqkvbbRcM2ragqt5G053qQZruZwN25NEGb7+pXf4/NC2Mz6iqx9G0\nGgz8vb4R2DHDT+hwLfBGYEma8WTDuZmm21bv8W8eIX2v8c5kdyNNILVVz7l6XFXtMUz6oYLPC2i6\nLL6QJiAbCNhe1C5DU/4dkrUmfXgiTVA3nMF1sJqm+9mI1+4w+w6cv/+m6TI5sO+2Qxx34Bz+FU13\nyr3bun4Rj27JHe18nw30pRm79iqagA3Gdt7Xyrtt0XpLVT0B+HPgU3n02Lk7aM7TTj3rdmTk89x7\njG9V1UtpuiFfR9MddyijXaOn0wSmrwSuqUda4H9F01V18L35j73FGK2YY/ksY0w/0t8KSXoUAzRJ\n0+lMmokwXpxm6va/ovll+ZIku7XrH0PzJfK3NEHJYLfTfGEfapINANouQ3fQdF/8ZtvlCOBy4L4k\n70rzjLP5SZ6R5DnDZDW4695ngOOTPA3WTIww0C3pa8BuSf40yYbt67lJntp2cfoS0N8e92k0408G\n++skWyTZAXgHMPDstc1pvuTf237pPrZnn8uBW4APJdk0ycZJ9u3NtKrOAI4Hzh/iy/WA04H3thMb\nbA28n6YFZixGrZNB5bkF+BbwkSQLksxLMxHKC4fZZSVNN7ve+riEZizgc4HL225xTwSexyMtov9J\nMx7tXW199NF0LzuDoQX40zQTi2xKM+bprLbl6iyGuXZ79n1rkickWUgzPnHgOD+kaRX+g7YLXv8Q\nxx34bJvTjK+7p83nhGHKOay26+Iy4HPALwZaoyZw3knymiTbt29X0QQeawXM7fV9JvAPSTZvfxh5\nJ/AfI5Wzzf/3k7wyzWM4VtNc50Pd9zD6NXoGTcvj/+KRVkPacvxxkpe29/zGaSaa6W3hG60b70pG\nv77H2hX76wzzt2KU/CWtpwzQJE2bqlpOMx7kX2m+1C+iGRf1IM34sw+262+h6Tb17oFd2xft2KB/\nAL6XZka45/Vu7/F5mvE3A60HtN0AX0EzKP8X7bH+f5pB/UMWuTffqjqHplXvjCT3AD+m+UJIO17o\npTTjeW5qP8MHaSZWAHg7zZfvW4GT2tfgMp9LM4nJlTQB30nt+r+leVzBPcBXaVoEB87HQzTduZ5E\n88v8jcChQ5y3U2gCju+kZ+bJHn9PMy7nR+3rinZd77kY+iSNvU5637+O5txcQ9Nd8yyaFpShDMxK\neGeSK3qO+X2aiSAGum5eAqxoxydRVatpzs3Laer6E8CR7XU45Eeh+cL/OZr624gmUKYNcoa7dgf2\n/TxNAHQ9zQQRf9/uu5zm3J9PM3nGRYPORe+5+hjN2LY72s+zhJHP43A+TzOhyecHrR/pvA9VZ88B\n/jPJfTTX5zvqkWef9aY9mia4+kX7+U6jmfxkuHwH3s+jCeZuAu6kmeTnL4b5TCNeo9WMM72EZkzr\nF3rW/5qmVe14mm6Hv6IJsMfTKvlBmuDw7iR/Ocw+w9XpWtur6j5G/lshSWvJI13ch0mQvJvmP6mH\nab6cvIFmRqIv0Px6uQI4tKpWTWtJJUmaQkm+S9MV7qRREz963xtoZt38zqiJJUkahxFb0JLsBLwZ\neHbbZ30+zS9AxwFLq2o3mmmij5veYkqSNC18GLEkqVNG6+J4L00f8U2TbEAz6Plm4GCaKaNp/33V\ntJVQkqTpM97JICRJmlZj6eL4Fprnm/wGOK+qjkxyd1Vt2W4PcNfAe0mSJEnSxIzWxXFX4H/TTHP7\neJpns/xpb5p2tit/gZQkSZKkSRrtQdXPAS6pqjsBknyJZrakW5NsW1W3tg+ivW2onZPUCSc8MmNw\nX18ffX19U1JwSZIkSZoFxjXeecQujkn+gGbq3OfSPP/lczTP4HkicGdVnZjkOGCLqnrURCFJarQu\nlJIkSZI0h01dgAaQ5F00D1h9GPgB8GfAApqHVO7ICNPsG6BJkiRJWs9NbYA2GQZokiRJktZz4wrQ\nRptmX5IkSZK0jhigSZIkSVJHGKBJkiRJUkeMNs3+tGmeb60ucbygJEmSNLNmLEADA4IuMWCWJEmS\nZp5dHCVJkiSpIwzQJEmSJKkjDNAkSZIkqSMM0CRJkiSpIwzQJEmSJKkjDNCmyE033cTmm2/OvHnz\neOCBB9as/9SnPsWiRYvYaqutmDdvHhdccMGY8zz33HPZY4892GSTTXj605/OmWeeOeo+P//5z/nz\nP/9znvnMZzJ//nz233//CX0eSZIkSete5wK0JDP2moxjjz2WBQsWPCqfU089lVWrVnHQQQet+Xxj\ncfHFF3PIIYdwwAEH8M1vfpNFixZx+OGHs3Tp0hH3u+aaa1iyZAm77747T3nKU5w+X5IkSZpFMp3P\nIktSw+WfZMjnoCWhn/5pK9Nw+umf8HPZLrzwQl796ldz/PHHc+yxx3L//fez6aabrpXm6quvZo89\n9mDZsmW88IUvHDXPl73sZTz00EOcf/75a9YtWrSIe++9l4suumjY/apqTVB2yCGHcNddd/Gd73xn\n1OMNVx+SJEmSJmVcLSada0GbbR566CGOPvpoTjjhBLbaaqth040n+Pnd737HsmXLOPTQQ9daf9hh\nh3HppZdy3333DbuvLWaSJEnS7GWANkmf+cxnWL16NW9729umLM/rr7+e1atX89SnPnWt9bvvvjsP\nP/wwy5cvn7JjSZIkSeqODWa6ALPZnXfeyfvf/35OO+005s+fP2X53n333QBsscUWa63fcsst19ou\nSZIkaW6xBW0S3vOe97DPPvusmQBEkiRJkibDFrQJuvrqqzn55JO58MILWbVqFcCa6fVXrVpFEjbZ\nZJMJ5T3QUnbPPfestX6g5WxguyRJkqS5xRa0CfrZz37G6tWr2WeffVi4cCELFy7k7W9/OwDbb789\nxxxzzITz3nXXXdlwww259tpr11p/3XXXMW/ePHbbbbdJlV2SJElSN9mCNkH77bcfy5YtW2vdkiVL\nOPHEE1myZAm77LLLhPN+zGMew/77789ZZ53FW97yljXrv/CFL7DvvvuyYMGCCectSZIkqbsM0CZo\nq622etTzzH7xi18ATfA28By0K664ghUrVnDjjTcCsGzZMm677TZ23nln9tprLwBOOeUU3vjGN3LD\nDTewww47APC+972Pvr4+3vnOd/LKV76Sb3zjGyxZsoTzzjtvzfF++ctfsuuuu3LyySdz5JFHAvCb\n3/yGr3/96wDcdNNN3HfffZx99tlA8xy1iXa7lCRJkjT9OhmgzcSDqqfK4OeQffKTn2Tx4sVrtvX3\n9wPw+te/npNOOglonpE28Brwghe8gLPPPpv3vve9fPrTn2aXXXbh9NNP58ADD1yTZqj9Vq5cueb5\naQNlOfTQQ0nCDTfcwI477jj1H1qSJEnSlMh4HqA87syTGi7/JON6eLOml/UhSZIkTYuMnuQRThIi\nSZIkSR1hgCZJkiRJHWGAJkmSJEkdMWqAluQpSa7sed2T5B1JFiZZmmR5km8l2WJdFFiSJEmS5qpx\nTRKSZB5wE7A3cDRwR1X9Y5K/AbasquMGpXeSkFnC+pAkSZodBs8aPhK/33XCuCYJGW+A9lLgfVW1\nX5LrgBdV1cok2wLLquqpg9IboM0S1ockSdLskIQ6bQzpjjBA64hpncXxT4DT2+Vtqmplu7wS2Gac\neUmSJEmSeow5QEuyEfDHwFmDt7XNZIbnkiRJkjQJG4wj7cuB71fV7e37lUm2rapbk2wH3DbUTv39\n/WuW+/r66Ovrm2BRJUmSJGluG08Xx8N5pHsjwFeAo9rlo4Bzhtqpv79/zWsuB2c33XQTm2++OfPm\nzeOBBx5Ys/5Tn/oUixYtYquttmLevHlccMEFY87z3HPPZY899mCTTTbh6U9/Omeeeeao+5x55pks\nWrSIxz/+8SxYsIDnPOc5nHHGGRP6TJIkSZLWrTEFaEk2Aw4EvtSz+kPAS5IsB17cvp+0JDP2moxj\njz2WBQsWPCqfU089lVWrVnHQQQet+XxjcfHFF3PIIYdwwAEH8M1vfpNFixZx+OGHs3Tp0hH3+9jH\nPsaWW27Jv/zLv/DVr36V/fffn9e+9rV84hOfmNgHkyRJkrTOjGsWx3FnPoFZHMc6K81Um8wsNxde\neCGvfvWrOf744zn22GO5//772XTTTddKc/XVV7PHHnuwbNkyXvjCF46a58te9jIeeughzj///DXr\nFi1axL333stFF1007H533XUXCxcuXGvdEUccwaWXXsovfvGLYfdzFkdJkqTZwVkcZ51pncVRgzz0\n0EMcffTRnHDCCWy11VbDphvPzfG73/2OZcuWceihh661/rDDDuPSSy/lvvvuG3bfwcEZwJ577snN\nN9885uNLkiRJmhkGaJP0mc98htWrV/O2t71tyvK8/vrrWb16NU996lqPlWP33Xfn4YcfZvny5ePK\n79JLL+UpT3nKlJVPkiRJ0vQYzyyOGuTOO+/k/e9/P6eddhrz58+fsnzvvvtuALbYYou11m+55ZZr\nbR+Lb3/725x77rmcfPLJU1Y+SZIkSdPDFrRJeM973sM+++yzZgKQrlmxYgWvfe1redWrXsXrXve6\nmS6OJEmSpFHYgjZBV199NSeffDIXXnghq1atAlgzvf6qVatIwiabbDKhvAdayu6555611g+0nA1s\nH8ldd93Fy1/+cnbeeWdOO20GZl2RJEmSNG62oE3Qz372M1avXs0+++zDwoULWbhwIW9/+9sB2H77\n7TnmmGMmnPeuu+7KhhtuyLXXXrvW+uuuu4558+ax2267jbj/Aw88wCte8QoefPBBvva1r7HxxhtP\nuCySJEmS1h1b0CZov/32Y9myZWutW7JkCSeeeCJLlixhl112mXDej3nMY9h///0566yzeMtb3rJm\n/Re+8AX23XdfFixYMOy+Dz74IK95zWu4/vrrueSSS9h6660nXA5JkiRJ65YB2gRttdVWj3qe2cBz\nxvbbb781z0G74oorWLFiBTfeeCMAy5Yt47bbbmPnnXdmr732AuCUU07hjW98IzfccAM77LADAO97\n3/vo6+vjne98J6985Sv5xje+wZIlSzjvvPPWHO+Xv/wlu+66KyeffDJHHnkkAG9961tZsmQJH//4\nx7n99tu5/fbb16R/9rOfzUYbbTRNZ0SSJEnSZBmgTbFk7efQffKTn2Tx4sVrtvX39wPw+te/npNO\nOglonpE28Brwghe8gLPPPpv3vve9fPrTn2aXXXbh9NNP58ADD1yTZqj9li5dSpJHdbFMwg033MCO\nO+44pZ9XkiRJ0tTJdD5dPEkNl3+SIR/ePDjAWZfW5yetD1cfkiRJ6pYk1BjmgMsR6/f32w4ZV4DT\nuRY0LyJJkiRJ6ytncZQkSZKkjjBAkyRJkqSOMECTJEmSpI4wQJMkSZKkjjBAkyRJkqSOMECTJEmS\n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\nIwzQJEmSJKkjDNAkSZIkqSMM0CRJkiSpIwzQJEmSJKkjDNAkSZIkqSMM0CRJkiSpIwzQJEmSJKkj\nDNAkSZIkqSMM0CRJkiSpIwzQJEmSJKkjDNAkSZIkqSMM0CRJkiSpIwzQJEmSJKkjDNAkSZIkqSM2\nmOkCTNb3vvc9vvqVr46aLgnHvutYFi5cuA5KJUmSJEnjN+sDtCuuuILTP3w6T3roSSOmu2yjy3jz\nW95sgCZJkiSps2Z9gAaw/fzteeFDLxwxzdUbXb2OSiNJkiRJE+MYNEmSJEnqCAM0SZIkSeoIAzRJ\nkiRJ6ggDNEmSJEnqCAM0SZIkSeoIAzRJkiRJ6ggDNEmSJEnqiFEDtCQnJVmZ5Mc96xYmWZpkeZJv\nJdlieospSZIkSXPfWFrQTgYOGrTuOGBpVe0GfLt9L0mSNGlJxvSSpLlog9ESVNVFSXYatPpg4EXt\n8mJgGQZpkiRpivTTPyVpJGm2megYtG2qamW7vBLYZorKI0mSJEnrrUlPElJVBdQUlEWSJEmS1muj\ndnEcxsok21bVrUm2A24bLmF/f/+a5b6+Pvr6+iZ4SEnSbOIYIUmSxm+iAdpXgKOAE9t/zxkuYW+A\nJklav4w2RsgxRJIkrW0s0+yfDlwCPCXJjUneAHwIeEmS5cCL2/eSJEmSpEkYyyyOhw+z6cApLosk\nSZIkrdcmPUmIJEmSJGlqGKBJkiRJUkcYoEmSJElSRxigSZIkSVJHGKBJkiRJUkcYoEmSJElSR0z0\nQdWSpPVEkjGlq6ppLokkSXOfAZokaUR12uhpcsT0l0OSpPWBXRwlSZIkqSMM0CRJkiSpI+ziKEnS\nEMY69m59NNvPzWwvv6S5zQBNkqRh9NM/qe1z2Vg+e5fPz2wvv6S5yy6OkiRJktQRtqBJkmYlu6lJ\nkuYiAzRJ0qxlF0RJ0lxjF0dJkiRJ6ggDNEmSJEnqCLs4SpI0AxxDJ0kaigGaJEkzxDF0kqTB7OIo\nSZIkSR1hC5okSZI0RnZP1nQzQJMkSZLGwe7Jmk52cZQkSZKkjjBAkyRJkqSOsIujJElzjGNk1GXT\nfX3O9ut/tpdfk2eAJknSHDSWMTCOk9FMme4xXLN9jNhsL78mZ1JdHJMclOS6JD9L8jdTVShJkiRJ\nWh9NOEBLMh/4BHAQ8DTg8CS7T1XB1G3Lli2b6SJoGlm/c5d1O7dZv92QZEyv8bJ+5y7rdm5L0jee\n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\nSZKkjvi/qv8Rl7W9Lc4AAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f3dc16e9890>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#negative feedback over time for Versions 41.0.1 and 41.0.2\n",
"\n",
"fig = plt.figure(1)\n",
"fig.set_size_inches(15, 5)\n",
"plt.hist([[data[(data.sentiment=='Happy') & (data.version=='41.0.1')].date],\n",
" [data[(data.sentiment=='Happy') & (data.version=='41.0.2')].date]],\n",
" bins=np.arange(1,32), \n",
" color=['purple','orange'],\n",
" label=['41.0.1','41.0.2'])\n",
"plt.xlabel('Date (day of October 2015)')\n",
"plt.title('Positive feedback of the two popular versions over time')\n",
"plt.legend(prop={'size': 15}, loc=2)\n",
"remove_border()\n",
"\n",
"#fig.savefig('fig8.png', bbox_inches='tight')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Version 41.0.1 seems to have plummeted in popularity during mid-October, where Version 41.0.2 has picked up. This means that a new version of Firefox was probably upgraded and released to the users and more feedback started flowing in.<br/><br/>\n",
"Below I have commented out some code which I used for creating csv files that I would later on use in my D3.js plots."
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#version_count = data[(data.sentiment=='Happy') & (data.version!='Unknown')].version.value_counts()[:10]\n",
"#version_count"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#versions = pd.DataFrame({ 'version': version_count.keys(), 'count': version_count.values })\n",
"#versions"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#versions = versions.reindex_axis(sorted(versions.columns, reverse=True), axis=1)\n",
"#versions"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#versions.to_csv('versions_happy.csv', index=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Which platforms are causing problems or are compatible?"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f3dc0f159d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Finding the platforms with the most number of positive and negative feedbacks.I am ignoring the ones \n",
"#with a low count value. I am also ignoring the 'Unknown' column.\n",
"\n",
"fig, axes = plt.subplots(nrows=1, ncols=2,figsize=(15,5))\n",
"\n",
"data[(data.sentiment=='Sad') & (data.platform!='Unknown')].platform.value_counts()[:8].plot(kind=\"bar\",\n",
" ax=axes[0],color='crimson')\n",
"axes[0].set_xlabel('Platform')\n",
"axes[0].set_title('Platforms with negative feedback')\n",
"remove_border(axes=axes[0])\n",
"\n",
"\n",
"data[(data.sentiment=='Happy') & (data.platform!='Unknown')].platform.value_counts()[:8].plot(kind=\"bar\",\n",
" ax=axes[1],color='chartreuse')\n",
"plt.ylim([0,5000])\n",
"axes[1].set_xlabel('Platform')\n",
"axes[1].set_title('Platforms with postive feedback')\n",
"remove_border(axes=axes[1])\n",
"\n",
"#fig.savefig('fig3.png', bbox_inches='tight')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The Windows platforms seem to be generating the most problems. One thing to note here is that platform count is not directly proportional to the percentag of those platform users facing the problem. This is because the number of overall users for a platform varies. <br/><br/>\n",
"For e.g. Windows 7 problems > Windows 8.1 problems<br/>\n",
"But this does not imply that %(7 users facing problems) > %(8 users facing problems)<br/>\n",
"Because the number of 8 users may be much lesser than 7 users leading to lower feedback count.<br/><br/>\n",
"While dealing with the issues, Mozilla probably needs to assign equal importance to 8 users so that it doesn't lose out on the 8 userbase."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Where is feedback coming in from?"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f3dc0e248d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Finding the locations with the most number of positive and negative feedbacks.I am ignoring the ones \n",
"#with a low count value. I am also ignoring the 'Unknown' column.\n",
"\n",
"fig, axes = plt.subplots(nrows=1, ncols=2,figsize=(15,5))\n",
"\n",
"data[(data.sentiment=='Sad') & (data.locale!='Permalink')].locale.value_counts()[:8].plot(kind=\"bar\",\n",
" ax=axes[0],color='crimson')\n",
"axes[0].set_xlabel('Locale')\n",
"axes[0].set_title('Locales with negative feedback')\n",
"remove_border(axes=axes[0])\n",
"\n",
"\n",
"data[(data.sentiment=='Happy') & (data.locale!='Permalink')].locale.value_counts()[:8].plot(kind=\"bar\",\n",
" ax=axes[1],color='chartreuse')\n",
"plt.ylim([0,8000])\n",
"axes[1].set_xlabel('Locale')\n",
"axes[1].set_title('Locales with postive feedback')\n",
"remove_border(axes=axes[1])\n",
"\n",
"#fig.savefig('fig4.png', bbox_inches='tight')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Users in USA have a huge share in the providing feedback, both positive and negative.\n",
"## Part 4: Finding Correlations\n",
"### Task: Find which version/platform combinations are successful/unsuccessful\n",
"### Completed: Plotted a heatmap showing the distribution\n",
"After dabbling with a lot of bar graphs and getting a sense of how the general bahaviour of the data is, it would be interesting to see if there are any correlations between different versions and platforms. The most apt graph for thos purpose would be a heat map. Since the attributes are non-numerical, it is quite a task to get a heatmap out of it. But with a bit of effort (and a LOT of googling), I was successful in getting the desired output!<br/><br/>\n",
"In the following sections, I have explained in detail how I went about the entire process."
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#I'm using dummy column to have a lits of 1s as count value for each instance. This is needed for the pivot table.\n",
"\n",
"data.insert(len(data.columns), column='dummy', value=[1]*len(data))"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>platform</th>\n",
" <th>Android 4.2.2</th>\n",
" <th>Android 4.3</th>\n",
" <th>Android 5.0.2</th>\n",
" <th>Fedora</th>\n",
" <th>FreeBSD</th>\n",
" <th>Linux</th>\n",
" <th>Maemo</th>\n",
" <th>OS X</th>\n",
" <th>OpenBSD amd64</th>\n",
" <th>Windows 10</th>\n",
" <th>Windows 2000</th>\n",
" <th>Windows 7</th>\n",
" <th>Windows 8</th>\n",
" <th>Windows 8.1</th>\n",
" <th>Windows NT</th>\n",
" <th>Windows NT 4.10</th>\n",
" <th>Windows NT 9.0</th>\n",
" <th>Windows Vista</th>\n",
" <th>Windows XP</th>\n",
" <th>X18</th>\n",
" </tr>\n",
" <tr>\n",
" <th>version</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>10.0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10.0.2</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11.0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>14</td>\n",
" <td>4</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12.0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>14</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13.0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>10</td>\n",
" <td>4</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"platform Android 4.2.2 Android 4.3 Android 5.0.2 Fedora FreeBSD Linux Maemo OS X OpenBSD amd64 Windows 10 Windows 2000 Windows 7 Windows 8 Windows 8.1 Windows NT Windows NT 4.10 Windows NT 9.0 Windows Vista Windows XP X18\n",
"version \n",
"10.0 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 0 5 0\n",
"10.0.2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0\n",
"11.0 0 0 0 0 0 0 0 0 0 0 0 14 4 0 0 0 0 0 9 0\n",
"12.0 0 0 0 0 0 0 0 0 0 0 0 14 3 0 0 0 0 1 8 0\n",
"13.0 0 0 0 0 0 1 0 0 0 0 0 10 4 0 0 0 0 0 4 0"
]
},
"execution_count": 98,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Resources: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.pivot_table.html\n",
"\n",
"pt1 = pd.pivot_table(data[(data.sentiment=='Sad') & (data.version!='Unknown') & (data.platform!='Unknown')], \n",
" index='version', values='dummy', columns='platform', aggfunc=np.sum, fill_value=0)\n",
"pt1.head()\n",
"#use pt1 to look at the entire pivot table"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>platform</th>\n",
" <th>Android 4.2.2</th>\n",
" <th>Android 4.3</th>\n",
" <th>Android 5.0.2</th>\n",
" <th>Fedora</th>\n",
" <th>FreeBSD</th>\n",
" <th>Linux</th>\n",
" <th>Maemo</th>\n",
" <th>OS X</th>\n",
" <th>OpenBSD amd64</th>\n",
" <th>Windows 10</th>\n",
" <th>Windows 2000</th>\n",
" <th>Windows 7</th>\n",
" <th>Windows 8</th>\n",
" <th>Windows 8.1</th>\n",
" <th>Windows NT</th>\n",
" <th>Windows NT 4.10</th>\n",
" <th>Windows NT 9.0</th>\n",
" <th>Windows Vista</th>\n",
" <th>Windows XP</th>\n",
" <th>X18</th>\n",
" </tr>\n",
" <tr>\n",
" <th>version</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>40.0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>11</td>\n",
" <td>0</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>55</td>\n",
" <td>1</td>\n",
" <td>14</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>19</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>40.0.3</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>12</td>\n",
" <td>0</td>\n",
" <td>44</td>\n",
" <td>0</td>\n",
" <td>87</td>\n",
" <td>0</td>\n",
" <td>185</td>\n",
" <td>10</td>\n",
" <td>56</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>11</td>\n",
" <td>77</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41.0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>75</td>\n",
" <td>0</td>\n",
" <td>107</td>\n",
" <td>0</td>\n",
" <td>297</td>\n",
" <td>1</td>\n",
" <td>646</td>\n",
" <td>22</td>\n",
" <td>122</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>59</td>\n",
" <td>136</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41.0.1</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>121</td>\n",
" <td>0</td>\n",
" <td>351</td>\n",
" <td>0</td>\n",
" <td>905</td>\n",
" <td>3</td>\n",
" <td>1680</td>\n",
" <td>73</td>\n",
" <td>399</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>143</td>\n",
" <td>484</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41.0.2</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>96</td>\n",
" <td>0</td>\n",
" <td>325</td>\n",
" <td>0</td>\n",
" <td>943</td>\n",
" <td>0</td>\n",
" <td>1544</td>\n",
" <td>55</td>\n",
" <td>402</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>147</td>\n",
" <td>487</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42.0</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>10</td>\n",
" <td>0</td>\n",
" <td>65</td>\n",
" <td>0</td>\n",
" <td>186</td>\n",
" <td>0</td>\n",
" <td>237</td>\n",
" <td>18</td>\n",
" <td>42</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>82</td>\n",
" <td>65</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>44.0a1</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>41</td>\n",
" <td>0</td>\n",
" <td>15</td>\n",
" <td>0</td>\n",
" <td>107</td>\n",
" <td>0</td>\n",
" <td>74</td>\n",
" <td>3</td>\n",
" <td>20</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"platform Android 4.2.2 Android 4.3 Android 5.0.2 Fedora FreeBSD Linux Maemo OS X OpenBSD amd64 Windows 10 Windows 2000 Windows 7 Windows 8 Windows 8.1 Windows NT Windows NT 4.10 Windows NT 9.0 Windows Vista Windows XP X18\n",
"version \n",
"40.0 0 0 0 0 0 3 0 11 0 18 0 55 1 14 0 0 0 2 19 0\n",
"40.0.3 0 0 0 0 0 12 0 44 0 87 0 185 10 56 2 0 0 11 77 0\n",
"41.0 0 0 1 0 1 75 0 107 0 297 1 646 22 122 0 1 0 59 136 0\n",
"41.0.1 1 0 0 2 0 121 0 351 0 905 3 1680 73 399 1 0 1 143 484 0\n",
"41.0.2 0 1 0 3 0 96 0 325 0 943 0 1544 55 402 0 0 0 147 487 1\n",
"42.0 0 1 0 0 0 10 0 65 0 186 0 237 18 42 0 0 0 82 65 0\n",
"44.0a1 0 0 0 0 1 41 0 15 0 107 0 74 3 20 0 0 0 2 7 0"
]
},
"execution_count": 99,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Removing versions having a total negative feedback count of less than 100\n",
"#Note that I haven't used a for loop since the upper limit is taken to be non-changing in for loops.\n",
"#But in our case, we keep decrementing nrows every time a row is deleted. So I have used a do-while equivalent\n",
"#in Python.\n",
"\n",
"nrows = len(pt1)\n",
"i = 0;\n",
"while True:\n",
" row = pt1.ix[i,]\n",
" if(row.sum()<100):\n",
" pt1.drop(pt1.index[i],inplace=True)\n",
" i=i-1 #Because of dropping, indexing of rows changes. So need to read next row from same position\n",
" nrows = nrows-1\n",
" i = i+1\n",
" if(i>=nrows):\n",
" break\n",
"\n",
"pt1"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#pt1.to_csv('heatmap_sad.csv', index=False)"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>platform</th>\n",
" <th>Android 4.2.2</th>\n",
" <th>Android 4.3</th>\n",
" <th>Android 5.0.2</th>\n",
" <th>Fedora</th>\n",
" <th>FreeBSD</th>\n",
" <th>Linux</th>\n",
" <th>OS X</th>\n",
" <th>Windows 10</th>\n",
" <th>Windows 2000</th>\n",
" <th>Windows 7</th>\n",
" <th>Windows 8</th>\n",
" <th>Windows 8.1</th>\n",
" <th>Windows NT</th>\n",
" <th>Windows NT 4.10</th>\n",
" <th>Windows NT 9.0</th>\n",
" <th>Windows Vista</th>\n",
" <th>Windows XP</th>\n",
" <th>X18</th>\n",
" </tr>\n",
" <tr>\n",
" <th>version</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>40.0</th>\n",
" <td>-0.142857</td>\n",
" <td>-0.285714</td>\n",
" <td>-0.142857</td>\n",
" <td>-0.238095</td>\n",
" <td>-0.285714</td>\n",
" <td>-0.407990</td>\n",
" <td>-0.353361</td>\n",
" <td>-0.373282</td>\n",
" <td>-0.190476</td>\n",
" <td>-0.354813</td>\n",
" <td>-0.347222</td>\n",
" <td>-0.352356</td>\n",
" <td>-0.214286</td>\n",
" <td>-0.142857</td>\n",
" <td>-0.142857</td>\n",
" <td>-0.425616</td>\n",
" <td>-0.339881</td>\n",
" <td>-0.142857</td>\n",
" </tr>\n",
" <tr>\n",
" <th>40.0.3</th>\n",
" <td>-0.142857</td>\n",
" <td>-0.285714</td>\n",
" <td>-0.142857</td>\n",
" <td>-0.238095</td>\n",
" <td>-0.285714</td>\n",
" <td>-0.331719</td>\n",
" <td>-0.256303</td>\n",
" <td>-0.298687</td>\n",
" <td>-0.190476</td>\n",
" <td>-0.274813</td>\n",
" <td>-0.222222</td>\n",
" <td>-0.244109</td>\n",
" <td>0.785714</td>\n",
" <td>-0.142857</td>\n",
" <td>-0.142857</td>\n",
" <td>-0.363547</td>\n",
" <td>-0.219048</td>\n",
" <td>-0.142857</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41.0</th>\n",
" <td>-0.142857</td>\n",
" <td>-0.285714</td>\n",
" <td>0.857143</td>\n",
" <td>-0.238095</td>\n",
" <td>0.714286</td>\n",
" <td>0.202179</td>\n",
" <td>-0.071008</td>\n",
" <td>-0.071660</td>\n",
" <td>0.142857</td>\n",
" <td>0.008879</td>\n",
" <td>-0.055556</td>\n",
" <td>-0.074006</td>\n",
" <td>-0.214286</td>\n",
" <td>0.857143</td>\n",
" <td>-0.142857</td>\n",
" <td>-0.032512</td>\n",
" <td>-0.096131</td>\n",
" <td>-0.142857</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41.0.1</th>\n",
" <td>0.857143</td>\n",
" <td>-0.285714</td>\n",
" <td>-0.142857</td>\n",
" <td>0.428571</td>\n",
" <td>-0.285714</td>\n",
" <td>0.592010</td>\n",
" <td>0.646639</td>\n",
" <td>0.585637</td>\n",
" <td>0.809524</td>\n",
" <td>0.645187</td>\n",
" <td>0.652778</td>\n",
" <td>0.639912</td>\n",
" <td>0.285714</td>\n",
" <td>-0.142857</td>\n",
" <td>0.857143</td>\n",
" <td>0.546798</td>\n",
" <td>0.628869</td>\n",
" <td>-0.142857</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41.0.2</th>\n",
" <td>-0.142857</td>\n",
" <td>0.714286</td>\n",
" <td>-0.142857</td>\n",
" <td>0.761905</td>\n",
" <td>-0.285714</td>\n",
" <td>0.380145</td>\n",
" <td>0.570168</td>\n",
" <td>0.626718</td>\n",
" <td>-0.190476</td>\n",
" <td>0.561495</td>\n",
" <td>0.402778</td>\n",
" <td>0.647644</td>\n",
" <td>-0.214286</td>\n",
" <td>-0.142857</td>\n",
" <td>-0.142857</td>\n",
" <td>0.574384</td>\n",
" <td>0.635119</td>\n",
" <td>0.857143</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42.0</th>\n",
" <td>-0.142857</td>\n",
" <td>0.714286</td>\n",
" <td>-0.142857</td>\n",
" <td>-0.238095</td>\n",
" <td>-0.285714</td>\n",
" <td>-0.348668</td>\n",
" <td>-0.194538</td>\n",
" <td>-0.191660</td>\n",
" <td>-0.190476</td>\n",
" <td>-0.242813</td>\n",
" <td>-0.111111</td>\n",
" <td>-0.280191</td>\n",
" <td>-0.214286</td>\n",
" <td>-0.142857</td>\n",
" <td>-0.142857</td>\n",
" <td>0.126108</td>\n",
" <td>-0.244048</td>\n",
" <td>-0.142857</td>\n",
" </tr>\n",
" <tr>\n",
" <th>44.0a1</th>\n",
" <td>-0.142857</td>\n",
" <td>-0.285714</td>\n",
" <td>-0.142857</td>\n",
" <td>-0.238095</td>\n",
" <td>0.714286</td>\n",
" <td>-0.085956</td>\n",
" <td>-0.341597</td>\n",
" <td>-0.277066</td>\n",
" <td>-0.190476</td>\n",
" <td>-0.343121</td>\n",
" <td>-0.319444</td>\n",
" <td>-0.336892</td>\n",
" <td>-0.214286</td>\n",
" <td>-0.142857</td>\n",
" <td>-0.142857</td>\n",
" <td>-0.425616</td>\n",
" <td>-0.364881</td>\n",
" <td>-0.142857</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"platform Android 4.2.2 Android 4.3 Android 5.0.2 Fedora FreeBSD Linux OS X Windows 10 Windows 2000 Windows 7 Windows 8 Windows 8.1 Windows NT Windows NT 4.10 Windows NT 9.0 Windows Vista Windows XP X18\n",
"version \n",
"40.0 -0.142857 -0.285714 -0.142857 -0.238095 -0.285714 -0.407990 -0.353361 -0.373282 -0.190476 -0.354813 -0.347222 -0.352356 -0.214286 -0.142857 -0.142857 -0.425616 -0.339881 -0.142857\n",
"40.0.3 -0.142857 -0.285714 -0.142857 -0.238095 -0.285714 -0.331719 -0.256303 -0.298687 -0.190476 -0.274813 -0.222222 -0.244109 0.785714 -0.142857 -0.142857 -0.363547 -0.219048 -0.142857\n",
"41.0 -0.142857 -0.285714 0.857143 -0.238095 0.714286 0.202179 -0.071008 -0.071660 0.142857 0.008879 -0.055556 -0.074006 -0.214286 0.857143 -0.142857 -0.032512 -0.096131 -0.142857\n",
"41.0.1 0.857143 -0.285714 -0.142857 0.428571 -0.285714 0.592010 0.646639 0.585637 0.809524 0.645187 0.652778 0.639912 0.285714 -0.142857 0.857143 0.546798 0.628869 -0.142857\n",
"41.0.2 -0.142857 0.714286 -0.142857 0.761905 -0.285714 0.380145 0.570168 0.626718 -0.190476 0.561495 0.402778 0.647644 -0.214286 -0.142857 -0.142857 0.574384 0.635119 0.857143\n",
"42.0 -0.142857 0.714286 -0.142857 -0.238095 -0.285714 -0.348668 -0.194538 -0.191660 -0.190476 -0.242813 -0.111111 -0.280191 -0.214286 -0.142857 -0.142857 0.126108 -0.244048 -0.142857\n",
"44.0a1 -0.142857 -0.285714 -0.142857 -0.238095 0.714286 -0.085956 -0.341597 -0.277066 -0.190476 -0.343121 -0.319444 -0.336892 -0.214286 -0.142857 -0.142857 -0.425616 -0.364881 -0.142857"
]
},
"execution_count": 101,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# You can also plot a heatmap with normed values if needed. Replace pt1 with pt1_norm in the next code snippet.\n",
"# And uncomment below line.\n",
"\n",
"pt1_norm = (pt1 - pt1.mean()) / (pt1.max() - pt1.min())\n",
"pt1_norm.drop(['Maemo','OpenBSD amd64'], axis=1, inplace=True)\n",
"pt1_norm\n",
"#pt1_norm.to_csv('heatmap_sad.csv', index=False)"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA4cAAAGgCAYAAAAZ2xIxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XmcJXV97//Xe3pAQDZJIA4yCiIoGFRAEY0xLjHhCoLE\nuIuKS0wUQaMGLzHR/Lxxidu90WiIC+5KXDAQgogYMUYjgojIIqCgKCAissg+M5/fH1XN9PR093SP\np09Vzbyej0c/5pw6faZfHHpm+nOq6lupKiRJkiRJG7clXQdIkiRJkrrncChJkiRJcjiUJEmSJDkc\nSpIkSZJwOJQkSZIk4XAoSZIkScLhUJKkOSVZmeScJOcl+dckm7fbf72O522T5C+mbXtbku8neeti\nNkuStD7idQ4lSZpdkpuqaqv29seBs6vqXVO3z/K8nYGTqmqvKduuB+5R8/zHN8lEVa38jf4DJEma\np6VdB0iSNCBfB3536oYkWwJfAO4BbAK8rqpOBN4C7JrkHOA04P7AlsB3krwZOBP4EPBbwC+Aw6vq\niiQfBm4DHgL8d5LtptzfAXghcDjwMOBbVXX4ov4XS5I2Gg6HkiTNQ5KlwP8C/mPaQ7cCh1bVTUl+\nG/gmcCJwNPDAqtp7yu9x0+T9JCcBx1XVx5IcDvwjcGj7qTsCj6iqSnIcsE1VPSLJwe3v/QjgAuDb\nSR5cVecu1n+3JGnj4TmHkiTNbfN279+3gcuBD057fAnw5iTn0uwh3DHJDkDW8fvuD3yyvf1x4FHt\n7QI+M+3Q05PaX78PXF1V57ePnw/svOD/IkmSZuCeQ0mS5nbr1L1/M3g28NvAPlW1MsllwGbz/L1n\nGyBvmXb/jvbXVcDtU7avwn/LJUkj4p5DSZJ+M1sD17SD4WOB+7TbbwJmXbAG+AbwjPb2s4GvLV6i\nJEnr5nAoSdLcZltZdHL7J4CHJvkecBhwIUBV/ZJmQZnzply6Yurv9XLg8PZw1GcDR83xNWuej0mS\ntN68lIUkSZIkyT2HkiRJkiSHQ0mSJEkSDoeSJEmSJBwOJUmSJEk4HEqSJEmScDiUJEnSRiLJtkne\nkuSiJL9Kcl17+y1Jtu26T+qaw6EkaaySvKnrBkkbrX8FfgU8BtiuqrYDHgtc3z4mbdS8zqEkadEk\nefcMm58LfBSoqjpyzEmSNmJJLq6q3Rf6mLSxcM+hJGkxHQpsB5zVfpwN3DHltiSN04+T/FWS35nc\nkOSeSY4GftJhl9QL7jmUJC2aJFsDbwR2AF5VVVcmuayqduk4TdJGKMl2wGuBg4HJAfHnwInAW6rq\nuq7apD5wOJQkLbok+wJvB/4DOKKq7tNxkiRJmsbhUJI0FkmWAC8F9q+q53TdI0lTJTm8qo7rumNS\nkj2AQ4B7tZt+CpxYVRd2V6UNncOhJGlskmwD7Ab8sKp+1XWPJE1KckVVLe+6A6A9B/KZwKdphkKA\n5cDTgeOr6s1dtWnD5nAoSVo0ST4BHFVV1yb5Y+D9wMXA7sCrq8ql4yWNTZLz5nh496q629hi5pDk\nEmDPqrpz2vZNgQuq6n7dlGlDt7TrAEnSBu3BVXVte/sNwKOr6vIkvw18Ba8rJmm8dgAOoLnW4XTf\nGHPLXFbSHE56+bTtO7aPSYvC4VCStJiSZJuquoHmB5orANo9iRPdpknaCJ0MbFlV50x/IMkZHfTM\n5hXAl5NcSvv3Js1hpbsBR3RWpQ2eh5VKkhZNkqfRLBv/HuD+wP2Ak4DHAL+sqld1VydJ/dW+gbYf\nzR7EAn4GnFVVKzoN0wbN4VCStKiS7Aa8mOYd701o3gX/QlWd2mmYJElag8OhJEkDkmRbmnOmpi5v\nf2pVXd9dlTR8SU6uqgO77liXoXRqmBwOJUmLJsm7p9wtIFNuU1VHjj1qwJI8F3g9cBprLm//BODv\nquojXbVJQ5dkx6q6suuOdeljZ5LNgRcCDwQ2azdXVb2guyqtDxekkSQtprPbXx8J7AkcTzMgPhU4\nv6uoAXsdsO/0vYRJ7gGcCTgcSguUZIequqZvA9dsetr5MeBC4I+BvwOe097XwLjnUJK06JJ8C3jU\n5DW7kmwCfL2qHt5t2bAkuRjYb4bhcFvg21W1Wzdl0jAk2W76Jpo3sfYBqKrrxh41gyRbAa8BnkJz\ndMAdwA+B91XVhztMm1GS71bVQ5J8r6oe5N/xw+WeQ0nSOGwLbA38sr2/VbtNC/P3wNlJvsSah5X+\nEfDGzqqk4bgW+PG0bfeiGRALuO/Yi2b2CeAEmvOLnwpsCXwaeF2S3avqmC7jZnBH++sNSfYCrga2\n77BH68k9h5KkRZfkcOANwFfbTX8AvKGP74D3Xbvn449pLoYNzfL2X+rLHg+pz5K8iuYc3b+qqu+1\n2y6rql26LVvT5B64KffPqqqHJlkCXFhV9+8wby1JXgx8DtgL+DDNMPs3VfXPXXZp4RwOFyjJ5Apx\np1fV5VO2v6CqPtRZ2AD5WkoblyTLgIfTvDv/raq6uuOkQUvyWwBV9ct1fa6k1ZIsB95Js/f99cC5\nPRwOv0kzwP5XkkOAl1bVH7eP/aCHw+F9q+pH69qm/lvSdcCQJHkzcAzNuyKnJ5m6yt7Lu6kaJl9L\naaO0A81guBR4ZJI/6bhncJLcJ8mnk/wC+BbwrSS/aLft3G2dNAxVdUVVPZXmSIbTgC26LZrRnwPv\nTHI98FfAkQBJtgf+qcuwWXx2hm2fGXuFfmPuOVyAJN8H9q6qO9uT/z8F/AB4JfCdqtq708AB8bWU\nNi5JjqN5M+h8YNXk9qo6vLOoAUryP8C7gM9V1Yp221LgT4FXVNX+XfZJQ5NkC2DXqjqv65YhSrIH\nzUrUbwNeTbPAT9GcY/6aqnpgh3laDw6HC5DkwqraY8r9pcC/0PwB2MM/APPnayltXJJcADyw/Efn\nN5LkktlWJJ3rMUlaDO0hr4cCTwJOnPLQTcCnq+obnYRpvXlY6cL8KMkfTN6pqhXtxT0vAvaY/Wma\nga+ltHH5Ns27y/rNfCfJe5M8PMmO7cf+Sd4HnNN1nMYvySldN2jjVVX/VlXPBw6qqsOnfBzpYDhM\n7jlcgCSbA1TVrTM8tlNV/XTtZ2kmvpbSxiXJY2jeVb4auL3dXFNX49O6Jbkb8ELgYJoFvaBZrfRE\n4INVdftsz9VwJdlntoeAk6vqnuPsmU2S/avqf7rumMsQGmE4nZOSvI3mcjq3Al8EHgy8sqo+1mmY\nFszhUJK06JL8kOac4u+z5jmHl3fVJA1FkpXA12Z5eP+q2nycPbNJck7f1wwYQiMMp3NSknOr6sFJ\nDgUOAv4S+K8+vQHYLuZzH+DSqrq+656+Wtp1wIZiaH+I+8zXUtogXVNVJ67707rTXl7nyay5R+4L\nVfXF7qrWNkPnT4F/61unRuoi4CVVdfH0B5Jc0UGPNN3kTHEQ8NmquiFJb/ZAJXkR8Cbgh8B9k/xZ\nVf1bx1m95J5DSdKiS/JeYFvgJOCOdnNV1ee7q1otyf8DdgM+SjMUAuwEHEbzLvORsz13nIbSqdFK\n8lTgvKq6aIbHDq2qEzrIWkt72YX/muXhqqqDx9kzkyE0wnA6JyV5C82bVrcB+9H+fV9VD+80rJXk\nfOAxVfWLJPcFPunqzjNzOFTnkmwHUFXXdd0iaXEk+TDN8uZr6MulLGZb6TNJgEuq6n4dZK1lKJ3a\nOCW5BHgRzbmQ01VVnTHmpLUMoRGG0zlVkt8Crq+qlUnuDmxVVVd33QVrH5XmUWqz87DSBUhyb+Af\naN6l/Q/gbVV1Z/vYF6rqyV32tR0PBt4BXAv8b+BDwD7A94DDq+rSDvPukuQ+wFuBxwM3tNu2AU4H\nXut5SNKGpV3Nrs9uS7JfVZ05bft+NAss9MVQOjUmSfatqrO77mj9uo9DyzRDaISBdCZ5fFWdnuQp\ntG8Atm9W0d7vxdEhwE5J/pHVw/a9ptwvj7pYzeFwYT4EfBb4Fs1qcWckObiqrqU5wbUP/pnmmOot\ngW/QnBB8PHAg8F7gj7pLW8PxNBdyfs4MF3L+NOCufmkD0q5Q/EKay1lsTvtDRHsJmz54PvC+JFvR\nnMMHzRuBN7aP9cXzGUanxufPgRd3HdG6rOuAeRhCIwyn89E0b+w/iRmODqE/w+FrWLPv7PZ+mLl7\no+VhpQswuRLTlPvPAY6h+QPx2T7snp66mzzJpVMPMerTLnQv5CxtXJJ8FrgQeDbwd8BzgAv79m5t\nkmVMWZCmqq7qsmc2Q+nUxqW9fvHUHyyn7kGiqmZbcXVshtAIg+p8GnBiVd3WdctckkxU1cpZHrtH\nVf1q3E195Z7DhVmaZLPJPwBV9fEkVwOnAnfvNu0uE1Nuv3PaY5uMM2QdvtMuUPERYHKltXsDz8ML\nOUsbovtV1Z8mOaSqPpLkk8DXu46arh2y1hi0kjxgpoVAOnbt9IEwyW+3R7J0LsmDqup7XXfMR3vK\nyI1VdX2SXYCH0rxx8f2O09YwkM5Xz7L9QTR7uCdmeXychtAIw+l8FvBPSb4IfAo4dbYhrGNnJfmL\n6deObFcx/Wtgl26y+mdJ1wED80GmHe5YVV8Gnkpz7a4+eG97uBFV9d7JjUnuB3y5s6q1PZfmNfs7\nmuH6VOANwHk0q+5J2rBMrlB6Q5K9aFay277DnoU4reuASUkem+SnwNVJvtQOCZN60wmck+SSJG9M\nsmfXMbNJ8lrgDOBb7Q+JpwAHAMcneVWncVMMpbOqnjT1A3gLzRvTV9GsZNm5ITTCoDqfDNyP5tDS\nI4GfJfnnds9nn7wcODbJ+5Nsl2SfJN+k+XP0+x239YqHlUqSFl2SFwOfA/YCPkxzXvTfVNU/d9k1\nKcm753j4+VW11dhi5pDkLJojLC4AnkLzA+NhVfXNnp06cA7NG33PAp4G3AJ8Evh0nxYcS3IBsC/N\n0T+XA7u0S93fHTizqh7YZd+koXROSvKHwOvau39fVX164wIYRiMMp3NSkt+m+bvpZcB2VbVTx0l3\nSbIJ8HrgCOAm4EVVdWq3Vf3jYaUjkuSgqvr3rjvmkuRJVXVS1x3rMpROSfNXVe9vb55BPw/feT7N\nYVy3s/Z5Ps/qImgWm1bV+e3tzya5EPh8kqO7jJpJe7jjMcAxSR4OPAP4epKfVNUju627y4qqujXJ\nHTQD7HUAVXVzklXdpq1hEJ1JDqI5RO96mjd/ZrtOX2eG0AjD6ZwqyT2APwGeDmwHfKbborX8KfBM\n4H3AE4CnJTmrqn7ZbVa/uOdwRJL8XVW9vuuOuQyhEYbTKWnDkeQ/gddV1X/P8NjlVbXz+KvW1u45\nPGjqtcOS7AScDOxaVVt2FjfFbHsxkywBHl1VXx1/1dqSfKq9eXeaFV83B04AHkcziD+nq7apBtS5\nimYV3XNneLgXF24fQiMMqnMr4FCaN3/2AU6kOffwq9WjISPJl2ne/Duiqi5LMgG8FHgl8NaqOrbT\nwB5xOJQkbfSSbAfcVlW3dN0ylyRPAH5RVd+dtn1bmh96/k83ZWtK8qyq+mTXHeuSZDOaH2qvqqpT\n21XIHwlcBBxbVbd3GtgaUOdj2puTlwiYqvpw3b4hNMKgOq+lWTfiU8CXquqOdTylE0n+pKrWuqxG\nknsC76iqZ3eQ1UsOh7+hJG+qqmO67pjLQBrvC+wNnN/DVQElSZI0TZIt+v6mmhbGcw4XYJYFC57b\n7lKvPlyvawiNAEm+0K5wRZJDgP8LfBV4c5I3V9VxXfZJGp12gYJnAQ9oN10AfMrzPCRp2BwMNzxe\nymJhDqU5wfas9uNsmuXZJ2/3wRAaAe4z5fZrgcdV1eE0h8m8spskSaOWZA+aS9TsC/wAuATYDzgv\nyQPmeq4kSRovDytdgCRbA28EdgBeVVVXJrmsqnqz8t4QGmHNxQqSnF1V+0557LtV9ZDu6iSNSpLP\nAcdX1b9O2/4U4FlV9ZRuytatXbDg7lV1Y9ctc7FztOwcrSF0DqER7By1oXSOm3sOF6Cqbqyqo4C3\nA59I8hp69hoOobH1oCQ3Jbmpvb0MIMnd6GevpPWz1/TBEKCqJq952CtJPpVk6/b6cecBFyb5q667\nprNztOwcrSF0DqER7By1oXR2yR/C10NVnQ08HrgV6OV1Z/reWFUTVbVV+7FJVV3VPrQ58JIu2ySN\n1M3r+VhX9mzfRX4ycAqwM83F3PvGztGyc7SG0DmERrBz1IbS2RkXpFlPVbUKeE/70UtDaJyuqq4H\nvtl1h6SR2T7JX7L2UuwA2487Zh6WJtmE5geHf6qqO5P08fwLO0fLztEaQucQGsHOURtKZ2fccyht\nQJJsm+Rh7cc2XfdIwAeArYAtp31sBby/w67ZHAtcTtP4tSQ7Azd02DMbO0fLztEaQucQGsHOURtK\nZ2dckEbaALTnah5L807YZTR7aXYGTgBe0teL0kp9lyTA0qq6s+uWudg5WnaO1hA6h9AIdo7aUDrH\nyT2H0obhdcAmwPKq2rtd7XU5zaHjf9NpmTZqSf4sye7t7SQ5LsmNSb6XZJ+u+6ZL8sMkn0jy50ke\nWI3e/dBg52jZOVpD6BxCI9g5akPp7JJ7DhcgyXlzPFxV9aCxxcxiCI0wnM6hSHI+sF9V3Txt+5bA\nt6rqgd2UaWPXfm8+pD2v41nAq4EnAHsDr6+q3+80cJokmwEPBx7VfuwOnFdVT+40bBo7R8vO0RpC\n5xAawc5RG0pnl1yQZmGe1P760vbXj9EcvvfsbnJmNIRGGE7nUKycPhgCVNWvk6zqIkhq3TnlXdmD\ngI9W1S+BLyd5W4dds1kB3AmsBFYBvwB+3mnRzOwcLTtHawidQ2gEO0dtKJ2dcc/hesgMF2nPlIu6\n98EQGmE4nX2X5HvAY2Z6CPhP98SqK0m+QzMUXgf8GHh8VX2/feyiqnpAl33TJbmF5tpX7wROr6pr\nO06akZ2jZedoDaFzCI1g56gNpbNLDofrIcm5wMuq6uvt/d+jWQ73IXM/c3yG0AjD6ey7JJcDs/5h\nrqpdxlez4UiyHPhHmkNPAL4GHFVVP+2ualiSHESzWNJS4MSqenG7/THAa6rqwA7z1pLkEOD3gYfR\nvLv8DeBrVfXlTsOmsXO07BytIXQOoRHsHLWhdHbJ4XA9JNkXOA6YvFTA9cDhVfWd7qrWNIRGGE6n\nNk5Jvgx8Avh4u+nZwLOr6gndVQ1PmmtKbVVV103Zdneaf4N+3V3Z7JI8AHgi8Apgh6rarOOkGdk5\nWnaO1hA6h9AIdo7aUDq74HD4G0h7Hbmq6u31UYbQCIPq3AG46y+QqvpJhzl3SXIf4Iaqur69/zia\ny1pcDrynvJTFeklyblU9eF3bNLskAR4N/Kqqvpfk6e39S4H3VtXtnQZOk+RzwEOAH9LsKf4v4Myq\nurXTsGnsHC07R2sInUNoBDtHbSidXXI4XIAkh1XVx5K8ijUP4QvNCpvv7ChtdcgAGmE4nZOSHAy8\nA9gRuAa4D3BhX1YBTXIm8OSqujLJQ4DTgTcBDwbuqKoXdRo4UEm+QrNn+5M035vPoNmz/fhOwwYk\nyXuBvWjeVPkBzYWHv0hzqG6qqleLUCV5GPCdqlrZdctc7BwtO0drCJ1DaAQ7R20onV1ytdKF2aL9\ndStmGGjGnzOjITTCcDon/R/gEcBpVbV3kscCh3XcNNVmVXVle/s5wAer6h1JlgDndtg1dC8A3k1z\n4jo05yYc3l3OID0W2JNmOPwZzeE7K5IcS7MoQN+cCxyR5NHt/a8C/1z9uw6WnaNl52gNoXMIjWDn\nqA2lszPuOZTmIcnZVbVvu4DOPlW1Msn3+rIKaJLzqmqv9vY5wP+uqi9Of0wat6mrD09fibiPKxMn\n+SDNG6cfoXmz6jBgRd/2vts5WnaO1hA6h9AIdo7aUDq75J7D9TCEFQyH0AjD6QR+lWQrmmPTP5Hk\nGqBPC2n8Z5LPAFcB2wJfAUiyI9Crc7qGJMl9gZcDO7P678uqqoM7ixqe7ZP8Jc0/wlNvA2zfXdas\nHjbtTZ/T01wqpm/sHC07R2sInUNoBDtHbSidnVnSdcBAHQecSHP+2Y7ASe22PhlCIwyn8xDgFuCV\nNOdLXQo8qdOiNb0C+DxwGfCoKQvQ/A7w151VDd8XaF7Td9Occzr5ofn7AM3h41tOu70V8P4Ou2az\nIsn9Ju8k2ZXmosl9Y+do2TlaQ+gcQiPYOWpD6eyMh5WuhyGsYDiERhhGZ5KlNOcaPrbrlvlKc5mA\nPYAfV9Uvuu4ZqiRnVtV+XXdofJI8nuYNqsvaTTvTLEL0lc6iZmDnaNk5WkPoHEIj2DlqQ+nsksPh\nehjCCoZDaIRBdZ4OPGXyUhF9066m+o/AdcDrgH8Cfg7sAhxdVR/urm5tSf6wpl1wNsnzquojXTXN\nJMlhwK7AqUw5PLe8DueCpbkMzItZ+xDdF3QWNYskmwH3p1kc6wd9u9zGJDtHy87RGkLnEBrBzlEb\nSmdXHA7XQ5pryr0H2L/d9A3g5dWTa97BMBphUJ0nAnsDpwE3t5urqo7srmq19nj5PwW2oVl5a6+q\n+lH7A/lXqup3u+ybLsl/Ad8HXs3qwwvvqKqndBo2TZK30JysfimwanL7kPYi90WSb9KcU3w2q1/L\nqqrPdVe1WpKn0PygMOOKyVX1+bFHzcDO0bJztIbQOYRGsHPUhtLZBy5Is0DtIYZvqqo+nW+2hiE0\nwnA6W59vPyb/QunbJTdWVtXFAEl+VFU/Aqiqa5L0cXnmPwBeRbOkdAGvr6pPdps0o6cCu0w5h7NX\nkjysqr49y2OHVdXHxt00h82r6uiuI+bwJJrvxR2AR9Iu6kRzKY5v0Pz57wM7R8vO0RpC5xAawc5R\nG0pn5xwOF6i9Ptd9ktytr7uhh9AIw+kEqKoPJ7kbsHu76aKeXRNnIsl2tENre5v2/kR3WbO6B/Aw\n4IfATsC9k6T6dyjDeTStP+86ZBYfSvJ1mkuXXA+QZC+aw4p/BfRpOPz3JAdW1cldh8ykqp4PkOQ0\nYM+quqq9v4xmyfNesHO07BytIXQOoRHsHLWhdPaBw+H6uQz4enuo4S3ttqqqd87xnHEbQiMMpDPJ\nY2j+8vhxu+ne7TlyZ3RXtYataQ7Xg2YgPHuOz+2DbwJvraoPJtkCeCvw3zTv5vXJPYCLknyb1ecc\nVvXnUhb70Bya+90kbwT2Ap4I/GVV/XunZWt7BXBMkjuAyTdWqqq27rBpJsuBq6fc/zlw745a5mLn\naNk5WkPoHEIj2DlqQ+nsjMPh+vlh+7GEZkn2vh1iCMNohOF0vhP4o6r6AUCS3YFP0/xw3rmq2rnr\nhgV6QlX9GKCqbgFenuQPOm6ayevbXyfPU5i83Qvt3us3J1lJc97mlcB+VXVlt2Vrq6otu26Ypy8D\npyaZXCTr6TTnGveNnaNl52gNoXMIjWDnqA2lszMuSCPNQ5Lv1ZoXTZ1xW9eSLAGeTXOe3P+X5N7A\nPavqzI7T1tAOgjOdEP61DnLmlGRn4H5V9eV2L+fSqrqx26pGmms1vae9exTwv4CXA39fVR/qLGwG\nA/reDHAo8Gia79GvVdUJ3Vatzc7RsnO0htA5hEawc9SG0tklh8MFSHLSlLtT9yRATw41G0IjDKdz\nUpLjgJXAx2lanw0s6dsy/En+mWYlyMdV1QPacw+/VFUP7ThtDUn+ndXD4WbAfsDZVfW47qrWluTP\naC6/sF1V7druMX5f9eRSK0kupTnf8DNTtu0IvAvYqap+r7O4aYbyvSlJ0sZsSdcBA/OO9uNHwK3A\nv9AcyvXrdlsfDKERhtM56S+AC4EjafbMnN9u65uHV9VLaV5Tquo6YJNuk9ZWVQdV1ZPajycAvwv0\n8RqSLwMeBdwI0K4Iu0OnRWvae+pgCFBVV1bV04E3dJM0q0F8byZ5SpJLktyY5Kb2oxd7iqeyc7Ts\nHK0hdA6hEewctb53Jtk1yXFJ/k+SrZK8P8n5ST7THsm0+A3uOVy4JGdX1b7r2talITTCcDqHIsm3\naBZ1Oauq9k6yPc3emb07TptTe5jHBVW1R9ctUyU5s6r2S3JO+3ouBb7Tt8OJh2Ao35tJfggcVFUX\ndt0yFztHy87RGkLnEBrBzlHre2ea60B/EtgWeA5wHPCvwBOAZ4/jCCsXpFk/WyTZtap+CJDkvsAW\nHTdNN4RG6HlnkvPmeLh6OCS8GzgB2CHJm4A/BV7XbdLakrx7yt0lwEPo5wqrZyT5a5rv0ycALwVO\nWsdzNLNBfG8CV/f1h4Zp7BwtO0drCJ1DaAQ7R63vnVtW1fsAkry0qt7ebv9gkpePI8DhcP28EvjP\nJJe193cG/qy7nBkNoRH63/mk9teXtr9+jNXnHPZOVX08ydnA5Dlxh/T0L8Gpg+AK4FNV9fWuYubw\nWuCFNNc7fAnwH8AHOi0aqAF9b56V5HjgC8Ad7baqqr5dINnO0bJztIbQOYRGsHPU+t6ZJPcHtqF5\nY/phVfXtJLsxptXSPax0PSXZDHgAzf+oi6qHF3EfQiMMozPJd6vqIdO2ndO3Q+IAkvw+zeqax7WH\n7m1ZVZet63kaniR3B+6sqjva+w+guc7h5T36h+4uSfalOYezgK9X1Xc6TlpLkg+3N9f4x7GqDh9/\nzezsHC07R2sInUNoBDtHre+dSZ4I/BPNtRiPoNkpsSnNUXUvqKovLnqDw+H6SfJIYBeava8FUFUf\n7TRqmiE0wjA6k5wLvGxy71aS3wP+afrA2LUkbwD2Be5fVbsnuRfwr31atRIgyaNoriG4M6uPYKiq\num9nUTNIszrpm4A9gc3bzb3pbM9NeEFVXZLmshbfpllRd0/g21X12k4Dp0jyt8BTgc/T7H0/BPhs\nVb2x0zBJknoqzWWgtgd+UVWrxvI1HQ4XLsnHgfsC36W5vAEAVTWWY4HnYwiNMKjOfWlOCt6m3XQ9\ncHjf9ny0Q+zeNJeF2Lvd1sfrMf4AeAXwHdb8/35tZ1EzSPLfNEPsO4GDgecDE1X1N112TUpyXlXt\n1d5+I80lN16WZFOahXN+t9vC1ZJcDDyoqm5r728OnFtVu3db1khydFW9ddr5sJOqqo4ce9QM7Bwt\nO0drCJ1DaAQ7R20onXNJ8oSqOm2xv47nHK6ffYE9q9+T9RAaYSCdVXU28KAk29C8qdLHyy4A3F5V\nq5rFP+9lnRalAAAgAElEQVQ67LCPrq+qU7qOmIfNq+rLSVJVlwNvSPIdoBfDIWseFvN44G0AVXVH\nkrG8w7gAP6PZ+3pbe38z4Kfd5azlgvbXmRZG6tPfT3aOlp2jNYTOITSCnaM2lM65fAhYvthfxOFw\n/XwfWAZc2XXIHIbQCAPpTHJP4O+Be1XVAUn2BB5RVR/sOG26zyQ5Ftg2zQXcX0A/F1D5zyRvoznE\n8K5zTPu2Jxa4LckEcGmSI2i+T/s0cJ+X5O00XbsCXwJIcg/694/djcD5Sb7U3n8CcGb7Lm4f3rW9\nX5L9gI9X1YqOW+Zi52jZOVpD6BxCI9g5aoPoTDLXiui/NY4Gh8P1sz1wQZIzWf2DbVXVwR02TTeE\nRhhO54dpDiv96/b+JTTXnenNcJhmd+HxNIv73ATsDvzNOA5BWA/70wwvD522/bEdtMzlFTQngR8J\nvBHYGnhep0VrejFwFHAf4I+q6uZ2+x7A22d9VjdOaD+K5pzDr0653YdBdifg/wJ7pLmEzdeBbwDf\nqKrrOi1bk52jZedoDaFzCI1g56gNpfNRwGHAr6dsm/y38uHjCPCcw/WQ5DEzbK6qOmPcLbMZQiMM\nqvOsqnro1BVKZ1rBtEvtcHhen84z03i05+/t2t69dPK8vj5pG+9H849cLxsBktyN5k2LRwCPbH+9\nvqr26DRsGjtHy87RGkLnEBrBzlHre2eSLwL/UFVfmeGxr1XVoxe7wT2H66Gqvjr1fppLBzwT6M1A\nM4RGGE4n8Oskd+3OT7I/cEOHPWupqkpydpL9qurMrntmkuSwqvpYklex5t6i0PwnvLOjtDW0h3VM\nvlM3XW/2bCfZhOZw5xcAP2k33zvJccAxVXVnZ3GtITROsznNHuJt2o8rge91WjQzO0fLztEaQucQ\nGsHOUet750uq6sezPPa6cQQ4HK6nJPvQDDFPAy4DPtdt0dqG0AiD6XwVcBJw3yTfoDkc9k+7TZrR\n/sBzkvwYmDzEsHq0WukW7a9b0Y9DCWezP81iKZ8CvtVumxwU+9T9NmBLYJequgkgydbAO2gOKz2q\nw7ZJQ2gkyftpLgFyE3AmzeFG76yqX3UaNo2do2XnaA2hcwiNYOeoDaWTZk2GY4G3V9VKuGvdi7fT\nnDKy72IHOBwuQJL70wwxTwd+AXyG5tDcx3TZNdUQGmFQnfeuqp9U1dlJHk1zPl+AH1R74fE+mOwE\n/pjZ93h1rqqObX99w/THkrxy7EGzW0azYMoz24+TgU9V1fmdVq3tIGD3mnLto6q6McmfAz+gH4PX\nEBoB7g3cjeZ84p+1H31cldjO0bJztIbQOYRGsHPUhtK5L/AW4LtJXgHsBbyS5o3W544jwHMOF6Bd\nGv7fgSPaH8RJcllV7dJt2WpDaIRBdU49x/BzVfWUrptmMpTOuSS5oqoWfYnmhWrPT3gmzbt2b6iq\n93ScdJckF9cs1wmc67FxGkLjpDQXG34gq89F2Qv4JfA/VfW3XbZNZedo2TlaQ+gcQiPYOWpD6QRo\nB8N30hz2+oiqumJcX9s9hwvzJzQ/JH6tPWH0M/RvD80QGmE4nVPdt+uAeRpKZ68l2Qw4EHgGsDPw\n/2hW2+yTC5M8r6o+MnVjksOAizpqmm4IjQC0ezfPS3I9zTnFN9Ls+Xw40JsfHOwcLTtHawidQ2gE\nO0dtCJ1pLkX1FprTW/5X+3FKkqOq6vSxNLjncOGSbAkcQjPcPBb4KHBCVX1pzieO0RAaof+d0/bI\n3XW7b4bSOZc+7TlM8jGadxf/Azi+qs7rOGlGSXaiuVbkray+sO++NOd2HlpVnV9kfgiNAEmOYvXK\ndStozkf57/bX70+e+9E1O0fLztEaQucQGsHOURtQ54+A9wHvqvZ6jEke0m67vKqeuegNDoe/mSTb\n0SxM8oyqelzXPTMZQiP0szPJSuCW9u7mND/gTqqq2nr8VWsbUOevmX1Bly2qamKcPbNpD3u+eZaH\ne/N6wl2XMHkczTBbwAXjendxvgbS+C6a6159s6qu7LpnNnaOlp2jNYTOITSCnaM2oM7lMx1C2v47\n+uKq+pdFb3A4lCRJkiQt6TpAkiRJktS9jW9BmltuGNtqP7+BZcBVXUfMg52jNYTOITTCUDqrhtEJ\ny0j631mrBvJ6Zhiv55239f/1XHq3YbyWfm+O2kBeTztHavUVkXpsMH+GYIttZlznwT2HkiRJkiSH\nQ0mSJEmSw6EkSZIkCYdDSZIkSRIOh5IkSZIkHA4lSZIkSTgcSpIkSZJwOJQkSZIk4XAoSZIkScLh\nUJIkSZKEw6EkSZIkCYdDSZIkSRIOh5IkSZIkHA4lSZIkSTgcSpIkSZLo6XCYZCLJOUlOau9vl+S0\nJBcn+VKSbWd53gFJLkpySZKjx1stSZIkScPVy+EQOAq4AKj2/muB06pqd+D09v4akkwA7wEOAPYE\nnplkj/HkSpIkSdKw9W44TLIT8ETgA0DazQcDH2lvfwR48gxP3Q+4tKour6o7gU8DhyxyriRJkiRt\nEHo3HALvAl4DrJqy7Xeq6uft7Z8DvzPD8+4FXDHl/k/bbZIkSZKkdejVcJjkIOCaqjqH1XsN11BV\nxerDTdd4aDHbJEmSJGlDtrTrgGkeCRyc5InAZsDWST4G/DzJPavq6iTLgGtmeO7PgOVT7i+n2Xso\nSZIkSVqHXu05rKpjqmp5Ve0CPAP4SlUdBpwIPK/9tOcBX5jh6WcBuyXZOcmmwNPb50mSJEmS1qFX\nw+EMJg8VfQvwhCQXA49r75NkxyQnA1TVCuAI4FSalU6Pr6oLx58sSZIkScPTt8NK71JVZwBntLev\nA/5whs+5Ejhwyv1TgFPG1ShJkiRJG4q+7zmUJEmSJI2Bw6EkSZIkyeFQkiRJkuRwKEmSJEnC4VCS\nJEmShMOhJEmSJAmHQ0mSJEkSDoeSJEmSJBwOJUmSJEk4HEqSJEmScDiUJEmSJOFwKEmSJEnC4VCS\nJEmShMOhJEmSJAmHQ0mSJEkSkKrqumG8brlhRdcJ8zABrOw6Yh7sHK3+d1b1v7ExQdL/zhV3DOP1\nnNhkGK/nrTcP4/W82+YTLFnS+8761dUTUP3u3Hr7iSyZ6HcjwIrbh/G9ufRuw/izPoR/LxvD6BzK\nv+133Np1wbptutkE6f/f7wBssc3SmTbPuHEDd1XXAfOwDDtHyc7RGUIj2DlqA+qs/ndmQK9n9f71\nHM5raeco2TlaQ+kcgsG/lh5WKkmSJElyOJQkSZIkORxKkiRJknA4lCRJkiThcChJkiRJwuFQkiRJ\nkoTDoSRJkiQJh0NJkiRJEg6HkiRJkiQcDiVJkiRJOBxKkiRJknA4lCRJkiThcChJkiRJwuFQkiRJ\nksSYh8MkE0nOSXJSe3+7JKcluTjJl5JsO8vzDkhyUZJLkhw9y+cckuTc9vc/O8njFvO/RZIkSZI2\nJOPec3gUcAFQ7f3XAqdV1e7A6e39NSSZAN4DHADsCTwzyR4z/N5frqoHV9XewPOBfxl9viRJkiRt\nmMY2HCbZCXgi8AEg7eaDgY+0tz8CPHmGp+4HXFpVl1fVncCngUOmf1JV3Tzl7pbAtSNKlyRJkqQN\n3jj3HL4LeA2wasq236mqn7e3fw78zgzPuxdwxZT7P223rSXJk5NcCJwCHPkbF0uSJEnSRmIsw2GS\ng4BrquocVu81XENVFasPN13jofl+nar6QlXtATwJ+Nj6tEqSJEnSxmjpmL7OI4GDkzwR2AzYOsnH\ngJ8nuWdVXZ1kGXDNDM/9GbB8yv3lNHsPZ1VV/5VkaZLfqqpfjui/QZIkSZI2WGPZc1hVx1TV8qra\nBXgG8JWqOgw4EXhe+2nPA74ww9PPAnZLsnOSTYGnt89bQ5Jdk6S9vU/7dR0MJUmSJGkexrXncLrJ\nQ0XfAvxrkhcClwNPA0iyI/D+qjqwqlYkOQI4FZgAPlhVF7af9xKAqjoWeArw3CR3Ar+mGUIlSZIk\nSfMw9uGwqs4AzmhvXwf84QyfcyVw4JT7p9AsMjP9846dcvsfgH9YhGRJkiRJ2uCN+zqHkiRJkqQe\ncjiUJEmSJDkcSpIkSZIcDiVJkiRJOBxKkiRJknA4lCRJkiThcChJkiRJwuFQkiRJkoTDoSRJkiQJ\nh0NJkiRJEg6HkiRJkiQcDiVJkiRJOBxKkiRJknA4lCRJkiThcChJkiRJAlJVXTeM1y03rOg6YR4m\ngJVdR8yDnaPV/87bb52A6ncjwKabTZAlve+sW26coAbwem6+1USW9P/1XHXZeRPUqt535t57TGTp\npr3vXPmJd0ywckWvO5cc+pKJ3H2rXjcC1K03DePP+hbbDOLPOkP497IxjM47bxtEZ912c9cJ63b3\nbSeyZKL3ryUAW2yzdKbNM27cwF3VdcA8LMPOUbJzdIbQCHaO2nA6V60cRucQXs+qZdx2S987h/Fa\n2jlqdo7WUDoHIIN/LT2sVJIkSZLkcChJkiRJcjiUJEmSJOFwKEmSJEnC4VCSJEmShMOhJEmSJAmH\nQ0mSJEkSDoeSJEmSJBwOJUmSJEk4HEqSJEmScDiUJEmSJOFwKEmSJEnC4VCSJEmShMOhJEmSJIme\nDodJJpKck+Sk9v5Tk5yfZGWSfeZ43gFJLkpySZKjx1csSZIkScPWy+EQOAq4AKj2/nnAocDXZntC\nkgngPcABwJ7AM5PsscidkiRJkrRB6N1wmGQn4InAB4AAVNVFVXXxOp66H3BpVV1eVXcCnwYOWdRY\nSZIkSdpA9G44BN4FvAZYtcDn3Qu4Ysr9n7bbJEmSJEnr0KvhMMlBwDVVdQ7tXsMFqHV/iiRJkiRp\nJr0aDoFHAgcnuQz4FPC4JB+d53N/Biyfcn85zd5DSZIkSdI69Go4rKpjqmp5Ve0CPAP4SlU9d9qn\nzbZH8SxgtyQ7J9kUeDpw4iLmSpIkSdIGo1fD4QwKIMmhSa4A9gdOTnJKu33HJCcDVNUK4AjgVJqV\nTo+vqgu7yZYkSZKkYVnadcBsquoM4Iz29gnACTN8zpXAgVPunwKcMq5GSZIkSdpQ9H3PoSRJkiRp\nDBwOJUmSJEkOh5IkSZIkh0NJkiRJEg6HkiRJkiQcDiVJkiRJOBxKkiRJknA4lCRJkiThcChJkiRJ\nwuFQkiRJkoTDoSRJkiQJh0NJkiRJEg6HkiRJkiQcDiVJkiRJOBxKkiRJkoBUVdcN43XLDSu6TpiH\nCWBl1xHzYOdo9b6zbr5+gqpeNwKwxTYTWbKk952rLvifCWpV7zuz+74T2eRuve+87egXTXDn7b3v\nvNvf/r+JbLtd7ztfu9tDJ+rXN/a6839/80sT2y7bodeNACsv+OYg/u5c8ruPmsimm/W+kwH8e9ka\nRGfddN0gvj9XnX161wnrtOQRB01ksy16/1oCsMU2S2faPOPGDdxVXQfMwzLsHCU7R2cIjTCkzpUr\nhtE5hNezVi3j5l/3v3Mgr2etYtkNN97a884axGtJsYwVd/a/cyDfm9g5asug+t955+1dF8zHUP6f\nz8rDSiVJkiRJDoeSJEmSJIdDSZIkSRLzGA6TPCXJJUluTHJT+3HjOOIkSZIkSeMxnwVp/gE4qKou\nXOwYSZIkSVI35nNY6dUOhpIkSZK0YZvPnsOzkhwPfAG4o91WVfX5xcuSJEmSJI3TfIbDbYBbgT+a\ntt3hUJIkSZI2EOscDqvq+WPokCRJkiR1aD6rlS5PckKSX7Qfn0uy0zjiJEmSJEnjMZ8FaY4DTgR2\nbD9OardJkiRJkjYQ8xkOt6+q46rqzvbjw8AOi9wlSZIkSRqj+QyHv0xyWJKJJEuTPAe4drHDJEmS\nJEnjM5/h8AXA04CrgauApwKHL2aUJEmSJGm81jkcVtXlVfWkqtq+/Tikqn6yPl+s3ft4TpKT2vtP\nTXJ+kpVJ9pnjeQckuSjJJUmOnuVzHpDkm0luS/Kq9emTJEmSpI3VrJeySHJ0Vb01ybtneLiq6sj1\n+HpHARcAW7X3zwMOBY6do2MCeA/wh8DPgG8nObGqLpz2qb8EXg48eT26JEmSJGmjNtd1Di9ofz0b\nqPZ22l9r7U+fW3v5iycCfw/8JUBVXdQ+NtdT9wMurarL28/9NHAIsMZwWFW/AH6R5MCFtkmSJEnS\nxm7W4bCqTmp//fDktnYv3pZVdcN6fK13Aa8Btl7g8+4FXDHl/k+Bh6/H15ckSZIkzWKd5xwm+WSS\nrZPcneYw0AuS/NVCvkiSg4BrquocVu99nK8F76WUJEmSJC3MfFYrfWBV3UhzLt8pwM7AYQv8Oo8E\nDk5yGfAp4HFJPjrP5/4MWD7l/nKavYeSJEmSpBGZz3C4NMkmNMPhSVV1Jwvcm1dVx1TV8qraBXgG\n8JWqeu60T5ttj+JZwG5Jdk6yKfB04MQ5vtxC90xKkiRJ0kZvPsPhscDlwJbA15LsDKzPOYdTFUCS\nQ5NcAewPnJzklHb7jklOBqiqFcARwKk0i+QcP7lSaZKXJHlJe/ue7e/1SuB1SX6SZMvfsFOSJEmS\nNgpzrVZKkiXAz6vqXlO2/Rh47Pp+wao6AzijvX0CcMIMn3MlcOCU+6fQHNI6/fOOnXL7atY8/FSS\nJEmSNE9z7jmsqlXAX03bVu3ePEmSJEnSBmI+h5WeluTVSZYn2W7yY9HLJEmSJEljM+dhpa1n0Jwj\n+LJp23cZfY4kSZIkqQvrHA6raucxdEiSJEmSOrTOw0qT3D3J3yR5f3t/t/ai9pIkSZKkDcR8zjk8\nDriD5kL2AFcCf79oRZIkSZKksZvPcLhrVb2VZkCkqm5e3CRJkiRJ0rjNZzi8PckWk3eS7ArcvnhJ\nkiRJkqRxm3VBmiTvBT4JvIHmAvQ7Jfkk8HvA88cRJ0mSJEkaj7lWK70YeBuwI/Al4HTgO8CRVXXt\nGNokSZIkSWMy62GlVfV/q+oRwB8APwT+BHgH8LIku4+pT5IkSZI0Bus857CqLq+qt1TVQ4BnAIcC\nFy56mSRJkiRpbOZzncOlSQ5uzzf8InARzV5ESZIkSdIGYq4Faf6IZk/hgcCZwKeAP6uqX4+pTZIk\nSZI0JnMtSPNamoHw1VV13Zh6xmFZ1wHzMIGdo2TnqCxZOkGt6ndjo/+vJcAmm0xA9b+TDOL1rNvu\nnKhb7+h/Z9VEBvB63nezpRM3bra0151LJyYmSHrdCECt8u/O0bJzpGoY/xZVdV0wHwP5fz67WYfD\nqnrcOEPG6KquA+ZhGXaOkp0jElhG0utGANL/17I1jNdzAN+bLTtHKGHZ0v5/fw7jz9CQ/k6yc5Ts\n3PgM/rVc5zmHkiRJkqQNn8OhJEmSJMnhUJIkSZLkcChJkiRJwuFQkiRJkoTDoSRJkiQJh0NJkiRJ\nEg6HkiRJkiQcDiVJkiRJOBxKkiRJknA4lCRJkiThcChJkiRJwuFQkiRJkoTDoSRJkiQJh0NJkiRJ\nEmMeDpNMJDknyUnt/acmOT/JyiT7zPG8A5JclOSSJEfP8jnPTnJuku8l+e8kD1qs/w5JkiRJ2tCM\ne8/hUcAFQLX3zwMOBb422xOSTADvAQ4A9gSemWSPGT71R8Cjq+pBwBuBfxlhtyRJkiRt0MY2HCbZ\nCXgi8AEgAFV1UVVdvI6n7gdcWlWXV9WdwKeBQ6Z/UlV9s6puaO9+C9hpZPGSJEmStIEb557DdwGv\nAVYt8Hn3Aq6Ycv+n7ba5vBD4jwV+HUmSJEnaaI1lOExyEHBNVZ1Du9dwAWrdn7LG13os8AJgxnMT\nJUmSJElrWzqmr/NI4OAkTwQ2A7ZO8tGqeu48nvszYPmU+8tp9h6upV2E5v3AAVX1q9+wWZIkSZI2\nGmPZc1hVx1TV8qraBXgG8JUZBsPZ9iieBeyWZOckmwJPB06c/klJ7g18HnhOVV06wnxJkiRJ2uB1\ndZ3DAkhyaJIrgP2Bk5Oc0m7fMcnJAFW1AjgCOJVmpdPjq+rC9vNekuQl7e/5t8A9gPe1l8s4c6z/\nRZIkSZI0YOM6rPQuVXUGcEZ7+wTghBk+50rgwCn3TwFOmeHzjp1y+0XAixYhWZIkSZI2eF3tOZQk\nSZIk9YjDoSRJkiTJ4VCSJEmS5HAoSZIkScLhUJIkSZKEw6EkSZIkCYdDSZIkSRIOh5IkSZIkHA4l\nSZIkSTgcSpIkSZJwOJQkSZIk4XAoSZIkScLhUJIkSZKEw6EkSZIkCUhVdd0wXrfcsKLrhHmYAFZ2\nHTEPdo5W/ztXrZqA6ncjQJZMkPS+s+64bYIVd/a+k823nMgAXs9V1105wQ3X974z977/RCYmet+5\n8sofTtxyzbW97tzyd/eeyJL+v5a1csUEd97e+04232oQf9YZwr+XjUF01m03T1Cret/JigH8CL/l\nNhPJkv6/lgBbbLN0ps0zbtzAXdV1wDwsw85RsnNUkmWQfjc2+v9aAoFlLN2k950M5fXMkmVss23v\nO8kwXs8lS5Ys23KH3+p75zLS/7+Tkiz7/9u78yhNqvKO49/fNOAAA8MqMouDKC4kuB0lkRMMrpkg\ngokacEOiETVucQEFF4hoosGgHj2K0YhAgEEUjluIikZA44ZBUAEF2QaGbQAHwoACc/PHvc3UvLxv\nd8/Q3dPv8P2cU4e36lbdemqlnr63athk9oyPkyG51jHOSRWyI5k14+PkIZuu7wgmIENxzMdit1JJ\nkiRJksmhJEmSJMnkUJIkSZKEyaEkSZIkCZNDSZIkSRImh5IkSZIkTA4lSZIkSZgcSpIkSZIwOZQk\nSZIkYXIoSZIkScLkUJIkSZKEyaEkSZIkCZNDSZIkSRImh5IkSZIkZmhymGQkyflJvtbGj05ycZIL\nkpyeZO6A5RYnuSTJpUneOb1RS5IkSdLwmpHJIfAW4CKgtPFvAX9USnkC8BvgsN4FkowAnwQWA7sC\nL0nyuOkJV5IkSZKG24xLDpMsAPYGPgcEoJTy7VLKqjbLj4EFfRbdHbislHJlKeVuYAmw3zSELEmS\nJElDb8Ylh8BHgUOAVQPKXwX8Z5/p84GlnfFr2jRJkiRJ0jhmVHKYZB/gxlLK+bRWw57ydwN/KKWc\n3Gfx0meaJEmSJGkCNlrfAfTYA9g3yd7AbGDLJCeUUg5MchC1u+mzBix7LbCwM76Q2nooSZIkSRrH\njGo5LKUcXkpZWEp5BHAA8N2WGC6mdjXdr5Ry14DFzwN2SbJTkk2A/YGvTk/kkiRJkjTcZlRy2COs\n7ir6CWAO8O32T1x8CiDJvCTfACil3AO8Efgm9Uunp5ZSLp7+sCVJkiRp+My0bqX3KaV8D/he+73L\ngHmWAc/rjJ8JnDkN4UmSJEnSBmUmtxxKkiRJkqaJyaEkSZIkyeRQkiRJkmRyKEmSJEnC5FCSJEmS\nhMmhJEmSJAmTQ0mSJEkSJoeSJEmSJEwOJUmSJEmYHEqSJEmSMDmUJEmSJGFyKEmSJEnC5FCSJEmS\nhMmhJEmSJAmTQ0mSJEkSkFLK+o5heq1ccc/6DmECRoB713cQE2Cck2vmx3nPH2Z+jAAjG4+QzPw4\ny6oRSpn5cWbWUOzPsvK2EVbdO+PjZLO5I5k1a8bHWX6/cubvz9mbj4SZf24OzbU+a2QornWG4f+X\n1XDEWcoIDMH5OQwpSzIs1xBsNnejfpP7TtzAXbe+A5iAHTHOyWSck2cYYoRhijMZjjiHZn/OGo44\nh2B/huzIrJGZHudwXENlSOIcknMT45xcyY4wDOfnMGSHQ3LMx2C3UkmSJEmSyaEkSZIkyeRQkiRJ\nkoTJoSRJkiQJk0NJkiRJEiaHkiRJkiRMDiVJkiRJmBxKkiRJkjA5lCRJkiRhcihJkiRJwuRQkiRJ\nkoTJoSRJkiQJk0NJkiRJEiaHkiRJkiSmITlMMpLk/CRf65n+9iSrkmwzYLnFSS5JcmmSd05gPU9P\n8r9J7k7ywsmKX5IkSZIeDKaj5fAtwEVAGZ2QZCHwHOCqfgskGQE+CSwGdgVekuRx46znKuCVwMmT\nELMkSZIkPahMaXKYZAGwN/A5IJ2iY4BDx1h0d+CyUsqVpZS7gSXAfq3O1yT5SZKfJ/lSkk0BSilX\nlVJ+Aayaim2RJEmSpA3ZVLccfhQ4hE7ClmQ/4JpSyoVjLDcfWNoZv6ZNA/hyKWX3UsoTgYuBV09u\nyJIkSZL04LPRVFWcZB/gxlLK+Un2atM2Aw6ndim9b9Y+i5c+00btluQDwFxgDvDNyYlYkiRJkh68\npiw5BPYA9k2yNzAb2BI4AdgJuCAJwALgZ0l2L6Xc2Fn2WmBhZ3whtfUQ4AvAvqWUXyR5JbBXn3WP\nlVxKkiRJknpMWbfSUsrhpZSFpZRHAAcA3y2lvKiUskMp5RFt+jXAk3sSQ4DzgF2S7JRkE2B/4Kut\nbA5wfZKNgZf3WXXo3xopSZIkSRpgOv+dw36ted0vmM5L8g2AUso9wBupXUYvAk4tpVzcZn0v8GPg\n+9R3Dktb/qlJlgIvAj6T5BdTtSGSJEmStKGZym6l9ymlnA2c3Wf6zp3fy4DndcbPBM7ss8yxwLF9\npv+UNbuiSpIkSZImaDpbDiVJkiRJM5TJoSRJkiTJ5FCSJEmSZHIoSZIkScLkUJIkSZKEyaEkSZIk\nCZNDSZIkSRImh5IkSZIkTA4lSZIkSZgcSpIkSZIwOZQkSZIkYXIoSZIkScLkUJIkSZKEyaEkSZIk\nCZNDSZIkSRKQUsr6jkGSJEmStJ7ZcihJkiRJMjmUJEmSJJkcSpIkSZIwOZQkSZIkYXIoSZIkScLk\nUJIkSZKEyaEkSZIkCZNDSZIkSRImh5I09JK8PskNSW5LsvV6jOP2JDutr/WvqyQHJTn3ASy/Q5Jz\n2v4/ejJjm+D6r0zyrCmo99NJ3jPZ9c4kSfZMcskU1X1ckluS/GiS690rydLO+KQf/951SHrwMDmU\nNJT6PRA90If8nrpWJdl5MuqaSkk2Bv4VeFYpZctSyq2dstlJfpfkGX2W+2iS0yYzllLKFqWUKyez\nzsmS5Mgkd7cE9tYkP0jyp+tYz4k9kw8Gbmz7/5DJiXitlDZMbqWlvL6U8oHJrnd96r2uSynnllIe\nOxLnhGIAAAt9SURBVAXr2RN4NjCvlLLW59lampLjL+nByeRQ0rCajgeiTHH9k+FhwGzg4t6CUspd\nwBLgwO70JCPAAcAX1mZFbblhVYBTSilbANsD3wdOn6S6F9Fn/09Eko0mKQZN3HRc14uAK9s1KElD\nw+RQ0oZkjWQxybwkX05yY5LLk7ypU7Z7kh+2VqRlST7RWuFIck6b7YLW0vTi1s3qmiSHtPqWJXlB\nkr2T/CbJzUneNZH6W/mqJG9K8tskNyX5lyR9H1qTPCTJx5Jc24aPJtkkyaNZnZT8LslZfRY/Hnhh\nkk070/6Cev8/M8ncJP/eYrwmyVFJZrX1HtRa2I5Jshw4IsmjkpzdWiRvSrKkZ5t2br/nJjmh7asr\nk7x7dPtavd9PcnTrdnd5ksUDtv2dvS2cST6e5OOdun7bunRenuSl/eqhJgQBKKXcA5wAPCzJNn3W\n+fEkVydZkeS8JH/Wpi8GDgP2b+fFz5McR02+D23TntmOzf2OV6tj9Dw6NMl1wOeTHJHktCQntu24\nMMkuSQ5L7S58VZLnDNiuUU9KckE7LkuSPKStb6skX2/H4ZYkX0syv5Xtn+SnPdv+1iRfab+/kOSo\nnrjf1mJaluSgznLbtrpXJPlJkg9kQCt+kp3auXJg27abkhzeKU+SdyW5LMnyJKem0126s9zyJO9J\npxdB1u26XtrKxzvXBl4rPcu8Gvgs8LS2niPa9H3aOTPacr1bZ5mx7lWbtmNxS5JfAU/ts1t3T/Kr\nNs/nJ3L8W/k2qd1fr23lZww4Zm9u9c/rVy5pA1JKcXBwcBi6AbiC2pWyO+0g4Nz2exbwM+A9wEbA\nI4DfAs9t5U8Gdm/zLQIuAt7SqWsVsHNnfC/g7lbfCPB3wHLgJGBzYFdgJbBoLer/DrAVsBD4NfDq\nAdv6fuB/gO3a8APg/a1sUatr1hj76tfAyzrjpwDHtN9nAJ8GNqW2qP0YOLizP+8G3tC2Y3Zb9rBW\nvgmwR799Rk2+zmj7ZlGL4VWdev8AvJqasL0OuHZA7A8H7gDmtPERYFnbt5sDK4BdWtkOwK4D6jkS\nOLH9fghwNLVlZ43zpo2/DNi6bfPbgOuATVrZEcAJPXUfN3o8JnC8Rs+jfwY2bvv0SOBO4Dlt+44H\nrqQmoqPn2uVjHN8rgR9RW5G3pp5rr21l2wB/1dYzB/gicEYr2wy4DXhUp66fAn/Tu12duI9sMf1l\nOy5zW/kS4OS2nscBVwPnDIh3p3aufKYdi8cDdwGPaeVvaftvXttHxwInt7JdgduBPVrZ0dRz6ZkP\n4Lpe2rmW+p5r410rfbbxlax5Tj0JuIGa2IX6B4Ur2jaMd6/6EHA29V6xAPglcHXP8b8QmN+O//eB\no8Y7/q38G9Rrem5b95599sv7gPOAbaf7Pu/g4DD9w3oPwMHBwWFdhvZAdDtwa2e4Y/SBFPgT4Kqe\nZQ4DPj+gvn8ATu+M93uIXAmkjW/R5nlqZ57zgP3Wov7ndsZfD5w1YNnLgMWd8ecCV7TfOzF+cvhu\n4Jvt95ZtPz2BmkzdBczuzPsS4Lvt90F99uHx1If6+X3WswrYmfpQ/XvgsZ2yg4H/7tR7aadss7bs\nQwfEfy7wivb7OcBl7ffm7bj/NbDpOOfLkS2mW6kP6WcBT+rEc+4Yy94C7Nap58Se8uNoD+MTOF57\ntTg26Yntm53x51PP7d5zbcsB8V0BvLQz/mHg0wPmfSJwS2f8ROC97fcu1GRxdu92sfr8n9VZ9gZq\nIjZCTdB26ZQdNWifsvqcndeZ9mNWJ6UX05K9Nr5jq3+Emqic1CnbtO3PZw5Y10Su66UTONfGvFb6\nrHeNc4qaVL6/Z55LgKczzr2KTqLYxl/TE/MVdJJUauJ+2XjHv+3Xe2kJfs98ewHXAMcA5wBbjHV9\nOTg4bDiD3UolDatCTcS2Hh2Av2f1+0SLgHmtC9etSW6lPnA9FCDJo1t3q+uSrAA+CGw7zjpvLqWU\n9vvO9t8bOuV3UhOWidbf/Rrg1dSWkn7mAVdNcN5+/gN4RpIdgRdRHxwvoO6jjYHrOvvoWGqrSL8Y\nAQ6l7uOfJPllkr/ts77tWr29Mc/vjF8/+qOUsrL9nDMg/pOpD+IAL6W21lJKuQPYn9ryuKzt78cM\nqAPg1Hau7FBKeXYp5fx+MyV5R5KLWhfNW6mtKtuNUW+v8Y7XTaWUP/Qsc2Pn953A8j7n2qD9A539\n2eafA5BksySfaV0vV1BboOYm93Vh7t23Z5TB78ndXEpZ1Rlf2dazPbXVqXuuXDNGrP1iHq0L6nl5\nRuecvAi4h5qg7ditu5RyJ3Dz6Pg6Xtddfc81JnatjGUR8Pae+9GCtj1j3quo507vvaJX33vJOMd/\nITVRXDEg5q2ordYfKqXcPsHtlDTkTA4lbUi67+wtpbbWbN0Ztiyl7NPKP0196HxUKWUutXVtMu+J\nE6n/4T2/rx1Q1zJqa0t33mUTDaSUchW1ReTlbTi+FS2ltrps29lHc0spu3UX76nrhlLKwaWU+cBr\ngU/l/l91XU7tgtgb80QShn6+BOzV3pV6AfUBfjSeb5VSnkvtUnkJ9V2vfgoT+BBJ6lcmDwFeXErZ\nqv3RYUVn2TJw4dXGO169dUykznX1duDR1K6Rc4E/p/P+JbUFdfskT6B+pOjknuUnEttN1ORtYWfa\nwgHzTsTV1JbX7rW7WSllGbWL74LRGVPfpe0mfw/0uh50rk3kWhlvmz7Ys01zSimntrKx7lXXcf97\nRa9B95Kxjv9SYJskcwfEfCuwD3Bckj0muJ2ShpzJoaQN1U+A21M//LFpkpEkf5zkKa18DrXr3sok\nj6V26+y6AXjkA1j/ePUDvKN9MGIh8Gbg1AF1nQK8J8l2Sbajdq3r/ecUxnM88Cbqu1qjLW/XAd8C\njkmyRZJZSR6Z5OmDKmkf8Rh9OP8dNXnotiZRSrmX+m7TB5PMSbIIeCu1BXOtlVJuAr5H/brq5aWU\nX7dYHppkvySbU5PRO6jd5PqGPsHVbUFNdJanfljmfdSuuKOuB3bqtLz1q3ttj9dUfj1zDrUlcUXq\nx3eO6BaWUu4GTgM+Qn1f7ds9cY0bWzvepwNHtmvtscArWPek91jgn5I8HCDJ9kn2bWVfAp6f5Gmp\nH/k5sifGB3RdDzrX1uVa6fFZ4HWpH8xJks2TPC/JHMa/V30ROKzdKxZQr+OuAG9IMr8d43ez+l4y\n8Pi3bTqT+geerZJs3Ls9pZRzqO/gnp6k34dwJG1gTA4lbUhKG0YfWPehvmNzObV1499Y/aD/Dmq3\nsdva9CWs+TB7JHB86+b1om7dPesbZLz6Ab5C/RDF+cDXgc8PqOsD1PcZL2zDeW3aROIY9WXqw/93\nSindrrAHUj8scxH13brTqK1wo/X21v0U4EdJbm/xv7ms/rcNu/O+iZqsXU5ttTyJ+g7boHrH24aT\ngWexZsvWLGrSeS21a+Ge9E/CB62zX9l/teE31Pda72TNbnyjX7O8Ocl5A+pe2+M1kf2xNolWt76P\nUd/LW079yMuZfeoa3ben9XQb7Y1rrBjeSO1+ez31DxGnUN8THCvGQT4OfBX4VpLbgB9S322klHIR\n9dxaQm2NvZ3aJff3bdnJuK77nWsw9rXSb/vuq7eU8jPqu4KfbMte2uqj7fOx7lX/SO2mfAX13DyB\n+x+Xk6jJ629b3aPn23jH/xXUP6xcQk2c39xTL6WUs4BXAV9L8sQB2ytpAzH6srskaRolWUXt+nb5\n+o5FmmxJPkz9wFC/d1Incz1zqN0fH9W6T0uSHgBbDiVJ0gOS5DFJHt+6TO5ObWnq+2/mTcK6nt8+\ntLI5tTvshSaGkjQ5TA4laf2w24Y2JFtQuy7/H7Ur50dKKV+donXtS+1KfC31/cEDpmg9kvSgY7dS\nSZIkSZIth5IkSZIkk0NJkiRJEiaHkiRJkiRMDiVJkiRJmBxKkiRJkoD/B0Vi2MugE5e7AAAAAElF\nTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f3dc0e7ef10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Resources:\n",
"#http://stackoverflow.com/questions/14391959/heatmap-in-matplotlib-with-pcolor\n",
"#https://plot.ly/python/heatmaps/\n",
"\n",
"fig, ax = plt.subplots()\n",
"heatmap = ax.pcolor(pt1, cmap=plt.cm.Reds, alpha=0.89)\n",
"\n",
"# Format\n",
"fig = plt.gcf()\n",
"fig.set_size_inches(15,5)\n",
"\n",
"# turn off the frame\n",
"ax.set_frame_on(False)\n",
"\n",
"# put the major ticks at the middle of each cell\n",
"ax.set_yticks(np.arange(pt1.shape[0]) + 0.5, minor=False)\n",
"ax.set_xticks(np.arange(pt1.shape[1]) + 0.5, minor=False)\n",
"\n",
"# want a more natural, table-like display\n",
"ax.invert_yaxis()\n",
"ax.xaxis.tick_top()\n",
"\n",
"# Set the labels\n",
"ax.set_xticklabels(pt1.columns, minor=False)\n",
"ax.set_yticklabels(pt1.index, minor=False)\n",
"\n",
"# rotate the x labels\n",
"plt.xticks(rotation=90)\n",
"\n",
"ax.grid(False)\n",
"\n",
"# Turn off all the ticks\n",
"ax = plt.gca()\n",
"\n",
"for t in ax.xaxis.get_major_ticks():\n",
" t.tick1On = False\n",
" t.tick2On = False\n",
"for t in ax.yaxis.get_major_ticks():\n",
" t.tick1On = False\n",
" t.tick2On = False\n",
" \n",
"# name the axes and plot\n",
"ax.set_xlabel('Platform')\n",
"ax.set_ylabel('Version') \n",
"ax.xaxis.set_label_position('top')\n",
"plt.title('Heatmap of Version vs Platform having negative feedback',y=-0.08)\n",
"\n",
"handles, labels = ax.get_legend_handles_labels()\n",
"#lgd = ax.legend(handles, labels, loc='upper center', bbox_to_anchor=(0.5,-0.1))\n",
"#fig.savefig('heatmap.png', bbox_extra_artists=(lgd,), bbox_inches='tight')\n",
"#fig.savefig('fig5.png', bbox_inches='tight')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Voila! Here is our much-waited heatmap!<br/>\n",
"#### Some observations:\n",
"1. Version 41.0.1 is in general problematic with a lot of platforms, Windows 7 and 10 in general.<br/>\n",
"2. Version 41.0.2 (which seems to be an updated version of 41.0.1) has comparatively lesser number of issues, but users are still facing problems. So it will have to be looked into.\n",
"3. Firefox probably works best with Linux, as it has a remarkably low negative feedback count.\n",
"\n",
"### Repeating the heatmap process for positive feedback\n"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>platform</th>\n",
" <th>Android 4.1.2</th>\n",
" <th>Android 4.2.2</th>\n",
" <th>Android 5.1.1</th>\n",
" <th>CrOS i686 3912.101.0</th>\n",
" <th>FC Linux i686</th>\n",
" <th>Fedora</th>\n",
" <th>Linux</th>\n",
" <th>Maemo</th>\n",
" <th>OS X</th>\n",
" <th>Windows 10</th>\n",
" <th>Windows 2000</th>\n",
" <th>Windows 7</th>\n",
" <th>Windows 8</th>\n",
" <th>Windows 8.1</th>\n",
" <th>Windows NT</th>\n",
" <th>Windows Vista</th>\n",
" <th>Windows XP</th>\n",
" </tr>\n",
" <tr>\n",
" <th>version</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>10.0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10.0.2</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11.0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>8</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12.0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>8</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13.0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>7</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>5</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"platform Android 4.1.2 Android 4.2.2 Android 5.1.1 CrOS i686 3912.101.0 FC Linux i686 Fedora Linux Maemo OS X Windows 10 Windows 2000 Windows 7 Windows 8 Windows 8.1 Windows NT Windows Vista Windows XP\n",
"version \n",
"10.0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 1 1\n",
"10.0.2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1\n",
"11.0 0 0 0 0 0 0 0 0 0 0 0 8 2 0 0 0 6\n",
"12.0 0 0 0 0 0 0 0 0 0 0 0 8 3 0 1 0 10\n",
"13.0 0 0 0 0 0 0 0 0 0 0 0 7 5 0 0 0 5"
]
},
"execution_count": 103,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pt2 = pd.pivot_table(data[(data.sentiment=='Happy') & (data.version!='Unknown') & (data.platform!='Unknown')], \n",
" index='version', values='dummy', columns='platform', aggfunc=np.sum, fill_value=0)\n",
"pt2.head()\n",
"#use pt2 to look at the entire pivot table"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>platform</th>\n",
" <th>Android 4.1.2</th>\n",
" <th>Android 4.2.2</th>\n",
" <th>Android 5.1.1</th>\n",
" <th>CrOS i686 3912.101.0</th>\n",
" <th>FC Linux i686</th>\n",
" <th>Fedora</th>\n",
" <th>Linux</th>\n",
" <th>Maemo</th>\n",
" <th>OS X</th>\n",
" <th>Windows 10</th>\n",
" <th>Windows 2000</th>\n",
" <th>Windows 7</th>\n",
" <th>Windows 8</th>\n",
" <th>Windows 8.1</th>\n",
" <th>Windows NT</th>\n",
" <th>Windows Vista</th>\n",
" <th>Windows XP</th>\n",
" </tr>\n",
" <tr>\n",
" <th>version</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>40.0.3</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>8</td>\n",
" <td>12</td>\n",
" <td>0</td>\n",
" <td>45</td>\n",
" <td>0</td>\n",
" <td>10</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41.0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>0</td>\n",
" <td>21</td>\n",
" <td>51</td>\n",
" <td>0</td>\n",
" <td>110</td>\n",
" <td>6</td>\n",
" <td>36</td>\n",
" <td>1</td>\n",
" <td>8</td>\n",
" <td>33</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41.0.1</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>22</td>\n",
" <td>0</td>\n",
" <td>38</td>\n",
" <td>110</td>\n",
" <td>0</td>\n",
" <td>204</td>\n",
" <td>6</td>\n",
" <td>51</td>\n",
" <td>0</td>\n",
" <td>20</td>\n",
" <td>143</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41.0.2</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>24</td>\n",
" <td>0</td>\n",
" <td>45</td>\n",
" <td>121</td>\n",
" <td>0</td>\n",
" <td>222</td>\n",
" <td>11</td>\n",
" <td>47</td>\n",
" <td>0</td>\n",
" <td>20</td>\n",
" <td>123</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42.0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" <td>25</td>\n",
" <td>0</td>\n",
" <td>80</td>\n",
" <td>2</td>\n",
" <td>10</td>\n",
" <td>0</td>\n",
" <td>7</td>\n",
" <td>32</td>\n",
" </tr>\n",
" <tr>\n",
" <th>44.0a1</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>20</td>\n",
" <td>1</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8.0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>73</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>5</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>5</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"platform Android 4.1.2 Android 4.2.2 Android 5.1.1 CrOS i686 3912.101.0 FC Linux i686 Fedora Linux Maemo OS X Windows 10 Windows 2000 Windows 7 Windows 8 Windows 8.1 Windows NT Windows Vista Windows XP\n",
"version \n",
"40.0.3 0 0 0 0 0 0 5 0 8 12 0 45 0 10 0 3 17\n",
"41.0 0 0 1 0 0 0 30 0 21 51 0 110 6 36 1 8 33\n",
"41.0.1 1 1 0 0 0 0 22 0 38 110 0 204 6 51 0 20 143\n",
"41.0.2 0 0 0 1 0 0 24 0 45 121 0 222 11 47 0 20 123\n",
"42.0 0 0 0 0 0 0 3 0 9 25 0 80 2 10 0 7 32\n",
"44.0a1 0 0 0 0 0 0 9 0 2 18 0 20 1 5 0 0 1\n",
"8.0 0 0 0 0 0 0 73 0 0 0 0 5 3 0 0 0 5"
]
},
"execution_count": 104,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Removing versions having a total positive feedback count of less than 50\n",
"\n",
"nrows = len(pt2)\n",
"i = 0;\n",
"while True:\n",
" row = pt2.ix[i,]\n",
" if(row.sum()<50):\n",
" pt2.drop(pt2.index[i],inplace=True)\n",
" i=i-1 #Because of dropping, indexing of rows changes. So need to read next row from same position\n",
" nrows = nrows-1\n",
" i = i+1\n",
" if(i>=nrows):\n",
" break\n",
"\n",
"pt2"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"pt2.to_csv('heatmap_happy.csv', index=False)"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nhMmhJEmSJAmTQ0laUJK8IclNSe5OsvU8xnFPkl3ma/vrKslhSb7571h/uyTnt/r/wGzGNsPtX51k\nn0Vj9G0AAAzoSURBVDko94Qkx8x2uXMlyf9Jstc087+U5FVzsN3fSHJ5O/8PnOWyVyZ5XRv+d52n\nM9mGpA2TyaGksTfqhng2b56STCbZdTbKmktJNgI+COxTVVtV1R29eZsmuTPJb41Y78NJTp/NWKpq\ny6q6ejbLnC1J3pPkgXYDf0eSf07ynHUs57NDk48Abm71/9bZifhRqfaZ3UKr3lBV753tcudKVf1q\nVZ0Po49TVe1fVcPHbjb8GfCRdv6fNctlz8mxnYdtSPolZnIoaSFYHzc0mePyZ8MTgE2BHw3PqKr7\ngdOAV/enJ5kAXg585tFsqK03rgr4fFVtCTwe+BZw5iyVvTMj6n8mkiyepRg0f3YCLp3vICRpXZkc\nSlqoHpYsJtk+yRlJbk5yVZI39eatSPIvrRVpVZKPtlY4kpzfFru4tTQdnGTvJNcneWsrb1WSFyfZ\nP8mPk9yW5H/MpPw2fzLJm5JcmeSWJMclGZmMJtkkyV8luaF9Ppxk4yRPYk1ScmeSc0esfjLw0iSb\n9ab9Nt3/BeckWZrkpBbj9UmOTbKobfew1sL2oSS3Au9OsnuS81qL5C1JThvap13b8NIkp7S6ujrJ\nOwf718r9VpIPJLm9HZv9ptj3tw+3cCY5PsnxvbKubF06r0ryilHl0CX6AaiqB4FTgCckeeyIbR6f\n5NokdyW5MMl/btP3A44GDmnnxQ+S/DVd8v22Nu357dg84ni1Mgbn0duS3Ah8Osm7k5ye5LNtP36Y\nZI8kR6frLnxNkhdOsV8Deya5uB2X05Js0rb3mCT/0I7D7UnOTrK8zTskyfeG9v2Pkvx9G/5MkmOH\n4v7jFtOqJIf11ntcK/uuJBckeW+maMVPsks7V17f6mdVkqN680ee723eNm1/7kh3zZ3fW+/qJPuM\nOE4Xtfkrk7yulX9nkqf21n18knuTbNPGD2jHd9DK/LQp9uVKYFfg7HbsNso011Rb57VJLm3H48tJ\ndurNe2GSy1p8H+WRP1Al3XfJnUl+lOT5vRmHt3LvbtfEEUMrHtT26a4kVyTZd8T+LGvn31HD8yQt\nXCaHkhaKR9w4PTTQ3YydDVwEbA/sA7y5d0P0IPCHwOOA/9Tm/3eAqho8t/T01lVskJxsB2wCLAPe\n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\nJEmSJAn4/86ZGT5udBXvAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f3dc1202250>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Resources:\n",
"#http://stackoverflow.com/questions/14391959/heatmap-in-matplotlib-with-pcolor\n",
"#https://plot.ly/python/heatmaps/\n",
"\n",
"fig, ax = plt.subplots()\n",
"heatmap = ax.pcolor(pt2, cmap=plt.cm.Greens, alpha=0.89)\n",
"\n",
"# Format\n",
"fig = plt.gcf()\n",
"fig.set_size_inches(15,5)\n",
"\n",
"# turn off the frame\n",
"ax.set_frame_on(False)\n",
"\n",
"# put the major ticks at the middle of each cell\n",
"ax.set_yticks(np.arange(pt2.shape[0]) + 0.5, minor=False)\n",
"ax.set_xticks(np.arange(pt2.shape[1]) + 0.5, minor=False)\n",
"\n",
"# want a more natural, table-like display\n",
"ax.invert_yaxis()\n",
"ax.xaxis.tick_top()\n",
"\n",
"# Set the labels\n",
"ax.set_xticklabels(pt2.columns, minor=False)\n",
"ax.set_yticklabels(pt2.index, minor=False)\n",
"\n",
"# rotate the x labels\n",
"plt.xticks(rotation=90)\n",
"\n",
"ax.grid(False)\n",
"\n",
"# Turn off all the ticks\n",
"ax = plt.gca()\n",
"\n",
"for t in ax.xaxis.get_major_ticks():\n",
" t.tick1On = False\n",
" t.tick2On = False\n",
"for t in ax.yaxis.get_major_ticks():\n",
" t.tick1On = False\n",
" t.tick2On = False\n",
" \n",
"# name the axes and plot\n",
"ax.set_xlabel('Platform')\n",
"ax.set_ylabel('Version') \n",
"ax.xaxis.set_label_position('top')\n",
"plt.title('Heatmap of Version vs Platform having positive feedback',y=-0.08)\n",
"\n",
"handles, labels = ax.get_legend_handles_labels()\n",
"#lgd = ax.legend(handles, labels, loc='upper center', bbox_to_anchor=(0.5,-0.1))\n",
"#fig.savefig('heatmap.png', bbox_extra_artists=(lgd,), bbox_inches='tight')\n",
"#fig.savefig('fig6.png', bbox_inches='tight')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We notice a similar trend in this heatmap as well. But it should be noted that positive count is much lesser than the negative one. A heatmap is always relative to the data that is used for plotting it.<br/>\n",
"But an interesting observation is that Linux users seem to be happy with Version 8! So that's a bonus! Version 8 also didn't have too many negative reviews coming from Linux users.\n",
"\n",
"<br/><br/>Finally we need to delete the dummy column that we had created."
]
},
{
"cell_type": "code",
"execution_count": 107,
"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>sentiment</th>\n",
" <th>date</th>\n",
" <th>version</th>\n",
" <th>platform</th>\n",
" <th>locale</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Sad</td>\n",
" <td>31</td>\n",
" <td>41.0.2</td>\n",
" <td>Windows 7</td>\n",
" <td>Spanish (Argentina)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Sad</td>\n",
" <td>31</td>\n",
" <td>41.0.2</td>\n",
" <td>Windows 7</td>\n",
" <td>Dutch</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Sad</td>\n",
" <td>31</td>\n",
" <td>41.0.2</td>\n",
" <td>Windows 7</td>\n",
" <td>Russian</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Sad</td>\n",
" <td>31</td>\n",
" <td>41.0.2</td>\n",
" <td>Windows 7</td>\n",
" <td>English (US)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Sad</td>\n",
" <td>31</td>\n",
" <td>41.0.2</td>\n",
" <td>Windows Vista</td>\n",
" <td>English (US)</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" sentiment date version platform locale\n",
"0 Sad 31 41.0.2 Windows 7 Spanish (Argentina)\n",
"1 Sad 31 41.0.2 Windows 7 Dutch\n",
"2 Sad 31 41.0.2 Windows 7 Russian\n",
"3 Sad 31 41.0.2 Windows 7 English (US)\n",
"4 Sad 31 41.0.2 Windows Vista English (US)"
]
},
"execution_count": 107,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#deleting the dummy column\n",
"\n",
"data.drop('dummy', axis=1, inplace=True)\n",
"data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": [
"## Final Thoughts\n",
" In this analysis, a Mozilla Firefox feedback data was analyzed and certain insights were drawn into user behaviour and version/platform dependency. \n",
" \n",
"#### Further Analysis:\n",
"1. I hope to scrape a larger amount of data (3 months' worth) and run the analysis again.<br/>\n",
"2. It might help to explore some group properties<br/>\n",
"3. An extensive time-series analysis can be performed for data over a longer period of time to determine whether issues have been resolved or new ones have cropped up after a version update<br/>"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment