Skip to content

Instantly share code, notes, and snippets.

@merishnaSuwal
Last active September 21, 2018 07:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save merishnaSuwal/f0e140c7db08e392d649e661f4fa44e3 to your computer and use it in GitHub Desktop.
Save merishnaSuwal/f0e140c7db08e392d649e661f4fa44e3 to your computer and use it in GitHub Desktop.
Linear regression for predicting rainfall
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Steps to do a Simple Linear Regression:\n",
"\n",
"- Exploring the dataset\n",
"- Preprocessing the dataset\n",
"- Splitting the dataset into training and testing set\n",
"- Building the model\n",
"- Evaluating the model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exploring the dataset"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import seaborn as sns\n",
"import sklearn\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline "
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [],
"source": [
"data = pd.read_csv(\"data/Annual Rainfall by station (2001-2012).csv\")\n",
"data_rainfall = data.copy()"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Station</th>\n",
" <th>Year AD</th>\n",
" <th>Year BS</th>\n",
" <th>Rainfall (mm)</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Banke, Nepalganj</td>\n",
" <td>2001</td>\n",
" <td>2058</td>\n",
" <td>1279</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Banke, Nepalganj</td>\n",
" <td>2002</td>\n",
" <td>2059</td>\n",
" <td>967</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Banke, Nepalganj</td>\n",
" <td>2003</td>\n",
" <td>2060</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Banke, Nepalganj</td>\n",
" <td>2004</td>\n",
" <td>2061</td>\n",
" <td>929</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Banke, Nepalganj</td>\n",
" <td>2005</td>\n",
" <td>2062</td>\n",
" <td>1184</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Station Year AD Year BS Rainfall (mm)\n",
"0 Banke, Nepalganj 2001 2058 1279\n",
"1 Banke, Nepalganj 2002 2059 967\n",
"2 Banke, Nepalganj 2003 2060 NaN\n",
"3 Banke, Nepalganj 2004 2061 929\n",
"4 Banke, Nepalganj 2005 2062 1184"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Year AD</th>\n",
" <th>Year BS</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>514.000000</td>\n",
" <td>514.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>2006.480545</td>\n",
" <td>2063.480545</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>3.447830</td>\n",
" <td>3.447830</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>2001.000000</td>\n",
" <td>2058.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>2003.250000</td>\n",
" <td>2060.250000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>2006.000000</td>\n",
" <td>2063.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>2009.000000</td>\n",
" <td>2066.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>2012.000000</td>\n",
" <td>2069.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Year AD Year BS\n",
"count 514.000000 514.000000\n",
"mean 2006.480545 2063.480545\n",
"std 3.447830 3.447830\n",
"min 2001.000000 2058.000000\n",
"25% 2003.250000 2060.250000\n",
"50% 2006.000000 2063.000000\n",
"75% 2009.000000 2066.000000\n",
"max 2012.000000 2069.000000"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Let's get some more information about our dataset\n",
"data.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**So, the data we have ranges over the years 2001-2012 AD and 2058-2069 BS**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Checking for missing/ null values"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Station 0\n",
"Year AD 0\n",
"Year BS 0\n",
"Rainfall (mm) 23\n",
"dtype: int64"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.isnull().sum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Let's fill in the null values with a median of other values**"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [],
"source": [
"data.fillna('0', inplace=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's see the relationship between columns."
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['Banke, Nepalganj ', 'Bara, Nijghad ', 'Bara, Simara Airport ',\n",
" 'Bhaktapur, Nagarkot ', 'Bhojpur,Bhojpurr* ', 'Chitawan, Rampur ',\n",
" 'Dadeldhura,Dadeldhura ', 'Dailekh,Dailekh ', 'Dang , Ghorahi ',\n",
" 'Darchula,Darchula ', 'Dhankuta,Dhankuta ',\n",
" 'Dhanusha,Janakpur Airport ', 'Dolakha, Jiri ', 'Dolpa, Dunai ',\n",
" 'Doti, Dipayal ', 'Gorkha,Gorkha ', 'Gulmi,Tamghas ',\n",
" 'Ilam,ilam Tea State ', 'Jhapa, Kankai ', 'Jumla,Jumla ',\n",
" 'Kailali, Dhangadi ', 'Kanchanpur, Mahendranagar ',\n",
" 'Kaski, Lumle ', 'Kaski, Pokhara Airport ',\n",
" 'Kathmandu, Airport ', 'Lamjung, Khudibazar ',\n",
" 'Makawanpur, Hetauda ', 'Manang, Chame ',\n",
" 'Morang,Biratnagar Airport ', 'Mustang,Jomsom ',\n",
" 'Nawalparasi, Dumkauli ', 'Nuwakot,Nuwakot ',\n",
" 'Okhaldhunga,Okhaldhunga ', 'Palpa , Tansen ',\n",
" 'Rupandehi,Bhairahawa ', 'Samkhuwasabha, Chinpur ',\n",
" 'Saptari Rajbiraj ', 'Sindhuli, Sindhilighadi ',\n",
" 'Sunsari, Dharan ', 'Surkhet, Birendranagar ', 'Syangja,Syangja ',\n",
" 'Tanahaun, Khairenitar ', 'Taplejung,Taplejung '], dtype=object)"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stations = data.Station.unique()\n",
"stations.sort()\n",
"stations"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [],
"source": [
"data['Station'] = data['Station'].str.lower().str.strip()"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['banke, nepalganj', 'bara, nijghad', 'bara, simara airport',\n",
" 'bhaktapur, nagarkot', 'bhojpur,bhojpurr*', 'chitawan, rampur',\n",
" 'dadeldhura,dadeldhura', 'dailekh,dailekh', 'dang , ghorahi',\n",
" 'darchula,darchula', 'dhankuta,dhankuta',\n",
" 'dhanusha,janakpur airport', 'dolakha, jiri', 'dolpa, dunai',\n",
" 'doti, dipayal', 'gorkha,gorkha', 'gulmi,tamghas',\n",
" 'ilam,ilam tea state', 'jhapa, kankai', 'jumla,jumla',\n",
" 'kailali, dhangadi', 'kanchanpur, mahendranagar', 'kaski, lumle',\n",
" 'kaski, pokhara airport', 'kathmandu, airport',\n",
" 'lamjung, khudibazar', 'makawanpur, hetauda', 'manang, chame',\n",
" 'morang,biratnagar airport', 'mustang,jomsom',\n",
" 'nawalparasi, dumkauli', 'nuwakot,nuwakot',\n",
" 'okhaldhunga,okhaldhunga', 'palpa , tansen',\n",
" 'rupandehi,bhairahawa', 'samkhuwasabha, chinpur',\n",
" 'saptari rajbiraj', 'sindhuli, sindhilighadi', 'sunsari, dharan',\n",
" 'surkhet, birendranagar', 'syangja,syangja',\n",
" 'tanahaun, khairenitar', 'taplejung,taplejung'], dtype=object)"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stations = data.Station.unique()\n",
"stations.sort()\n",
"stations"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [],
"source": [
"data_ktm = data[data['Station']==\"kathmandu, airport\"]"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Station</th>\n",
" <th>Year AD</th>\n",
" <th>Year BS</th>\n",
" <th>Rainfall (mm)</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>286</th>\n",
" <td>kathmandu, airport</td>\n",
" <td>2001</td>\n",
" <td>2058</td>\n",
" <td>1621</td>\n",
" </tr>\n",
" <tr>\n",
" <th>287</th>\n",
" <td>kathmandu, airport</td>\n",
" <td>2002</td>\n",
" <td>2059</td>\n",
" <td>1871</td>\n",
" </tr>\n",
" <tr>\n",
" <th>288</th>\n",
" <td>kathmandu, airport</td>\n",
" <td>2003</td>\n",
" <td>2060</td>\n",
" <td>1740</td>\n",
" </tr>\n",
" <tr>\n",
" <th>289</th>\n",
" <td>kathmandu, airport</td>\n",
" <td>2004</td>\n",
" <td>2061</td>\n",
" <td>1583</td>\n",
" </tr>\n",
" <tr>\n",
" <th>290</th>\n",
" <td>kathmandu, airport</td>\n",
" <td>2005</td>\n",
" <td>2062</td>\n",
" <td>1236</td>\n",
" </tr>\n",
" <tr>\n",
" <th>291</th>\n",
" <td>kathmandu, airport</td>\n",
" <td>2006</td>\n",
" <td>2063</td>\n",
" <td>1391</td>\n",
" </tr>\n",
" <tr>\n",
" <th>292</th>\n",
" <td>kathmandu, airport</td>\n",
" <td>2007</td>\n",
" <td>2064</td>\n",
" <td>1346</td>\n",
" </tr>\n",
" <tr>\n",
" <th>293</th>\n",
" <td>kathmandu, airport</td>\n",
" <td>2008</td>\n",
" <td>2065</td>\n",
" <td>1220</td>\n",
" </tr>\n",
" <tr>\n",
" <th>294</th>\n",
" <td>kathmandu, airport</td>\n",
" <td>2009</td>\n",
" <td>2066</td>\n",
" <td>1205</td>\n",
" </tr>\n",
" <tr>\n",
" <th>295</th>\n",
" <td>kathmandu, airport</td>\n",
" <td>2010</td>\n",
" <td>2067</td>\n",
" <td>1479</td>\n",
" </tr>\n",
" <tr>\n",
" <th>296</th>\n",
" <td>kathmandu, airport</td>\n",
" <td>2011</td>\n",
" <td>2068</td>\n",
" <td>1655</td>\n",
" </tr>\n",
" <tr>\n",
" <th>297</th>\n",
" <td>kathmandu, airport</td>\n",
" <td>2012</td>\n",
" <td>2069</td>\n",
" <td>1465</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Station Year AD Year BS Rainfall (mm)\n",
"286 kathmandu, airport 2001 2058 1621\n",
"287 kathmandu, airport 2002 2059 1871\n",
"288 kathmandu, airport 2003 2060 1740\n",
"289 kathmandu, airport 2004 2061 1583\n",
"290 kathmandu, airport 2005 2062 1236\n",
"291 kathmandu, airport 2006 2063 1391\n",
"292 kathmandu, airport 2007 2064 1346\n",
"293 kathmandu, airport 2008 2065 1220\n",
"294 kathmandu, airport 2009 2066 1205\n",
"295 kathmandu, airport 2010 2067 1479\n",
"296 kathmandu, airport 2011 2068 1655\n",
"297 kathmandu, airport 2012 2069 1465"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_ktm"
]
},
{
"cell_type": "code",
"execution_count": 108,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAm4AAAGDCAYAAACSmpzSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3X2YXXV97/33xyTiiA+jJlozgOBTWgUlOiIaH1Crod4KkfZutbZieyzSVtvaYyqpVfR4vImmPdZeWlsUirSK2hpiT6kELFWOFrSDQQJiRBQlEzRBTAWcoyF87z/2GtkZJ5mZMHv2rOT9uq51zd7ftdZvf9eafWU+WQ97p6qQJEnS/HeffjcgSZKk6TG4SZIktYTBTZIkqSUMbpIkSS1hcJMkSWoJg5skSVJLGNykA0SSE5JsvRfr/02St8xmT824b0vyD7M9rmZXkscm6cnnQyV5dJI7ZrD8ryTZmuSOJMdMsexrkny2ebwwSSU58l41LM1jBjdpHklyU5Kx5g/Wd5Ocl+QBPXidVyf5fHetqk6vqnfM9mvdG/M99CX5nSTXJzmkq/awJNuTnNjP3mZbE6S635vnJDl0OutW1Teraibv478AXltVD6iqzfvXsXRgMrhJ889Lmz9yxwLLgTV97kd7UVUfBLYCb+0q/yXwr1V18Wy+VpKFsznefvql5r35FODpwJ/M9gskuQ9wOHDdbI8tHQgMbtI8VVXfBTbSCXAAJDkkyZ8n+U6S7zWnNwcmWz/JGUluTHJ7kq8meVlT/wXgb4BnNEdPdjb185L8z671fyfJN5LcluSfkyztmldJTk9yQ5IfJHl/kuxjc+6X5ONNL19O8uSusZYm+WSSHUm+leQPmvqJwJ8Cv9b0+ZUkz0uyuWvdzyT5UtfzzydZta9xm3n36do/30/yiSQPbeYd2Wzfqc1+vjXJm/exbb8D/F6SY5O8CHgB8Iau1zqp6X1n09/RXfP+LMk3m/1yXZKTuua9JsnlSf4qyW3An0184STPSHJlM/YtzbKLmnnjpw1f2/wef5Dkr7rWXZDkPc323whM+whhVW0DLmHP9+ZJSa5utuU76TrtngmnYZv98PYk/9Esf3GShzZH8H4IBLguyZap9pN0sDG4SfNUksOAXwK+0VV+F/B4On8wHwsMsefRnm43As8GHgy8HfiHJI+squuB04ErmlNRg5O89vOBs4BfBR4JfBv42ITFXgI8DXhys9zKfWzOycA/Ag8FPgpsSLKoObryv4GvNNvyAuCPkqxsjlj9f8DHmz6fDFwBPDbJ4uYI1NHAYUke2ATYpwL/Z1/jNv38AbAKeC6wFPgB8P4JPT8LWNas+9Ym8P6MqrqJzu/gXOBvgd+rqh80+/FpwAeB1wAPa5b5VJL7Nqt/HVhB53f0TuCjSR7RNfwzgeuBJXR+9xPdBfwhsLgZ50TgtROWeXGzX5YDv5HkF5v67wIvovP7O47O73BakhzevFb3e/MO4DeabXkp8IdJXrKPYX4dOBV4BHAo8MdVdScw/n58YlUtax5PtZ+kg0dVOTk5zZMJuInOH8DbgQL+DRhs5gW4E3hM1/LPAL7VPD4B2LqPsa8GTm4evxr4/IT55wH/s3l8DvDurnkPAHYBRzbPC3hW1/xPAGfs5XXfBlzZ9fw+wC10QuXTge9MWH4N8Hdd6/7DhPn/BzgFOJ7OUZ9P0AkRzwOuaZaZatzrgRd0zXtks30LgSOb7Tusa/6XgJfvY98G+CJw4YT6B4EzJ9RuBFbsZZxrgf+nefwa4JszfP+8EfjH5vHCZjuO75q/Hnhj8/hy4DVd817c+ZOw17G3TnhvXgI8eB/Lvw9Y1zx+bPfYwOe73y90gvS/TOj7yH2MPXE/fXa66zo5tX2aD9dMSNrTqqr6TJLn0jk6tRjYSeeoy/2Bq7rOSgZYMNkgSV4F/DGdIAKd8LV4mj0sBb48/qSq7kjyfTpHr25qyt/tWv5Hzfh7c3PXWHenc/frUjp/ZJemOV3bWEAnnO3N52hCavP4B3SOnP24eQ7wqCnGfRRwYZK7u+bvpnP0Z9y0t6+qKsn1TU/dHgW8Mskbumr3pbMfSfJqOqdVH9XMm/g7upl9SPLzdC7kfyqd98ZCOgGy2962Y+mE8b+9r9dqvKSqPtsckf17OkdQ/6vp5Rl0jtI+kc42HgJcsI+xpr1/p7GfpIOGp0qleaqqPkfnKNifN6VbgTE6p5AGm+nBNcndekkeRedoz+uAh1XndOi1dIIedALTvmzjnj+SNNcePQwY3c/NObxrrPsAhzWvcTOdI4aDXdMDq+rF++hzPLg9p3n8OTrB7bncE9ymGvdmOhfad8+/X1Xt7/btzc3A2ye8zv2r6hNJHg18gM4py/Hf0de453cEU/+e/pbO7/WxVfUgOqds93WtYbdb6Pq9AEdMcz2q6jLgH4B1XeWPAZ8EDq+qBwMfmkEvezXN/SQdNAxu0vz2l8ALkxxbVXfTCWPvSfJwgCRDXddtdTuUzh/9Hc1yv0XnerBx36Nzbdh9J1kXOkf6fqu54P4QOteafbE613Ptj6cmOaW5Lu2P6Bwdu5LOKcgfJnlTkoHmgvmjm2vDxvs8sgl74/6DzrVnxwFfqqrr6ITMp9M5/cc0xv0b4J1NwCXJkiQn7+e27cvZwO8neVo6HpDkpU0QfgD3/I6S5DXAz89w/AfSOeJ1Z3MN3sTr2/blE3Su+xtK8jDgTTN87fcAL+662eKBwG1V9X+THA+8fIbj7c1s7CfpgGFwk+axqtoBnA+M36H3JjoXhF+Z5IfAZ+iEmInrfZXOKbQr6ISfY4AvdC1yGZ2PW/huklsnWf/fmtf8JJ0jM4/h3v0h/hTwa3ROa/4mcEpV7aqq3XQuZD8W+Bado4ofonMROnRuaAD4fpIvN73dSec07nVV9ZNm/hXAt6tqe7PMVOO+F/hn4JIkt9MJkU+/F9s3qar6Ip0jRR9otv3rdC7gp6quAf6KTsi8hU4YmXiacyr/nc4F/rfTOfr28Rms+wE611BuBv4T+KeZvHB17nr+CPe8N38XOKvZn39KJxjea7O0n6QDRqp68kHZkiRJmmUecZMkSWoJg5skSVJLGNwkSZJawuAmSZLUEgY3SZKkljhgvzlh8eLFdeSRR/a7DUmSpCldddVVt1bVkqmWO2CD25FHHsnIyEi/25AkSZpSkul87ZynSiVJktrC4CZJktQSBjdJkqSWMLhJkiS1hMFNkiSpJQxukiRJLWFwkyRJagmDmyRJUksY3CRJklqiZ8EtyblJtie5dpJ5b0xSSRZ31U5IcnWS65J8rqt+U5LNzTy/CkGSJPXchk2jrFh7GUedcREr1l7Ghk2j/W4J6O1XXp0HvA84v7uY5HDghcB3umqDwF8DJ1bVd5I8fMJYz6uqW3vYqyRJEtAJbWvWb2Zs124ARneOsWb9ZgBWLR/qZ2u9O+JWVZcDt00y6z3AnwDVVft1YH1VfadZd3uv+pIkSdqXdRu3/DS0jRvbtZt1G7f0qaN7zOk1bklOAkar6isTZj0eeEiSzya5KsmruuYVcElTP22K8U9LMpJkZMeOHbPcvSRJOhhs2zk2o/pc6uWp0j0kuT/wZuBFe+njqcALgAHgiiRXVtXXgRVVta05fXppkq81R/N+RlWdDZwNMDw8XJMtI0mStC9LBwcYnSSkLR0c6EM3e5rLI26PAY4CvpLkJuAw4MtJfg7YClxcVXc217JdDjwZoKq2NT+3AxcCx81hz5Ik6SCzeuUyBhYt2KM2sGgBq1cu61NH95iz4FZVm6vq4VV1ZFUdSSesPaWqvgt8Cnh2koXNkbmnA9cnOTTJAwGSHErnaN3P3KUqSZI0W1YtH+KsU45haHCAAEODA5x1yjF9vzEBeniqNMkFwAnA4iRbgTOr6pzJlq2q65NcDFwD3A18qKquTfJo4MIk471+tKou7lXPkiRJ0Alv8yGoTZSqA/NSsOHh4RoZ8WPfJEnS/Jfkqqoanmo5vzlBkiSpJQxukiRJLWFwkyRJagmDmyRJUksY3CRJklrC4CZJktQSBjdJkqSWMLhJkiS1hMFNkiSpJQxukiRJLWFwkyRJagmDmyRJUksY3CRJklrC4CZJktQSBjdJkqSWMLhJkiS1hMFNkiSpJQxukiRJLbGwVwMnORd4CbC9qo7uqr8eeB1wF3BRVf1JkiOB64EtzWJXVtXpzfKfBR4JjDXzXlRV23vVtyRJmj0bNo2ybuMWtu0cY+ngAKtXLmPV8qF+t9VaPQtuwHnA+4DzxwtJngecDDypqn6c5OFdy99YVcfuZaxXVtVIzzqVJEmzbsOmUdas38zYrt0AjO4cY836zQCGt/3Us1OlVXU5cNuE8u8Ca6vqx80yHjmTJOkAtW7jlp+GtnFju3azbuOWvayhqcz1NW6PB56d5ItJPpfkaV3zjkqyqak/e8J6f5fk6iRvSZK9DZ7ktCQjSUZ27NjRkw2QJEnTs23n2IzqmtpcB7eFwEOA44HVwCeaIHYLcERVLQf+GPhokgc167yyqo4Bnt1Mv7m3wavq7KoarqrhJUuW9HI7JEnSFJYODsyorqnNdXDbCqyvji8BdwOLq+rHVfV9gKq6CriRztE5qmq0+Xk78FHguDnuWZIk7YfVK5cxsGjBHrWBRQtYvXJZnzpqv7kObhuA5wMkeTxwX+DWJEuSLGjqjwYeB3wzycIki5v6Ijp3qV47xz1LkqT9sGr5EGedcgxDgwMEGBoc4KxTjvHGhHuhlx8HcgFwArA4yVbgTOBc4Nwk1wI/AU6tqkryHOB/JLkL2A2cXlW3JTkU2NiEtgXAZ4AP9qpnSZI0u1YtHzKozaKeBbeqesVeZv3GJMt+EvjkJPU7gafOcmuSJEmt5DcnSJIktYTBTZIkqSUMbpIkSS1hcJMkSWoJg5skSVJLGNwkSZJawuAmSZLUEgY3SZKkljC4SZIktYTBTZIkqSUMbpIkSS1hcJMkSWoJg5skSVJLGNwkSZJawuAmSZLUEgY3SZKkljC4SZIktYTBTZIkqSV6FtySnJtke5JrJ5n3xiSVZHHzfHWSq5vp2iS7kzy0mfeHTe26JH/Uq34lSZrPNmwaZcXayzjqjItYsfYyNmwa7XdL6oNeHnE7DzhxYjHJ4cALge+M16pqXVUdW1XHAmuAz1XVbUmOBn4HOA54MvCSJI/rYc+SJM07GzaNsmb9ZkZ3jlHA6M4x1qzfbHg7CPUsuFXV5cBtk8x6D/AnQO1l1VcAFzSPfwG4sqp+VFV3AZ8DXjbbvUqSNJ+t27iFsV2796iN7drNuo1b+tSR+mVOr3FLchIwWlVf2cv8+9M5SvfJpnQt8JwkD2vmvRg4fB/jn5ZkJMnIjh07Zrl7SZL6Y9vOsRnVdeCas+DWBK83A2/dx2IvBb5QVbcBVNX1wLuAS4GLga8Ad+1t5ao6u6qGq2p4yZIls9a7JEn9tHRwYEZ1Hbjm8ojbY4CjgK8kuQk4DPhykp/rWubl3HOaFICqOqeqnlJVz6Fz6vWGOepXkqR5YfXKZQwsWrBHbWDRAlavXNanjtQvC+fqhapqM/Dw8edNeBuuqlub5w8Gngv8Rvd6SR5eVduTHAGcAjxjrnqWJGk+WLV8COhc67Zt5xhLBwdYvXLZT+s6ePQsuCW5ADgBWJxkK3BmVZ2zj1VeBlxSVXdOqH8yycOAXcDvV9UPetKwJEnz2KrlQwY19S64VdUrpph/5ITn59H5CJGJyz17NvuSJElqK785QZIkqSUMbpIkSS1hcJMkSWoJg5skSVJLGNwkSZJawuAmSZLUEgY3SZKkljC4SZIktYTBTZIkqSUMbpIkSS1hcJMkSWoJg5skSVJLGNwkSZJawuAmSZLUEgY3SZKkljC4SZIktYTBTZIkqSUMbpIkSS3Rs+CW5Nwk25Nc21Vbl+RrSa5JcmGSwa55a5J8I8mWJCu76jcl2Zzk6iQjvepXknRw2LBplBVrL+OoMy5ixdrL2LBptN8tSdPWyyNu5wEnTqhdChxdVU8Cvg6sAUjyBODlwBObdf46yYKu9Z5XVcdW1XAP+5UkHeA2bBplzfrNjO4co4DRnWOsWb/Z8KbW6Flwq6rLgdsm1C6pqruap1cChzWPTwY+VlU/rqpvAd8AjutVb5Kkg9O6jVsY27V7j9rYrt2s27ilTx1JM9PPa9x+G/h083gIuLlr3tamBlDAJUmuSnLavgZMclqSkSQjO3bsmPWGJUnttm3n2Izq0nzTl+CW5M3AXcBHxkuTLFbNzxVV9RTgl4DfT/KcvY1bVWdX1XBVDS9ZsmRWe5Yktd/SwYEZ1aX5Zs6DW5JTgZcAr6yq8XC2FTi8a7HDgG0AVTX+cztwIZ5ClSTtp9UrlzGwaMEetYFFC1i9clmfOpJmZk6DW5ITgTcBJ1XVj7pm/TPw8iSHJDkKeBzwpSSHJnlgs+6hwIuAayeOK0nSdKxaPsRZpxzD0OAAAYYGBzjrlGNYtXxoynWl+WBhrwZOcgFwArA4yVbgTDp3kR4CXJoE4MqqOr2qrkvyCeCrdE6h/n5V7U7yCODCZtmFwEer6uJe9SxJOvCtWj5kUFNr5Z6zlQeW4eHhGhnxY98kSdL8l+Sq6Xzsmd+cIEmS1BIGN0mSpJYwuEmSJLWEwU2SJKklDG6SJEktYXCTJElqCYObJElSSxjcJEmSWsLgJkmS1BIGN0mSpJYwuEmSJLWEwU2SJKklDG6SJEktYXCTJElqCYObJElSSxjcJEmSWsLgJkmS1BIGN0mSpJboWXBLcm6S7Umu7aqtS/K1JNckuTDJYFN/YZKrkmxufj6/a52nNvVvJPmrJOlVz5Kk6duwaZQVay/jqDMuYsXay9iwabTfLUkHvF4ecTsPOHFC7VLg6Kp6EvB1YE1TvxV4aVUdA5wK/H3XOh8ATgMe10wTx5QkzbENm0ZZs34zozvHKGB05xhr1m82vEk91rPgVlWXA7dNqF1SVXc1T68EDmvqm6pqW1O/DrhfkkOSPBJ4UFVdUVUFnA+s6lXPkqTpWbdxC2O7du9RG9u1m3Ubt/SpI+ng0M9r3H4b+PQk9V8GNlXVj4EhYGvXvK1NbVJJTksykmRkx44ds9qsJOke23aOzaguaXb0JbgleTNwF/CRCfUnAu8CXjtemmT12tu4VXV2VQ1X1fCSJUtmq11J0gRLBwdmVJc0O+Y8uCU5FXgJ8Mrm9Od4/TDgQuBVVXVjU95Kczq1cRiwDUlSX61euYyBRQv2qA0sWsDqlcv61JF0cJjT4JbkROBNwElV9aOu+iBwEbCmqr4wXq+qW4Dbkxzf3E36KuBTc9mzJOlnrVo+xFmnHMPQ4AABhgYHOOuUY1i1fK9Xs0iaBek66DW7AycXACcAi4HvAWfSuYv0EOD7zWJXVtXpSf6smXdD1xAvqqrtSYbp3KE6QOeauNfXNJoeHh6ukZGRWdoaSZKk3klyVVUNT7lcr4JbvxncJElSW0w3uPnNCZIkSS1hcJMkSWoJg5skSVJLGNwkSZJawuAmSZLUEgY3SZKkljC4SZIktYTBTZIkqSUMbpIkSS1hcJMkSWoJg5skSVJLGNwkSZJawuAmSZLUEgY3SZKkljC4SZIktYTBTZIkqSUMbpIkSS1hcJMkSWqJnga3JOcm2Z7k2q7aO5Jck+TqJJckWTphnacl2Z3kV7pqRzTLXp/kq0mO7GXfkjSXNmwaZcXayzjqjItYsfYyNmwa7XdLkuaphfuamWQzUJPNAqqqnjTF+OcB7wPO76qtq6q3NOP/AfBW4PTm+QLgXcDGCeOcD7yzqi5N8gDg7ileV5JaYcOmUdas38zYrt0AjO4cY836zQCsWj7Uz9YkzUP7DG7AS+7N4FV1+cSjY1X1w66nh7JnMHw98EngaeOFJE8AFlbVpc36d9ybniRpPlm3cctPQ9u4sV27Wbdxi8FN0s/YZ3Crqm/34kWTvBN4FfBfwPOa2hDwMuD5dAU34PHAziTrgaOAzwBnVNWe/9J1xjgNOA3giCOO6EXrkjSrtu0cm1Fd0sFtn9e4Jbk9yQ8nmW5P8sN9rbsvVfXmqjoc+Ajwuqb8l8CbJglkC4FnA2+kE+geDbx6L+OeXVXDVTW8ZMmS/W1PkubM0sGBGdUlHdz2Gdyq6oFV9aBJpgdW1YNm4fU/Cvxy83gY+FiSm4BfAf46ySpgK7Cpqr5ZVXcBG4CnzMJrS1LfrV65jIFFC/aoDSxawOqVy/rUkaT5bKpr3PaQ5OHA/cafV9V3ZvqCSR5XVTc0T08CvtaMdVTXMucB/1JVG5obFh6SZElV7aBzKnVkpq8rSfPR+HVs6zZuYdvOMZYODrB65TKvb5M0qWkFtyQnAX8BLAW2A48CrgeeOMV6FwAnAIuTbAXOBF6cZBmdO0O/TXNH6d5U1e4kbwT+LUmAq4APTqdvSWqDVcuHDGqSpmW6R9zeARwPfKaqlid5HvCKqVaqqsmWOWca6716wvNLgak+ekSSJOmANt0P4N1VVd8H7pPkPlX178CxPexLkiRJE0z3iNvO5oNvLwc+kmQ7cFfv2pIkSdJEU30cyCHNw5OBMeANwMXAjcBLe9uaJEmSuk11xO0KOh+98TdV9ZtN7cO9bUmSJEmTmSq43TfJqcAzk5wycWZVre9NW5IkSZpoquB2OvBKYJCfPTVagMFNkiRpjkz1XaWfBz6fZKSqpvwYD0mSJPXOtO4qrapzkjwTOLJ7nao6v0d9SZIkaYLpfnPC3wOPAa4Gxr8EvgCDmyRJ0hyZ7ue4DQNPqKrqZTOSJEnau+l+c8K1wM/1shFJkiTt23SPuC0GvprkS8CPx4tVdVJPupIkSdLPmG5we1svm5AkSdLUpntX6ed63YgkSZL2bZ/BLcnnq+pZSW6ncxfpT2cBVVUP6ml3kiRJ+qmpPoD3Wc3PB85NO5IkSdqb6V7jBkCShwP3G39eVd+Z9Y4kSZI0qWl9HEiSk5LcAHwL+BxwE/DpHvYlSZKkCab7OW7vAI4Hvl5VRwEvAL6wrxWSnJtke5Jru2rvSHJNkquTXJJkaVN/SJILm3lfSnL0vsaRpMls2DTKirWXcdQZF7Fi7WVs2DTa75YkaVZNN7jtqqrvA/dJcp+q+nfg2CnWOQ84cUJtXVU9qaqOBf4FeGtT/1Pg6qp6EvAq4L1TjCNJe9iwaZQ16zczunOMAkZ3jrFm/WbDm6QDynSD284kDwAuBz6S5L3AXftaoaouB26bUPth19NDuedO1ScA/9Ys8zXgyCSP2Ns4kjTRuo1bGNu1e4/a2K7drNu4pU8dSdLsm25wOxn4EfAG4GLgRuCl+/OCSd6Z5GbgldxzxO0rwCnN/OOARwGH7cfYpyUZSTKyY8eO/WlPUktt2zk2o7oktdG0gltV3VlVd1fVXVX1YeD97Ofpy6p6c1UdDnwEeF1TXgs8JMnVwOuBTUxxRG8vY59dVcNVNbxkyZL9aU9SSy0dHJhRXZLaaJ/BLcmDkqxJ8r4kL0rH64BvAr96L1/7o8AvQ+cUalX9VnPt26uAJXTuYJWkaVm9chkDixbsURtYtIDVK5f1qSNJmn1TfY7b3wM/AK4AXgOsBu4LnFxVV8/0xZI8rqpuaJ6eBHytqQ8CP6qqnzSvc/mE6+EkaZ9WLR8COte6bds5xtLBAVavXPbTuiQdCKYKbo+uqmMAknwIuBU4oqpun2rgJBcAJwCLk2wFzgRenGQZcDfwbeD0ZvFfAM5Pshv4KvDf9jVOVZ0z7S2UdNBYtXzIoCbpgDZVcNs1/qCqdif51nRCW7P8KyYpTxq4quoK4HEzGEeSJOmgM1Vwe3KS8VOWAQaa537JvCRJ0hyb6kvmF+xrviRJkubOdD/HTZIkSX1mcJMkSWoJg5skSVJLGNwkSZJawuAmSZLUEgY3SZKkljC4SZIktYTBTZIkqSUMbpIkSS1hcJMkSWoJg5skSVJLGNwkSZJawuAmSZLUEgY3SZKkljC4SZIktYTBTZIkqSV6FtySnJtke5Jru2rrknwtyTVJLkwy2NSPS3J1M30lycu61hlM8k/NetcneUavepbUsWHTKCvWXsZRZ1zEirWXsWHTaL9bkiTR2yNu5wEnTqhdChxdVU8Cvg6saerXAsNVdWyzzt8mWdjMey9wcVX9PPBk4Poe9iwd9DZsGmXN+s2M7hyjgNGdY6xZv9nwJknzQM+CW1VdDtw2oXZJVd3VPL0SOKyp/6irfj+gAJI8CHgOcE6z3E+qamevepYE6zZuYWzX7j1qY7t2s27jlj51JEka189r3H4b+PT4kyRPT3IdsBk4vQlyjwZ2AH+XZFOSDyU5dG8DJjktyUiSkR07dvS6f+mAtG3n2IzqkqS505fgluTNwF3AR8ZrVfXFqnoi8DRgTZL7AQuBpwAfqKrlwJ3AGXsbt6rOrqrhqhpesmRJT7dBOlAtHRyYUV2SNHfmPLglORV4CfDKqqqJ86vqejoB7WhgK7C1qr7YzP4nOkFOUo+sXrmMgUUL9qgNLFrA6pXL+tSRJGncnAa3JCcCbwJOqqofddWPGr8ZIcmjgGXATVX1XeDmJON/MV4AfHUue5YONquWD3HWKccwNDhAgKHBAc465RhWLR/qd2uSdNBbOPUi+yfJBcAJwOIkW4Ez6dxFeghwaRKAK6vqdOBZwBlJdgF3A79XVbc2Q70e+EiS+wLfBH6rVz1L6li1fMigJknzUCY5W3lAGB4erpGRkX63IUmSNKUkV1XV8FTL+c0JkiRJLWFwkyRJagmDmyRJUksY3CRJklrC4CZJktQSBjdJkqSWMLhJkiS1hMFNkiSpJQxukiRJLWFwkyRJagmDmyRJUksY3CRJklrC4CZJktQSBjdJkqSWMLhJkiS1hMFNkiSpJQxukiRJLWFwkyRJaomeBrck5ybZnuTartrbkowmubqZXtzUFyX5cJLNSa5Psqap3y/Jl5J8Jcl1Sd7ey56l2bRh0ygr1l7GUWdcxIq1l7Fh02i/W5IktVivj7idB5w4Sf09VXVsM/1rU/t/gUOq6hjgqcBrkxwJ/Bh4flU9GTgWODHJ8T3uW7rXNmwaZc36zYzuHKOA0Z1jrFm/2fAmSdpvPQ1uVXU5cNt0FwcOTbIQGAB+AvywOu6otOn9AAAPMUlEQVRollnUTDXrzUqzbN3GLYzt2r1HbWzXbtZt3NKnjiRJbdeva9xel+Sa5lTqQ5raPwF3ArcA3wH+vKpuA0iyIMnVwHbg0qr64mSDJjktyUiSkR07dszBZkh7t23n2IzqkiRNpR/B7QPAY+ic9rwF+IumfhywG1gKHAX89ySPBqiq3VV1LHAYcFySoycbuKrOrqrhqhpesmRJjzdD2relgwMzqkuSNJU5D25V9b0miN0NfJBOYAP4deDiqtpVVduBLwDDE9bdCXyWya+bk+aV1SuXMbBowR61gUULWL1yWZ86kiS13ZwHtySP7Hr6MmD8jtPvAM9Px6HA8cDXkixJMtisOwD8IvC1uexZ2h+rlg9x1inHMDQ4QIChwQHOOuUYVi0f6ndrkqSWWtjLwZNcAJwALE6yFTgTOCHJsXRuMLgJeG2z+PuBv6MT5AL8XVVdk+RJwIeTLKATND9RVf/Sy76l2bJq+ZBBTZI0a3oa3KrqFZOUz9nLsnfQ+UiQifVrgOWz3JokSVLr+M0JkiRJLWFwkyRJagmDmyRJUksY3CRJklrC4CZJktQSBjdJkqSWMLhJkiS1hMFNkiSpJQxukiRJLWFwkyRJagmDmyRJUksY3CRJklrC4CZJktQSBjdJkqSWMLhJkiS1hMFNkiSpJQxukiRJLWFwkyRJaomeBrck5ybZnuTartrHk1zdTDcluXrCOkckuSPJG7tqJybZkuQbSc7oZc+afzZsGmXF2ss46oyLWLH2MjZsGu13S5Ik9cXCHo9/HvA+4PzxQlX92vjjJH8B/NeEdd4DfLprmQXA+4EXAluB/0zyz1X11d61rfliw6ZR1qzfzNiu3QCM7hxjzfrNAKxaPtTP1iRJmnM9PeJWVZcDt002L0mAXwUu6KqtAr4JXNe16HHAN6rqm1X1E+BjwMk9a1rzyrqNW34a2saN7drNuo1b+tSRJEn9089r3J4NfK+qbgBIcijwJuDtE5YbAm7uer61qf2MJKclGUkysmPHjh60rLm2befYjOqSJB3I+hncXkHX0TY6ge09VXXHhOUyybo12YBVdXZVDVfV8JIlS2apTfXT0sGBGdUlSTqQ9foat0klWQicAjy1q/x04FeSvBsYBO5O8n+Bq4DDu5Y7DNg2V72qv1avXLbHNW4AA4sWsHrlsj52JUlSf/QluAG/CHytqraOF6rq2eOPk7wNuKOq3teEvMclOQoYBV4O/Poc96s+Gb8BYd3GLWzbOcbSwQFWr1zmjQmSpINST4NbkguAE4DFSbYCZ1bVOXTC1wX7WndcVd2V5HXARmABcG5VXTfFajqArFo+ZFCTJAlI1aSXi7Xe8PBwjYyM9LsNSZKkKSW5qqqGp1rOb06QJElqCYObJElSSxjcJEmSWsLgJkmS1BIGN0mSpJYwuEmSJLWEwU2SJKklDG6SJEktYXCTJElqCYObJElSSxjcJEmSWsLgJkmS1BIGN0mSpJYwuEmSJLWEwU2SJKklDG6SJEktYXCTJElqCYObJElSS/QsuCU5N8n2JNd21Y5NcmWSq5OMJDmuqa9ualcnuTbJ7iQP3ds42j8bNo2yYu1lHHXGRaxYexkbNo32uyVJkjQDvTzidh5w4oTau4G3V9WxwFub51TVuqo6tqmvAT5XVbftYxzN0IZNo6xZv5nRnWMUMLpzjDXrNxveJElqkZ4Ft6q6HLhtYhl4UPP4wcC2SVZ9BXDBFONohtZt3MLYrt171MZ27Wbdxi196kiSJM3Uwjl+vT8CNib5czqh8ZndM5Pcn87Rtdftz+BJTgNOAzjiiCPuXacHmG07x2ZUlyRJ889c35zwu8Abqupw4A3AORPmvxT4Qtdp0hmpqrOrariqhpcsWXIvWz2wLB0cmFFdkiTNP3Md3E4F1jeP/xE4bsL8l9N1mlSzZ/XKZQwsWrBHbWDRAlavXNanjiRJ0kzNdXDbBjy3efx84IbxGUke3Mz71Bz3dFBYtXyIs045hqHBAQIMDQ5w1inHsGr5UL9bkyRJ09Sza9ySXACcACxOshU4E/gd4L1JFgL/l+Z6tMbLgEuq6s6pxqmqiadYNQ2rlg8Z1CRJarFUVb976Inh4eEaGRnpdxuSJElTSnJVVQ1PtZzfnCBJktQSBjdJkqSWMLhJkiS1hMFNkiSpJQxukiRJLWFwkyRJagmDmyRJUksY3CRJklrC4CZJktQSBjdJkqSWMLhJkiS1hMFNkiSpJQxukiRJLWFwkyRJagmDmyRJUksY3CRJklrC4CZJktQSBjdJkqSW6FlwS3Juku1Jrp1Qf32SLUmuS/LupvbCJFcl2dz8fH7X8u9McnOSO3rV60xt2DTKirWXcdQZF7Fi7WVs2DTa75YkSdJBYGEPxz4PeB9w/nghyfOAk4EnVdWPkzy8mXUr8NKq2pbkaGAjMNTM+9/NODf0sNdp27BplDXrNzO2azcAozvHWLN+MwCrlg/ta1VJkqR7pWdH3KrqcuC2CeXfBdZW1Y+bZbY3PzdV1bZmmeuA+yU5pJl3ZVXd0qs+Z2rdxi0/DW3jxnbtZt3GLX3qSJIkHSzm+hq3xwPPTvLFJJ9L8rRJlvllYNN4uJuJJKclGUkysmPHjnvd7GS27RybUV2SJGm2zHVwWwg8BDgeWA18IknGZyZ5IvAu4LX7M3hVnV1Vw1U1vGTJktno92csHRyYUV2SJGm2zHVw2wqsr44vAXcDiwGSHAZcCLyqqm6c476mbfXKZQwsWrBHbWDRAlavXNanjiRJ0sFiroPbBuD5AEkeD9wXuDXJIHARsKaqvjDHPc3IquVDnHXKMQwNDhBgaHCAs045xhsTJElSz/XsrtIkFwAnAIuTbAXOBM4Fzm0+IuQnwKlVVUleBzwWeEuStzRDvKiqtjcfGfLrwP2bcT5UVW/rVd/TsWr5kEFNkiTNuVRVv3voieHh4RoZGel3G5IkSVNKclVVDU+1nN+cIEmS1BIGN0mSpJYwuEmSJLWEwU2SJKklDG6SJEktYXCTJElqCYObJElSSxjcJEmSWsLgJkmS1BIH7DcnJNkBfLvffcxTi4Fb+93EQcZ9Prfc33PL/T233N9za67296OqaslUCx2wwU17l2RkOl+rodnjPp9b7u+55f6eW+7vuTXf9renSiVJklrC4CZJktQSBreD09n9buAg5D6fW+7vueX+nlvu77k1r/a317hJkiS1hEfcJEmSWsLgdoBIcniSf09yfZLrkvxhU39okkuT3ND8fEhTT5K/SvKNJNckeUpTPzbJFc0Y1yT5tX5u13w1W/u7a7wHJRlN8r5+bM98N5v7O8kRSS5pxvpqkiP7s1Xz1yzv73c3Y1zfLJN+bdd8tR/7++ebf6d/nOSNE8Y6McmW5ndxRj+2Z76brf29t3F6rqqcDoAJeCTwlObxA4GvA08A3g2c0dTPAN7VPH4x8GkgwPHAF5v644HHNY+XArcAg/3evvk2zdb+7hrvvcBHgff1e9vm4zSb+xv4LPDC5vEDgPv3e/vm2zSL/548E/gCsKCZrgBO6Pf2zbdpP/b3w4GnAe8E3tg1zgLgRuDRwH2BrwBP6Pf2zbdpFvf3pOP0un+PuB0gquqWqvpy8/h24HpgCDgZ+HCz2IeBVc3jk4Hzq+NKYDDJI6vq61V1QzPONmA7MOUHAh5sZmt/AyR5KvAI4JI53IRWma39neQJwMKqurQZ646q+tFcbksbzOL7u4D70QkRhwCLgO/N2Ya0xEz3d1Vtr6r/BHZNGOo44BtV9c2q+gnwsWYMdZmt/b2PcXrK4HYAak79LAe+CDyiqm6BzpuMzv8coPPmurlrta1MeMMlOY7OP7g39rbjdrs3+zvJfYC/AFbPVb9tdy/f348HdiZZn2RTknVJFsxV7210b/Z3VV0B/DudI/e3ABur6vq56bydprm/92bKf9e1p3u5v/c2Tk8Z3A4wSR4AfBL4o6r64b4WnaT201uMm/8t/z3wW1V19+x2eeCYhf39e8C/VtXNk8zXBLOwvxcCzwbeSOfUx6OBV89ymweMe7u/kzwW+AXgMDoB4vlJnjP7nR4YZrC/9zrEJDU/OmIvZmF/z+o402VwO4AkWUTnzfORqlrflL/XdUrukXROfULnf2KHd61+GLCtWe5BwEXAnzWnPTSJWdrfzwBel+Qm4M+BVyVZOwftt84s7e+twKbmVNJdwAZgjxtF1DFL+/tlwJXNKek76FwHd/xc9N82M9zfe7PXf9e1p1na33sbp6cMbgeI5k6tc4Drq+p/dc36Z+DU5vGpwKe66q9q7gY7HvivqrolyX2BC+lcr/KPc9R+68zW/q6qV1bVEVV1JJ2jQOdXlXeCTTBb+xv4T+AhScav23w+8NWeb0DLzOL+/g7w3CQLmz9wz6VzHZC67Mf+3pv/BB6X5Kjm3/KXN2Ooy2zt732M01u9vvvBaW4m4Fl0DolfA1zdTC8GHgb8G3BD8/OhzfIB3k/n+rXNwHBT/w06F2Be3TUd2+/tm2/TbO3vCWO+Gu8q7fn+Bl7YjLMZOA+4b7+3b75Ns/jvyQLgb+mEta8C/6vf2zYfp/3Y3z9H5+jaD4GdzeMHNfNeTOfuxhuBN/d72+bjNFv7e2/j9Lp/vzlBkiSpJTxVKkmS1BIGN0mSpJYwuEmSJLWEwU2SJKklDG6SJEktYXCTdFBrPnvs80l+qav2q0ku7mdfkjQZPw5E0kEvydHAP9L5rsEFdD6P6cSq2u/v6U2ysDrfziBJs8bgJklAkncDdwKHArdX1TuSnAr8PnBf4D+A11XV3UnOpvNVWQPAx6vqfzRjbKXzgbMnAn9ZfvuIpFm2sN8NSNI88Xbgy8BPgOHmKNzLgGdW1V1NWHs58FHgjKq6LclC4N+T/FNVjX911p1VtaIfGyDpwGdwkySgqu5M8nHgjqr6cZJfBJ4GjHS+kpAB4OZm8Vck+W90/g1dCjyBe77z9ONz27mkg4nBTZLucXczQef7N8+tqrd0L5DkccAfAsdV1c4k/wDcr2uRO+ekU0kHJe8qlaTJfQb41SSLAZI8LMkRdL5c+nbgh0keCazsY4+SDjIecZOkSVTV5iRvBz6T5D7ALuB0YITOadFrgW8CX+hfl5IONt5VKkmS1BKeKpUkSWoJg5skSVJLGNwkSZJawuAmSZLUEgY3SZKkljC4SZIktYTBTZIkqSUMbpIkSS3x/wMXkEW3c3rUiAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 720x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Scatter plot\n",
"plt.figure(figsize=(10,6))\n",
"plt.scatter(data_ktm['Year AD'], data_ktm['Rainfall (mm)']);\n",
"plt.title('Relation between Year and Rainfall');\n",
"plt.xlabel('Year');\n",
"plt.ylabel('Rainfall');"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [],
"source": [
"from sklearn import datasets, linear_model\n",
"from sklearn.metrics import mean_squared_error, r2_score\n",
"from sklearn.model_selection import train_test_split"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {},
"outputs": [],
"source": [
"# Use only one feature\n",
"X = data_ktm[['Year AD']]\n",
"y = data_ktm['Rainfall (mm)']"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {},
"outputs": [],
"source": [
"# Split the data into training/testing sets\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [],
"source": [
"# Create linear regression object\n",
"model = linear_model.LinearRegression()"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)"
]
},
"execution_count": 93,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Train the model using the training sets\n",
"model.fit(X_train,y_train)"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [],
"source": [
"# Make predictions using the testing set\n",
"y_pred = model.predict(X_test)"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([1261.0617284 , 1304.07407407, 1691.18518519, 1347.08641975])"
]
},
"execution_count": 95,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_pred"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Coefficients: \n",
" [-43.01234568]\n",
"Mean squared error: 52725.24\n",
"Variance score: -0.68\n"
]
}
],
"source": [
"# The coefficients\n",
"print('Coefficients: \\n', model.coef_)\n",
"# The mean squared error\n",
"print(\"Mean squared error: %.2f\"% mean_squared_error(y_test, y_pred))\n",
"# Explained variance score: 1 is perfect prediction\n",
"print('Variance score: %.2f' % r2_score(y_test, y_pred))"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([1605.16049383])"
]
},
"execution_count": 96,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.predict(2003)"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x1eec56e6c18>"
]
},
"execution_count": 107,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plot outputs\n",
"plt.scatter(X_test, y_test, color='black')"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x1eec55baa58>]"
]
},
"execution_count": 104,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(X_test, y_pred, color='blue', linewidth=3)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment