{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Exploratory Data Analysis of the West Nile Virus Dataset" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from IPython.core.interactiveshell import InteractiveShell\n", "InteractiveShell.ast_node_interactivity = \"all\" # see the value of multiple statements at once.\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import matplotlib.cm as cm\n", "%matplotlib inline\n", "import seaborn as sns\n", "pd.set_option('display.max_columns', None) \n", "pd.set_option('display.max_rows', None) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Importing the data" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "weather = pd.read_csv('weather.csv')\n", "train = pd.read_csv('train.csv')\n", "test = pd.read_csv('test.csv')\n", "spray = pd.read_csv('spray.csv')\n", "#sample = pd.read_csv('sampleSubmission.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Data dictionary" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### train.csv and test.csv\n", "\n", "- Id: the id of the record\n", "- Date: date that the WNV test is performed\n", "- Address: approximate address of the location of trap. This is used to send to the GeoCoder. \n", "- Species: the species of mosquitos\n", "- Block: block number of address\n", "- Street: street name\n", "- Trap: Id of the trap\n", "- AddressNumberAndStreet: approximate address returned from GeoCoder\n", "- Latitude, Longitude: Latitude and Longitude returned from GeoCoder\n", "- AddressAccuracy: accuracy returned from GeoCoder\n", "- NumMosquitos: number of mosquitoes caught in this trap\n", "- WnvPresent: whether West Nile Virus was present in these mosquitos. 1 means WNV is present, and 0 means not present. \n", "\n", "#### spray.csv \n", "\n", "- Date, Time: the date and time of the spray\n", "- Latitude, Longitude: the Latitude and Longitude of the spray\n", "\n", "\n", "#### weather.csv \n", "- Column descriptions in noaa_weather_qclcd_documentation.pdf. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Questions from the project instructions:\n", "\n", "1. Describe the data\n", "2. What does it represent? \n", "3. What types are present? \n", "4. What does each data points' distribution look like? \n", "5. What kind of cleaning is needed? \n", "6. Document any potential issues that will need to be resolved" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### We first define a function to perform some steps of the EDA:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def eda(df):\n", " print(\"1) Are there missing values:\")\n", " if df.isnull().any().unique().shape[0] == 2:\n", " if df.isnull().any().unique()[0] == False and df.isnull().any().unique()[1] == False:\n", " print('No\\n')\n", " else:\n", " print(\"Yes|Percentage of missing values in each column:\\n\",df.isnull().sum()/df.shape[0],'\\n')\n", " elif df.isnull().any().unique().shape[0] == 1:\n", " if df.isnull().any().unique() == False:\n", " print('No\\n')\n", " else:\n", " print(\"Yes|Percentage of missing values in each column:\\n\",df.isnull().sum()/df.shape[0],'\\n')\n", "\n", " print(\"2) Which are the data types:\\n\")\n", " print(df.dtypes,'\\n')\n", " print(\"3) Dataframe shape:\",df.shape)\n", " print(\"4) Unique values per columm\")\n", " for col in df.columns.tolist():\n", " print (col,\":\",df[col].nunique()) \n", " print(\"5) Removing duplicates\")\n", " print('Initial shape:',df.shape)\n", " df.groupby(df.columns.tolist()).size().reset_index().rename(columns={0:'count'}).sort_values('count',ascending=False).head()\n", " df.drop_duplicates(inplace=True)\n", " print('Shape after removing duplicates:',df.shape)\n", " return" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1) Looking at `train` `DataFrame`:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateAddressSpeciesBlockStreetTrapAddressNumberAndStreetLatitudeLongitudeAddressAccuracyNumMosquitosWnvPresent
02007-05-294100 North Oak Park Avenue, Chicago, IL 60634,...CULEX PIPIENS/RESTUANS41N OAK PARK AVET0024100 N OAK PARK AVE, Chicago, IL41.95469-87.800991910
12007-05-294100 North Oak Park Avenue, Chicago, IL 60634,...CULEX RESTUANS41N OAK PARK AVET0024100 N OAK PARK AVE, Chicago, IL41.95469-87.800991910
\n", "
" ], "text/plain": [ " Date Address \\\n", "0 2007-05-29 4100 North Oak Park Avenue, Chicago, IL 60634,... \n", "1 2007-05-29 4100 North Oak Park Avenue, Chicago, IL 60634,... \n", "\n", " Species Block Street Trap \\\n", "0 CULEX PIPIENS/RESTUANS 41 N OAK PARK AVE T002 \n", "1 CULEX RESTUANS 41 N OAK PARK AVE T002 \n", "\n", " AddressNumberAndStreet Latitude Longitude AddressAccuracy \\\n", "0 4100 N OAK PARK AVE, Chicago, IL 41.95469 -87.800991 9 \n", "1 4100 N OAK PARK AVE, Chicago, IL 41.95469 -87.800991 9 \n", "\n", " NumMosquitos WnvPresent \n", "0 1 0 \n", "1 1 0 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [ "Number of duplicates: 813\n" ] } ], "source": [ "train = pd.read_csv('train.csv')\n", "train.head(2)\n", "print(\"Number of duplicates:\",train.duplicated().sum())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Feature do be removed\n", "- Address features are redundant some of them can be removed\n", "- `NumMosquitos` and `WnvPresent` are not in the test set. I will remove the first since the number of mosquitos is less relevant than whether West Nile Virus was present in these mosquitos." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Date', 'Address', 'Species', 'Block', 'Street', 'Trap', 'AddressNumberAndStreet', 'Latitude', 'Longitude', 'AddressAccuracy', 'NumMosquitos', 'WnvPresent']\n" ] } ], "source": [ "print(train.columns.tolist())" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateSpeciesTrapLatitudeLongitudeWnvPresent
02007-05-29CULEX PIPIENS/RESTUANST00241.954690-87.8009910
12007-05-29CULEX RESTUANST00241.954690-87.8009910
22007-05-29CULEX RESTUANST00741.994991-87.7692790
32007-05-29CULEX PIPIENS/RESTUANST01541.974089-87.8248120
42007-05-29CULEX RESTUANST01541.974089-87.8248120
\n", "
" ], "text/plain": [ " Date Species Trap Latitude Longitude WnvPresent\n", "0 2007-05-29 CULEX PIPIENS/RESTUANS T002 41.954690 -87.800991 0\n", "1 2007-05-29 CULEX RESTUANS T002 41.954690 -87.800991 0\n", "2 2007-05-29 CULEX RESTUANS T007 41.994991 -87.769279 0\n", "3 2007-05-29 CULEX PIPIENS/RESTUANS T015 41.974089 -87.824812 0\n", "4 2007-05-29 CULEX RESTUANS T015 41.974089 -87.824812 0" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cols_to_keep = ['Date', 'Species', 'Trap','Latitude', 'Longitude', 'WnvPresent']\n", "train = train[cols_to_keep]\n", "train.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### There are many duplicates" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(10506, 6)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateSpeciesTrapLatitudeLongitudeWnvPresent
982007-06-26CULEX PIPIENS/RESTUANST08641.688324-87.6767090
992007-06-26CULEX PIPIENS/RESTUANST08641.688324-87.6767090
2802007-07-11CULEX RESTUANST01541.974089-87.8248120
2812007-07-11CULEX RESTUANST01541.974089-87.8248120
2932007-07-11CULEX PIPIENS/RESTUANST08641.688324-87.6767090
\n", "
" ], "text/plain": [ " Date Species Trap Latitude Longitude \\\n", "98 2007-06-26 CULEX PIPIENS/RESTUANS T086 41.688324 -87.676709 \n", "99 2007-06-26 CULEX PIPIENS/RESTUANS T086 41.688324 -87.676709 \n", "280 2007-07-11 CULEX RESTUANS T015 41.974089 -87.824812 \n", "281 2007-07-11 CULEX RESTUANS T015 41.974089 -87.824812 \n", "293 2007-07-11 CULEX PIPIENS/RESTUANS T086 41.688324 -87.676709 \n", "\n", " WnvPresent \n", "98 0 \n", "99 0 \n", "280 0 \n", "281 0 \n", "293 0 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "(2627, 6)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train.shape\n", "train[train.duplicated(keep=False)].head() # examples of duplicates\n", "train[train.duplicated(keep=False)].shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using the argument `df` equal to the training set `train`. It removes duplicates among other things:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1) Are there missing values:\n", "No\n", "\n", "2) Which are the data types:\n", "\n", "Date object\n", "Species object\n", "Trap object\n", "Latitude float64\n", "Longitude float64\n", "WnvPresent int64\n", "dtype: object \n", "\n", "3) Dataframe shape: (10506, 6)\n", "4) Unique values per columm\n", "Date : 95\n", "Species : 7\n", "Trap : 136\n", "Latitude : 138\n", "Longitude : 138\n", "WnvPresent : 2\n", "5) Removing duplicates\n", "Initial shape: (10506, 6)\n", "Shape after removing duplicates: (8610, 6)\n" ] } ], "source": [ "eda(train)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of duplicates: 0\n" ] } ], "source": [ "print(\"Number of duplicates:\",train.duplicated().sum()) # Sanity check" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Comments:\n", "- There are many duplicates which were removed using the function `eda( )`\n", "- Only `Species` can be transformed into dummies. The others have too many unique values.\n", "- We should examine categorical columns to see if they are unbalanced:\n", " - Using `value_counts` we find that the `WnvPresent` column is highly unbalanced with $\\approx$ 95$\\%$ of zeros." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 95.0\n", "1 5.0\n", "Name: WnvPresent, dtype: float64" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "round(100*train['WnvPresent'].value_counts()/train.shape[0],0)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "train.to_csv('train_new.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating dummies from `Species`" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateTrapLatitudeLongitudeWnvPresentCULEX PIPIENSCULEX PIPIENS/RESTUANSCULEX RESTUANSCULEX SALINARIUSCULEX TARSALISCULEX TERRITANS
02007-05-29T00241.95469-87.8009910010000
12007-05-29T00241.95469-87.8009910001000
\n", "
" ], "text/plain": [ " Date Trap Latitude Longitude WnvPresent CULEX PIPIENS \\\n", "0 2007-05-29 T002 41.95469 -87.800991 0 0 \n", "1 2007-05-29 T002 41.95469 -87.800991 0 0 \n", "\n", " CULEX PIPIENS/RESTUANS CULEX RESTUANS CULEX SALINARIUS CULEX TARSALIS \\\n", "0 1 0 0 0 \n", "1 0 1 0 0 \n", "\n", " CULEX TERRITANS \n", "0 0 \n", "1 0 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Date datetime64[ns]\n", "Trap object\n", "Latitude float64\n", "Longitude float64\n", "WnvPresent int64\n", "CULEX PIPIENS uint8\n", "CULEX PIPIENS/RESTUANS uint8\n", "CULEX RESTUANS uint8\n", "CULEX SALINARIUS uint8\n", "CULEX TARSALIS uint8\n", "CULEX TERRITANS uint8\n", "dtype: object" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train = pd.read_csv('train_new.csv',index_col=0)\n", "train['Date'] = pd.to_datetime(train['Date'])\n", "train = pd.concat([train,pd.get_dummies(train['Species'], drop_first = True)], axis = 1)\n", "train.drop('Species', inplace=True, axis=1)\n", "train.head(2)\n", "train.dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Build a `DataFrame` with the dates broken into pieces" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TrapLatitudeLongitudeWnvPresentCULEX PIPIENSCULEX PIPIENS/RESTUANSCULEX RESTUANSCULEX SALINARIUSCULEX TARSALISCULEX TERRITANSYearDayofYear
0T00241.954690-87.80099100100002007149
1T00241.954690-87.80099100010002007149
2T00741.994991-87.76927900010002007149
3T01541.974089-87.82481200100002007149
4T01541.974089-87.82481200010002007149
\n", "
" ], "text/plain": [ " Trap Latitude Longitude WnvPresent CULEX PIPIENS \\\n", "0 T002 41.954690 -87.800991 0 0 \n", "1 T002 41.954690 -87.800991 0 0 \n", "2 T007 41.994991 -87.769279 0 0 \n", "3 T015 41.974089 -87.824812 0 0 \n", "4 T015 41.974089 -87.824812 0 0 \n", "\n", " CULEX PIPIENS/RESTUANS CULEX RESTUANS CULEX SALINARIUS CULEX TARSALIS \\\n", "0 1 0 0 0 \n", "1 0 1 0 0 \n", "2 0 1 0 0 \n", "3 1 0 0 0 \n", "4 0 1 0 0 \n", "\n", " CULEX TERRITANS Year DayofYear \n", "0 0 2007 149 \n", "1 0 2007 149 \n", "2 0 2007 149 \n", "3 0 2007 149 \n", "4 0 2007 149 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train2 = train.copy()\n", "train2['Year']= train2.Date.dt.year\n", "train2['DayofYear']= train2.Date.dt.dayofyear\n", "train2.drop('Date', inplace=True, axis=1) \n", "train2.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exporting `train` and `train2` after EDA\n", "\n", "The `DataFrame` with the full `Date` is kept because it may be useful for merging different dataframes. Hence:\n", "- `'train_after_eda.csv'` has a `Date` column\n", "- `'train_after_eda_without_date.csv'` has no `Date` column but columns `Year` and `DayofYear`" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "train.to_csv('train_after_eda.csv')\n", "train2.to_csv('train_after_eda_without_date.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2) Applying similar changes to the test data" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "cols_to_keep_test = ['Date', 'Species','Trap', 'Latitude', 'Longitude']" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateSpeciesTrapLatitudeLongitude
02008-06-11CULEX PIPIENS/RESTUANST00241.95469-87.800991
12008-06-11CULEX RESTUANST00241.95469-87.800991
22008-06-11CULEX PIPIENST00241.95469-87.800991
32008-06-11CULEX SALINARIUST00241.95469-87.800991
42008-06-11CULEX TERRITANST00241.95469-87.800991
\n", "
" ], "text/plain": [ " Date Species Trap Latitude Longitude\n", "0 2008-06-11 CULEX PIPIENS/RESTUANS T002 41.95469 -87.800991\n", "1 2008-06-11 CULEX RESTUANS T002 41.95469 -87.800991\n", "2 2008-06-11 CULEX PIPIENS T002 41.95469 -87.800991\n", "3 2008-06-11 CULEX SALINARIUS T002 41.95469 -87.800991\n", "4 2008-06-11 CULEX TERRITANS T002 41.95469 -87.800991" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [ "Number of duplicates: 1533\n" ] } ], "source": [ "test = pd.read_csv('test.csv')\n", "test['Date'] = pd.to_datetime(test['Date'])\n", "test = test[cols_to_keep_test]\n", "test.head()\n", "print(\"Number of duplicates:\",test.duplicated().sum())" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateTrapLatitudeLongitudeCULEX PIPIENSCULEX PIPIENS/RESTUANSCULEX RESTUANSCULEX SALINARIUSCULEX TARSALISCULEX TERRITANSUNSPECIFIED CULEX
02008-06-11T00241.95469-87.8009910100000
12008-06-11T00241.95469-87.8009910010000
22008-06-11T00241.95469-87.8009911000000
32008-06-11T00241.95469-87.8009910001000
42008-06-11T00241.95469-87.8009910000010
\n", "
" ], "text/plain": [ " Date Trap Latitude Longitude CULEX PIPIENS \\\n", "0 2008-06-11 T002 41.95469 -87.800991 0 \n", "1 2008-06-11 T002 41.95469 -87.800991 0 \n", "2 2008-06-11 T002 41.95469 -87.800991 1 \n", "3 2008-06-11 T002 41.95469 -87.800991 0 \n", "4 2008-06-11 T002 41.95469 -87.800991 0 \n", "\n", " CULEX PIPIENS/RESTUANS CULEX RESTUANS CULEX SALINARIUS CULEX TARSALIS \\\n", "0 1 0 0 0 \n", "1 0 1 0 0 \n", "2 0 0 0 0 \n", "3 0 0 1 0 \n", "4 0 0 0 0 \n", "\n", " CULEX TERRITANS UNSPECIFIED CULEX \n", "0 0 0 \n", "1 0 0 \n", "2 0 0 \n", "3 0 0 \n", "4 1 0 " ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test = pd.concat([test,pd.get_dummies(test['Species'], drop_first = True)], axis = 1)\n", "test.drop('Species', inplace=True, axis=1)\n", "test.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Build a `DataFrame` with the dates broken into pieces" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TrapLatitudeLongitudeCULEX PIPIENSCULEX PIPIENS/RESTUANSCULEX RESTUANSCULEX SALINARIUSCULEX TARSALISCULEX TERRITANSUNSPECIFIED CULEXYearDayofYear
0T00241.95469-87.80099101000002008163
1T00241.95469-87.80099100100002008163
2T00241.95469-87.80099110000002008163
3T00241.95469-87.80099100010002008163
4T00241.95469-87.80099100000102008163
\n", "
" ], "text/plain": [ " Trap Latitude Longitude CULEX PIPIENS CULEX PIPIENS/RESTUANS \\\n", "0 T002 41.95469 -87.800991 0 1 \n", "1 T002 41.95469 -87.800991 0 0 \n", "2 T002 41.95469 -87.800991 1 0 \n", "3 T002 41.95469 -87.800991 0 0 \n", "4 T002 41.95469 -87.800991 0 0 \n", "\n", " CULEX RESTUANS CULEX SALINARIUS CULEX TARSALIS CULEX TERRITANS \\\n", "0 0 0 0 0 \n", "1 1 0 0 0 \n", "2 0 0 0 0 \n", "3 0 1 0 0 \n", "4 0 0 0 1 \n", "\n", " UNSPECIFIED CULEX Year DayofYear \n", "0 0 2008 163 \n", "1 0 2008 163 \n", "2 0 2008 163 \n", "3 0 2008 163 \n", "4 0 2008 163 " ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test2 = test.copy()\n", "test2['Year']= test2.Date.dt.year\n", "test2['DayofYear']= test2.Date.dt.dayofyear\n", "test2.drop('Date', inplace=True, axis=1) \n", "test2.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exporting `test` and `test2` after EDA" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "test.to_csv('test_after_eda.csv')\n", "test2.to_csv('test_after_eda_without_date.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3) Now, we look at the `spray` data and perform similar steps:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateTimeLatitudeLongitude
02011-08-296:56:58 PM42.391623-88.089163
12011-08-296:57:08 PM42.391348-88.089163
22011-08-296:57:18 PM42.391022-88.089157
32011-08-296:57:28 PM42.390637-88.089158
42011-08-296:57:38 PM42.390410-88.088858
\n", "
" ], "text/plain": [ " Date Time Latitude Longitude\n", "0 2011-08-29 6:56:58 PM 42.391623 -88.089163\n", "1 2011-08-29 6:57:08 PM 42.391348 -88.089163\n", "2 2011-08-29 6:57:18 PM 42.391022 -88.089157\n", "3 2011-08-29 6:57:28 PM 42.390637 -88.089158\n", "4 2011-08-29 6:57:38 PM 42.390410 -88.088858" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Date datetime64[ns]\n", "Time object\n", "Latitude float64\n", "Longitude float64\n", "dtype: object" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spray = pd.read_csv('spray.csv')\n", "spray['Date'] = pd.to_datetime(spray['Date'])\n", "spray.head()\n", "spray.dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Print out duplicates" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateTimeLatitudeLongitude
4842011-09-077:43:40 PM41.983917-87.793088
4852011-09-077:43:40 PM41.983917-87.793088
4892011-09-077:44:32 PM41.986460-87.794225
4902011-09-077:44:32 PM41.986460-87.794225
4912011-09-077:44:32 PM41.986460-87.794225
\n", "
" ], "text/plain": [ " Date Time Latitude Longitude\n", "484 2011-09-07 7:43:40 PM 41.983917 -87.793088\n", "485 2011-09-07 7:43:40 PM 41.983917 -87.793088\n", "489 2011-09-07 7:44:32 PM 41.986460 -87.794225\n", "490 2011-09-07 7:44:32 PM 41.986460 -87.794225\n", "491 2011-09-07 7:44:32 PM 41.986460 -87.794225" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spray[spray.duplicated(keep=False)].head()" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1) Are there missing values:\n", "Yes|Percentage of missing values in each column:\n", " Date 0.000000\n", "Time 0.039366\n", "Latitude 0.000000\n", "Longitude 0.000000\n", "dtype: float64 \n", "\n", "2) Which are the data types:\n", "\n", "Date datetime64[ns]\n", "Time object\n", "Latitude float64\n", "Longitude float64\n", "dtype: object \n", "\n", "3) Dataframe shape: (14835, 4)\n", "4) Unique values per columm\n", "Date : 10\n", "Time : 8583\n", "Latitude : 12887\n", "Longitude : 13007\n", "5) Removing duplicates\n", "Initial shape: (14835, 4)\n", "Shape after removing duplicates: (14294, 4)\n" ] } ], "source": [ "eda(spray)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sanity check" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateTimeLatitudeLongitude
\n", "
" ], "text/plain": [ "Empty DataFrame\n", "Columns: [Date, Time, Latitude, Longitude]\n", "Index: []" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spray[spray.duplicated(keep=False)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Indeed, printing out the `DataFrame` we see that there are several `NaNs` but the percentage is low. " ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "Date 0\n", "Time 584\n", "Latitude 0\n", "Longitude 0\n", "dtype: int64" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateTimeLatitudeLongitude
10302011-09-07NaN41.987092-87.794286
10312011-09-07NaN41.987620-87.794382
10322011-09-07NaN41.988004-87.794574
10332011-09-07NaN41.988292-87.795486
10342011-09-07NaN41.988100-87.796014
\n", "
" ], "text/plain": [ " Date Time Latitude Longitude\n", "1030 2011-09-07 NaN 41.987092 -87.794286\n", "1031 2011-09-07 NaN 41.987620 -87.794382\n", "1032 2011-09-07 NaN 41.988004 -87.794574\n", "1033 2011-09-07 NaN 41.988292 -87.795486\n", "1034 2011-09-07 NaN 41.988100 -87.796014" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [ "% of NaNs in the `Time` column: 0.04\n" ] } ], "source": [ "spray.isnull().sum()\n", "spray[spray['Time'].isnull()].head()\n", "print('% of NaNs in the `Time` column:',round(spray[spray['Time'].isnull()].shape[0]/spray.shape[0],2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### We can either drop `NaNs` or remove the column altogether. The second option seems to make more sense since time does look like a relevant variable" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateLatitudeLongitude
02011-08-2942.391623-88.089163
12011-08-2942.391348-88.089163
22011-08-2942.391022-88.089157
32011-08-2942.390637-88.089158
42011-08-2942.390410-88.088858
\n", "
" ], "text/plain": [ " Date Latitude Longitude\n", "0 2011-08-29 42.391623 -88.089163\n", "1 2011-08-29 42.391348 -88.089163\n", "2 2011-08-29 42.391022 -88.089157\n", "3 2011-08-29 42.390637 -88.089158\n", "4 2011-08-29 42.390410 -88.088858" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#spray.dropna(inplace=True)\n", "spray.drop('Time', inplace=True, axis=1)\n", "spray.head()" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Date 0\n", "Latitude 0\n", "Longitude 0\n", "dtype: int64" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spray.isnull().sum() # Sanity check" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
LatitudeLongitudeYearDayofYear
042.391623-88.0891632011241
142.391348-88.0891632011241
242.391022-88.0891572011241
342.390637-88.0891582011241
442.390410-88.0888582011241
\n", "
" ], "text/plain": [ " Latitude Longitude Year DayofYear\n", "0 42.391623 -88.089163 2011 241\n", "1 42.391348 -88.089163 2011 241\n", "2 42.391022 -88.089157 2011 241\n", "3 42.390637 -88.089158 2011 241\n", "4 42.390410 -88.088858 2011 241" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spray2 = spray.copy()\n", "spray2['Year']= spray2.Date.dt.year\n", "spray2['DayofYear']= spray2.Date.dt.dayofyear\n", "spray2.drop('Date', inplace=True, axis=1) \n", "spray2.head()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": true }, "outputs": [], "source": [ "spray.to_csv('spray_after_eda.csv')\n", "spray2.to_csv('spray_after_eda_without_date.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4) Looking at the `weather` `DataFrame`:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": true }, "outputs": [], "source": [ "weather = pd.read_csv('weather.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Print a `DataFrame` of duplicates rows and its shape" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
StationDateTmaxTminTavgDepartDewPointWetBulbHeatCoolSunriseSunsetCodeSumDepthWater1SnowFallPrecipTotalStnPressureSeaLevelResultSpeedResultDirAvgSpeed
\n", "
" ], "text/plain": [ "Empty DataFrame\n", "Columns: [Station, Date, Tmax, Tmin, Tavg, Depart, DewPoint, WetBulb, Heat, Cool, Sunrise, Sunset, CodeSum, Depth, Water1, SnowFall, PrecipTotal, StnPressure, SeaLevel, ResultSpeed, ResultDir, AvgSpeed]\n", "Index: []" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "0" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "weather[weather.duplicated(keep=False)].head(2)\n", "weather[weather.duplicated(keep=False)].shape[0]" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1) Are there missing values:\n", "No\n", "\n", "2) Which are the data types:\n", "\n", "Station int64\n", "Date object\n", "Tmax int64\n", "Tmin int64\n", "Tavg object\n", "Depart object\n", "DewPoint int64\n", "WetBulb object\n", "Heat object\n", "Cool object\n", "Sunrise object\n", "Sunset object\n", "CodeSum object\n", "Depth object\n", "Water1 object\n", "SnowFall object\n", "PrecipTotal object\n", "StnPressure object\n", "SeaLevel object\n", "ResultSpeed float64\n", "ResultDir int64\n", "AvgSpeed object\n", "dtype: object \n", "\n", "3) Dataframe shape: (2944, 22)\n", "4) Unique values per columm\n", "Station : 2\n", "Date : 1472\n", "Tmax : 63\n", "Tmin : 54\n", "Tavg : 60\n", "Depart : 42\n", "DewPoint : 54\n", "WetBulb : 48\n", "Heat : 31\n", "Cool : 31\n", "Sunrise : 122\n", "Sunset : 119\n", "CodeSum : 98\n", "Depth : 2\n", "Water1 : 1\n", "SnowFall : 4\n", "PrecipTotal : 168\n", "StnPressure : 104\n", "SeaLevel : 102\n", "ResultSpeed : 190\n", "ResultDir : 36\n", "AvgSpeed : 178\n", "5) Removing duplicates\n", "Initial shape: (2944, 22)\n", "Shape after removing duplicates: (2944, 22)\n" ] } ], "source": [ "eda(weather)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `Water1` column has just 1 value namely `M` and the latter means missing. We remove this column." ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "M 2944\n", "Name: Water1, dtype: int64" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "1" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "array(['M'], dtype=object)" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "weather['Water1'].value_counts()\n", "weather['Water1'].nunique()\n", "weather['Water1'].unique()\n", "weather.drop('Water1', inplace=True, axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `Depth` column has just two values namely 0 and `M` and the latter means missing. We remove this column." ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "M 1472\n", "0 1472\n", "Name: Depth, dtype: int64" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "2" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "array(['0', 'M'], dtype=object)" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "weather['Depth'].value_counts()\n", "weather['Depth'].nunique()\n", "weather['Depth'].unique()\n", "weather.drop('Depth', inplace=True, axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Converting dates into `datetime`:" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": true, "scrolled": true }, "outputs": [], "source": [ "weather['Date'] = pd.to_datetime(weather['Date'])" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": true }, "outputs": [], "source": [ "weather.to_csv('weather_new.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Concerning stations 1 and 2\n", "\n", "- As we saw above, there are two types of `Station`, namely, 1 and 2.\n", "\n", "#### From Kaggle's Website Weather Data:\n", "\n", "- Hot and dry conditions are more favorable for West Nile virus than cold and wet. \n", "- We provide you with the dataset from NOAA of the weather conditions of 2007 to 2014, during the months of the tests. \n", "\n", " - Station 1: CHICAGO O'HARE INTERNATIONAL AIRPORT Lat: 41.995 Lon: -87.933 Elev: 662 ft. above sea level\n", " - Station 2: CHICAGO MIDWAY INTL ARPT Lat: 41.786 Lon: -87.752 Elev: 612 ft. above sea level\n", " \n", "- Each date had 2 records, 1 for each `Station=1` and other for `Station=2`. However as we shall see most missing values are in the latter which we will drop." ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1 1472\n", "2 1472\n", "Name: Station, dtype: int64" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "array([1, 2])" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "weather['Station'].value_counts()\n", "weather['Station'].unique()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### The `for` below searches each column for data that cannot be converted to numbers:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": true }, "outputs": [], "source": [ "cols_to_keep = ['Tmax', 'Tmin', 'Tavg', 'Depart', 'DewPoint', 'WetBulb', 'Heat', \\\n", " 'Cool', 'Sunrise', 'Sunset', 'SnowFall', \\\n", " 'PrecipTotal', 'StnPressure', 'SeaLevel', 'ResultSpeed', 'ResultDir', 'AvgSpeed']" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Columns with non-convertibles:\n", "\n", "Station 1 \n", "\n", "WetBulb | Non-convertibles, their frequency and their station: ('M', 3)\n", "SnowFall | Non-convertibles, their frequency and their station: (' T', 12)\n", "PrecipTotal | Non-convertibles, their frequency and their station: (' T', 163)\n", "StnPressure | Non-convertibles, their frequency and their station: ('M', 2)\n", "SeaLevel | Non-convertibles, their frequency and their station: ('M', 5)\n", "\n", "Station 2 \n", "\n", "Tavg | Non-convertibles, their frequency and their station: ('M', 11)\n", "Depart | Non-convertibles, their frequency and their station: ('M', 1472)\n", "WetBulb | Non-convertibles, their frequency and their station: ('M', 1)\n", "Heat | Non-convertibles, their frequency and their station: ('M', 11)\n", "Cool | Non-convertibles, their frequency and their station: ('M', 11)\n", "Sunrise | Non-convertibles, their frequency and their station: ('-', 1472)\n", "Sunset | Non-convertibles, their frequency and their station: ('-', 1472)\n", "SnowFall | Non-convertibles, their frequency and their station: ('M', 1472)\n", "PrecipTotal | Non-convertibles, their frequency and their station: (' T', 155)\n", "PrecipTotal | Non-convertibles, their frequency and their station: ('M', 2)\n", "StnPressure | Non-convertibles, their frequency and their station: ('M', 2)\n", "SeaLevel | Non-convertibles, their frequency and their station: ('M', 4)\n", "AvgSpeed | Non-convertibles, their frequency and their station: ('M', 3)\n", "\n" ] } ], "source": [ "print('Columns with non-convertibles:\\n')\n", "for station in [1,2]:\n", " print('Station',station,'\\n')\n", " weather_station = weather[weather['Station']==station]\n", " for col in weather_station[cols_to_keep]:\n", " for x in sorted(weather_station[col].unique()):\n", " try:\n", " x = float(x)\n", " except:\n", " print(col,'| Non-convertibles, their frequency and their station:',\\\n", " (x,weather_station[weather_station[col] == x][col].count()))\n", " print(\"\")" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": true }, "outputs": [], "source": [ "weather.to_csv('weather_new_2.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Indeed, as stated above, most missing values are in the station 2. We will there drop rows with `Station=2`" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Station int64\n", "Date datetime64[ns]\n", "Tmax int64\n", "Tmin int64\n", "Tavg object\n", "Depart object\n", "DewPoint int64\n", "WetBulb object\n", "Heat object\n", "Cool object\n", "Sunrise object\n", "Sunset object\n", "CodeSum object\n", "SnowFall object\n", "PrecipTotal object\n", "StnPressure object\n", "SeaLevel object\n", "ResultSpeed float64\n", "ResultDir int64\n", "AvgSpeed object\n", "dtype: object" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "array([1])" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "weather = weather[weather['Station'] == 1]\n", "weather.dtypes\n", "weather['Station'].unique()\n", "del weather['Station']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Only for station 1 we have:" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Columns with non-convertibles:\n", "\n", "WetBulb | Non-convertibles, their frequency and their station: ('M', 3)\n", "SnowFall | Non-convertibles, their frequency and their station: (' T', 12)\n", "PrecipTotal | Non-convertibles, their frequency and their station: (' T', 163)\n", "StnPressure | Non-convertibles, their frequency and their station: ('M', 2)\n", "SeaLevel | Non-convertibles, their frequency and their station: ('M', 5)\n" ] } ], "source": [ "print('Columns with non-convertibles:\\n')\n", "for col in weather[cols_to_keep]:\n", " for x in sorted(weather[col].unique()):\n", " try:\n", " x = float(x)\n", " except:\n", " print(col,'| Non-convertibles, their frequency and their station:',\n", " (x,weather[weather[col] == x][col].count()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The strings 'T' and 'M' stand for trace and missing data. Traces are defined to be smaller that 0.05. Following cells take care of that:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": true }, "outputs": [], "source": [ "cols_with_M = ['WetBulb', 'StnPressure', 'SeaLevel']\n", "for col in cols_with_M:\n", " weather[col] = weather[col].str.strip()\n", " weather[col] = weather[col].str.replace('M','0.0').astype(float)\n", " \n", "cols_with_T = ['SnowFall', 'PrecipTotal']\n", "for col in cols_with_T:\n", " weather[col] = weather[col].str.replace(' T','0.05').astype(float)\n", " \n", "for col in cols_to_keep:\n", " weather[col] = weather[col].astype(float)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": true }, "outputs": [], "source": [ "weather.to_csv('weather_new_4.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### There are many zeros in the data \n", "\n", "In particular in the columns:\n", "\n", " cols_zeros = ['Heat','Cool','SnowFall']\n", " \n", "there is a substantial quantity of zeros. We will drop these." ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": true }, "outputs": [], "source": [ "weather = pd.read_csv('weather_new_4.csv',index_col=0)\n", "weather['Date'] = pd.to_datetime(weather['Date'])" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Heat 0.0 0.61413\n", "Name: Heat, dtype: float64\n", "Cool 0.0 0.415082\n", "Name: Cool, dtype: float64\n", "SnowFall 0.0 0.991168\n", "Name: SnowFall, dtype: float64\n" ] } ], "source": [ "cols_zeros = ['Heat','Cool','SnowFall']\n", "for col in cols_zeros:\n", " print('{}'.format(col),weather[weather[col] == 0.0][col].value_counts()/weather.shape[0]);" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateTmaxTminTavgDepartDewPointWetBulbSunriseSunsetCodeSumPrecipTotalStnPressureSeaLevelResultSpeedResultDirAvgSpeed
02007-05-0183.050.067.014.051.056.0448.01849.00.0029.1029.821.727.09.2
22007-05-0259.042.051.0-3.042.047.0447.01850.0BR0.0029.3830.0913.04.013.4
42007-05-0366.046.056.02.040.048.0446.01851.00.0029.3930.1211.77.011.9
62007-05-0466.049.058.04.041.050.0444.01852.0RA0.0529.3130.0510.48.010.8
82007-05-0566.053.060.05.038.049.0443.01853.00.0529.4030.1011.77.012.0
\n", "
" ], "text/plain": [ " Date Tmax Tmin Tavg Depart DewPoint WetBulb Sunrise Sunset \\\n", "0 2007-05-01 83.0 50.0 67.0 14.0 51.0 56.0 448.0 1849.0 \n", "2 2007-05-02 59.0 42.0 51.0 -3.0 42.0 47.0 447.0 1850.0 \n", "4 2007-05-03 66.0 46.0 56.0 2.0 40.0 48.0 446.0 1851.0 \n", "6 2007-05-04 66.0 49.0 58.0 4.0 41.0 50.0 444.0 1852.0 \n", "8 2007-05-05 66.0 53.0 60.0 5.0 38.0 49.0 443.0 1853.0 \n", "\n", " CodeSum PrecipTotal StnPressure SeaLevel ResultSpeed ResultDir \\\n", "0 0.00 29.10 29.82 1.7 27.0 \n", "2 BR 0.00 29.38 30.09 13.0 4.0 \n", "4 0.00 29.39 30.12 11.7 7.0 \n", "6 RA 0.05 29.31 30.05 10.4 8.0 \n", "8 0.05 29.40 30.10 11.7 7.0 \n", "\n", " AvgSpeed \n", "0 9.2 \n", "2 13.4 \n", "4 11.9 \n", "6 10.8 \n", "8 12.0 " ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "for col in cols_zeros:\n", " weather.drop(col, inplace=True, axis=1)\n", "weather.head()" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": true }, "outputs": [], "source": [ "weather.to_csv('weather_new_5.csv')" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": true }, "outputs": [], "source": [ "weather = pd.read_csv('weather_new_5.csv',index_col=0)\n", "weather['Date'] = pd.to_datetime(weather['Date'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### `CodeSum`\n", "\n", "If `CodeSum` entries are letters, they indicate some significant weather event. We can dummify it.\n", "\n", "Let us use regex. We use `'^\\w'` to match a string consisting of a single character where that character is alphanumeric (the '\\w' means \"any word character\"), an underscore or an asterisk." ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "0 \n", "2 BR\n", "4 \n", "6 RA\n", "8 \n", "10 \n", "12 RA\n", "14 BR\n", "16 BR HZ\n", "18 BR\n", "20 \n", "22 \n", "24 \n", "26 \n", "28 RA BR\n", "30 RA BR\n", "32 \n", "34 \n", "36 \n", "38 RA VCTS\n", "40 \n", "42 \n", "44 \n", "46 RA HZ\n", "48 \n", "50 TSRA RA BR HZ\n", "52 RA BR\n", "54 RA\n", "56 BR HZ\n", "58 HZ\n", "60 RA HZ\n", "62 TSRA BR HZ\n", "64 RA BR\n", "66 TSRA RA BR HZ\n", "68 TSRA RA BR\n", "70 RA BR\n", "72 RA\n", "74 \n", "76 \n", "78 \n", "80 \n", "82 \n", "84 \n", "86 \n", "88 \n", "90 \n", "92 RA HZ\n", "94 HZ\n", "96 TSRA RA HZ\n", "98 RA\n", "100 \n", "102 RA\n", "104 RA\n", "106 RA BR\n", "108 BR HZ\n", "110 BR HZ\n", "112 TSRA BR HZ VCTS\n", "114 TSRA\n", "116 \n", "118 \n", "120 \n", "122 \n", "124 \n", "126 TSRA RA BR\n", "128 TSRA BR HZ FU\n", "130 BR HZ FU\n", "132 \n", "134 \n", "136 \n", "138 TSRA RA VCTS\n", "140 HZ VCTS\n", "142 \n", "144 \n", "146 \n", "148 \n", "150 \n", "152 RA BR\n", "154 RA BR VCTS\n", "156 TSRA RA BR VCTS\n", "158 DZ BR\n", "160 \n", "162 \n", "164 \n", "166 \n", "168 \n", "170 \n", "172 TS TSRA RA BR HZ\n", "174 RA BR HZ\n", "176 BR HZ\n", "178 \n", "180 \n", "182 \n", "184 HZ\n", "186 HZ\n", "188 \n", "190 RA\n", "192 TSRA RA BR HZ\n", "194 TSRA RA BR HZ\n", "196 RA BR\n", "198 TSRA RA BR\n", "200 TSRA RA\n", "202 BR\n", "204 BR HZ\n", "206 TSRA\n", "208 BR\n", "210 TS TSRA RA BR\n", "212 TSRA RA BR\n", "214 BR\n", "216 \n", "218 RA\n", "220 TS RA BR\n", "222 TSRA RA BR\n", "224 BR HZ\n", "226 TS TSRA RA\n", "228 TS TSRA RA BR VCTS\n", "230 TSRA RA\n", "232 RA\n", "234 \n", "236 \n", "238 \n", "240 \n", "242 \n", "244 \n", "246 \n", "248 \n", "250 \n", "252 \n", "254 RA\n", "256 RA HZ\n", "258 TSRA RA BR HZ\n", "260 \n", "262 \n", "264 RA BR\n", "266 \n", "268 \n", "270 \n", "272 \n", "274 \n", "276 \n", "278 \n", "280 \n", "282 \n", "284 \n", "286 HZ\n", "288 \n", "290 \n", "292 \n", "294 TS RA\n", "296 RA\n", "298 BR\n", "300 \n", "302 \n", "304 TSRA BR\n", "306 RA DZ FG+ BCFG BR\n", "308 RA FG+ MIFG BR\n", "310 \n", "312 HZ\n", "314 HZ\n", "316 \n", "318 \n", "320 \n", "322 \n", "324 RA DZ\n", "326 \n", "328 \n", "330 \n", "332 RA\n", "334 RA BR\n", "336 RA DZ BR\n", "338 RA HZ\n", "340 RA BR\n", "342 RA BR\n", "344 \n", "346 \n", "348 RA DZ BR\n", "350 \n", "352 \n", "354 RA\n", "356 RA BR\n", "358 RA BR\n", "360 \n", "362 \n", "364 \n", "366 \n", "368 \n", "370 TSRA RA BR\n", "372 RA\n", "374 \n", "376 \n", "378 \n", "380 RA BR\n", "382 \n", "384 \n", "386 \n", "388 RA BR\n", "390 \n", "392 TSRA RA\n", "394 DZ BR\n", "396 \n", "398 \n", "400 RA\n", "402 \n", "404 RA\n", "406 \n", "408 \n", "410 \n", "412 \n", "414 \n", "416 TSRA\n", "418 TSRA RA BR\n", "420 \n", "422 \n", "424 RA\n", "426 TSRA RA BR\n", "428 \n", "430 \n", "432 RA\n", "434 TSRA RA FG+ FG BR\n", "436 TSRA DZ FG+ FG BR HZ\n", "438 TSRA BR\n", "440 RA\n", "442 TS RA BR\n", "444 TS TSRA RA\n", "446 RA BR\n", "448 RA\n", "450 \n", "452 \n", "454 TSRA RA BR\n", "456 \n", "458 RA\n", "460 \n", "462 \n", "464 \n", "466 \n", "468 TSRA RA\n", "470 \n", "472 TS TSRA\n", "474 \n", "476 \n", "478 RA\n", "480 BR\n", "482 RA\n", "484 TSRA HZ\n", "486 RA BR\n", "488 \n", "490 \n", "492 TS RA BR\n", "494 \n", "496 \n", "498 \n", "500 \n", "502 TSRA RA\n", "504 \n", "506 \n", "508 TSRA RA BR\n", "510 TSRA RA BR\n", "512 TS TSRA RA BR\n", "514 \n", "516 \n", "518 \n", "520 \n", "522 \n", "524 RA\n", "526 RA BR VCTS\n", "528 TSRA\n", "530 TSRA RA\n", "532 \n", "534 \n", "536 \n", "538 \n", "540 BR\n", "542 \n", "544 \n", "546 TSRA RA\n", "548 \n", "550 RA BR\n", "552 RA\n", "554 \n", "556 \n", "558 TS TSRA RA BR\n", "560 HZ\n", "562 \n", "564 \n", "566 \n", "568 \n", "570 \n", "572 \n", "574 \n", "576 RA\n", "578 BR HZ\n", "580 \n", "582 \n", "584 \n", "586 \n", "588 \n", "590 \n", "592 RA\n", "594 TSRA BR HZ\n", "596 BR\n", "598 \n", "600 \n", "602 \n", "604 \n", "606 RA BR\n", "608 RA BR\n", "610 \n", "612 \n", "614 \n", "616 TS\n", "618 TSRA\n", "620 RA BR\n", "622 \n", "624 BR\n", "626 \n", "628 RA BR\n", "630 \n", "632 \n", "634 RA BR\n", "636 RA DZ BR\n", "638 RA BR\n", "640 RA BR\n", "642 \n", "644 \n", "646 \n", "648 \n", "650 \n", "652 \n", "654 FG+ BR HZ\n", "656 BR HZ\n", "658 \n", "660 TS TSRA BR HZ\n", "662 BR HZ\n", "664 BR\n", "666 BR\n", "668 \n", "670 RA BR\n", "672 \n", "674 \n", "676 \n", "678 RA\n", "680 \n", "682 RA\n", "684 \n", "686 RA BR\n", "688 RA BR\n", "690 \n", "692 \n", "694 \n", "696 BR\n", "698 \n", "700 RA\n", "702 RA BR\n", "704 \n", "706 \n", "708 RA BR\n", "710 \n", "712 RA BR\n", "714 \n", "716 \n", "718 RA\n", "720 TSRA RA BR\n", "722 RA DZ BR\n", "724 RA\n", "726 \n", "728 \n", "730 \n", "732 \n", "734 \n", "736 RA\n", "738 \n", "740 \n", "742 \n", "744 \n", "746 RA BR\n", "748 RA BR HZ\n", "750 TSRA RA\n", "752 \n", "754 \n", "756 \n", "758 \n", "760 TSRA RA BR\n", "762 \n", "764 RA BR\n", "766 BR\n", "768 \n", "770 \n", "772 \n", "774 \n", "776 \n", "778 \n", "780 \n", "782 \n", "784 RA DZ\n", "786 TSRA RA BR\n", "788 DZ BR HZ\n", "790 \n", "792 \n", "794 RA\n", "796 \n", "798 TSRA RA\n", "800 RA BR\n", "802 \n", "804 \n", "806 \n", "808 \n", "810 BR\n", "812 TSRA RA BR\n", "814 DZ BR\n", "816 RA\n", "818 RA HZ\n", "820 RA\n", "822 RA BR\n", "824 \n", "826 \n", "828 RA BR\n", "830 BR HZ\n", "832 RA BR\n", "834 TS TSRA BR\n", "836 \n", "838 \n", "840 TSRA RA\n", "842 \n", "844 TSRA\n", "846 \n", "848 \n", "850 TS RA\n", "852 \n", "854 \n", "856 \n", "858 RA DZ\n", "860 \n", "862 \n", "864 RA BR FU\n", "866 RA BR HZ\n", "868 \n", "870 RA\n", "872 RA\n", "874 \n", "876 RA BR\n", "878 TSRA BR HZ\n", "880 \n", "882 \n", "884 \n", "886 BR\n", "888 \n", "890 \n", "892 \n", "894 \n", "896 \n", "898 RA DZ\n", "900 BR HZ\n", "902 TS BR HZ\n", "904 TSRA RA\n", "906 \n", "908 RA\n", "910 RA\n", "912 RA\n", "914 \n", "916 \n", "918 \n", "920 RA\n", "922 \n", "924 \n", "926 BR\n", "928 \n", "930 \n", "932 RA BR\n", "934 RA BR\n", "936 \n", "938 \n", "940 \n", "942 \n", "944 \n", "946 \n", "948 \n", "950 TSRA\n", "952 TSRA RA BR\n", "954 \n", "956 RA\n", "958 RA\n", "960 RA\n", "962 \n", "964 \n", "966 \n", "968 \n", "970 RA BR\n", "972 RA BR\n", "974 RA BR\n", "976 RA DZ BR\n", "978 \n", "980 \n", "982 \n", "984 \n", "986 \n", "988 BR\n", "990 BR HZ\n", "992 RA BR HZ\n", "994 BR\n", "996 \n", "998 BR HZ\n", "1000 BR HZ\n", "1002 BR\n", "1004 FG+ BR\n", "1006 FG+ MIFG BR\n", "1008 \n", "1010 \n", "1012 \n", "1014 \n", "1016 BR\n", "1018 \n", "1020 RA DZ BR\n", "1022 DZ BR HZ\n", "1024 BR HZ\n", "1026 BR\n", "1028 BR\n", "1030 RA DZ BR\n", "1032 BR\n", "1034 TSRA RA FG BR\n", "1036 RA\n", "1038 \n", "1040 \n", "1042 RA BR\n", "1044 RA BR\n", "1046 RA DZ BR\n", "1048 \n", "1050 \n", "1052 RA DZ BR\n", "1054 \n", "1056 RA DZ BR\n", "1058 RA BR\n", "1060 \n", "1062 \n", "1064 RA DZ BR\n", "1066 \n", "1068 RA DZ BR\n", "1070 RA DZ BR\n", "1072 RA\n", "1074 DZ\n", "1076 \n", "1078 \n", "1080 RA\n", "1082 RA\n", "1084 RA BR\n", "1086 RA DZ BR\n", "1088 RA DZ BR\n", "1090 RA BR\n", "1092 RA BR\n", "1094 RA BR\n", "1096 BR HZ\n", "1098 RA BR HZ\n", "1100 RA DZ BR\n", "1102 \n", "1104 RA BR\n", "1106 RA BR\n", "1108 \n", "1110 \n", "1112 \n", "1114 TSRA\n", "1116 TSRA RA BR\n", "1118 RA\n", "1120 \n", "1122 RA\n", "1124 RA DZ BR\n", "1126 TSRA RA FG BR\n", "1128 TSRA RA BR\n", "1130 \n", "1132 \n", "1134 \n", "1136 RA\n", "1138 \n", "1140 \n", "1142 RA\n", "1144 RA DZ BR HZ\n", "1146 FG+ BR HZ\n", "1148 \n", "1150 \n", "1152 \n", "1154 \n", "1156 \n", "1158 \n", "1160 \n", "1162 \n", "1164 TSRA RA BR\n", "1166 BR HZ\n", "1168 TSRA RA BR\n", "1170 \n", "1172 \n", "1174 RA BR\n", "1176 RA\n", "1178 \n", "1180 RA BR\n", "1182 BR\n", "1184 \n", "1186 TS RA\n", "1188 TSRA RA BR\n", "1190 RA BR\n", "1192 RA BR\n", "1194 RA BR\n", "1196 \n", "1198 \n", "1200 TSRA BR\n", "1202 \n", "1204 \n", "1206 TSRA BR\n", "1208 \n", "1210 TS TSRA RA BR\n", "1212 \n", "1214 \n", "1216 TS TSRA\n", "1218 \n", "1220 \n", "1222 \n", "1224 \n", "1226 \n", "1228 \n", "1230 \n", "1232 \n", "1234 \n", "1236 TSRA RA\n", "1238 BR\n", "1240 TSRA RA BR\n", "1242 \n", "1244 \n", "1246 TSRA RA BR\n", "1248 BR\n", "1250 \n", "1252 BR\n", "1254 \n", "1256 \n", "1258 \n", "1260 \n", "1262 RA\n", "1264 \n", "1266 \n", "1268 \n", "1270 TS TSRA RA BR\n", "1272 TSRA RA BR\n", "1274 \n", "1276 \n", "1278 \n", "1280 BR\n", "1282 \n", "1284 RA\n", "1286 TS TSRA RA BR\n", "1288 BR HZ\n", "1290 RA BR\n", "1292 TSRA RA BR\n", "1294 TSRA RA BR\n", "1296 \n", "1298 \n", "1300 \n", "1302 RA BR\n", "1304 TS\n", "1306 \n", "1308 BR\n", "1310 \n", "1312 TS BR\n", "1314 \n", "1316 \n", "1318 \n", "1320 RA\n", "1322 RA\n", "1324 \n", "1326 RA\n", "1328 RA BR\n", "1330 \n", "1332 \n", "1334 \n", "1336 \n", "1338 \n", "1340 \n", "1342 \n", "1344 \n", "1346 \n", "1348 \n", "1350 RA\n", "1352 RA BR\n", "1354 \n", "1356 \n", "1358 RA\n", "1360 \n", "1362 \n", "1364 \n", "1366 \n", "1368 \n", "1370 RA BR\n", "1372 \n", "1374 \n", "1376 \n", "1378 \n", "1380 RA\n", "1382 \n", "1384 TSRA BR\n", "1386 RA\n", "1388 \n", "1390 TSRA RA\n", "1392 \n", "1394 \n", "1396 RA BR\n", "1398 \n", "1400 RA\n", "1402 \n", "1404 \n", "1406 \n", "1408 \n", "1410 RA BR\n", "1412 RA\n", "1414 RA\n", "1416 \n", "1418 \n", "1420 \n", "1422 \n", "1424 \n", "1426 \n", "1428 \n", "1430 \n", "1432 \n", "1434 TSRA RA\n", "1436 \n", "1438 \n", "1440 BR\n", "1442 \n", "1444 \n", "1446 \n", "1448 \n", "1450 \n", "1452 \n", "1454 RA BR\n", "1456 RA BR\n", "1458 BR\n", "1460 RA BR\n", "1462 \n", "1464 \n", "1466 \n", "1468 \n", "1470 \n", "1472 \n", "1474 \n", "1476 RA\n", "1478 \n", "1480 RA BR\n", "1482 RA\n", "1484 \n", "1486 \n", "1488 RA\n", "1490 \n", "1492 TS TSRA BR HZ\n", "1494 TS TSRA BR\n", "1496 RA BR\n", "1498 RA BR\n", "1500 RA BR\n", "1502 \n", "1504 \n", "1506 RA DZ BR\n", "1508 BR HZ\n", "1510 BR\n", "1512 BR\n", "1514 TSRA RA BR\n", "1516 \n", "1518 \n", "1520 TSRA RA BR\n", "1522 RA BR\n", "1524 RA\n", "1526 RA BR\n", "1528 TS RA FG+ FG BR\n", "1530 \n", "1532 TS\n", "1534 \n", "1536 RA\n", "1538 \n", "1540 TSRA\n", "1542 \n", "1544 \n", "1546 \n", "1548 TSRA\n", "1550 TSRA RA BR\n", "1552 RA BR HZ\n", "1554 RA DZ FG+ FG BR\n", "1556 BR\n", "1558 \n", "1560 \n", "1562 TSRA RA BR\n", "1564 RA BR\n", "1566 \n", "1568 \n", "1570 \n", "1572 TSRA RA BR\n", "1574 RA BR SQ\n", "1576 RA\n", "1578 RA BR\n", "1580 \n", "1582 \n", "1584 \n", "1586 RA HZ\n", "1588 \n", "1590 \n", "1592 \n", "1594 \n", "1596 BR\n", "1598 \n", "1600 \n", "1602 \n", "1604 \n", "1606 RA\n", "1608 \n", "1610 \n", "1612 HZ\n", "1614 HZ\n", "1616 RA\n", "1618 \n", "1620 \n", "1622 \n", "1624 RA\n", "1626 \n", "1628 RA HZ\n", "1630 \n", "1632 BR HZ\n", "1634 TS\n", "1636 TS TSRA RA BR\n", "1638 TS TSRA RA BR\n", "1640 TS TSRA BR\n", "1642 \n", "1644 \n", "1646 TS TSRA\n", "1648 TSRA RA BR\n", "1650 BR\n", "1652 \n", "1654 \n", "1656 \n", "1658 \n", "1660 \n", "1662 \n", "1664 RA\n", "1666 RA BR\n", "1668 TSRA BR\n", "1670 RA BR\n", "1672 BR\n", "1674 \n", "1676 \n", "1678 \n", "1680 RA\n", "1682 RA\n", "1684 \n", "1686 \n", "1688 \n", "1690 \n", "1692 \n", "1694 RA FG BR\n", "1696 RA\n", "1698 \n", "1700 TSRA BR\n", "1702 BR\n", "1704 \n", "1706 \n", "1708 \n", "1710 \n", "1712 \n", "1714 RA\n", "1716 RA\n", "1718 \n", "1720 HZ\n", "1722 RA BR HZ\n", "1724 \n", "1726 \n", "1728 \n", "1730 \n", "1732 RA\n", "1734 RA\n", "1736 BR\n", "1738 BR\n", "1740 \n", "1742 BR HZ FU\n", "1744 RA BR HZ FU\n", "1746 \n", "1748 \n", "1750 \n", "1752 RA DZ BR\n", "1754 RA BR\n", "1756 MIFG BCFG BR\n", "1758 RA\n", "1760 \n", "1762 \n", "1764 RA BR\n", "1766 RA\n", "1768 RA BR\n", "1770 RA BR\n", "1772 RA BR\n", "1774 RA BR\n", "1776 RA\n", "1778 \n", "1780 \n", "1782 \n", "1784 \n", "1786 \n", "1788 \n", "1790 \n", "1792 \n", "1794 \n", "1796 \n", "1798 \n", "1800 \n", "1802 RA BR\n", "1804 \n", "1806 \n", "1808 RA\n", "1810 \n", "1812 RA\n", "1814 RA BR\n", "1816 RA\n", "1818 \n", "1820 \n", "1822 TSRA RA BR\n", "1824 \n", "1826 RA\n", "1828 \n", "1830 RA\n", "1832 \n", "1834 \n", "1836 RA BR\n", "1838 BR\n", "1840 RA BR HZ\n", "1842 FG+ BR\n", "1844 TS TSRA\n", "1846 TSRA BR HZ\n", "1848 RA BR HZ\n", "1850 TS TSRA RA BR\n", "1852 TSRA RA FG+ FG BR HZ\n", "1854 BR\n", "1856 RA\n", "1858 \n", "1860 \n", "1862 RA\n", "1864 \n", "1866 \n", "1868 TS RA\n", "1870 \n", "1872 \n", "1874 \n", "1876 \n", "1878 TSRA RA\n", "1880 \n", "1882 \n", "1884 \n", "1886 \n", "1888 \n", "1890 RA\n", "1892 \n", "1894 \n", "1896 \n", "1898 \n", "1900 RA BR\n", "1902 RA\n", "1904 \n", "1906 \n", "1908 \n", "1910 \n", "1912 \n", "1914 \n", "1916 \n", "1918 \n", "1920 \n", "1922 RA\n", "1924 \n", "1926 \n", "1928 \n", "1930 \n", "1932 RA BR\n", "1934 RA BR\n", "1936 \n", "1938 \n", "1940 \n", "1942 RA\n", "1944 \n", "1946 \n", "1948 \n", "1950 \n", "1952 \n", "1954 \n", "1956 TSRA HZ\n", "1958 TS TSRA RA\n", "1960 \n", "1962 \n", "1964 BR HZ\n", "1966 \n", "1968 \n", "1970 TSRA\n", "1972 \n", "1974 \n", "1976 \n", "1978 \n", "1980 \n", "1982 \n", "1984 \n", "1986 TS TSRA RA BR\n", "1988 \n", "1990 \n", "1992 \n", "1994 \n", "1996 TS TSRA RA BR\n", "1998 TSRA RA BR\n", "2000 \n", "2002 \n", "2004 \n", "2006 RA\n", "2008 TSRA RA\n", "2010 RA\n", "2012 TSRA RA\n", "2014 \n", "2016 \n", "2018 RA\n", "2020 \n", "2022 \n", "2024 \n", "2026 \n", "2028 BR\n", "2030 TS TSRA\n", "2032 \n", "2034 \n", "2036 \n", "2038 RA\n", "2040 RA BR\n", "2042 TSRA RA BR\n", "2044 \n", "2046 \n", "2048 RA BR\n", "2050 BR\n", "2052 \n", "2054 TSRA BR\n", "2056 \n", "2058 \n", "2060 \n", "2062 TSRA RA\n", "2064 \n", "2066 \n", "2068 RA\n", "2070 \n", "2072 \n", "2074 RA BR\n", "2076 BR\n", "2078 \n", "2080 \n", "2082 \n", "2084 \n", "2086 RA\n", "2088 \n", "2090 BR\n", "2092 TSRA RA BR\n", "2094 RA\n", "2096 \n", "2098 RA BR\n", "2100 RA\n", "2102 \n", "2104 \n", "2106 \n", "2108 \n", "2110 RA\n", "2112 \n", "2114 \n", "2116 \n", "2118 TSRA RA BR\n", "2120 \n", "2122 \n", "2124 \n", "2126 RA\n", "2128 RA\n", "2130 \n", "2132 \n", "2134 \n", "2136 \n", "2138 \n", "2140 RA\n", "2142 \n", "2144 \n", "2146 \n", "2148 \n", "2150 RA DZ BR\n", "2152 RA\n", "2154 \n", "2156 \n", "2158 \n", "2160 \n", "2162 RA BR\n", "2164 \n", "2166 RA\n", "2168 \n", "2170 RA DZ BR\n", "2172 TSRA RA BR\n", "2174 \n", "2176 \n", "2178 RA BR\n", "2180 RA\n", "2182 RA DZ\n", "2184 \n", "2186 \n", "2188 TSRA RA BR\n", "2190 RA BR\n", "2192 \n", "2194 RA\n", "2196 \n", "2198 \n", "2200 \n", "2202 \n", "2204 \n", "2206 \n", "2208 \n", "2210 RA\n", "2212 RA BR\n", "2214 \n", "2216 RA\n", "2218 \n", "2220 \n", "2222 \n", "2224 RA\n", "2226 RA DZ BR\n", "2228 \n", "2230 \n", "2232 \n", "2234 \n", "2236 \n", "2238 \n", "2240 \n", "2242 \n", "2244 BR HZ\n", "2246 TSRA RA BR\n", "2248 RA BR\n", "2250 TS RA BR\n", "2252 RA BR\n", "2254 \n", "2256 \n", "2258 RA\n", "2260 TSRA DZ BR HZ\n", "2262 TSRA RA BR\n", "2264 \n", "2266 TSRA RA\n", "2268 RA BR\n", "2270 RA BR\n", "2272 RA DZ BR\n", "2274 \n", "2276 \n", "2278 RA\n", "2280 RA\n", "2282 \n", "2284 \n", "2286 RA\n", "2288 TSRA RA BR HZ\n", "2290 RA BR\n", "2292 TS TSRA BR\n", "2294 BR\n", "2296 \n", "2298 RA BR\n", "2300 \n", "2302 \n", "2304 BR\n", "2306 \n", "2308 \n", "2310 RA BR\n", "2312 RA\n", "2314 RA\n", "2316 BR\n", "2318 TSRA\n", "2320 TSRA RA BR\n", "2322 BR\n", "2324 RA\n", "2326 BR\n", "2328 \n", "2330 \n", "2332 \n", "2334 DZ BR HZ\n", "2336 BR\n", "2338 \n", "2340 \n", "2342 \n", "2344 TSRA RA BR\n", "2346 BR\n", "2348 \n", "2350 \n", "2352 \n", "2354 \n", "2356 \n", "2358 \n", "2360 \n", "2362 \n", "2364 \n", "2366 TS BR\n", "2368 \n", "2370 \n", "2372 TSRA RA\n", "2374 \n", "2376 \n", "2378 \n", "2380 RA BR\n", "2382 \n", "2384 RA\n", "2386 \n", "2388 RA\n", "2390 RA DZ BR\n", "2392 \n", "2394 RA BR\n", "2396 \n", "2398 RA\n", "2400 RA\n", "2402 \n", "2404 \n", "2406 \n", "2408 \n", "2410 \n", "2412 RA\n", "2414 RA DZ\n", "2416 \n", "2418 \n", "2420 \n", "2422 \n", "2424 \n", "2426 \n", "2428 \n", "2430 \n", "2432 RA\n", "2434 RA\n", "2436 BR\n", "2438 \n", "2440 \n", "2442 \n", "2444 \n", "2446 \n", "2448 BR HZ\n", "2450 BR\n", "2452 TS TSRA\n", "2454 TS\n", "2456 \n", "2458 \n", "2460 \n", "2462 \n", "2464 \n", "2466 \n", "2468 \n", "2470 \n", "2472 \n", "2474 \n", "2476 RA\n", "2478 \n", "2480 \n", "2482 RA BR\n", "2484 \n", "2486 \n", "2488 \n", "2490 TS TSRA RA FG BR HZ\n", "2492 \n", "2494 \n", "2496 \n", "2498 \n", "2500 \n", "2502 \n", "2504 BR\n", "2506 \n", "2508 RA BR\n", "2510 RA BR\n", "2512 \n", "2514 BR\n", "2516 BR\n", "2518 RA DZ FG+ BR\n", "2520 RA BR\n", "2522 TSRA BR\n", "2524 RA\n", "2526 \n", "2528 \n", "2530 \n", "2532 BR\n", "2534 \n", "2536 RA BR\n", "2538 \n", "2540 \n", "2542 RA BR\n", "2544 DZ\n", "2546 RA BR\n", "2548 \n", "2550 RA\n", "2552 RA\n", "2554 \n", "2556 RA\n", "2558 \n", "2560 \n", "2562 \n", "2564 \n", "2566 \n", "2568 \n", "2570 \n", "2572 RA BR HZ\n", "2574 RA BR\n", "2576 RA DZ BR\n", "2578 \n", "2580 \n", "2582 \n", "2584 RA\n", "2586 \n", "2588 \n", "2590 RA\n", "2592 RA BR\n", "2594 \n", "2596 \n", "2598 TS TSRA BR\n", "2600 RA BR\n", "2602 RA BR\n", "2604 RA\n", "2606 RA DZ\n", "2608 BR\n", "2610 \n", "2612 RA\n", "2614 TS TSRA RA BR\n", "2616 RA BR HZ\n", "2618 \n", "2620 \n", "2622 \n", "2624 \n", "2626 \n", "2628 RA BR\n", "2630 RA BR\n", "2632 \n", "2634 \n", "2636 \n", "2638 \n", "2640 RA\n", "2642 \n", "2644 RA BR\n", "2646 \n", "2648 \n", "2650 RA\n", "2652 RA\n", "2654 \n", "2656 RA BR\n", "2658 RA DZ BR\n", "2660 DZ BR\n", "2662 \n", "2664 \n", "2666 \n", "2668 \n", "2670 RA\n", "2672 TS TSRA BR HZ\n", "2674 TSRA FG+ BR HZ\n", "2676 BR HZ\n", "2678 RA BR\n", "2680 FG+ BR HZ\n", "2682 RA BR\n", "2684 TSRA RA\n", "2686 FG+ FG BR HZ\n", "2688 BR HZ\n", "2690 FG BR HZ\n", "2692 \n", "2694 RA\n", "2696 TS TSRA RA\n", "2698 RA\n", "2700 RA DZ BR HZ\n", "2702 RA\n", "2704 HZ\n", "2706 RA HZ\n", "2708 \n", "2710 TSRA\n", "2712 TSRA\n", "2714 \n", "2716 \n", "2718 RA\n", "2720 RA BR\n", "2722 \n", "2724 \n", "2726 RA\n", "2728 \n", "2730 \n", "2732 \n", "2734 HZ\n", "2736 \n", "2738 \n", "2740 TS\n", "2742 \n", "2744 \n", "2746 \n", "2748 \n", "2750 RA BR HZ\n", "2752 \n", "2754 \n", "2756 \n", "2758 \n", "2760 \n", "2762 \n", "2764 \n", "2766 TSRA RA BR\n", "2768 BR HZ\n", "2770 \n", "2772 \n", "2774 \n", "2776 \n", "2778 \n", "2780 TSRA RA BR\n", "2782 RA\n", "2784 \n", "2786 \n", "2788 \n", "2790 \n", "2792 DZ BR HZ\n", "2794 BR HZ\n", "2796 RA\n", "2798 \n", "2800 TSRA RA BR\n", "2802 TSRA RA BR\n", "2804 TS RA BR HZ\n", "2806 \n", "2808 TSRA BR\n", "2810 \n", "2812 \n", "2814 RA\n", "2816 \n", "2818 \n", "2820 BR HZ\n", "2822 RA\n", "2824 RA\n", "2826 \n", "2828 RA\n", "2830 TS RA\n", "2832 \n", "2834 \n", "2836 \n", "2838 RA\n", "2840 RA BR\n", "2842 \n", "2844 RA BR\n", "2846 \n", "2848 \n", "2850 RA\n", "2852 \n", "2854 \n", "2856 BCFG BR\n", "2858 BR\n", "2860 RA\n", "2862 RA\n", "2864 \n", "2866 \n", "2868 \n", "2870 \n", "2872 BR\n", "2874 \n", "2876 BR HZ\n", "2878 RA BR\n", "2880 DZ BR\n", "2882 \n", "2884 TSRA RA BR\n", "2886 RA\n", "2888 RA DZ BR\n", "2890 RA\n", "2892 \n", "2894 \n", "2896 \n", "2898 \n", "2900 \n", "2902 \n", "2904 RA DZ BR\n", "2906 RA DZ BR\n", "2908 RA DZ BR\n", "2910 RA DZ BR\n", "2912 DZ BR\n", "2914 \n", "2916 RA DZ\n", "2918 \n", "2920 \n", "2922 \n", "2924 \n", "2926 BR\n", "2928 \n", "2930 BR\n", "2932 \n", "2934 \n", "2936 \n", "2938 \n", "2940 \n", "2942 RA SN\n", "Name: CodeSum, dtype: object" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/coreygirard/anaconda3/lib/python3.6/site-packages/ipykernel/__main__.py:2: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " from ipykernel import kernelapp as app\n", "/Users/coreygirard/anaconda3/lib/python3.6/site-packages/ipykernel/__main__.py:3: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " app.launch_new_instance()\n" ] } ], "source": [ "weather['CodeSum'].str.strip() # strips empty spaces\n", "weather['CodeSum'][weather['CodeSum'].str.contains('^\\w')] = '1'\n", "weather['CodeSum'][weather['CodeSum'] !='1'] = '0'" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "Date datetime64[ns]\n", "Tmax float64\n", "Tmin float64\n", "Tavg float64\n", "Depart float64\n", "DewPoint float64\n", "WetBulb float64\n", "Sunrise float64\n", "Sunset float64\n", "CodeSum int64\n", "PrecipTotal float64\n", "StnPressure float64\n", "SeaLevel float64\n", "ResultSpeed float64\n", "ResultDir float64\n", "AvgSpeed float64\n", "dtype: object" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "weather['CodeSum']= weather['CodeSum'].astype(int)\n", "weather.dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sunset and sunrise are obviously correlated" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": true }, "outputs": [], "source": [ "weather.drop('Sunrise', inplace=True, axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5) Quick stop: `DataFrames` now" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Date False\n", "Trap False\n", "Latitude False\n", "Longitude False\n", "WnvPresent False\n", "CULEX PIPIENS False\n", "CULEX PIPIENS/RESTUANS False\n", "CULEX RESTUANS False\n", "CULEX SALINARIUS False\n", "CULEX TARSALIS False\n", "CULEX TERRITANS False\n", "dtype: bool" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Date False\n", "Trap False\n", "Latitude False\n", "Longitude False\n", "CULEX PIPIENS False\n", "CULEX PIPIENS/RESTUANS False\n", "CULEX RESTUANS False\n", "CULEX SALINARIUS False\n", "CULEX TARSALIS False\n", "CULEX TERRITANS False\n", "UNSPECIFIED CULEX False\n", "dtype: bool" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Date False\n", "Latitude False\n", "Longitude False\n", "dtype: bool" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Date False\n", "Tmax False\n", "Tmin False\n", "Tavg False\n", "Depart False\n", "DewPoint False\n", "WetBulb False\n", "Sunset False\n", "CodeSum False\n", "PrecipTotal False\n", "StnPressure False\n", "SeaLevel False\n", "ResultSpeed False\n", "ResultDir False\n", "AvgSpeed False\n", "dtype: bool" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train.isnull().any()\n", "test.isnull().any()\n", "spray.isnull().any()\n", "weather.isnull().any()" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateTrapLatitudeLongitudeWnvPresentCULEX PIPIENSCULEX PIPIENS/RESTUANSCULEX RESTUANSCULEX SALINARIUSCULEX TARSALISCULEX TERRITANS
02007-05-29T00241.95469-87.8009910010000
12007-05-29T00241.95469-87.8009910001000
\n", "
" ], "text/plain": [ " Date Trap Latitude Longitude WnvPresent CULEX PIPIENS \\\n", "0 2007-05-29 T002 41.95469 -87.800991 0 0 \n", "1 2007-05-29 T002 41.95469 -87.800991 0 0 \n", "\n", " CULEX PIPIENS/RESTUANS CULEX RESTUANS CULEX SALINARIUS CULEX TARSALIS \\\n", "0 1 0 0 0 \n", "1 0 1 0 0 \n", "\n", " CULEX TERRITANS \n", "0 0 \n", "1 0 " ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TrapLatitudeLongitudeWnvPresentCULEX PIPIENSCULEX PIPIENS/RESTUANSCULEX RESTUANSCULEX SALINARIUSCULEX TARSALISCULEX TERRITANSYearDayofYear
0T00241.95469-87.80099100100002007149
1T00241.95469-87.80099100010002007149
\n", "
" ], "text/plain": [ " Trap Latitude Longitude WnvPresent CULEX PIPIENS \\\n", "0 T002 41.95469 -87.800991 0 0 \n", "1 T002 41.95469 -87.800991 0 0 \n", "\n", " CULEX PIPIENS/RESTUANS CULEX RESTUANS CULEX SALINARIUS CULEX TARSALIS \\\n", "0 1 0 0 0 \n", "1 0 1 0 0 \n", "\n", " CULEX TERRITANS Year DayofYear \n", "0 0 2007 149 \n", "1 0 2007 149 " ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateTrapLatitudeLongitudeCULEX PIPIENSCULEX PIPIENS/RESTUANSCULEX RESTUANSCULEX SALINARIUSCULEX TARSALISCULEX TERRITANSUNSPECIFIED CULEX
02008-06-11T00241.95469-87.8009910100000
12008-06-11T00241.95469-87.8009910010000
\n", "
" ], "text/plain": [ " Date Trap Latitude Longitude CULEX PIPIENS \\\n", "0 2008-06-11 T002 41.95469 -87.800991 0 \n", "1 2008-06-11 T002 41.95469 -87.800991 0 \n", "\n", " CULEX PIPIENS/RESTUANS CULEX RESTUANS CULEX SALINARIUS CULEX TARSALIS \\\n", "0 1 0 0 0 \n", "1 0 1 0 0 \n", "\n", " CULEX TERRITANS UNSPECIFIED CULEX \n", "0 0 0 \n", "1 0 0 " ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TrapLatitudeLongitudeCULEX PIPIENSCULEX PIPIENS/RESTUANSCULEX RESTUANSCULEX SALINARIUSCULEX TARSALISCULEX TERRITANSUNSPECIFIED CULEXYearDayofYear
0T00241.95469-87.80099101000002008163
1T00241.95469-87.80099100100002008163
\n", "
" ], "text/plain": [ " Trap Latitude Longitude CULEX PIPIENS CULEX PIPIENS/RESTUANS \\\n", "0 T002 41.95469 -87.800991 0 1 \n", "1 T002 41.95469 -87.800991 0 0 \n", "\n", " CULEX RESTUANS CULEX SALINARIUS CULEX TARSALIS CULEX TERRITANS \\\n", "0 0 0 0 0 \n", "1 1 0 0 0 \n", "\n", " UNSPECIFIED CULEX Year DayofYear \n", "0 0 2008 163 \n", "1 0 2008 163 " ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateLatitudeLongitude
02011-08-2942.391623-88.089163
12011-08-2942.391348-88.089163
\n", "
" ], "text/plain": [ " Date Latitude Longitude\n", "0 2011-08-29 42.391623 -88.089163\n", "1 2011-08-29 42.391348 -88.089163" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateTmaxTminTavgDepartDewPointWetBulbSunsetCodeSumPrecipTotalStnPressureSeaLevelResultSpeedResultDirAvgSpeed
02007-05-0183.050.067.014.051.056.01849.000.029.1029.821.727.09.2
22007-05-0259.042.051.0-3.042.047.01850.010.029.3830.0913.04.013.4
\n", "
" ], "text/plain": [ " Date Tmax Tmin Tavg Depart DewPoint WetBulb Sunset CodeSum \\\n", "0 2007-05-01 83.0 50.0 67.0 14.0 51.0 56.0 1849.0 0 \n", "2 2007-05-02 59.0 42.0 51.0 -3.0 42.0 47.0 1850.0 1 \n", "\n", " PrecipTotal StnPressure SeaLevel ResultSpeed ResultDir AvgSpeed \n", "0 0.0 29.10 29.82 1.7 27.0 9.2 \n", "2 0.0 29.38 30.09 13.0 4.0 13.4 " ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train.head(2)\n", "train2.head(2)\n", "test.head(2)\n", "test2.head(2)\n", "spray.head(2)\n", "weather.head(2)" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Date datetime64[ns]\n", "Trap object\n", "Latitude float64\n", "Longitude float64\n", "WnvPresent int64\n", "CULEX PIPIENS uint8\n", "CULEX PIPIENS/RESTUANS uint8\n", "CULEX RESTUANS uint8\n", "CULEX SALINARIUS uint8\n", "CULEX TARSALIS uint8\n", "CULEX TERRITANS uint8\n", "dtype: object" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Trap object\n", "Latitude float64\n", "Longitude float64\n", "WnvPresent int64\n", "CULEX PIPIENS uint8\n", "CULEX PIPIENS/RESTUANS uint8\n", "CULEX RESTUANS uint8\n", "CULEX SALINARIUS uint8\n", "CULEX TARSALIS uint8\n", "CULEX TERRITANS uint8\n", "Year int64\n", "DayofYear int64\n", "dtype: object" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Date datetime64[ns]\n", "Trap object\n", "Latitude float64\n", "Longitude float64\n", "CULEX PIPIENS uint8\n", "CULEX PIPIENS/RESTUANS uint8\n", "CULEX RESTUANS uint8\n", "CULEX SALINARIUS uint8\n", "CULEX TARSALIS uint8\n", "CULEX TERRITANS uint8\n", "UNSPECIFIED CULEX uint8\n", "dtype: object" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Trap object\n", "Latitude float64\n", "Longitude float64\n", "CULEX PIPIENS uint8\n", "CULEX PIPIENS/RESTUANS uint8\n", "CULEX RESTUANS uint8\n", "CULEX SALINARIUS uint8\n", "CULEX TARSALIS uint8\n", "CULEX TERRITANS uint8\n", "UNSPECIFIED CULEX uint8\n", "Year int64\n", "DayofYear int64\n", "dtype: object" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Date datetime64[ns]\n", "Tmax float64\n", "Tmin float64\n", "Tavg float64\n", "Depart float64\n", "DewPoint float64\n", "WetBulb float64\n", "Sunset float64\n", "CodeSum int64\n", "PrecipTotal float64\n", "StnPressure float64\n", "SeaLevel float64\n", "ResultSpeed float64\n", "ResultDir float64\n", "AvgSpeed float64\n", "dtype: object" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Date datetime64[ns]\n", "Latitude float64\n", "Longitude float64\n", "dtype: object" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train.dtypes\n", "train2.dtypes\n", "test.dtypes\n", "test2.dtypes\n", "weather.dtypes\n", "spray.dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6) Correlations and feature engineering" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Train data" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
LatitudeLongitudeWnvPresentCULEX PIPIENSCULEX PIPIENS/RESTUANSCULEX RESTUANSCULEX SALINARIUSCULEX TARSALISCULEX TERRITANS
Latitude1.000000-0.6401080.030907-0.0414520.0273640.036295-0.022753-0.006511-0.065012
Longitude-0.6401081.000000-0.0740750.018343-0.006192-0.0354690.0099490.0104710.065747
WnvPresent0.030907-0.0740751.0000000.0958260.018785-0.092170-0.023358-0.006252-0.037979
CULEX PIPIENS-0.0414520.0183430.0958261.000000-0.499768-0.342402-0.054199-0.014507-0.088123
CULEX PIPIENS/RESTUANS0.027364-0.0061920.018785-0.4997681.000000-0.567032-0.089755-0.024024-0.145936
CULEX RESTUANS0.036295-0.035469-0.092170-0.342402-0.5670321.000000-0.061493-0.016459-0.099984
CULEX SALINARIUS-0.0227530.009949-0.023358-0.054199-0.089755-0.0614931.000000-0.002605-0.015826
CULEX TARSALIS-0.0065110.010471-0.006252-0.014507-0.024024-0.016459-0.0026051.000000-0.004236
CULEX TERRITANS-0.0650120.065747-0.037979-0.088123-0.145936-0.099984-0.015826-0.0042361.000000
\n", "
" ], "text/plain": [ " Latitude Longitude WnvPresent CULEX PIPIENS \\\n", "Latitude 1.000000 -0.640108 0.030907 -0.041452 \n", "Longitude -0.640108 1.000000 -0.074075 0.018343 \n", "WnvPresent 0.030907 -0.074075 1.000000 0.095826 \n", "CULEX PIPIENS -0.041452 0.018343 0.095826 1.000000 \n", "CULEX PIPIENS/RESTUANS 0.027364 -0.006192 0.018785 -0.499768 \n", "CULEX RESTUANS 0.036295 -0.035469 -0.092170 -0.342402 \n", "CULEX SALINARIUS -0.022753 0.009949 -0.023358 -0.054199 \n", "CULEX TARSALIS -0.006511 0.010471 -0.006252 -0.014507 \n", "CULEX TERRITANS -0.065012 0.065747 -0.037979 -0.088123 \n", "\n", " CULEX PIPIENS/RESTUANS CULEX RESTUANS \\\n", "Latitude 0.027364 0.036295 \n", "Longitude -0.006192 -0.035469 \n", "WnvPresent 0.018785 -0.092170 \n", "CULEX PIPIENS -0.499768 -0.342402 \n", "CULEX PIPIENS/RESTUANS 1.000000 -0.567032 \n", "CULEX RESTUANS -0.567032 1.000000 \n", "CULEX SALINARIUS -0.089755 -0.061493 \n", "CULEX TARSALIS -0.024024 -0.016459 \n", "CULEX TERRITANS -0.145936 -0.099984 \n", "\n", " CULEX SALINARIUS CULEX TARSALIS CULEX TERRITANS \n", "Latitude -0.022753 -0.006511 -0.065012 \n", "Longitude 0.009949 0.010471 0.065747 \n", "WnvPresent -0.023358 -0.006252 -0.037979 \n", "CULEX PIPIENS -0.054199 -0.014507 -0.088123 \n", "CULEX PIPIENS/RESTUANS -0.089755 -0.024024 -0.145936 \n", "CULEX RESTUANS -0.061493 -0.016459 -0.099984 \n", "CULEX SALINARIUS 1.000000 -0.002605 -0.015826 \n", "CULEX TARSALIS -0.002605 1.000000 -0.004236 \n", "CULEX TERRITANS -0.015826 -0.004236 1.000000 " ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
LatitudeLongitudeCULEX PIPIENSCULEX PIPIENS/RESTUANSCULEX RESTUANSCULEX SALINARIUSCULEX TARSALISCULEX TERRITANSUNSPECIFIED CULEX
Latitude1.000000-0.6489090.0007400.0138080.003677-0.003519-0.003766-0.003731-0.003828
Longitude-0.6489091.000000-0.002649-0.022707-0.0070810.0061920.0067040.0066260.006832
CULEX PIPIENS0.000740-0.0026491.000000-0.147349-0.143517-0.141748-0.141703-0.141726-0.141692
CULEX PIPIENS/RESTUANS0.013808-0.022707-0.1473491.000000-0.148211-0.146385-0.146338-0.146362-0.146327
CULEX RESTUANS0.003677-0.007081-0.143517-0.1482111.000000-0.142578-0.142533-0.142555-0.142521
CULEX SALINARIUS-0.0035190.006192-0.141748-0.146385-0.1425781.000000-0.140776-0.140799-0.140765
CULEX TARSALIS-0.0037660.006704-0.141703-0.146338-0.142533-0.1407761.000000-0.140754-0.140720
CULEX TERRITANS-0.0037310.006626-0.141726-0.146362-0.142555-0.140799-0.1407541.000000-0.140743
UNSPECIFIED CULEX-0.0038280.006832-0.141692-0.146327-0.142521-0.140765-0.140720-0.1407431.000000
\n", "
" ], "text/plain": [ " Latitude Longitude CULEX PIPIENS \\\n", "Latitude 1.000000 -0.648909 0.000740 \n", "Longitude -0.648909 1.000000 -0.002649 \n", "CULEX PIPIENS 0.000740 -0.002649 1.000000 \n", "CULEX PIPIENS/RESTUANS 0.013808 -0.022707 -0.147349 \n", "CULEX RESTUANS 0.003677 -0.007081 -0.143517 \n", "CULEX SALINARIUS -0.003519 0.006192 -0.141748 \n", "CULEX TARSALIS -0.003766 0.006704 -0.141703 \n", "CULEX TERRITANS -0.003731 0.006626 -0.141726 \n", "UNSPECIFIED CULEX -0.003828 0.006832 -0.141692 \n", "\n", " CULEX PIPIENS/RESTUANS CULEX RESTUANS \\\n", "Latitude 0.013808 0.003677 \n", "Longitude -0.022707 -0.007081 \n", "CULEX PIPIENS -0.147349 -0.143517 \n", "CULEX PIPIENS/RESTUANS 1.000000 -0.148211 \n", "CULEX RESTUANS -0.148211 1.000000 \n", "CULEX SALINARIUS -0.146385 -0.142578 \n", "CULEX TARSALIS -0.146338 -0.142533 \n", "CULEX TERRITANS -0.146362 -0.142555 \n", "UNSPECIFIED CULEX -0.146327 -0.142521 \n", "\n", " CULEX SALINARIUS CULEX TARSALIS CULEX TERRITANS \\\n", "Latitude -0.003519 -0.003766 -0.003731 \n", "Longitude 0.006192 0.006704 0.006626 \n", "CULEX PIPIENS -0.141748 -0.141703 -0.141726 \n", "CULEX PIPIENS/RESTUANS -0.146385 -0.146338 -0.146362 \n", "CULEX RESTUANS -0.142578 -0.142533 -0.142555 \n", "CULEX SALINARIUS 1.000000 -0.140776 -0.140799 \n", "CULEX TARSALIS -0.140776 1.000000 -0.140754 \n", "CULEX TERRITANS -0.140799 -0.140754 1.000000 \n", "UNSPECIFIED CULEX -0.140765 -0.140720 -0.140743 \n", "\n", " UNSPECIFIED CULEX \n", "Latitude -0.003828 \n", "Longitude 0.006832 \n", "CULEX PIPIENS -0.141692 \n", "CULEX PIPIENS/RESTUANS -0.146327 \n", "CULEX RESTUANS -0.142521 \n", "CULEX SALINARIUS -0.140765 \n", "CULEX TARSALIS -0.140720 \n", "CULEX TERRITANS -0.140743 \n", "UNSPECIFIED CULEX 1.000000 " ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
LatitudeLongitude
Latitude1.000000-0.761842
Longitude-0.7618421.000000
\n", "
" ], "text/plain": [ " Latitude Longitude\n", "Latitude 1.000000 -0.761842\n", "Longitude -0.761842 1.000000" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TmaxTminTavgDepartDewPointWetBulbSunsetCodeSumPrecipTotalStnPressureSeaLevelResultSpeedResultDirAvgSpeed
Tmax1.0000000.8519650.9662070.6833110.8031700.8625160.558433-0.0378530.039866-0.045456-0.030421-0.1870490.034667-0.171515
Tmin0.8519651.0000000.9575670.5780540.9133380.9067540.5633740.1201110.127879-0.068127-0.039539-0.1122250.009511-0.094538
Tavg0.9662070.9575671.0000000.6583570.8880620.9171520.5828080.0378400.084432-0.059296-0.036384-0.1581670.024257-0.140962
Depart0.6833110.5780540.6583571.0000000.5540930.5895440.0276300.0792950.064817-0.046830-0.0321970.0205850.1077210.058628
DewPoint0.8031700.9133380.8880620.5540931.0000000.9286930.4700620.2738030.227942-0.060867-0.064712-0.1915990.013438-0.159271
WetBulb0.8625160.9067540.9171520.5895440.9286931.0000000.5131610.1601130.1645300.186177-0.054496-0.1654170.025540-0.141923
Sunset0.5584330.5633740.5828080.0276300.4700620.5131611.0000000.0157610.065072-0.048271-0.002016-0.100129-0.127182-0.074539
CodeSum-0.0378530.1201110.0378400.0792950.2738030.1601130.0157611.0000000.343029-0.014655-0.0931130.0024780.0451780.095038
PrecipTotal0.0398660.1278790.0844320.0648170.2279420.1645300.0650720.3430291.000000-0.024844-0.007776-0.0270020.0560420.095667
StnPressure-0.045456-0.068127-0.059296-0.046830-0.0608670.186177-0.048271-0.014655-0.0248441.0000000.011190-0.0207000.013248-0.031916
SeaLevel-0.030421-0.039539-0.036384-0.032197-0.064712-0.054496-0.002016-0.093113-0.0077760.0111901.000000-0.0280380.027229-0.007692
ResultSpeed-0.187049-0.112225-0.1581670.020585-0.191599-0.165417-0.1001290.002478-0.027002-0.020700-0.0280381.0000000.0942270.911711
ResultDir0.0346670.0095110.0242570.1077210.0134380.025540-0.1271820.0451780.0560420.0132480.0272290.0942271.0000000.154508
AvgSpeed-0.171515-0.094538-0.1409620.058628-0.159271-0.141923-0.0745390.0950380.095667-0.031916-0.0076920.9117110.1545081.000000
\n", "
" ], "text/plain": [ " Tmax Tmin Tavg Depart DewPoint WetBulb \\\n", "Tmax 1.000000 0.851965 0.966207 0.683311 0.803170 0.862516 \n", "Tmin 0.851965 1.000000 0.957567 0.578054 0.913338 0.906754 \n", "Tavg 0.966207 0.957567 1.000000 0.658357 0.888062 0.917152 \n", "Depart 0.683311 0.578054 0.658357 1.000000 0.554093 0.589544 \n", "DewPoint 0.803170 0.913338 0.888062 0.554093 1.000000 0.928693 \n", "WetBulb 0.862516 0.906754 0.917152 0.589544 0.928693 1.000000 \n", "Sunset 0.558433 0.563374 0.582808 0.027630 0.470062 0.513161 \n", "CodeSum -0.037853 0.120111 0.037840 0.079295 0.273803 0.160113 \n", "PrecipTotal 0.039866 0.127879 0.084432 0.064817 0.227942 0.164530 \n", "StnPressure -0.045456 -0.068127 -0.059296 -0.046830 -0.060867 0.186177 \n", "SeaLevel -0.030421 -0.039539 -0.036384 -0.032197 -0.064712 -0.054496 \n", "ResultSpeed -0.187049 -0.112225 -0.158167 0.020585 -0.191599 -0.165417 \n", "ResultDir 0.034667 0.009511 0.024257 0.107721 0.013438 0.025540 \n", "AvgSpeed -0.171515 -0.094538 -0.140962 0.058628 -0.159271 -0.141923 \n", "\n", " Sunset CodeSum PrecipTotal StnPressure SeaLevel \\\n", "Tmax 0.558433 -0.037853 0.039866 -0.045456 -0.030421 \n", "Tmin 0.563374 0.120111 0.127879 -0.068127 -0.039539 \n", "Tavg 0.582808 0.037840 0.084432 -0.059296 -0.036384 \n", "Depart 0.027630 0.079295 0.064817 -0.046830 -0.032197 \n", "DewPoint 0.470062 0.273803 0.227942 -0.060867 -0.064712 \n", "WetBulb 0.513161 0.160113 0.164530 0.186177 -0.054496 \n", "Sunset 1.000000 0.015761 0.065072 -0.048271 -0.002016 \n", "CodeSum 0.015761 1.000000 0.343029 -0.014655 -0.093113 \n", "PrecipTotal 0.065072 0.343029 1.000000 -0.024844 -0.007776 \n", "StnPressure -0.048271 -0.014655 -0.024844 1.000000 0.011190 \n", "SeaLevel -0.002016 -0.093113 -0.007776 0.011190 1.000000 \n", "ResultSpeed -0.100129 0.002478 -0.027002 -0.020700 -0.028038 \n", "ResultDir -0.127182 0.045178 0.056042 0.013248 0.027229 \n", "AvgSpeed -0.074539 0.095038 0.095667 -0.031916 -0.007692 \n", "\n", " ResultSpeed ResultDir AvgSpeed \n", "Tmax -0.187049 0.034667 -0.171515 \n", "Tmin -0.112225 0.009511 -0.094538 \n", "Tavg -0.158167 0.024257 -0.140962 \n", "Depart 0.020585 0.107721 0.058628 \n", "DewPoint -0.191599 0.013438 -0.159271 \n", "WetBulb -0.165417 0.025540 -0.141923 \n", "Sunset -0.100129 -0.127182 -0.074539 \n", "CodeSum 0.002478 0.045178 0.095038 \n", "PrecipTotal -0.027002 0.056042 0.095667 \n", "StnPressure -0.020700 0.013248 -0.031916 \n", "SeaLevel -0.028038 0.027229 -0.007692 \n", "ResultSpeed 1.000000 0.094227 0.911711 \n", "ResultDir 0.094227 1.000000 0.154508 \n", "AvgSpeed 0.911711 0.154508 1.000000 " ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "for df in [train,test,spray,weather]:\n", " df.corr()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The temperatures are highly correlated and other features as well. Let's remove the extra baggage." ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TavgDepartDewPointWetBulbSunsetCodeSumPrecipTotalStnPressureSeaLevelResultSpeedResultDirAvgSpeed
Tavg1.0000000.6583570.8880620.9171520.5828080.0378400.084432-0.059296-0.036384-0.1581670.024257-0.140962
Depart0.6583571.0000000.5540930.5895440.0276300.0792950.064817-0.046830-0.0321970.0205850.1077210.058628
DewPoint0.8880620.5540931.0000000.9286930.4700620.2738030.227942-0.060867-0.064712-0.1915990.013438-0.159271
WetBulb0.9171520.5895440.9286931.0000000.5131610.1601130.1645300.186177-0.054496-0.1654170.025540-0.141923
Sunset0.5828080.0276300.4700620.5131611.0000000.0157610.065072-0.048271-0.002016-0.100129-0.127182-0.074539
CodeSum0.0378400.0792950.2738030.1601130.0157611.0000000.343029-0.014655-0.0931130.0024780.0451780.095038
PrecipTotal0.0844320.0648170.2279420.1645300.0650720.3430291.000000-0.024844-0.007776-0.0270020.0560420.095667
StnPressure-0.059296-0.046830-0.0608670.186177-0.048271-0.014655-0.0248441.0000000.011190-0.0207000.013248-0.031916
SeaLevel-0.036384-0.032197-0.064712-0.054496-0.002016-0.093113-0.0077760.0111901.000000-0.0280380.027229-0.007692
ResultSpeed-0.1581670.020585-0.191599-0.165417-0.1001290.002478-0.027002-0.020700-0.0280381.0000000.0942270.911711
ResultDir0.0242570.1077210.0134380.025540-0.1271820.0451780.0560420.0132480.0272290.0942271.0000000.154508
AvgSpeed-0.1409620.058628-0.159271-0.141923-0.0745390.0950380.095667-0.031916-0.0076920.9117110.1545081.000000
\n", "
" ], "text/plain": [ " Tavg Depart DewPoint WetBulb Sunset CodeSum \\\n", "Tavg 1.000000 0.658357 0.888062 0.917152 0.582808 0.037840 \n", "Depart 0.658357 1.000000 0.554093 0.589544 0.027630 0.079295 \n", "DewPoint 0.888062 0.554093 1.000000 0.928693 0.470062 0.273803 \n", "WetBulb 0.917152 0.589544 0.928693 1.000000 0.513161 0.160113 \n", "Sunset 0.582808 0.027630 0.470062 0.513161 1.000000 0.015761 \n", "CodeSum 0.037840 0.079295 0.273803 0.160113 0.015761 1.000000 \n", "PrecipTotal 0.084432 0.064817 0.227942 0.164530 0.065072 0.343029 \n", "StnPressure -0.059296 -0.046830 -0.060867 0.186177 -0.048271 -0.014655 \n", "SeaLevel -0.036384 -0.032197 -0.064712 -0.054496 -0.002016 -0.093113 \n", "ResultSpeed -0.158167 0.020585 -0.191599 -0.165417 -0.100129 0.002478 \n", "ResultDir 0.024257 0.107721 0.013438 0.025540 -0.127182 0.045178 \n", "AvgSpeed -0.140962 0.058628 -0.159271 -0.141923 -0.074539 0.095038 \n", "\n", " PrecipTotal StnPressure SeaLevel ResultSpeed ResultDir \\\n", "Tavg 0.084432 -0.059296 -0.036384 -0.158167 0.024257 \n", "Depart 0.064817 -0.046830 -0.032197 0.020585 0.107721 \n", "DewPoint 0.227942 -0.060867 -0.064712 -0.191599 0.013438 \n", "WetBulb 0.164530 0.186177 -0.054496 -0.165417 0.025540 \n", "Sunset 0.065072 -0.048271 -0.002016 -0.100129 -0.127182 \n", "CodeSum 0.343029 -0.014655 -0.093113 0.002478 0.045178 \n", "PrecipTotal 1.000000 -0.024844 -0.007776 -0.027002 0.056042 \n", "StnPressure -0.024844 1.000000 0.011190 -0.020700 0.013248 \n", "SeaLevel -0.007776 0.011190 1.000000 -0.028038 0.027229 \n", "ResultSpeed -0.027002 -0.020700 -0.028038 1.000000 0.094227 \n", "ResultDir 0.056042 0.013248 0.027229 0.094227 1.000000 \n", "AvgSpeed 0.095667 -0.031916 -0.007692 0.911711 0.154508 \n", "\n", " AvgSpeed \n", "Tavg -0.140962 \n", "Depart 0.058628 \n", "DewPoint -0.159271 \n", "WetBulb -0.141923 \n", "Sunset -0.074539 \n", "CodeSum 0.095038 \n", "PrecipTotal 0.095667 \n", "StnPressure -0.031916 \n", "SeaLevel -0.007692 \n", "ResultSpeed 0.911711 \n", "ResultDir 0.154508 \n", "AvgSpeed 1.000000 " ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "weather.drop('Tmax', inplace=True, axis=1)\n", "weather.drop('Tmin', inplace=True, axis=1)\n", "weather.corr()" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TavgDepartSunsetCodeSumPrecipTotalStnPressureSeaLevelResultSpeedResultDirAvgSpeed
Tavg1.0000000.6583570.5828080.0378400.084432-0.059296-0.036384-0.1581670.024257-0.140962
Depart0.6583571.0000000.0276300.0792950.064817-0.046830-0.0321970.0205850.1077210.058628
Sunset0.5828080.0276301.0000000.0157610.065072-0.048271-0.002016-0.100129-0.127182-0.074539
CodeSum0.0378400.0792950.0157611.0000000.343029-0.014655-0.0931130.0024780.0451780.095038
PrecipTotal0.0844320.0648170.0650720.3430291.000000-0.024844-0.007776-0.0270020.0560420.095667
StnPressure-0.059296-0.046830-0.048271-0.014655-0.0248441.0000000.011190-0.0207000.013248-0.031916
SeaLevel-0.036384-0.032197-0.002016-0.093113-0.0077760.0111901.000000-0.0280380.027229-0.007692
ResultSpeed-0.1581670.020585-0.1001290.002478-0.027002-0.020700-0.0280381.0000000.0942270.911711
ResultDir0.0242570.107721-0.1271820.0451780.0560420.0132480.0272290.0942271.0000000.154508
AvgSpeed-0.1409620.058628-0.0745390.0950380.095667-0.031916-0.0076920.9117110.1545081.000000
\n", "
" ], "text/plain": [ " Tavg Depart Sunset CodeSum PrecipTotal StnPressure \\\n", "Tavg 1.000000 0.658357 0.582808 0.037840 0.084432 -0.059296 \n", "Depart 0.658357 1.000000 0.027630 0.079295 0.064817 -0.046830 \n", "Sunset 0.582808 0.027630 1.000000 0.015761 0.065072 -0.048271 \n", "CodeSum 0.037840 0.079295 0.015761 1.000000 0.343029 -0.014655 \n", "PrecipTotal 0.084432 0.064817 0.065072 0.343029 1.000000 -0.024844 \n", "StnPressure -0.059296 -0.046830 -0.048271 -0.014655 -0.024844 1.000000 \n", "SeaLevel -0.036384 -0.032197 -0.002016 -0.093113 -0.007776 0.011190 \n", "ResultSpeed -0.158167 0.020585 -0.100129 0.002478 -0.027002 -0.020700 \n", "ResultDir 0.024257 0.107721 -0.127182 0.045178 0.056042 0.013248 \n", "AvgSpeed -0.140962 0.058628 -0.074539 0.095038 0.095667 -0.031916 \n", "\n", " SeaLevel ResultSpeed ResultDir AvgSpeed \n", "Tavg -0.036384 -0.158167 0.024257 -0.140962 \n", "Depart -0.032197 0.020585 0.107721 0.058628 \n", "Sunset -0.002016 -0.100129 -0.127182 -0.074539 \n", "CodeSum -0.093113 0.002478 0.045178 0.095038 \n", "PrecipTotal -0.007776 -0.027002 0.056042 0.095667 \n", "StnPressure 0.011190 -0.020700 0.013248 -0.031916 \n", "SeaLevel 1.000000 -0.028038 0.027229 -0.007692 \n", "ResultSpeed -0.028038 1.000000 0.094227 0.911711 \n", "ResultDir 0.027229 0.094227 1.000000 0.154508 \n", "AvgSpeed -0.007692 0.911711 0.154508 1.000000 " ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "weather.drop('WetBulb', inplace=True, axis=1)\n", "weather.drop('DewPoint', inplace=True, axis=1)\n", "weather.corr()" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAExCAYAAABWCiS6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3Xu8pXPd//HX2zZOMySnnBs5xmQm\nhpwSkVAh1Myou0RG3R3ucud3F0Kqu7q5o0g1ISoxSu6EQjkmhxnMwRBNDhEKRY7D7P3+/fH9LrMs\na++99qzruvZaez7PHuthX9e61vdzrd2e9V3f40e2CSGEEBbXUsN9AyGEELpbVCQhhBDaEhVJCCGE\ntkRFEkIIoS1RkYQQQmhLVCQhhBDaEhVJCCEsISSdJenvku7o53lJ+rak+ZLmSNqqlXKjIgkhhCXH\n2cCeAzy/F7BxfkwFvttKoVGRhBDCEsL2dcA/BrhkX+BHTm4CVpa01mDlRkUSQgihZh3gwbrjh/K5\nAS1d2u2MYC89fm8l+8os+PpnqwgDwEv3PVVZrP1vHlVJnJWXWq6SOACznv1LZbGW7Vmmsljzn3y4\nkjjbr75ZJXEAbnninspiASx44UG18/qhfN4ss/qGh5O6pGqm2Z42hHDN7nXQ+FGRhBBCJ+vrbfnS\nXGkMpeJo9BCwXt3xusCg3yaiayuEEDqZ+1p/tO9i4EN59tZ2wFO2HxnsRdEiCSGETtZXSAUBgKTz\ngF2A1SQ9BBwHjAKw/T3gMmBvYD7wHPCRVsqNiiSEEDqYi2lp5LI8ZZDnDXxiqOVGRRJCCJ2sd+Fw\n38GgoiIJIYRONoTB9uHSlRWJpFWB3+XDNYFe4LF8vK3tF4flxkIIoWgFdm2VpSsrEttPABMAJB0P\nPGP7pGG9qRBCKEOBg+1lGXHTfyX9StKtkuZJ+mg+9ylJ/113zUclnZx//pKkP0q6UtJ0SZ8ZrnsP\nIYRGdl/Lj+Ey4ioS4MO2twa2AY6Q9FrgZ8CBdddMAqbnedLvBsYDB+TXhBBC5+jra/0xTEZiRfJZ\nSbOBG0mrMje0/SjwkKSJktYANgBuBnYC/s/2Atv/Ai7pr1BJUyXNlDTzjB+dV8HbCCEEoPel1h/D\npCvHSPojaXdgZ2A7289L+j1Q23BpOvB+4H7gQtuW1PIeOPVbD1S111YIIXTDYPtIa5G8BvhHrkS2\n4JVdVT8H9gcmkyoVgN8D+0haVtKKpBWdIYTQObqga2tEtUiAS4GpuWvrj6TuKyDN9JI0n9TVdVs+\nd6Ok3wBzSC2VGUB12+CGEMJguqBF0vUVie3j635+AXjnANc2ywz2DdtflDSa1EL5WuE3GUIIi6sL\npv92fUVSgDMlbUoaSznL9pzhvqEQQqhx3/ANordqia9IbE8a7nsIIYR+RYskhBBCW2KMJIQQQlti\n08YQQghtiRbJyLTg65+tJM6ynz+5kjgAe48/rLJYr+1ZtpI4C6jum9zSS1X3T0m0vI62bW9ZfdNK\n4qy79IqVxAFYYfVxlcUqRIyRhBBCaEsktgohhNCWaJGEEEJohx2D7SGEENoRLZIQQghtiVlbIYQQ\n2hItkhBCCG3pgllbHZePRFKvpFk55/psSUdIKv0+JR0sae2y44QQwpC4r/XHMOnEFsnzticA5LS4\nPyUlrDqurICSeoCDgTuAh8uKE0IIQ9YFXVsd1yKpZ/vvwFTgk0p6JJ0oaYakOZIOB5C0i6TrJF0k\n6U5J36u1YiR9N+danyfpS7WyJd0v6dicjncKMBE4N7eGlh+GtxtCCK/WBRkSO7oiAbB9L+k+1wAO\nBZ6yvQ0pje5hkjbIl24L/CfwJmBDUlpdgKNtTwS2BN4macu64l+wvZPtnwAzgQ/YnmD7+cb7kDQ1\nV0gzz5pzf/FvNIQQmumCrq2Or0iy2uZCewAfkjSLlEZ3VWDj/Nwttu91Wr1zHrBTPv9+SbcBtwNb\nAJvXlTudFtmeZnui7YmHbDl28d9JCCEMRe/C1h/DpOMrEklvAHqBv5MqlE/lVsME2xvYviJf6oaX\nOrdWPgfsZntLUk735equebbk2w8hhPYU3LUlaU9Jd0uaL+nzTZ5fX9LVkm7PQwh7D1ZmR1ckklYH\nvgecZtvA5cDHJY3Kz2+Sc60DbCtpgzw2MomUf30lUmXxlKTXAXsNEO5poLotSEMIoRUFdm3liUXf\nIX0Wbg5MkbR5w2XHABfYfjMwGTh9sHI7cdbW8rnrahSwEPgx8M383BnAWOA2SQIeA/bLz90IfJ00\nRnIdcJHtPkm3A/OAe4EbBoh7NvA9Sc8D2zcbJwkhhMoVO4i+LTA/jz0j6XxgX+DOumtM+hIOacbs\noDNZO64isd0zwHN9wFH58bJUp/Bcs/zrtg/up6yxDccXAhcO+YZDCKFMQ6hIJE0lzXStmWZ7Wt3x\nOsCDdccPAW9pKOZ44ApJnwJGA7sPFrfjKpIQQgh13Dj8O9ClngZMG+CSZlnRGgNMAc62/b+Stgd+\nLGlc/iLf1IioSGxfA1wzzLcRQgjFW1jobKyHgPXqjtfl1V1XhwJ7Ati+UdJywGqkCU9NdfRgewgh\nLPGKXUcyA9g4T0xahjSYfnHDNX8BdgOQ9EbSTNfHBip0RLRIQghhxCpwsN32QkmfJM2A7QHOsj1P\n0gnATNsXkxZ2/0DSZ0ndXgfnWbP9iookhBA62RDGSForzpcBlzWcO7bu5zuBHYdSZlQki+Gl+56q\nJM7e4w+rJA7A72b/oLJYO48/tJI4r+0ZmVumje5ZtrJYdz/9UCVxZi18sZI4AK9dbkxlsQrRBZs2\nRkUSQgidLCqSEEII7XBv73DfwqCiIgkhhE4WLZIQQghtGcbt4VsVFUkIIXSyvmJnbZUhKpIQQuhk\n0bUVQgihLV0w2N6RW6RIOjrnWJ+Tc6g37k5ZRsyDJa1ddpwQQhiSLsjZ3nEtkrzb5LuBrWwvkLQa\nsEwFoQ8G7qCFvfdDCKEyXTBG0oktkrWAx20vALD9uO2HJd2fKxUkTZR0Tf75eElnSbpG0r2SPp3P\nj5Z0qaTZku6QNCmf31rStZJulXS5pLUkHQhMBM7NLaCRuSQ6hNB9it20sRSdWJFcAawn6R5Jp0t6\nWwuv2Qx4Jyn713E5Fe+ewMO2x9seB/wmnz8VOND21sBZwFdt/xyYCXwg54J/VXZESVMlzZQ08+z7\notESQqhIn1t/DJOO69qy/YykrYG3ArsC05slqG9waW7BLJD0d+B1wFzgJEnfAC6xfb2kccA44Mqc\nVbEHeKTF+3o5Ycw/D9il89uaIYQRwTFra/HY7iUlqrpG0lzgw6T87bUW1HINL1lQ93MvsLTte3KF\ntDfwNUlXABcB82xvX+b9hxBCYWLW1tBJ2lTSxnWnJgAPAPcDW+dzB7RQztqkPO4/AU4CtgLuBlbP\nA/pIGiVpi/ySp4EVC3kTIYRQlOjaWixjgFMlrUxqhcwnJbN/I3CmpKOAm1so503AiZL6gJeAj9t+\nMQ+sf1vSa0jv/xRgHnA28D1JzwPbNxsnCSGEykXX1tDZvhXYoclT1wObNLn++IbjcfnH+0lZwBqv\nnwXs3OT8hcCFQ77hEEIoUxdM/+24iiSEEEKd2LQxhBBCW6JFEkIIoR1e2PmztqIiCSGEThYtkhBC\nCG2JMZKRaf+bR1US57U9y1YSB2Dn8YdWFuu62WdWEufSccdUEgfguJ4nK4v14HOPVRZrgzFrVhJn\npaUa1xiX57U91cUqRLRIQgghtMNRkYQQQmhLDLaHEEJoS7RIQgghtCUqkhBCCO2wO78i6bjdf0MI\nIdQpePdfSXtKulvS/P5yPUl6v6Q7Jc2T9NPByiy9IpG0pqTzJf0539hlkl61+WI/rz0779Y70DXb\nSbo5p8i9S9Lxhdx4CCF0ggIrEkk9wHeAvYDNgSmSNm+4ZmPgC8COtrcAPjNYuaV2bSmlIbwIOMf2\n5HxuAimD4T0FhTkHeL/t2fmXtGlB5YYQwrDzwkIXJG4LzLd9L4Ck84F9gTvrrjkM+I7tfwLY/vtg\nhZbdItkVeMn292on8jbuv5d0oqQ7JM2VNAlSxSPptNxyuRRYo/Y6SVtLulbSrZIul7RWfmoNcrpc\n272278zXHy/pc3Wvv0PS2Pz4o6Qz8rlzJe0u6QZJf5K0bcm/kxBCaF3fEB6DWwd4sO74oXyu3ibA\nJvkz8SZJew5WaNkVyTjg1ibn9ydlPhwP7E5KQLUW8F5Si+JNpFpxB0iZDIFTgQNtbw2cBXw1l3Uy\ncLekiyQdLqmVZasbAd8CtgQ2Aw4CdgI+Bxy1GO8zhBBK4T63/JA0VdLMusfUhuLULETD8dLAxsAu\nwBTgjJxosF/DNWtrJ+C8nJv9b5KuBbYhJZyqnX9Y0lX5+k1JldKVqbeMHha1Qk6QdC6wB6lCmEL6\nBQzkPttzASTNA35n2zk//NhmL8j/h0wF2GTlzVh79LqL875DCGFohjD91/Y0YNoAlzwErFd3vC7w\ncJNrbrL9EnCfpLtJFcuM/gotu0Uyj0V51us1qxVrmv3WBMyzPSE/3mR7j5dfYP/Z9neB3YDxklYl\npemtf3/1LZUFdT/31R330U/lanua7Ym2J0YlEkKoTLFdWzOAjSVtIGkZYDJwccM1/0calkDSaqSu\nrnsHKrTsiuQqYFlJh9VOSNoG+CcwSVKPpNVJLZFbgOuAyfn8WuQ3A9wNrC5p+1zGKElb5J/flQf1\nIdWavcCTpFS7W+VrtgI2KPWdhhBCCYbStTVoWfZC4JOkNOR3ARfYnifpBEn75MsuB56QdCdwNXCk\n7ScGKrfUrq3cXfRe4JQ8X/kF0gf8Z4AxwGxSC+T/2X5U0kXA24G5pFld1+ZyXszTgL8t6TX5vk8h\ntXj+DThZ0nOkVsgHbPdKuhD4kKRZpFq4qFliIYRQGS8sdkGi7cuAyxrOHVv3s4Ej8qMlpY+R2H4Y\neH+Tp47Mj/prTaotm5Uzi9RyaTw/uZ/rnyeNmzQzru66g+t+vr/+uRBCGHadn44ktkgJIYRO1gV5\nraIiCSGEjhYVSQghhHZEiySEEEJbvHC472BwUZGEEEIHixbJCLXyUq3swtK+BVSXYvO1PctXFuvS\nccdUEuddd3ylkjgAx2xxUGWx1llhtcpiPde7YPCLCrBKz+hK4gBowPXQnScqkhBCCO1x51d8UZGE\nEEIHixZJCCGEtrgvWiQhhBDa0NcbFUkIIYQ2RNdWCCGEtkTXVgghhLa42M1/S9FWPhJJvZJm5dzn\nP5O0Qrs3JGmipG8P8PybcsxZkv4h6b78828HeM0bJDXdJbjhuo3ytvMhhNAR3KeWH8Ol3cRWz+eM\nheOAF4GP1T+pZEgxbM+0/ekBnp9by5RIyux1ZD7efYBi30DKBBZCCF2lr1ctP4ZLkRkSrwc2kjRW\n0l2STgduA9aTtIekGyXdllsuYyBlS5T0B0mzJd0iaUVJu0i6JD9/vKQfS7pK0p/qMy02I2kpSd/M\nLaS5ORkWwNeBXXPL5dOSNpR0vaTbJd0q6S0F/h5CCKEw3dAiKWSMRNLSwF7Ab/KpTYGP2P73nPP3\nGGB3289K+i/gCElfB6YDk2zPkLQS8HyT4rcEtgNGA7dLujQny2rmfcDmwHhgdWCGpOuAzwOftL1f\nvt8VgHfYfkHSZsA5QFQmIYSO4yVgZfvydWMK1wNnAmsDD9i+KZ/fjvThfkNOrb4McCOpsnnE9gwA\n2/8CWJR+/WW/zNkOn5d0NbAtKTl9MzsBP7XdCzwq6ffARFK3W71lgdMkjSel591wsDcqaSowFWDC\na9/E2DGvH+wlIYTQtiVh+u/zeaziZbkieLb+FHCl7SkN121Jytc+mMZrBnpNq1X3fwIPAh8ERgHP\nDHoT9jRgGsB7139PF8yjCCGMBH1d0CIpcoykPzcBO0raCFK3kqRNgD8Ca0vaJp9fMXeRNdpX0nKS\nVgV2AWYMEOs6YLKkHkmvA3YEZgJPAyvWXfcaUmvIwIdpvQIKIYRK2Wr5MVxKX0di+zFJBwPnSVo2\nnz7G9j2SJgGnSlqeND7SbObVLcClwPrAlwcYHwH4OakrbTap5XKE7b9LehLokTSb1P12GvBzSVOA\n3wLV7JUdQghDNOK3SLE9psm5+4FxDeeuArZpcu0M0gd/vWvyo+Ye21P7iX9ww3EfcEST614ktWbq\nvanu52PydfOBCYQQQoeIle0hhBDa0g1jJB1dkdg+frjvIYQQhtOSMP03hBBCibphr62oSEIIoYNF\n11YIIYS29MVg+8g069m/VBJn6aVG5v89x/U8WUmcY7Y4qJI4ALfP+2llsd665SGVxVqo3kriPNXb\nbHekcvxlwROVxSpCN7RIqliQGEIIYTEVvSBR0p6S7pY0X9LnB7juQEmWNHGwMkfmV94QQhghimyR\nSOoBvgO8A3iItLHtxbbvbLhuReDTwM2tlBstkhBC6GAewqMF2wLzbd+bF2qfD+zb5LovA/8DvNBK\noVGRhBBCB+vtW6rlRwvWIW1YW/NQPvcySW8G1rN9Sav3GBVJCCF0sL4hPCRNlTSz7tG4vVSzfrKX\nGzM5o+3JpB3SWxZjJCGE0ME8hM3J69Nd9OMhYL2643WB+o1wVyTtlXhNTgmyJnCxpH1sz+yv0KhI\nQgihg/UVu7J9BrCxpA2AvwKTgZfnydt+ClitdizpGuBzA1UiMMSuLUlHS5onaU7Of/4WSZ/JqWsH\ne+3xkv6aX3eHpH2GEjuEEJZEfajlx2BsLwQ+CVwO3AVcYHuepBPa+UxuuUUiaXvg3cBWthfkXOzL\nkPKu/wR4roViTrZ9kqQ3AtdLWiNv/V6LsXR+o6WrMlYIISyuoXRttVSefRlwWcO5Y/u5dpdWyhxK\ni2Qt4HHbC3KAx4EDSTnar8751JH0jKSvSpot6aacqbDx5u4i5UpfTdLZkr6ZX/8NSaMlnSVphqTb\nJe2by91C0i25RTNH0sb52ktzrDtyoiwk3Z8rOiRNzM2zWqtomqQrgB/lTIon5lhzJB0+hN9HCCGU\nrhe1/BguQ6lIrgDWk3SPpNMlvc32t0kDNbva3jVfNxq4yfZ4UurbwxoLkvQW0iSDx/KpTYDdbf8n\ncDRwle1tgF2BEyWNBj4GfCvniJ9IGjTaE3jY9njb44DftPA+tgb2tX0QcCjwVI61DXBY7jt8lfrZ\nEE+/0F1bLIQQutdQZm0Nl5YrEtvPkD6Ep5IqgOk5hW6jF4Ha/ONbgbF1z31W0izgJGBSzpkO8DPb\ntU199gA+n6+7BliOlGb3RuAoSf8FvN7288BcYHdJ35D01jxQNJiL82trsT6UY90MrAps3M/7n2Z7\nou2JKy63agthQgihfd1QkQxp1lb+sL+GNDVsLvDhJpe9VFdB9DbEONn2SU1e82zdzwIOsH13wzV3\nSboZeBdwuaSP2r5K0tbA3sDXJF1h+wRSt1mtklxukFifsn15s/cbQgjDregxkjK03CKRtKmk+m/r\nE4AHgKdJc4+LcjnwKeVJzHmVJZLeANybu9MuBraUtDbwnO2fkFo5W+Uy7ie1ngAOGCTWxyWNyjE2\nyd1oIYTQEfrU+mO4DKVFMgY4VdLKpG/880ndXFOAX0t6pG6cpB1fBk4B5uTK5H7SbLFJwAclvQQ8\nCpxAGtc4UVIf8BLw8VzGl4AzJR3FwJuOnUHqerstx3oM2K+A9xBCCIVoZVrvcJO7IY9jh9lg1fGV\n/NJGaj6SFXqWrSROr6vrNR6p+Uie61tQSZwVlqrmbwLgqYWtrFQozl1/v6WtmuAXax7U8ufN/o/+\ndFhqnZH5SRVCCCNEnzq/RRIVSQghdLBu6DOKiiSEEDrYcE7rbVVUJCGE0MGGczZWq6IiCSGEDjac\nW5+0KiqSxbBszzKVxFGFf0CjK5pJBfDgc48NflEB1llhtcEvKkiVM6mun3NWZbEmbDGlkjij1FNJ\nHIDlK/r3W5RokYQQQmhLjJGEEEJoS8zaCiGE0Jbo2gohhNCW6NoKIYTQlt5okYQQQmhHtEhCCCG0\npRsqkqGk2m2LpKMlzcu50WfldLtDLeN4SZ8r4/5y+S/neg8hhE7gITyGSyUtEknbk3KKbGV7Qf6w\n7q5VQSGEMAy6YdZWVS2StYDHbS8AsP247YclbS3pWkm3Srpc0loAkg6TNEPSbEkXSlphoMIlfVDS\nLbml831JPZI+Lul/6q45WNKp/V1f4nsPIYTF1g0526uqSK4A1pN0j6TTJb0tp7c9FTjQ9tbAWcBX\n8/W/sL2N7fHAXcCh/RUs6Y2k7Ik72p5AyhP/AeDnwP51l04Cpg9w/YAkTZU0U9LMJ5+vZouPEELo\nHcJjuFTStWX7GUlbA28FdgWmA18BxgFX5vTsPcAj+SXjJH0FWJmU4vfyAYrfjZSffUYuZ3ng77Yf\nk3SvpO2APwGbAjcAn2h2fQvvYRowDWCzNbbphsWmIYQRoBu6tiqbtWW7F7gGuEbSXNIH+jzb2ze5\n/GxgP9uzJR0M7DJA0QLOsf2FJs9NB94P/BG4yLZzbvb+rg8hhI4Ss7YySZtK2rju1ARSl9XqeSAe\nSaMkbZGfXxF4JHd/Ddbt9DvgQElr5HJWkfT6/NwvgP2AKaRKZbDrQwiho8SsrUXGAKdKWhlYCMwH\nppK6ir4t6TX5Xk4B5gFfBG4GHgDmkiqWmmMkfaZ2YHtdSccAV0haCniJ1Np5wPY/Jd0JbG77lnz9\nnf1dX97bDyGExdPXBds2VjVGciuwQ5OnHgd2bnL9d4HvNjl/PHB8k/PTWdTiaHzu3a1eb3tsszJC\nCGG4FD2ILmlP4FukcekzbH+94fkjgI+SvvQ/Bhxie8Av2pUtSAwhhDB0RU7/zUsdvgPsBWwOTJG0\necNltwMTbW9Jmv36PwwiKpIQQuhgfWr90YJtgfm277X9InA+sG/9Bbavtv1cPrwJWHewQmOvrRBC\n6GAFj5GsAzxYd/wQMNB2VYcCvx6s0KhIQgihgw2lGpE0lTSRqWZaXgP38iWthpD0QWAi8LbB4kZF\nEkIIHWwo60jqF0734yFgvbrjdYGHGy+StDtwNPC22tZWA4mKZDHMf/JVv/dSvGX1TSuJA3D30w9V\nFmuDMWtWEue53kH//guzUNVtUDFhiymVxZo177xK4kzZ+jODX1SQn/zys5XFKkJvsV1bM4CNJW0A\n/BWYDBxUf4GkNwPfB/a0PeiuHxAVSQghdLQiV7bbXijpk6Rtp3qAs2zPk3QCMNP2xcCJpLV/P8vb\nSP3F9j4DlRsVSQghdLCiFyTavgy4rOHcsXU/7z7UMqMiCSGEDtb569qjIgkhhI7WDZs2RkUSQggd\nrODB9lJERRJCCB2sGzZtHHSLFEm9OSXtHZJ+lXfwLUxOgXta/nm/+n1fJG0n6eYc/y5JxxcZe6B7\nCSGETtAN28i3stfW87Yn2B4H/IO05XpZ9iNtJFZzDjA1p8QdB1xQYuwQQug4fbjlx3AZ6qaNN5L2\nagFA0pGSZkiaI+lL+dxoSZdKmp1bMZPy+fslrZZ/nijpmvqCJe0A7AOcmFsgGwJrkNPv2u61fWe+\n9nhJP5Z0laQ/STpsoHvK5z8o6ZZc9vfzLphI+kjOJX8tsOMQfx8hhFCqInf/LUvLYyT5g3c34Mx8\nvAewMWk3SQEXS9oZWB142Pa78nWvaaV823+QdDFwie2f59eeDNydK53fkFLkvpBfsiWwHTAauF3S\npaRWS7N7egyYBOxo+yVJpwMfkHQl8CVSDvengKtJWyiHEEJHcBeMkbRSkSwvaRYwFrgVuDKf3yM/\nah+8Y0gf4tcDJ0n6BqlSuH5xb872CZLOzXEOIqXM3SU//UvbzwPPS7qaVHns1M89bUmqLGbklZrL\nA38n7Xp5je3HACRNBzZpdi/1m6Gp5zUstdToxX1bIYTQsm6YtdXyGAnwemAZFo2RCPhaHj+ZYHsj\n22favof0oT0X+Jqk2orJhXXxlmv1Bm3/OWdM3A0YL2nV2lONl/Z3T/n8OXXnN83ZFpuV0999TLM9\n0fbEqERCCFXphq6tlsdIbD8FfBr4nKRRpL1aDpE0BkDSOpLWkLQ28JztnwAnAVvlIu4nVTAAB/QT\n5mnq8rNLepdyE4LUsugFnszH+0paLlcsu5A2I2t6T8DvgAPzz0haRdLrSXnhd5G0an5P72v19xFC\nCFXos1t+DJchrSOxfbuk2cBk2z+W9EbgxvxZ/wzwQWAj0oB5H/AS8PH88i8BZ0o6ivQB3sz5wA8k\nfRo4EPg34GRJz5FaNB+w3Zvj3QJcCqwPfNn2w8DDze7J9p2SjgGukLRUvq9P2L4pTym+kTSofxtp\nI7MQQugInd+x1UJFYntMw/F76n7+FimJfL0/k1oGjeVcT5PxB9tnA2fnn2/gldN/Jw9wa/fYntp4\nsp97wvZ0YHqT8z8EfjhAnBBCGDbdsCAxVraHEEIHGymztjpO3UB5CCGMaAujIgkhhNCOaJGEEEJo\nS2wjH0IIoS0exmm9rYqKZDFsv/pmlcRZd+kVB7+oILMWvlhZrJWWank9altW6alu4ehTvc9XFmuU\nqpuhPmXrz1QS57xbT6kkDsB/TPx8ZbEATr//3W29PmZthRBCaEs3bJESFUkIIXSwaJGEEEJoS4yR\nhBBCaEvM2gohhNCWWEcSQgihLTFGEkIIoS297vzOraHmbF8sknpzrvQ7JP1K0soFl3+wpNPyz/tJ\n2rzuubMl3ZdzyN8j6UeS6vPOX1b0/YQQQlE8hP8Nl0oqEnKWRdvjgH+wKMtiGfbjlVvRAxxpezyw\nKSkN79WSlgGwvbftJ+svVlLV7yaEEPrVDYmthuPD8kagvkVwpKQZkuZI+lI+N1rSpbkVcYekSfn8\n/ZJWyz9PlHRNfcGSdgD2ISXWmiVpw/rnnZwMPArsVV+mpLGS7pJ0OinB1Xpl/QJCCKFVHsJjuFRa\nkUjqIeVevzgf70FKobstMAHYWtLOwJ7Aw7bH51bMb1op3/YfctlH5hbQn/u59Dag2T4nmwI/sv1m\n2w8M4a2FEEIp+nDLj1ZI2lPS3ZLmS3rVfjGSlpU0PT9/s6Sxg5VZVUWyvKRZwBPAKsCV+fwe+XE7\niz7cNwbmArtL+oakt+Z88UVSP+cfsH1T0xdIUyXNlDTz0Wf/WvDthBBCc0VWJPnL/HdIPTKbA1Pq\nx5SzQ4F/2t4IOBn4xmDlVjpC3rQKAAAcH0lEQVRGArweWIZFYyQCvpZbDxNsb2T7TNv3AFuTKpSv\nSTo2X7+w7p7b2fnvzcBdTc4/298LbE+zPdH2xDVHr9PfZSGEUKhe97X8aMG2wHzb99p+ETgf2Lfh\nmn2Bc/LPPwd2k9Tfl2+g4q6t3LL4NPA5SaNIud0PkTQGQNI6ktaQtDbwnO2fACcBW+Ui7idVMAAH\n9BPmaaDptrl5EP3TwFq02F0WQgjDqeBZW+sAD9YdP0TdmHXjNbYXAk8Bqw5UaOWD7bZvB2YDk21f\nAfwUuFHSXFLttyLwJuCW3B12NPCV/PIvAd+SdD3Q20+I84EjJd1eN9h+oqTZwD3ANsCuuTYOIYSO\nZrvlR30XfH5MbSiuWcuisQZq5ZpXqGRBou0xDcfvqfv5W8C3Gl7yZ1JrpbGc64FNmpw/Gzg7/3wD\nr5z+e/Ag9zY2//g4MG6ga0MIoWpDWdluexowbYBLHuKVM1LXBR7u55qHJC0NvIa0bKNfsVYihBA6\n2FBaJC2YAWwsaYO8lm4yeRZtnYuBD+efDwSu8iCFxxYpIYTQwXoL3P/X9kJJnyT1+PQAZ9meJ+kE\nYKbti4EzgR9Lmk9qiUwerNyoSEIIoYMVvWLd9mXAZQ3njq37+QXgfUMpMyqSEELoYLGNfAghhLYM\n5x5arYqKZDHc8sQ9lcRZYfXqJpG9drkxg19UVKyedtaStk79bmBQvL8seKKyWMv3LFNZrJ/88rOV\nxPmPia/aqaM035r59cpiFSFaJCGEENoSLZIQQght6YbEVlGRhBBCB4uurRBCCG1xtEhCCCG0Yyhb\npAyXqEhCCKGDtbj1ybCKiiSEEDpYN7RIStu0UdJ7JVlSs5S2rZZxiKS5OZ/7HZIaE7AUStLZkg4s\nM0YIIQxFb19fy4/hUubuv1OA39PChl/NSFqXlItkJ9tbAtsBc4q7vRBC6HwFJ7YqRSkVSc54uCMp\n9+/kfG66pL3rrjlb0gGSVpB0QW51TM/J5icCa5CyHT4DYPsZ2/fl114j6RRJf8gtlW3z+dGSzpI0\nIye22jef75F0Yj4/R9Lh+bwknSbpTkmX5pghhNAxCt5GvhRljZHsB/zG9j2S/iFpK1LmwknAZXkf\n/N2Aj5Pyt//T9paSxgGzchmzgb8B90n6HfAL27+qizHa9g6SdgbOIiWlOpq0d/4hklYmZVn8LfAB\n4Cnb20haFrhB0hWk3O2bkjIyvg64M5f1KjnT2FSAnqVXpqenui1FQghLriV5jGQKqeIg/3cK8Gvg\n7fmDfC/gOtvPAzvVrrV9B7n7ynYvsCcpsco9wMmSjq+LcV6+7jpgpVxx7AF8PqfovQZYDlg/n/9Q\nPn8zKf/wxsDOwHm2e20/DFzV3xuyPc32RNsToxIJIVRliWyRSFoVeDswTpJJyVMM/D/Sh/s7SS2T\n82ov6a+snJXrFlLL4krgh8DxtacbL89lHWD77oZ7EvAp25c3nN+7STkhhNAxhnMQvVVltEgOBH5k\n+/W2x9peD7iPRS2PjwBvZVFO9t8D7weQtDmpmwlJa+cusZoJwAN1x5PydTuRuq2eymV+KlccSHpz\nvvZy4OOSRuXzm0gaDVwHTM5jKGsBuxb4ewghhLb14ZYfw6WMMZIpQOM+zRcCBwGfBn4EXGz7xfzc\n6cA5kuYAt5O6tp4CRgEnSVobeAF4DPhYXZn/lPQHYCXgkHzuy8ApwJxcmdwPvBs4AxgL3JbPP0Ya\nx7mI1HqaS+o+u7b9tx9CCMVZIhck2t6lyblv1x2u2vD0C8AHbb8gaUPgd8ADuaJ5+wChLrT9hYY4\nzwOHN4nfBxyVH40+OUCMEEIYVrGNfGtWAK7O3U4CPl7XWgkhhCVa7P7bAttPAxOH+JpdyrmbEELo\nLNEiCSGE0Ja+2EY+hBBCO5bIwfYQQgjF6YaKRN1wkyOBpKm2p0Wszo4Tsbor1kh8T92ozN1/wytN\njVhdESdidVeskfieuk5UJCGEENoSFUkIIYS2REVSnSr7VkdirJH4niJW98SpOlZXicH2EEIIbYkW\nSQghhLZERRJCCKEtUZGEEEJoS6xsL4mkTzc5/RRwa04pXHS8ZW0vGOxct8QJoZmcT2hd2w8O972E\nRWKwvSSSzge2AS7Jp/YmpQ1+I3Cu7f8tON5ttrca7Fy3xMnlTgSOBl5P+tIjUgbmLQuMcTvN0y3X\nYhX+vnLc1wMb2/6tpOWBpfNO2EWUvcpAz9v+RxFx6uKdygApq203+1LVTrxbbW9dZJkN5e8/0PO2\nf1FW7G4VLZLyvBaYUPtwkHQMcAEp5fBMoJCKRNKawDrA8jm1sPJTK5FyvRSiqjgNzgWOJGWwLGsL\n1ANLKrdfkg4jrZJeBdgQWBf4HrBbQSFuJX2wq8lzBt5QUJyamfm/OwKbA9Pz8fvyvRTtJknb2J5R\nQtkA78n/XQPYAbgqH+8KXANERdIgKpLyrA88X3e8ABhr+zlJRXYDvRM4mPRh9L8s+vD4F80zQhYR\n55t154uOU+8x2xeXVDYAtv9cZvn9+ASwLXBzvoc/SVqjqMJtb1BUWS3GOwdA0sHArrZfysffA64o\nIeSuwOGSHgCepeCWqu2PAEi6BNjc9iP5eC3gO0XEGGmiIinPBcCNkv4vH+8DXCBpNHB3UUFsnyPp\nx8AU2+cWVW6zOMA5kg6wfWFZcRocJ+kMUvrllyvfMroWJG0DnErqelyW9OG0wPZKRcfK5b6YuvtB\n0tIM0DW0uPJ4wgeADWx/WdL6wJq2byk6VrY2sCJQ6zobk88Vba8SymxmbK0Syf4GbFJR7K4SFUlJ\nbB8n6TJSV5aA/7B9U356csGx+iQdTuoKKtsNks4E1ra9l6TNge1tn1lCrI8AmwGjWNS1ZcrpWjgd\n+CBwPqm1cDCwXglxAK6VdBSpm/AdwL8Dvyohzumk39vbgS8DTwMXksbuyvB14HZJV+fjtwHHF1W4\npJVs/4v0PqpwjaTLgfNIf3eTgasHfsmSKQbbSyLpf4HpJX77a4z3RVJX2nRScx8oZWD118APgaNt\nj8/fpm+3/aYi4+RYc8sot59Yt9reuj6mpD/Y3qGEWEsBhwJ7kL5kXA6c4YL/MdYmQUi63fab87nZ\ntscXGach5prAW/LhzbYfLbDsS2y/W9J9vHoMyLaLHvtB0nuBnfPhdbYvKjrGSBAtkvLcCXxF0ljS\nt8DptmeVGO+Q/N9P1J0rY2B1NdsXSPoCgO2FknoLjlFzk6TNbd9ZUvn1npW0DDBb0n8Dj5C6Zgol\nqQc4x/YHgR8UXX6Dl3I859irU96khVpX2u7AG2yfIGl9SdsW9WXK9rvzf6scA7oNeDrPrltB0opF\nza4bSaIiKUnu6jkz/+M9EDhF0pq2NyspXlX/uJ6VtCqLPpy2I62PKcNOwIfzN9AFlDD9t87BpAW6\nnwT+E9gYOKDoILZ7Ja0uaRnbLxZdfoNvAxcBa0j6Kunv8JgS49V3pZ1ACV1puQW8F6nLE9IXtstt\nLywqRl2sxtl161Ds7LoRIyqS8q0HjCX9Ec4vM5CkcaTpl8vVztn+UcFhjgAuBjaUdANQqyjLsGdJ\n5Tazt+3TgBeALwJI+iTwpxJi3U8aa7qYV3ZDfrPfVywG2+dKupX0wSdgP9t3FRmjwVtqXWk5/j9z\nK68QktYmjVE8AtxOek/vBr4paVfbDxcVKyt1dt1IEhVJSeq+AT5IGrd4S9HjFQ3xjgN2IVUkl5G+\ntf0eKLQisX2bpLcBm5L+Id9dm+5ZgioH8A4BTms4d2iTc0V4OD+WIs1yKoWkb5G6VKuaslp2V9p/\nA9+1fUr9ybyLxNeADxcYCyqaXTcSREVSnkeAnW3/raJ4BwLjSQPfH5H0OuCMooNIeh/wG9vz8iLL\nrSR9xfZtRccCLmXRoOpywAakqdNbFBVA0iTSbJwNJNXPBlsJeLKoOPVsf6mMcpu4DThG0iakLq7p\ntmcO8pp21LrSXldSV9p2tg9uPGn725IKm1Jfp6rZdV0vZm2VSNJrSH2r9V1Nfygp1i22t81dGbuS\n+qfvsF3Yh26OM8f2lpJ2In0LPAk4yvZbBnlpEbG3Ag63fXiBZW5A+v/oa8Dn6556mlQpF97aytNj\nX/UPz/bbi46V461CGu+ZDKxve+My4uRYm7GoK+13RXal1c8+G8pzbcSrZHbdSBAtkpJIOoQ0aLsO\naYuPbYCbSN1PZZgpaWXSTKBbgWdIe3sVrTZD612kboZfSjq+hDivkrvVCl0DYfs+4D7gt5JWAybm\np+4tscvuc3U/L0f6kC98sLjORqTB6bGkwekyrQY8Z/uHeVLBBvl3XITXqPk+WCK1IAuV12f9hDTt\nt4wWz4gRLZKSSJpLGqi70fYESVsAx9ieUkHsscBKtueUUPYlwF9J0zy3Jq1duaWMtQmSjqg7XArY\nCljV9jtLiLU/cApwPemDaQfgs1WtG5B0re23FVzmN4D9gT+Txukusl1Kd12OdxypIt7U9iZ5cPxn\ntncsqPwfDvR8bWuTokjaBzgRWMb2BpImACfY3qfIOCNBtEjK84Lt5yWRp3rOy83+0uQPw51I3Sa/\nBwqvSID3k2ZTnWT7SaX9h44sIQ68ciB6IWnMpKztWY4DtqmNaeUxpitIff6F0it3512KVCGvWXQc\nUktre9uPl1B2M+8F3kwam8H2w5IKm0xQtwfWq1o5uYuyaMeRvgxek+PPyl/SQoOoSAomaek8p/2R\n3NX0K+BySf8g7dVTVtzTSV0Y5+VTh0va3fYnBnjZkDltOvlL0oDq+vn0H4uMURfr5UFpSa8Fniyx\nf3qphokRj1Fe4rf63XkXkj7wDy0hzjTgIEkvLxCk3L22XrRtSbVZW6NLinMhqXVa7+ekCrlIC20/\nVZu1FfoXFUnxbgG2qmv+flHSbsBrSN+oy/I2YFztg1bSOaSxmUJJ+hTpm9rfeOX+V0XmCDkWuMD2\nHyUtC/wamAAslHSQ7d8WFavOFUp7o/00H08mDa4WrsLFo9+h5AWCDS6Q9H1g5byY7xAKXL2fW/Rb\n8OqxkpWom9BSoDskHQT0SNoY+DRQymSZbhcVSfFe9fXF9u8qiHs3aev6B/LxepTTtfUfpD7wJ0oo\nu2YSaZNBSGsDliItfNwEOAcooyL5HCl/Rm2TzXNI33ILVzeF+unaFGqgjCnUpS4QbGT7pDxN9l+k\n/6+OtX1lgSE2JS1AXJlFOUMgVZCHFRin5lOkxGoLSC39y1n0dxnqREVSvNUbBolfoejVy3VWBe6S\nVOu22Ia0jf3FOW5RA4QPUt6WKDUv1nVhvRM4z3Yv6f0V+jcr6Qrbe+R4F+RH2b5o+2d5CvU7SVOo\nv8uizQ6LUuleW9lcYPkcs9AWse1fAr+UtL3tG4ssu594zwFH50kLjj22+hcVSfF6SJv9Vd2xemxF\nce4lba99Ka/MEVJkBbkgb/fyN9KamPrpskVnY1y94PJaUdUU6mZ7bX2xhDgASPoo6e/wKtLf/6mS\nTrB9VkHlv5zSV9KrZj+6+JS+2wBnkSd9SHoKOMR2GVkfu1pUJMV7xPYJVQe1fa1KzANe5y/5sUx+\nlOE/SN1KqwMn12boSNqbtMdSkfpbmwCUlp/7r3ksYXfgG3kcqPCB/WHYa+tI4M21bk+lzT3/QPow\nLkKZq/KbORP4d9vXA+QW5A8pcDxwpIh1JAUrY4Vti3Ff3qnU9oZ5cPB7tmOn0gFIegL4Jf3kN7d9\nSJPz7cZcgTSFem7eCHAt4E22y0hL2xj7L7bXH/zKxSr7d8Bezrsa5/GYy2zvXka8skm6oXENTLNz\nISqSwklaxSVuzjhA3FnknUq9KIlR4YmhqtzeI6/l+G9KzMaonPypqPJajLkh8JDtBZJ2IX3D/VGZ\niwXrYj9ou5TMj5J+BLyJVDEb2Jc0i/EeKK77s6q/QUknk7pSaxkSJwH/JK9lKmFyRNeKrq2CDUcl\nklW1U2mV23ucTc7GmI/vIa3QLjKt73AsErgQmChpI9J7uZg07XjvCmKX+c3xz/lR88v836J3OK7q\nb3BC/u9xDed3IP0eS9kbrRtFRTJyXKsKdiptMtB4g6Rri46TVZGN8d9qPyilid2W9CExwwWmiW3Q\nl9/L/sAptk+tTdEtwgCzBkUJWR9rqlpAWtXfoO1diy5zpCpr5W6o3udJq7HnAoeTcpIUng1P0ip1\nj9Uk7Uk523tABdkYbd+Ry/4oqRtmf9LsppuUNt4sw0t51tGHgEvyuVEFlr9iP48xwLcKjAOkBaS1\n7X8kLSvpKlLL5G+SCh8fafI3+E4K/BuU9J48caV2fKyk2ZIuLmkrlq4XYyQjSF4ngO3HSoxxH4u6\nRxaSsv2dYPv3JcTaCjgVGAfcQc7GWNJmlHcDOzTOOLK9aQmxNgc+RtrQ87z84TTJ9teLjlUFSfPI\nuypImgocRJoptgkpP/22Bcer/Q3WbzFT2N+gpDmk3CfPSXo38E1gCmkfsfeVsWlot4uurS6nNChy\nHCnXuPKpXuDUIqch5zn1D9a295D0YVLf9P2UtDW5q83G+BBphXTN06TFl4Wzfaek/yLtRFDbyr7w\nSkTScqQ9vLbglTlxim5pVbaAFCrZYsZ5MSKkFuqZuTvtVkn/XnLsrhRdW93vM8COpJ1rV7W9CmmF\n9I6SPltgnO8DtWmdO5MSQZ1D6mqaVmAcJO1fewD7kCqSTYD3DLTmo01/BW6WdLzSdug3AfMlHTHQ\nTgWLQ9J7gFnAb/LxhNoOBAX7ManL553AtcC6vLKyLMoCSeNyi3hX0q7JNUUvIEXS+5R3FZZ0jKRf\n5NZrgSE0Rimx1W5A/RZHZezp1fWiRdL9PgS8w3Vbhdu+V9IHSf+gTy4oTk/djLRJwDTbFwIX5qnH\nRarto7QGaYbMVfl4V9KW3mUsEqxqxhHA8bx6e/IyvmVvZPt9kva1fY6kn1LORpRVLiCF8reYOYVU\n0f8LuMs5PbGkN5NSaIcGUZF0v1Fukm/C9mOSihzA7dGiLfJ3Iy1+rCn078iL8k5cAmxu+5F8vBZp\nR9vCubo86tB8e/IyBitr3YBPKm058ygpS2KhbN8MbKa0Xf29decvk1TGSvpSt5ixfZaky0lfZGbX\nPfUoUGjyrJEiKpLu9+JiPjdU55GmGD9OyopY2zZiI8rbxHFsrRLJ/kbq4iqMpFNsf0bSr2i+yK2M\nbHhVbU8+LU/D/SJprcoYyt2T7edUkyek9C1mbP81L4id0FDhP1X3hSpkMWury+WB9WebPQUsZ7uw\nVkmefrsWcIXtZ/O5TYAxZazylXQasDGLVhZPBubb/lSBMba2fWse1H8V24WvT1DaIuVoYI986nLS\nNvIvFB2rClqUJ+R/eGW2zJWAI21vUXC8SraYkXQTqWKcQ/r3NC7/vCrwsSq2tOkWUZGEjibpvcDO\n+fA6l5RDXSmb3/O2+/JxD7Bs3eydouL0AF+3XVZ64vpYpW8xk+PsC+xHmhhRP2ngaeB824W3tvL4\nyMa2f5gH+ce4If1uATHOB75se14+3pxUUX4Z+IXtCQO9fkkSFUnoaPnDsLba/Bbbfy8pzk3A7raf\nycdjSC2vHUqIdVUZe5M1ifNr8hYztsfnqbi3F73/Wl28SvKE5Fl1E0kJ1jaRtDbws6I3U5Q0q7Gy\nqJ1r9tySLMZIQseS9H7gRNLsplp+iyNtl5G5cLlaJQJg+5nchVKG2/N0359R1y3p4resr2KLmcrz\nhADvJS0OvC2X/3BtOnDB7pb0XeD8fDwJuCePyZS1nqkrRUUSOtnRpPUxf4eXV+7/lnJS4D4raava\nWI+krUmTCsqwCvAEr9z0zxQ/rbn0LWayqvOEvJhX0dfe1+iS4hxM2rPuM6QvMr8nbRj5Emkqesii\nayt0LDVsg58XiM0uo2smr9w/H3g4n1qLtG1J4dnwJK3WbMp2CXEq22KmSpI+R5qE8Q7SwthDSKvp\nv11wnPeS8qksGPTiJVxUJKFjSTqRlKvjvHxqEjDH9n+VFG8Ui7Zj+WPR27HkFe1nkb7R9gHvL2kg\nuradzaN5XORw0nY2dwLHuqRUB6o2V807SLPeBFxu+8oSYvyQ1Gq8jvQl4/KY9ttcVCSh4+S1Ka+z\nfUPeEmUn0gfGP4Fzbf95wAIWL+YKwBHA620fltd3bGr7kkFeOpQYc0iVxx8lvQX4H9tNpx23Gec2\n0sSBf+TtbM4HPkXKr/FG2wcWHTPHrV8v8nKeENv/r4x4dXF7gMm2zy2h7FHAXqQvMTsBV9r+aNFx\nul1UJKHj5BXtRzV2wUiaCBxn+z3NX9lWzOnArcCHbI9Tynl/Y5Ezc9SQjbHxuMA4s22Pzz9/B3jM\n9vH5uNLZRpKuLaqylLQS8AlgHdI04yvz8ZHALNv7FhGnSdxRpHUrhwBvtb1aGXG6WQy2h040tlk/\nvu2ZksaWFHND25Nqs45sP6+GJc0FWEOv3ADyFccuKBUtFW5nU0/SKnWHS5FWtBeZq+bHpFbpjcBH\nSRXIMsC+tove7w2lXDuTSd1bV5M2J31f0XFGgqhIQicaaIfV5UuK+WJuhdRmAm0IFD3I+gNeuQlk\n43FRhmM7G0gtusY8IYcWWP4bahMtJJ0BPA6sb7uMHY0hzdo6Dzjc9oK8CPJbpFZQqBNdW6HjSDoP\nuMr2DxrOHwrsYXtSCTHfQcoouTlp1+QdgYNtX1N0rCpUvZ1NFarqGmyIOYGU1GoSqWL8he1Ty4zZ\njaIiCR0nr2a/iLTpZG367URSN8Z7XXAu9dyFtS7wHLAd6Rv1TWVN0c3rYQ4j7cT7cq+Ai084VSlJ\n7wN+Y/tpSceQ9qn6SlEVV8O+ciK1Tp/LP9v2SgXF2YTUpTWFtN5nOvA5268f8IVLsKhIQseStCtp\nDQTAPNtXDXR9m7FutV30LrX9xfoDqbvpVhZtiY5TfpeuJWmO7S1zF9DXSHlCjrJdVJ6QSkjqI/3/\nc6jt+fncvbbfMLx31rlijCR0LNtXkwY5q3CTpG1sz6gg1gplrYUZZqXmCanQAaQWydWSfkOaPl30\nxIsRJVokIQCS7iQtRryf1H1S6y7ZsoRYXwH+YPuyosseTnna9l9JeUJqW8zcUpuK3G3y1iv7kbq4\n3k5KLX1RbB//alGRhABIatr/bfuBEmI9DYwmzQp7iYL7+IeLKsoTMhzy1Ob3kbbNKX3n5m4TFUlY\noklaDvgYsBEwFzgztsFYfFXkCQmdp9D0lCF0oXNIM8LmkrbC+N+yA0r6XSvnuk3OE/JfwBfyqVHA\nT4bvjkJVYrA9LOk2r1vkdiZwS1mBcutnBWA1pVzqtQHclYC1y4pboaryhIQOExVJWNK9vMNvTvxU\nZqzDSbkt1mbR+hhIKWm/U2bgilSVJyR0mKhIwpJuvKR/5Z8FLJ+PyxgA/wNwASknyKmSPkyaano/\n8NMC4wyXCyR9H1hZ0mGkTQ7PGOZ7ChWIwfYQKjJc27tXqYo8IaHzREUSQkU6aXv3KpSZJyR0lpi1\nFUJ1enLGQkjbu9dv+dK13cySVpL0BUmnSdpDySeBe4H3D/f9hfJ17R9vCF1ouLZ3L1uleUJC54mu\nrRAqNEK3d59bN4W6h/LzhIQOEy2SECpk+6Ym5+4ZjnspUP0U6l5J90UlsmSJFkkIoS1V5QkJnSsq\nkhBCCG2JWVshhBDaEhVJCCGEtkRFEkIIoS1RkYQQQmhLVCQhhBDa8v8BEzgOnUnhSkAAAAAASUVO\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.heatmap(weather.corr())" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd4AAAF0CAYAAACNGVhLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xvc5XO9///H0ziNsyFnGYTIYcoo\nhYwcNm0dSDGxpR2jX+wcNm3ia8sm9kZKOeypnMqhVA6hgzCMUowMg7acGSYyaUQTM3M9f3+834uP\nj7Wua13XtT5rXWvN6+62bvNZn89nfV7vdV2X9Vrvw+f9lm1CCCGE0B6LdLoAIYQQwsIkEm8IIYTQ\nRpF4QwghhDaKxBtCCCG0USTeEEIIoY0i8YYQQghtFIk3hBBCaKNIvCGEEEIbReINIYQQ2mjRThcg\ndL95LzzW9unPRq+xXbtDAvDtt+3Q9pij2h4x6etQ3JhLr7d99pnvazivH8znzWIrrzesWFWJxBtC\nCKF79C3odAmGLRJvCCGE7uFOtcW0TiTeEEII3aMvEm8IIYTQNo4abwghhNBGC+Z3ugTDFok3hBBC\n94jBVSGEEEIbRVNzCCGE0EY9MLgqZq4aISS9PIhzJ0j6QOH55yXtn7cPkLTGEOI/IWnlwb4uhBDa\nye5r+jFSReLtThOA1xOv7fNtX5KfHgAMOvGGEEJX6Otr/tEESbtKekjSI5KOqXN8HUk3SbpP0hRJ\naw33LURT8wgm6SPA8cDiwGxgX2A08HlggaT9gH8DdgReBp4AxgOXSpoLvB/4AzDe9guSxgNn2J4g\naSXgcuBtwJ2ACnH3A76Y4/4O+ILt7h/REELofgvmtexSkkYB5wA7AzOBuyRda/vBwmlnAJfYvljS\nh4BTgX8ZTtyo8Y5stwNb2343cAXwJdtPAOcDZ9keZ3tq7WTbPwKmAfvmY3P7ufZ/Arfna18LvB1A\n0sbA3sA2tscBC0gJ/00kTZI0TdK071xyeSveawghDMx9zT8G9l7gEduP2X6N9Dn7sdI5mwA35e1b\n6hwftKjxjmxrAT+QtDqp9vl4C6/9QWBPANvXS3ox798R2JL0zQ9SDfv58ottTwYmQ2cWSQghLKQG\nMbhK0iRgUmHX5PzZVbMm8HTh+UzgfaXL3At8AvgGsAewrKSVbM8eTLGLIvGObN8Evmb7WkkTgBOH\ncI35vNGysWTpWL2EKeBi28cOIVYIIVRrEIOmihWEBuqtXlT+XDwK+JakA4DbgGdIn6tDFk3NI9vy\npF8ywGcK+/8GLNvgNeVjT5BqsJC+tdXcRm5ClrQbsGLefxOwl6RV8rExktYZYvlDCKG1Wju4aiaw\nduH5WsCzxRNsP2t7z9wtd1zeN2c4byES78ixlKSZhceRpBrulZKmAi8Uzv0psIek6ZLKC9NeBJyf\nj40GvgJ8I1+jOEDqK8AHJf0e2AV4CiAPKjge+KWk+4AbgdVb/WZDCGEo3Dev6UcT7gI2kLSupMWB\nfUhjXl4naWVJtVx5LHDBcN9DNDWPELYbfQm6ps65fwQ2L+wqDrD6MfDj0rEN61xjNinh1hxROPYD\n4AdNFTyEENqphRNo2J4v6VDgF8Ao4ALbD0g6CZhm+1rS7ZunSjKppfCQ4caNxBtCCKF7tHhiDNs3\nADeU9p1Q2P4R8KNWxozEG0IIoXvEIgkhhBBCG43gqSCbFYk3hBBC9+iBRRIi8YYQQugeC4Z1C+2I\nEIk3hBBC94gabwgweo3yrcTVm/vs1IFPqsD3tzhh4JNabG69uXXaoFMfDqNiAtLQj15YryUSbwgh\nhO4RNd4QQgihjWJUcwghhNBGUeMNIYQQ2ihGNYcQQghtFE3NIYQQQhtFU3MIIYTQRpF4QwghhDbq\ngabmRmvAhhaS9HLF1/+OpE3y9peH8Pqxku5vfclCCKHFFsxv/jFCReLtAbYPtP1gfjroxBtCCF2j\nr6/5xwgVibdDJK0j6SZJ9+V/3573XyTpbEm/kfSYpL3y/kUknSvpAUnXSbqhcGyKpPGSTgNGS5ou\n6dJyTVbSUZJOzNtbSrpX0h3AIYVzRkk6XdJduWwHt/HHEkII/XNf848RKhJv53wLuMT25sClwNmF\nY6sD2wK7A6flfXsCY4HNgAOB95cvaPsYYK7tcbb3HSD+hcAXbZev8zlgju2tgK2AgyStW36xpEmS\npkma1tf3ygChQgihRaLGG4bh/cBleft7pERbc7Xtvtx8vGrety1wZd7/J+CWoQaWtDywgu1bC/Fr\ndgH2lzQd+B2wErBB+Rq2J9seb3v8IossPdSihBDC4PRA4o1RzSNHcU2WVwvbKv07GPN585erJQvX\narQGjIB/s/2LIcQLIYRqufuXr4oab+f8Btgnb+8L3D7A+bcDn8h9vasCExqcN0/SYnn7OWAVSStJ\nWoLUdI3tvwJzJNVq2cVm6V8A/1/tGpI2lBRV2hDCyDB/fvOPESpqvO2xlKSZhedfA74IXCDpaODP\nwGcHuMaPgR2B+4E/kpqB59Q5bzJwn6Tf295X0kn53MeB/yuc99kc/++kZFvzHVJf8u8lKZft4029\nyxBCqNoIHjTVLLkHqu0LC0nL2H5Z0krAncA2ub+3oxZdfM22/xHNfXZqu0MC8P0tTmh7zNeG0snQ\nAp36Vj4qPpJ62gHPfH9Yf9FzLzm26b+Q0fuf2qH/e/oXNd7ucp2kFYDFgf8aCUk3hBDaqgcqi5F4\nu4jtCZ0uQwghdNQIHq3crEi8IYQQukck3hBCCKF9vGBBp4swbJF4QwghdI+o8YYQQght1AO3E0Xi\nDcP27bft0PaYnbitB2C/e09qe8zjxx/X9pgAiwxpsrQQKtbX/aOaY+aqEEII3aPFczVL2lXSQ5Ie\nkXRMg3M+JenBvDrcZfXOGYyo8YYQQugeLRxcJWkUcA6wMzATuEvStYX1zZG0AXAsacKiFyWtMty4\nkXhDCCF0j9YOrnov8IjtxwAkXQF8DHiwcM5BwDm2XwSw/fxwg0ZTcwghhO7R5+YfA1sTeLrwfGbe\nV7QhsKGkX0v6raRdh/sWosYbQgihewxiVLOkScCkwq7JticXT6kXofR8UdKa5BOAtYCpkjbNq7wN\nSSTeEEII3WMQo5pzkp3czykzgbULz9cCnq1zzm9tzwMel/QQKRHf1XRBSqKpOYQQQtdwX1/Tjybc\nBWwgaV1Ji5PWSL+2dM7VwA4AklYmNT0/Npz3EDXeEEII3aOFo5ptz5d0KGlN8lHABbYfyOuYT7N9\nbT62i6QHgQXA0bZnDydu1HgBSatJukLSo/lerRskbShpgqTrSudeJGmvvD1F0vjS8QmS5kiaXnjs\nJGltSY9LGpPPWzE/X6dOeRbk190v6UpJS+X9L+d/x0qam895UNL5khbJ++/vrxz5mCWdWYh3lKQT\n8/ZG+X1Nl/QHSf0104QQQnu1dnAVtm+wvaHt9W2fkvedkJMuTo60vYntzWxfMdy3sNDXeCUJuAq4\n2PY+ed84YNVhXHaq7d3rxDoPOI3U2X8aqaP/yTqvn2t7XH7NpcDnga+VznnU9jhJiwI3Ax8Hft9M\nOYBXgT0lnWr7hdKxs4GzbF+T42/W3xsNIYS26oG5mqPGm9ru59k+v7bD9nTbUyuIdRawtaTDgW2B\nMwc4H2Aq8I5GB23PB37T3zl1zCcNODiizrHVSYMJatefMYjrhhBCtVpc4+2ESLywKXB3i6+5XamJ\nd32APCruaFICPtz2a/1dJNdmdwMaJr/cDL1jg3PqliM7B9hX0vKl15wF3CzpZ5KOkLRCg7iTJE2T\nNG3KKw/39zZCCKF13Nf8Y4SKxNu/Rl+ZBvoqNdX2uMLj0cKx3YBZpITfyGhJ04FpwFPAd+ucs34+\n59fA9bZ/Nphy2H4JuAT44pvemH0hsDFwJem+td9KWqJ8YduTbY+3PX7C0hv081ZCCKGFeqDGu9D3\n8QIPAHs1ODYbWLG0bwxQ7hdtSu473hnYGrhd0hW2Z9U59fU+3n482sQ5A/k6qV/4wuJO288CFwAX\n5MFaVbQKhBDCoHl+60Y1d0rUeNPApCUkHVTbIWkrSdsDDwNrSNo4718H2AKYPtggeRDXeaQm5qeA\n04EzWlD+IbP9F+CHwOdq+/JKHYvl7dWAlYBnOlPCEEIo6YEa70KfeG0b2APYOd9O9ABwIvCs7VeB\n/YALc7Puj4ADbc8pXOJ6STPz48q8r9y3uhdpou2nbN+YzzkXeGdO8FWpV46yM4GVC893Ae6XdC/p\n/rWjbf+pwjKGEELzeqCPN5qaeb1p9VMNjv2a1DRc79iEBpcsD1iqef2eWNsLgC0bXHeZ/vbbfoI6\nfcTF/banNCpH8fq2nwOWKjw/EjiyQflDCKGzRnBNtlmReEMIIXQNR+INIYQQ2qgHBldF4g0hhNA9\nosYbQgghtFEk3hBCCKF90o0o3S0SbwghhO4RNd4Q0iKW7TZXHQgKHD/+uLbHPHnaKW2PCZ15rwCL\n0KFfbugOkXhDCCGE9vH8kTsxRrMi8YYQQuge3Z93I/GGEELoHjGBRgghhNBOkXhDCCGENoqm5hBC\nCKF9oqk5hBBCaCPPj8QbQgghtE8PNDUvMtAJklaTdEVeJP5BSTdI2lDSBEnXlc69qLbYuqQpksaX\njk+QNKe0OPtOktaW9LikMfm8FfPzdeqUZ0F+3f2SrpS0VN7/cv53rKS5+ZwHJZ0vaZG8//7+ypGP\nWdKZhXhHSToxb2+U39d0SX+QNLlUtrslLS7pCUkzJN0n6dbi+yiUv/Y4Ju/fXdI9ku7N5T5Y0nGF\n84qv+2LxZ1249sul50dI+oek5Qv7JuT3+JHCvuskTWhUjvp/GSGE0H79rXtffoxU/dZ4JQm4CrjY\n9j553zhg1WHEnGp79zqxzgNOAyblfyfbfrLO6+faHpdfcynweeBrpXMetT1O0qLAzcDHgd83Uw7g\nVWBPSafafqF07GzgLNvX5PibFco/FnjG9mvpx8YOtl+Q9BXgeOCgcvkLr10MmAy81/ZMSUsAY20/\nBJySz3m5+DpJF9Upe9lE4C5gD6B4/kzgOOCnzZSjiTghhNAeIzihNmugGu8OwDzb59d22J5ue2oF\nZTkL2FrS4cC2wJkDnA8wFXhHo4O25wO/6e+cOuaTks8RdY6tTkpatevPKBzbDfh5ndfcAaw5QMxl\nSV+CZufrvpqT7pBJWh9YhpT0J5YO3wvMkbRz1eUIIYRW6oUa70CJd1Pg7hbH3K7U1Lo+gO15wNGk\nBHy47df6u0iuze4GzOjnnKWAHRucU7cc2TnAvsUm2uws4GZJP8vNuCsUju1K/cS7K3B14fnoUty9\nbf8FuBZ4UtLlkvaVNGA3wAAmApeTvpxsJGmV0vGTSUn5dYMph6RJkqZJmnbLKw8Ps6ghhNAcz2/+\nMVIN58O90dCygYacTbU9rvB4tHBsN2AWKeE3MlrSdGAa8BTw3TrnrJ/P+TVwve2fDaYctl8CLgG+\n+KY3Zl8IbAxcCUwAfitpCUmLA2vZfqxw+i2Sngd2Ai4r7J9bivuDfO0DSV8S7gSOAi7o52cA9X/O\nxX37AFfY7gN+Anyy9F6mAkjarrS/qXLYnmx7vO3xOyy9wQBFDSGE1uiFGu9Ao5ofAPZqcGw2sGJp\n3xig3C/alNx3vDOwNXC7pCtsz6pz6lv6SOt4tIlzBvJ1Ur/whcWdtp8lJaML8mCtTYEVgNtLr98B\neIXUt3oScORAAXPT9QxJ3wMeBw7o5/Q3/fyVBqa9kLc3BzYAbsz9zYsDj5Fq8kWnkPp63/TdcJDl\nCCGEthnJCbVZA9V4bwaWkFQbGISkrSRtDzwMrCFp47x/HWALYPpgC5EHcZ1HamJ+CjgdOGOw12ml\n3Oz6Q+BztX2Sds0DkJC0GrAS8AypOfkttWrbc4HDgf1zYqxL0jK1UcXZOKDewLKiKcDeubYNKTne\nkrcnAifaHpsfawBrqjRK3PYvScl7i2GUI4QQ2sdq/jFC9VvjtW1JewBfz7e9/AN4gpQgX5W0H3Ch\npCWBecCBtucULnG9pHl5+w5SjWu73AxcczKppvyU7RvzvnOBAyRtb/vWYb7HRt5SDts/Kp1zJnBo\n4fkuwDck/SM/P9r2n3KyOqFeENuzJF0OHAL8F280ldf8nFTz/JKk/wXmkmrKB/RXeNvXSdoSuFvS\nAuBR0ghvSM3Mu5VeclXe/7vS/lOAa/K2BluOEEJop16o8cru/llAOknSWsC3bZcT3ULjkjX3a/sf\n0dwOfZl9bNEFbY958rRT2h4T4Pjxx3Uk7iKM3JpKGL5Tn7hsWL/gWdvu0PTnzeq33zJgLEm7At8A\nRgHfsX1a6fjnSRWnBcDLwCTbDw6q0CXDHTm70LM9c2FOuiGE0E59C9T0YyCSRpFaYncDNgEmStqk\ndNpltjfL44b+h7fOGzFokXhDCCF0jRaPan4v8Ijtx/ItrFcAH3tTvHSXS83SDHznzoBiruYQQghd\nw33Nt1RLmkSaDbFmsu3iVL9rAk8Xns8E3lfnOoeQ7kxZHPjQYMpbTyTeEEIIXWMww5Jykp3czyn1\nsvhbItg+BzhH0qdJEw99pvlSvFUk3hBCCF1jMDXeJswE1i48Xwt4tp/zryDd+jos0ccbQgiha7Ry\ncBVpEZkNJK2b50TYhzRt7uskFafm+2fSHBbDEjXeMGyduK2uU3+4nbjVpVO39XTqNqYTxh8/8Elh\nodXKGq/t+ZIOBX5Bup3oAtsPSDoJmGb7WuBQpWVj5wEvMsxmZojEG0IIoYu4xTNS2b4BuKG074TC\n9mEtDUgk3hBCCF2kF2auisQbQgiha/SN4DmYmxWJN4QQQtdodVNzJ0TiDSGE0DWaHK08okXiDSGE\n0DVafB9vR0TiDSGE0DWijzeEEEJoo17o4+2JmaskrSbpCkmPSnpQ0g2SNpQ0QdJ1pXMvkrRX3p4i\naXzp+ARJcyRNLzx2krS2pMcljcnnrZifr1OnPAvy6+6X9FNJK+T9YyXNLV17/3zsXyXNkHRfft3H\nJJ2Tz3mw9Lq9ymXP176/VI5vSHpG0iKFfQdI6pO0eWHf/ZLGNirHUH8vIYTQanbzj5Gq62u8kgRc\nBVxse5+8bxyw6jAuO9X27nVinQecRlrt4jTSShdP1nn93Lx2I5IuJi2iXJsG6NHascJ11wKOA95j\ne46kZYC32b4mHx8LXFd8XZ5tpaGcbPcgrbzxQWBK4fDMHG/vZsrRX5wQQminXmhq7oUa7w7APNvn\n13bYnm57agWxzgK2lnQ4sC1wZhOvuYO09FR/VgH+BrwMYPtl248Pp6Ckn8v9pAm9J5aOXQe8S9JG\nbShHCCG0TF+fmn6MVL2QeDcF7m7xNbcrNQevD2B7HnA0KQEfnhdObkjSKGBH3jzp9vqla28H3As8\nBzwu6UJJH2nBe5gIXE5qDdhd0mKFY33A/wBfLr2minKEEELL9FlNP0aqXki8/WnUyj9Q6/9U2+MK\nj0cLx3YDZpESfiOjJU0HZgNjgBsLxx4tXXuq7QXArsBewB+BsySdOEAZ670HA+RVNj4MXG37JeB3\nwC6lcy8j1d7Xff3FgyiHpEmSpkmaNuWVYS/WEUIITbHV9GOk6oXE+wCwZYNjs4EVS/vGAC8MJVDu\nO94Z2Bo4QtLqDU6t9fGuAyxO6uPtl5M7bZ9KWprqEwO8pPzeiu9rV2B5YIakJ0jN4m9qbrY9n9RU\n/h9DKYftybbH2x4/YekN6p0SQggtFzXekeFmYAlJB9V2SNpK0vakdRPXkLRx3r8OsAUwfbBB8iCu\n80hNzE8BpwNn9Pca23OALwJHlZp6y9deQ9J7CrvGAfUGbRVNAfbL5YK0VNUteXsicKDtsbbHAusC\nu0haqnSNi4CdyAOohliOEEJoGw/iMVJ1/ahm25a0B/B1SccA/wCeICXIVyXtB1woaUnSeooH5oRY\nc72keXn7DuAcch9v4ZyTSTXKp2zXmo3PBQ6QtL3tW/sp3z2S7iXVHqeS+3gLp1wAXAOcIWmNXP4/\nA58f4K1PBt4J3CvJwDTg2Jxc/wk4uFCGVyTdDrypz9b2a5LOBr6Rdy02hHKEEELbLOjr/vpi1yde\nANvPAp9qcOzXpKbhescmNLjk8g32Ty68dgENmrhtL1N6Xkx4oxtc+0MN9mP7CUp9ynlgV6NbisbU\nucaehacXFfafDZzdTDlCCKHTemBVwN5IvCGEEBYOZuT23TYrEm8IIYSu0TeSO2+bFIk3hBBC1+iL\nGm8IIYTQPtHUHEIIIbTRgki8IYQQQvvEqOYQ6MyN6qN6YIBFsxbp0Df8E8Yf35G4J007uSNxO/V+\nw+BE4g0hhBDaKPp4QwghhDYawav9NS0SbwghhK4RtxOFEEIIbbSg0wVogUi8IYQQukafosYbQggh\ntE0v3NAQiTeEEELXiNuJQgghhDbqhVHN3b+icAghhIXGAtT0oxmSdpX0kKRHJB1T5/gSkn6Qj/9O\n0tjhvoeuSrySVpN0haRHJT0o6QZJG0qaIOm60rkXSdorb0+RNL50fIKkOZKmFx47SVpb0uOSxuTz\nVszP16lTnuMkPSDpvvz69xWOvU3SPEkHl17zhKSVS/sOkPStvH2ipL9LWqVw/OXS+XtIsqR3FvaN\nlTQ3l+NBSZdIWqzwXq8rXP+oRmXq7z2FEEKn9an5x0AkjQLOAXYDNgEmStqkdNrngBdtvwM4C/jv\n4b6Hrkm8kgRcBUyxvb7tTYAvA6sO47JTbY8rPH5l+2ngPOC0fM5pwGTbT5bK835gd+A9tjcHdgKe\nLpzySeC3wMQhlOsF4N/7OT4RuB3Yp7T/UdvjgM2AtYBPDSZoE+8phBA6qm8Qjya8F3jE9mO2XwOu\nAD5WOudjwMV5+0fAjjkfDVnXJF5gB2Ce7fNrO2xPtz21glhnAVtLOhzYFjizzjmrAy/YfjWX5QXb\nzxaOTyQlz7UkrTnI+BcAe9dq3UWSlgG2IX0LKydeclkWAHcCg4070HsKIYSO8iAekiZJmlZ4TCpd\nbk3eXLmYyVs/N18/x/Z8YA6w0nDeQzcl3k2Bu1t8ze1KTc3rA9ieBxxNSsCH529CZb8E1pb0R0nn\nStq+dkDS2sBqtu8EfgjsPchyvUxKvofVOfZx4Oe2/wj8RdJ7yidIWhJ4H/DzQcZt+J7qxHj9D3rK\nKw8PMkwIIQzNYJqabU+2Pb7wmFy6XL2aa/mOpWbOGZRuSrz9afRDGOiHU25qfrRwbDdgFinhv/XC\n9svAlsAk4M/ADyQdkA/vQ0q4kJouhtLcfDbwGUnLlfZPzNesd+31JU0HZgNP2b6vXtEbxPMA76l8\n8ut/0BOW3qCpNxRCCMPV4qbmmcDahedrAeVWvtfPkbQosDzwlyEWH+iu24keAPZqcGw2sGJp3xhS\nX+mgSRoH7AxsDdwu6Qrbs8rn5SbdKcAUSTOAzwAXkZLhqpL2zaeuIWkD201XDW3/VdJlwBcK5VoJ\n+BCwqSQDowBL+lI+5VHb4yStnsv0UdvXli49m9SkXLQs8NcB3lMIIXTcgtbeTnQXsIGkdYFnSJWm\nT5fOuZb0OXgHKQfdbHuhqfHeDCwh6aDaDklb5ebQh0nJbeO8fx1gC2D6YIPkTvPzSE3MTwGnA2fU\nOW8jScWq3jjgSUkbAUvbXtP2WNtjgVNp0B87gK8BB/PGF6S9gEtsr5OvvTbwOKkf+nX5S8IxwLF1\nrnkb8FFJy+b3sSdwr+0Fjd7TEModQgiVaGWNN/fZHgr8AvgD8EPbD0g6SdJH82nfBVaS9AhwJOmz\ndVi6psZr25L2AL6udK/VP4AnSAnyVUn7ARfm/s15wIG25xQucb2keXn7DtIQ8u1y02zNyaSa8lO2\nb8z7zgUOkLS97VsL5y4DfFPSCsB84BFSE+2hpNHXRT8mNQv/V35+n6Ta38UPgXpNwth+QdJVwBF5\n10TeGG1dvPaneesQ96uBEyVtV7rmffnWpdtzrfl54MAB3lMIIYwIrZ65yvYNwA2lfScUtv9Bukul\nZTTMGnMIXLjmfm3/I+rU5DUPLdYLE9aNbCdNO7kjcU8Yf3xH4i5sTn3ismH97/vNtZv/vPm3p78/\nIue56poabwghhNALU0ZG4g0hhNA1eqHNKRJvCCGErrGg0wVogUi8IYQQukY0NYcQQghtFE3NIYTQ\nYp0aXRyjqbtDL9yHE4k3hBBC1+jrgdQbiTeEEELXiMFVIYQQQhtFH28IIYTQRjGqOYQQQmij6OMN\nIYQQ2qj7024k3hBCCF0k+nhDCCGENlrQA3XeSLwhhBC6Ri/UeBfpdAGqJGk1SVdIelTSg5JukLSh\npAmSriude5GkvfL2FEnjS8cnSJojaXrhsZOktSU9LmlMPm/F/HydwmtXKrzmT5KeKTxfPJ+zhyRL\nemfhdWMlzc3nPSjpEkmL5WNLSbpU0gxJ90u6XdIyhdc2ut79dX5Oxfe+u6R7JN2bYx48vN9CCCG0\nTh9u+jFS9WyNV5KAq4CLbe+T940DVh3GZafa3r1OrPOA04BJ+d/Jtp+sHbc9GxiXzz0ReNn2GaXL\nTARuB/YBTizsf9T2OEmjgBuBTwGXAocBz9neLF93I2BeE9drKCf1ycB7bc+UtAQwtpnXhhBCO4zc\ndNq8Xq7x7gDMs31+bYft6banVhDrLGBrSYcD2wJnDubFuaa6DfA5UqJ8C9sLgDuBNfOu1YFnCscf\nsv1qs9drYFnSl7HZ+Zqv2n5oMO8lhBCq1DeIx0jVy4l3U+DuFl9zu1JT8/oAtucBR5MS8OG2Xxvk\ndT8O/Nz2H4G/SHpP+QRJSwLvA36ed10A/IekOySdLGmDwVyvHtt/Aa4FnpR0uaR9JdX9G5E0SdI0\nSdOmvPJw0280hBCGYwFu+jFS9XLi7U+j38hAv6mptscVHo8Wju0GzCIl/MGaCFyRt6/Iz2vWlzSd\nVAt9yvZ9kGrvwHrA6cAY4C5JGzdxvX7ZPhDYkVS7PoqU4OudN9n2eNvjJyy9Qb1TQgih5aKPd2R7\nANirwbHZwIqlfWOAF4YSKPcd7wxsDdwu6Qrbs5p87UrAh4BNJRkYBVjSl/IptT7e1YEpkj5q+1oA\n2y8DPwF+IqkP+LCk5we43oBszwBmSPoe8DhwQLOvDSGEKo3cdNq8Xq7x3gwsIemg2g5JW0naHngY\nWKNWQ8wjkLcApg82SB7EdR7o3CrvAAAgAElEQVSpifkpUg20PHCqP3sBl9hex/ZY22uTkt22xZNy\nIj8GODbH3UbSinl7cWAT4Mlmr9fgvSwjaUJh17h8zRBCGBF6ocbbs4nXtoE9gJ3z7UQPkEb3PpsH\nIe0HXJibcX8EHGh7TuES10uamR9X5n3lPt69gINITcA35nPOBd6ZE3wzJpJGXxf9GPh0nXOvBpaS\ntB2wPnCrpBnAPcC0/LqBrrdR4X3NlPTJwnkCviTpofxz+QpR2w0hjCC9MLiql5uasf0s6fabesd+\nTWoarndsQoNLLt9g/+TCaxcAW/ZTphMHimX77MLTTQv7TaqZA0wFLqkTYqDrLVbnNVcWtj9c53gI\nIYwIHsE12Wb1dOINIYTQW0byaOVmReINIYTQNUZyE3KzIvGGEELoGn2OGm8IIYTQNt2fdiPxhhBC\n6CIj+TahZkXiDSEE4ITxx3ck7knTTm57zE6911Zo16jmvOLcD0gLxTwBfMr2i6Vz1iFNYjSKdMfI\nN4vrAzTSs/fxhhBC6D3zcdOPYToGuMn2BsBN+XnZLOADtseR5tI/RtIaA104Em8IIYSu4UH8N0wf\nAy7O2xeTFp95c1ns12qrwgFL0GROjcQbQgihawxm5qriKmr5MWkQoVatzbmf/12l3kmS1pZ0H/A0\n8N954qZ+RR9vCCGEruFB3E5kezKFmQXLJP0KWK3OoeMGEeNpYPPcxHy1pB/Zfq6/10TiDSGE0DVa\nOarZ9k6Njkl6TtLqtmfl1eGeH+Baz+Y1AbYjzf/fUDQ1hxBC6Br9LXxffgzTtcBn8vZngGvKJ0ha\nS9LovL0isA3w0EAXjsQbQgiha7RxWcDTSKvbPUxab/00AEnjJX0nn7Mx8DtJ9wK3Amfk9cz7FU3N\nIYQQusZg+niHGWc2sGOd/dOAA/P2jcDmg712JN4QQghdoxcWSejqpmZJq0m6Ii90/6CkGyRtKGmC\npOtK516UF65H0hRJ40vHJ0iaU1rofqc8VPzxPIsJklbMz9cpvHalwmv+JOmZwvPFJS0oXfeYQjke\nknSvpLskjStc8wlJMyTdJ+nWUryXJW1WuN5fcpmm51F6tfOOkPQPScsX9k2QZEkfKey7TtKEvL27\npHtymR6UdPCwf1EhhNAibbyPtzJdW+OVJOAq4GLb++R944BVh3HZqbZ3rxPrPFL7/qT872TbT9aO\n5yaJcfncE4GXbZ9ReP3cPLNJPfvanibps8DppL6Emh1svyDpK8DxwEGFmDMKMS8CrrNdHkk3EbgL\n2AO4qLB/Jmm4/E9L73Mx0tD799qeKWkJ0nRpIYQwIvTCXM3dXOPdAZhXnBfT9nTbUyuIdRawtaTD\ngW2BMyuIcQew5hCO1SVpfWAZUsKeWDp8LzBH0s6l/cuSvozNBrD9qu0BR+iFEEK7LHBf04+RqpsT\n76bA3S2+5nalJuH1AWzPA44mJeDDbb82yOuOLl137zrn7Apc3eD1/R1rZCJwOTAV2EhSedaVk0lJ\n+XW2/0IaQv+kpMsl7Sup7t9IcUaYKa88PMiihRDC0ERT88jV6Cc+0G+iblNzthtpQuxNgRsHWZ7+\nmpovlbQ0aXWL95SO3SJpVdKN24NdTmQfYA/bfZJ+AnwSOKd20PZUSUjarvgi2wdK2gzYCTiK1PR9\nQPnixRlhLlxzv5H7Fx5C6Cl9bRrVXKVurvE+AGzZ4NhsYMXSvjHAC0MJlPuOdwa2Bo7Is5i0yr7A\nusBlFBJjtgOwDum9ntTsBSVtDmwA3CjpCVISLjc3A5xCnanRbM+wfRbpPX+i2bghhFA1D+IxUnVz\n4r0ZWELS6wOOJG0laXvgYWANSRvn/esAWwDTBxskD+I6j9TE/BRpANQZ/b9qcHJT9vGkfuSNS8fm\nAocD+9dGVjdhInCi7bH5sQawZnFkdL72L0lfULYAkLRMbXRzNg54khBCGCHaOIFGZbo28TrdRb0H\naWaRR5XmyDwReDYv07QfcKGk6aR5Mw+0PadwieslzcyPK/O+ch/vXqSRxE/lG6UBzgXemRN8s8p9\nvKfVeT9zSYO2jqpzbBapv/aQJuPtQxrxXXRV3l92CrBW3hbwpXyL03TgK9RpZg4hhE7phcSrds0C\nEnpXJ/p41e6A2UOLjdyRkqE7nTTt5LbHPGH8YIeMtM6pT1w2rP9937vG9k1/3tz57K2d+qjoV68O\nrgohhNCDRvJo5WZF4g0hhNA1eqGVNhJvCCGErjGS+26bFYk3hBBC14gabwghhNBGC3pgfaJIvCGE\nELpGL8xcFYk3hBA6qBO39nTiFqZWiVHNIYQQQhtFjTeEEEJoo6jxhhBCCG0UNd4QQgihjUbyAvfN\nisQbQgiha0RTcwghhNBGjhpvCCGE0D4xZWQIIYTQRr0wZeQinS5AmaSxku4v7TtR0lF5+yJJz0ha\nIj9fWdITeXsRSWdLul/SDEl3SVo3H3si77tX0i8lrVbaX1uk/uxC3KMk/V++3r2S9s/7p0ga3+D1\nHyi+B0kTJM0pHJ8uaad8bEF+/kC+/pGS6v5OJG0o6QZJj0j6g6QfSlpV0gGSvlU6t1y+lUvHD5D0\n51KZNpE0Pr/XxfN560t6TNJyQ/plhhBCi/W38H35MVJ1a413AfCvwHml/XsDawCb2+6TtBbwSuH4\nDrZfkPRV4MvAF4v7ixeS9HlgZ+C9tl+StDzw8QbledPrJY0tHZ9qe/c6r5tre1x+zSrAZcDywH+W\nyrIkcD1wpO2f5n07AG9rUJ5m/MD2oeWdkm4DjgK+CpwDHGf7pWHECSGEllnQ1/19vCOuxtukrwNH\nSCp/cVgdmOXc+257pu0X67z+NuAdA8T4MvCFWtKxPcf2xcMsd0O2nwcmAYdKUunwp4E7akk3n3+L\n7ftpvS8DB0r6ErCY7csriBFCCEPiQfw3UnVr4n0KuB34l9L+HwIfyU2nZ0p6d4PX7w7MKDy/pdDk\neoSkZYFlbT/aZHlqr/9dg+PblZp11693ku3HSL+TVUqHNgXubrIszdq7VKbRuQx/Bf4bOBX4QqMX\nS5okaZqkaVNeebjFRQshhPpsN/0YqUZiU3Ojn1Z5/1eBa0lNsOkEe6akjYAP5cdNkj5p+6Z8yi2S\nFgD3AcWZyctNxcv1U4563tJUXdKoqbmecm13IM3+vMrqNjVnuwHPAZsAD9W9uD0ZmAxw4Zr7jdy/\n8BBCTxnJfbfNGomJdzawYmnfGODx4g7bj0iaDnyqtP9V4GfAzyQ9R+qXrSXegRJk7RovSXpF0nq5\nFtoWktYj9V8/Xzr0ALB9g5c1+nkN+D4blGF3Uj/zPwFXSfqF7b8P5VohhNBqI7km26wR19Rs+2Vg\nlqQdASSNAXYlNS2XnUIaCEQ+9z2S1sjbiwCbA08OsSinAufURvRKWk7SpCFea0CS3gacD3zLb/3L\nugz4gKR/Lpy/q6TNgLuAbQqjtMcDSwBPD6EMo4EzgUNszwCuAY4byvsJIYQqLOjra/oxHJLGSLpR\n0sP533IFp3be2/OdMn+Q9GCdwbVvMRJrvAD7k5Lemfn5V+r1t9p+QNLvgffkXasA31a+1Qi4E/hW\n+XV11JqgAe6zvT9pxPQywF2S5gHzSElpKLbLtfOak23/CBid9y8GzAe+B3yt/GLbc3NN9OuSvp7L\nch9wmO3nJB0G3JC/bLwMTPSbp3e5T1Lt+Q/za/eWtG3hnC+Q+r6vtv1g3nciMF3SRbajIzeE0HFt\nbGo+BrjJ9mmSjsnP/6POeZcAp9i+UdIywIAZX71QbQ+d1Yk+3sF2hLfKQ4t1/60MIZw07eSOxV5s\n5fWG9b/vckuv1/TnzUuvPDbkWJIeAibYniVpdWCK7Y1K52wCTLa9bd2LNDDimppDCCGERvrsph/F\nuy/yYzDdhavangWQ/y3fbQKwIfBXST+RdI+k0yWNGujCI7WpOYQQQniLwdyfW7z7oh5JvwJWq3Oo\n2bEtiwLbAe8m3eb6A+AA4LsDvSiEEELoCn0t7B61vVOjY5Kek7R6oam5fLcJwEzgntrdL5KuBrZm\ngMQbTc0hhBC6Rp/7mn4M07XAZ/L2Z0h3eZTdBayY70qBNH/Eg3XOe5NIvCGEELpGG2euOg3YWdLD\npHn7T4N0y6ak7+SyLCDd0nqTpBmkcZ/fHujC0dQcQgiha7TrThzbs4Ed6+yfBhxYeH4jac6IpsXt\nRKGjJE3KAyB6OmbE7d2YETcMVjQ1h06rbDawERYz4vZuzIgbBiUSbwghhNBGkXhDCCGENorEGzqt\nE/1Eneqbiri9GTPihkGJwVUhhBBCG0WNN4QQQmijSLwhhBBCG0XiDSGEENooEm8IFZO0mKR3S6q3\nrFgYAklbSVqt8Hx/SddIOlvSmE6WrZfkhd0bHVu/nWXpJZF4Q9sp2U/SCfn52yW9tw1x15G0U94e\nLWnZiuKcL+ldeXt54F7gEuAeSROriJljHSRpg7wtSRdKeknSfZLeU2Hcj0hap/D8BEn3SrpW0roV\nhf1f4LUc74OkeXQvAeZQ4YjbDv6MOxIXuFfSp0plWVLSycDPK4zb0yLxhk44F3g/UEtCfwPOqTKg\npIOAH5E+sAHWAq6uKNx2th/I258F/mh7M2BL4EsVxQQ4DHgib08kzR+7LnAk8I0K454C/BlA0u7A\nfsC/klZ3Ob+imKNs/yVv7w1Mtv1j2/8PeEdFMaFzP+NOxd0F+KykGyW9Q9LHgBnAEqQ1aMMQROIN\nnfA+24cA/wCw/SKweMUxDwG2AV7KMR8Gqmr6fa2wvTM5wdv+U0Xxaubbnpe3dwcusT3b9q+ApSuM\na9t/z9t7At+1fbft7wBv6+d1wzFKUm2Rlx2BmwvHqlz8pVM/447Etf2o7d2AXwL/R/qC/HHbR9t+\nuaq4vS4Sb+iEeZJGAQbIa1kOe/HMAbxq+/WEmD+0q7qJ/a+Sdpf0blKy/3kh5uiKYgL0SVpd0pKk\nZPSrwrEq40rSMpIWyXFvKhxbsqKYlwO3SroGmAtMzQV5B6m5uSqd+hl3JK6kRSUdCxwMfAGYBpwt\naaOqYi4MYlnA0AlnA1cBq0g6BdgLOL7imLdK+jIwWtLOpA+Rn1YU62DSe1wNOLxQ090RuL6imAAn\nkD4YRwHX1pq7JW0PPFZh3K8D00mtCX/Iy6aRv3jMqiKg7VMk3QSsDvzSb8wEtAjwb1XEzDr1M+5U\n3HuAW4Etbc8BJufuhGskXWX72Apj96yYuSp0hKR3khKRgJts/6HieIsAnyP1WQn4BfAd99j/ALlW\nvWxuvq/tW5r0/3plTYOS1iQ13d9ruy/vWx1YzPZTFcQrj1w28Nd2/D47+DNue1xJW9q+u87+0cDx\nto+rIm6vi8Qb2mag2zwKg2W6Wm20dgO2/V8Vxf1gf8dt31ZR3LcPELeKxPs4b3QVKP+7DGkE+YG2\nn2h1zBx3z/6O2/5JRXE79bt9p+3/y9tL2H61cGxr27+tIm6vi8Qb2qbwYSng7cCLeXsF4CnbLb/1\nRNIM+unLtb15BTH/vc7upYADgZVsN7w3cphx6zWdG9gCWMv2qIri1n7GKuw2aWDVKlXFbVCWPYFJ\ntnet6PoX9nPYtv+1orid+t3+3vZ7ytv1nofmRR9vaJtaYpV0Pqmf6ob8fDdgp4rC7p7/PST/+738\n777A3996+vDZPrO2ne8VPox0e80VwJmNXteCuB8pPpe0LXAcqZ/10ArjblaKOxb4D9Lv9KtVxW1Q\nlp9Iqmy8gO3PNjom6RMVxu3I75Y3f5lSP8fCIESNN7SdpLttb1naN832+Apj/tr2NgPta2G8MaR7\nLPcFLga+Ueybq5KkHYH/R6oRfdX2jW2KuwEpGbyP9AXj4sItMG2hNNPS7bbHtTNujv2U7X6b3VsQ\no62/26jxViNqvKETXsi1ku+TPkD2A2ZXHHNpSdvavh1A0geo6P5HSaeT7medDGzWrvsdJf0zKfHN\nAY6z/es2xd00x30X8D/A52wvqDjmkXV2rwh8FPhWlbH7UVkNsFO/W2AtSWeT3lttm/x8zTaVoedE\njTe0Xa4N/idQGzByG/CVKgdXSdoSuABYPu/6K/Cvtn9fQaw+4FVgPm/uXxapH3C5VscsxJ1JGmD0\nlv+xbX+0orgLgKdJt0q9JeHa/mIFMf+zHIb05e022zNaHa8ZVdZ4O/i7/Ux/x21fXEXcXheJNyxU\nJC1H+ruvcpKFjsj3dDZk+9aK4i40H879DNYTsKHtJSqK25HfbX8knWH7qHbH7QWReEPbSbqF+t/a\nP1RhzLq3+Ng+qYJYH7J9c95e1/bjhWN7VnXLST/lWRvYx/bpbY67JPAR21dWcO2f0v9o9apqgOv0\nd9z2k1XEbaRTv9scu/I+7V4VfbyhE4rfkpcEPkFqlq3SK6WYuwNVTdpxBlAbdPLjwjakGboqT7yS\nVgY+SZpQf03STGGVy1OB7pLj/hNpKseWJ17Sz7jtGiVWSdsAn+aN0fOV6dTvtl5ROhS360XiDW1X\nZyacX0uqtKmseIsPpGYy0uo5VejILRj51qU9SAlgQ9IH8nq216oqZiH2B3PcfwbuJM1RvW5h8YSW\n6q9pNSfBykkaR3rPnwIep8IvVJ363fYz6Y2IxDtkkXhD25X+Z16EtFzeag1Or8pSwHoVXdsNtus9\nb6XnSUnveNItNZa0R4XxAJA0E3gKOA842vbfJD1eVdLNMUeREt6awM9t35/nEP4yadGASpask7Qh\nsA+ptjkb+AGpy26HKuIVdOR3C9zNWydHqXmtzr7QhEi8oROK/zPPJ9UWPldlwNKgmFGkWZUqmboR\nWE/StaT3V9smP69qYXhISWcfUgK8TNIPKoxV9GPg46R1cRcorRhU9eCR7wJrk5LR2ZKeJK3xfIzt\nqtZZhrQ03lRS3/UjAJKOqDBeTUd+t1XMJhdicFXoAElL2v5Had+b5oGtIGZxUMx84DnblfQrd3oE\nqqT1SDWyfYANSLduXWX7jxXGFLBDjvthYDnSl6kbqriPWdL9wOa2+/IgrheAd7jiNY9zLXMf4AOk\n5R6vIC220ZYE1e7fraTyBBkGXrD9dBXxFhaReEPb1ZvxpupZcCR9z/a/DLSv10jajNwPaXv9NsVc\nDNiNlBx2sb1yBTE6OouS0qpAHyclwQ+RZie7yvYv21iGzXL8vav63eY7EMrGAIsDE21PryJur4vE\nG9pG0mqkPrnvk5JBrd9oOeB82++sMHb5g3pR4D7bm1QQq+0LM4xUkkbbnlvBdf8OPFJ7Cqyfn9cm\nKWnbzziPWdiLdFtPJbfESfql7V2quPZQSBoPfM12v6smhfqijze00z8BBwBrAV8r7P8bqQ+r5SQd\nm689WtJLtd2kgSGTq4jJGwsztJWkv/HWgV0vALcA/2G7kmk563zRKMat6rafjSu6br8kLQXMq81B\nLWkjUtP6k1Xeh04akzBi2J6W58UOQxA13tB2kj5h+8dtjnmq7WPbGO/jwDuAGbZ/0a64dcqxIunL\nzgdsf7KiGPUmlRgDfAZY2vZBVcRtUJZtgE/bruR+Wkm3keaifljSO0iDuy4FNgHurOpvTNJjvPn+\n9zfpwKQsq5L677cc8OTwFpF4Q9tI2s/295XWq603c9XX6rxsuDHfafv/6gwSqcWsYq7mc0kLBvwG\n2BH4qe2qRlA3W6aOrCQj6R7bldzaU4jxlvtpbX+zolgznJdBlPRfwBjbh0haHLjbpSUSWxh3NnAN\n9W/rsatbB/ibvPX/1TGkwWWH2a63TnAYQDQ1h3aqrQZUr4mqqm+ARwKTqL8OrkkDY1rtg8AWthfk\npsmpVHfr0oDyYKdO/b++SBUX7eD9tMW/0w8BpwPYfi0vZFCVJ6tKrgOYVnpeW4ziSNvPd6A8PSES\nb2gb2/+bN39VXtasqtmGbE/K/1b9gVz0Wm1ZPNt/z7faVE7SnnV2r0i6v/ZHFcatV5NekbTc420V\nhe3U/bT35VnPniF1Jfwyx16h4ridmiXqBuBtth98U2Gkd0my7T93qFxdLZqaQ9t16HaieklpDqkP\ntqXf3Ds14lbShaVdtdrJFNvXVxEzxy3fcvJ6XGBybSBSi2N25H5aSaOBw4DVgQts35v3fwBY3/b3\nKor7LtsPVHHtAeJeAZxXvvdc0j8Bn7H96XaXqRdE4g1tI+n9pA/Kw4GzCoeWA/awvUWFsa8nzWxU\nSxITgN+S5r09qZUfmJ1awUbSobbbvgh8JwbLFWJ3/H7aQlm2KbfktPDa5RHrrx+i2jWeH7D9rgbH\n7re9aRVxe100NYd2WpzUv7sosGxh/0uk+yCr1AdsbPs5eH1U5nnA+0jNoS1LvFUl1ib8K9D2xAsc\nR5o2su1sv0IaVXxpvp/2k8Cx5CbgVuvUHNG2lx34rEosNsRjoR+ReEPb5OaqWyVd1IHkNLaWdLPn\nSQuX/0VSS5tCC7WTWr9craZSae1kYWf7L8D/5kdVOjVHdF25b/kQ26dUFOJhSR+2fUMp7m7AYxXF\n7HmReEMn/F3S6aRbbpas7ax4AoKpkq7jjbVhPwHclpsq/9rKQB2snWxemCSkqOqE/05J9/UTt+V9\n2qWm1+IXnEWBxW1X9dk2ns7MEb028P+ANYCrgctII+X3z9tVOQK4TtKnSIubQPoZvJ8OTRTTCyLx\nhk64lHT7x+7A50kTLVQ9OvIQUrLdhvRBfQnwY6dBDi0d8Zw/kD9PGvV6H2kQTiULMpTMqPqe2QYe\nBz7SzoDlLzdK69V+ATiYaheGf812Xy7DPyT9seqkm10C3Epq0t+VND7hAWCzKuPb/mNhvu9af+6t\nwMEuLXQSmheDq0LbSbrb9paS7qvVhiTdarvfVX26RV6ybR7pdpfdSPdgHtaGuJVPVjGS4ubYK5AG\n69VqfmdVNTVmjtepEev3FgcfSnoOeLsrXNErVCdqvKETan2qsyT9M/Asaf7myuTbif4bWIX0IVll\n8+smhdmNvkvqD2yHKwc+pRKVjOTtj6SVgX8n3aN8AfBu23PaELojc0TD69N/1prV/wQslbtKav3b\noUtE4g2dcLKk5UkfnN8k3U50eMUx/4c02cIfKo4Db3yxwPb8Ns2fAfBnSRvkeYRFSkifAJ4ADqhi\neszsF5LWqQ2Yk3RCjvskaVrBxyuI+SSpe+JC4O/A54o/5yqmH83XrTsosDZHNKlLowrLk/pYi39M\ntd+ngfUqihsqEIk3tJ3t6/LmHHL/qqSqE+9zbUq6AFuUVkKqrYxU9SCnw4CL8vZEYHNgXdItLt8A\ntqso7inA1gD51pr9cvx3A+eTVqVqtdN5Y3BVRwaz1ZsjuqpYtsdWde1mSXobQMxWNXzRxxtGBElP\n2X57hdf/BrAaaUTo6/1i7V7VpUqSptsel7cvA35n+xv5eWUzgxX7HyVdADxk+7+rjtsJDeaIPsp2\nv5OmVFiejXL8SlaAyi0n/wkcSvriuAgwH/im7ZOqiLkwiBpvGCmqbo9djtQkWVxM3FRYS+mAPkmr\nAy+SVkUq3ts5usK4Ulqb9e857rmFY0vWf8mwA57d33HbX6wiLh2aI1rS5qS1jWu3E32T9HN+H/UX\nAGmVw0l3AmxV6zKQtB5wnqQjbJ/V76tDXZF4w0hRadOL7c9Wef0R4gTSajKjgGtrc/tK2p5qJzv4\nOjCdNAPZH2xPy3HfDcyqKObd/Ryr8m/pE6Qa7y2SanNEt6MT/9ukmdbuIN1O9HvSKO59K76tZ39g\nZ9sv1HbYfkzSfqTZwSLxDkE0NYe2GWC+2dEVTnqApLVItYRtchluJw38mVlVzE6QtCiwrO0XC/uW\nJv2//nKFcdckjRi/t3afa659L2b7qariNijLGbYbLhrfohhtnSO62I2Qnz9Nmo1tQRXxCnEazscc\nczUPXSVrZYZQj+1lbS9X57FslUk3uxC4ltRUtybw07yv5fIsQ42OVTXACUlfsj3f9ouSPlnbn+cz\n/nKFcfez/Yzte0gzGtXizgI+WlXcfnyqqgvnLzbYfsX2pbZ3J90KNx04pqq4wJKS3i3pPXkZxpdJ\nM5XVnlfltSEeC/2IGm9YKJRrDI32tSjWY6TRvF+rzViVF2U4E9jI9latjpljvD6QqTyoqeLBVR2J\n2095nrbd8MvPMK/dkcFikqbQuAndVU23KmkB8Eq9Q8CStmOhhCGIPt6wsHgh90tdnp/XRqVWYUvg\nNOAeSYcBmwFHku4l3r+imPDmvsZyv2OV/ZBtj5tXImpUlna917axPaFDcUd1Im6vi8QbFha1JfPO\nItUcfgNUMuAq968enJPur0gzc23dhv5kN9iu97zb497Nm1eAKmrpalMlb5N0ZKODVU3ckbsR/idv\nf9L2lYVjX7VdSVeCpA/Zvjlvr1ucDEXSnr10O147RVNzWGhJOtz21yu47gqk6SnfB3wJ+DDpNpvD\nah9iVSg0C4p0+9Dfa4eosFmwMH9xce7iWtz1bC9dRdxOkDSLNLq4bs3X9lcqihvdCD0karxhYXYk\n6VaYVvs96R7LQ3If7y/zLEfnSnrS9sQKYnayWbBj8xcXSVqfPLlFhaNtZ3Vo4oiFphthYRCjmsPC\nrKoPjg/aPsOFpQBtT7f9AaCyGm8jklaQdFxV17f9ZL0HMBPYtqq4kG5ZknS4pDtJy+QtSuq/ryxk\nhdfuz8LUjdDzIvGGhVlVHxwb1jYkrVs6VuWSdWtLmizpOkkHSlpK0pnAw6R7bKuKu5ykYyV9S9Iu\nSv6NNGlHJbf2SDpI0s2ktWFXBg4k1Ua/YntGFTGzHSu8dn+2kPRSvhd+87xde75ZhXHXk3StpJ8W\ntmvPy3/boUnRxxt6Wicm7ehgf9wtpERUm91oR1It8AhXuFi6pGtI01TekWOuCCxO6tOeXlHM13K8\nfy/MlPWY7Z5cpUfSYrarHDTWKG6/a2TbvrVdZekl0ccbeprtTqxc06l+sTG2T8zbv1BaLH0rV79Y\n+np+Y/3h7wAvkBZp/1uFMdcAPgl8Ld8j/UOgl+8p/R3Q9oFMkVirEYk3hNbrWL+YOrNYenH94QWS\nHq846ZLnDj6PNFn/WpMvqsAAAAyySURBVKRBVc9L+gNp6saqbq9Z2/bTDY5tZ3tqFXHpUN+ypBn0\n8zdre/M2FqdnRFNzCC0m6a/AbaQPy+3yNvn5tv9/e3cfe2dZ33H8/WmjAwM4arJC4rRiAzp5mtQx\nUdzKnKLBgGRZNaLZqCQaY8qYI1n2kCWocxvObouKGpVlZgSmkrgYGHEShs4prBAKbokPUJWOJYIP\nWInl4eMf933s4XCfU2nPdV+/Xr/PK2lyP7Tne/UH/V2/+7q/1/dr++hCce9hcXWjIsuwM9WNprcy\nle4/PDSW4+mymktt66lVlew7wNw9wgX3Dy9sd9gn0cWTlCfeiOU7d+r48pl7s+fLtHE6k3osNbYx\nSXoR8O3Ju2tJb6LrHLQL+IuCoWtVJVsLHMH4T77H2v6vkWM2L0+8ESOSdLXtLYU++1a6LTzXA9fb\nvqdEnJVA0g7g5bYfkPQyuvZ8bwdOBZ5v+3cKx99GVwVtlKpkFWtETycKfsn2i/f3Z2L/sp0oYlzF\nvnHZ3gRs60+3S7pF0vv6LT6/UCpuJWun3llvAT5s+1O2/wzYWCpovyf6Q3TlRs8GPglcJ6lIk4Lp\n0IU//+eJe1ilMTQnE29EQ/riFVfYPg84g6794cuBmyV9tu7olmrtpEUf3Ram6cIkJV+h7aDbF73J\n9g22LwbeCLxT0lWL/+hBqbV/eI2koyU9Y+p43eRXpTEd8vKON2LJNL8/qhh/y8v3gMttX6quWf3S\nVcr0vQq4SdJ3gYeAm/t4G4EfFIg38bLZZeV+r/IZki4qFbRgRvr+PJ2uIcXkyXfH1D0DTe6bLi0T\nb8TyvXfBvf8tFVTSFcA/2L5L0tPpCkw8CqyT9A7bpZ7IbupjD2b6AkvP9LX9Lkn/DhwL3OB9ySpr\n6N71lnI83Xv0J3TroWBVslpsb6g9hhYluSqiEZLusv2C/vhi4DdtnyfpGOA6279aKO7RdJm+Z9C9\nY57O9P2g7cdKxK2hYlWyKvuHF6zeAGB7x6L7MSxPvBFLJun8mUumq+Z0e+HCEnunjn8b+BcA2/dJ\n5XJzKvYfrqFWVbLRVxV6i1ZvDJROKmtSJt6I5XvNwLV1dMXttxbsyft9SecA9wIvAbYC9ElIhxeK\nOdt/+Gy6/sPXSSraf7iSWlXJquwftr251GevZllqjhhJXwXoGtunF/r844G/B44Bttu+sr/+SuAV\ntv+wUNxv0vUf3j71NHZqf61I/+GKS69VqpJNxR97//AFdPPEP81cvwjYY/ufS8ZvVSbeiBHVKoRQ\nkqRnzpsAJF1k+yMFYtYq3VilW8/MqsKldKsKv0XXAarYqoKk2+gyuR+cuX4UcKPt00rFblmWmiNG\nIukEoFinIEl/vuC2bV9WKHSNTN9aS69zJ1ZJV9O1ZSxhB90Kwtv6HzRumKwqSCqyqtBbO5SXYPuH\nklruBlVUnngjlqxvEj77D2sd3daXC2x/qVDcoaXkp9E1iX+G7SMKxa2S6dt//qhLr/sZy7dsP6vQ\nZ4++qtB/9v/QFQvZM3P9SOAW288rEbd1eeKNWL7ZRgime/L7mu29A79/KWz/LAO1/8a4DbiQro7x\nouzUgzV6pu8qS+iCevuHPwp8UtJbJ7W/JW0A3t/fiwOQiTdi+e4F1tv+4vRFSWdK2m37G6UC92X8\nLgHeAPwj8MJ+u09JNTJ9qyy9VqxKdjkwif2pqWOAPwU+XSKo7csl/YhuO9MRdP899wDvsf3BEjFX\ng0y8Ecu3HRhqxP5Qf29ou9FBk/Q3wPnAh4GTbP+oRJwBx0n6DN3kMzmmP39OoZhVSjdSqSoZ9fYP\nY/sK4Ip+4lXhveirQt7xRiyZpDttnzjn3k7bJxWK+xhd8tYjPP5Js2hD+hqZvpLOmiwpzy69Sjrf\ndpEnwFoqVsza3jeCoF/G/7upe1fa/r0ScVuXiTdiySR93fZga7pF91qkQv2HK05EVaqS1do/XDNx\nrmVZao5YvluGMk0lbaXr9FLECn0KLNV/uNbSa62qZOdOHc8m782eL9Oir3McoEy8Ect3MXCtpDew\nb6LdBDwVeG3BuFUScCqpUrrR9u8PXZ9UJaPLsi4Rt9b+4TV9E4w1U8eTCXhtoZjNy8QbsWS2/58u\nyWczMHnX+9kRtrlUeQqslOlbI6FrLtu7KhaUKLWqAPvvxxsHIBNvRCG2bwRuHDPknOOh82Wqkelb\na+l1UOmqZLWkH28ZmXgj2lHlKbBGB5taS6/7q0pWImYft8r+YUm/RLc1biNwB93+3R+WirdaJKs5\nohEVC/jX6j88bzwlSzfOfo1HqUomaeHKSakffiRdT7fU/B/AOcCR2UJ08DLxRsRBkfTxgcvrgJOB\nkpm+88ZTcuLdyJyqZEDRqmQ1SLrd9qlT59lCtARZao5ohKSdLHiXa/vkEnFrZPpWLN1YqypZrVUF\nzWYyT5/bfqBg7GZl4o1oxzm1BzCtcKZvrdKNG2zfMXvR9q1984BSau0fns1qhn2ZzQaOKxS3aZl4\nIxrRT3Tn0SXC7LT9bzXHUzLTt0ZCV++wBfcOLxW04v7hDSU+d7XLxBvRCEkfAF4A/CdwmaRfs33Z\nCHFHz/StuPRapSrZPKX3D/cT+/dt/6A/3wycB9wDvL9kQlnLklwV0QhJdwKn2H5U0tOAm22fNkLc\n0TN9ayV0SVoPXAvsZaAqme37SsRdMJ4TgCttFymiIenLdH+v3X3bxc8Bf0n3dX7Y9ptLxG1dnngj\n2rHX9qMAtn8saazauqP3H6649FqlKlmt/cPA4bZ398cXAB+z/V5Ja4DbC8ZtWibeiHY8T9Ik8UfA\nc/vzSVvAIlnNVMr0HTJW6cYKVclmq3GNsn+YxydVnQX8MYDtx8b7ua49mXgj2vH8SnFrZfo+Qaul\nG6mwqtD7vKRrgP8DjgYm3a+OpVtujwOQiTeiEbZ3VQo9eqZvxaXXWmqtKlwMbKH7ur7U9sP99WOA\nPykUs3lJropohKQH6SajyRrg5B/3ZKn5qEJxrwI+PyfT9xW2txSIWaV0Yy2S7rR94px7O22fNPaY\n4sBl4o2Ig1Ij03cVlm78uu2NT/beEuLezeNXFjR1btvPLRG3dVlqjmiEpMOAt7Cvk8zHbD9SOm6l\nTN8Vk9A1klr7hzfNnK8Bfhd4B3BbwbhNyxNvRCP6dngPAzcDrwJ22d5Wd1RlrLal19r7h/vtQ28E\n/ohuG9G7bX+1ZMyW5Yk3oh2/MplwJH0U+Erl8ZRUpXRjLRX3Dz8FuBD4A+ALwLmtLePXkIk3oh2T\njFNsP9L4PssVVbpxLBX2D98NPEK3fP8t4BRJp0yN59MjjqUZWWqOaISkR4E9k1O6J78fUziruYba\nS6+rhaQrmd9q0rYvHHE4zcjEGxGHrJml17tKL71GLEMm3oiIGCTpkplLky5QX7B9d4UhNWFN7QFE\nRMSKdeTMr6PolvSvk/S6mgM7lOWJNyIinhRJ64DP2X5h7bEcivLEG9EISb+84N6ZY44l2mb7AR7f\nuSiehEy8Ee24SdKlkn62TVDSekmfAP624riiMZLOAr5XexyHquzjjWjHacB7gNskbQNOAi4B/hp4\nU82BxaFJ0k6Gu0DtJv9PHbC8441oTD/pvo/um+Ov2/5O5SHFIUrSs2cuGbjf9p6h3x8/nzzxRjRC\n0i8CfwWcDpwNvJou+3Rb9rfGgajY47lpeeKNaISkbwIfALZPuhJJOrW/tsv262uOLyI6mXgjGiHp\nmfOWlYfqGkdEHclqjmjH8ZMDSc+ZuXf/yGOJiDnyxBvRCEk7JgUNpo+HziOinjzxRrRDc46HziOi\nkky8Ee3wnOOh84ioJNuJItpxnKTP0D3dTo7pz2ff+UZEJXnHG9EISb+x6L7tm8YaS0TMl4k3YhWQ\ndLXtLbXHERF5xxuxWry49gAiopOJNyIiYkRJropohKR5+3QFPGXMsUTEfHnHG9EISTcuum9781hj\niYj5MvFGRESMKEvNEY2QdP7MJQPfBW63/WCFIUXEgEy8Ee14zcC1dcDJkramJ2/EypCl5ojGSXo2\ncI3t02uPJSKynSiiebZ3kazmiBUjE29E4ySdAPyk9jgiopN3vBGNkPSvPLEL0TrgWOCC8UcUEUPy\njjeiEQNNEgzcD3zN9t4KQ4qIAXnijWjHvcB621+cvijpTEm7bX+j0rgiYkre8Ua0YzswtF/3of5e\nRKwAmXgj2rHB9h2zF23fCmwYfzgRMSQTb0Q7Dltw7/DRRhERC2XijWjHLZIumr0oaSvw3xXGExED\nktUc0QhJ64Frgb3sm2g3AU8FXmv7vlpji4h9MvFGNEbSZuDE/vSu1GiOWFky8UZERIwo73gjIiJG\nlIk3IiJiRJl4IyIiRpSJNyIiYkQ/BTJAQZy9PHNXAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.heatmap(test.corr())" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nXc70lwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.heatmap(spray.corr())" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.heatmap(weather.corr())" ] } ], "metadata": { "kernelspec": { "display_name": "Python [default]", "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.4" } }, "nbformat": 4, "nbformat_minor": 2 }