{ "metadata": { "name": "", "signature": "sha256:bc986529226469cf391ff5e4a2d24e7dcfee01ebdec49e994289369fac101ded" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "##Required Libraries\n", "* pandas\n", "* numpy\n", "* matplotlib \n", "* scikit-learn\n", "* statsmodels\n", "\n", "note: at one point i used all of these but over time got rid of ones that were unhelpful" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import pandas as pd\n", "from pandas.tools.plotting import scatter_matrix\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor, AdaBoostRegressor\n", "from sklearn.svm import SVR\n", "from sklearn.linear_model import ElasticNet\n", "from sklearn.cross_validation import cross_val_score\n", "# import statsmodels.formula.api as smf\n", "import time\n", "from itertools import chain\n", "%matplotlib inline" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###Functions that split datetime into date and time and creates submission file" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "the complete breakdown of what I plan on doing for my own clarity\n", "1. preprocessing of data\n", " - convert data to \"clean\" form\n", " - datetime into year month day hour and convert to int\n", "2. plot a day to get general idea\n", " - plot 2 working days and 2 \n", "3. run algorithm\n", " - random forest\n", " - AdaBoost\n", " - something else\n", "4. plot algorithm prediction\n", " - compared to nearby date \n", "4. create submission file\n", " - strip original datetime since its in submittable format\n", " - so long as rows remain with dataframe row index this shouldnt be a problem" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# here i have created 2 functions to deal with data and to create submissions. \n", "# nicedata() is a bit sloppy with names of col and getting them in the order i wanted\n", "def nicedata(data):\n", " '''\n", " change data into good format. use for both train and test\n", " '''\n", " yearmonthday,time = zip(*[item.split(' ') for item in data['datetime']])\n", " year, month, day = zip(*[item.split('-') for item in yearmonthday])\n", " data2 = data\n", " data2 = data.drop('datetime',1)\n", " #split datatime into year month day and time. \n", " data2['year'] = year\n", " data2['month']= month\n", " # data2['month']=month\n", " data2['day']=day\n", " data2['time']=time\n", " col = data2.columns.tolist()\n", " #change columns\n", " for x in xrange(4):\n", " col = col[-1:]+col[:-1]\n", " # col[0], col[1] = col[1], col[0]\n", " data2 = data2[col]\n", " #remove 00:00 and change all to int from float\n", " data2['time']=data2['time'].str.replace(':00:00','').astype(int)\n", " data2[['year','month','day']]=data2[['year','month','day']].astype(int)\n", " \n", " return data2\n", " \n", "# data = pd.read_csv('data/train.csv')\n", "# data = nicedata(data)\n", " \n", "def submitdata(pred,name='submission'):\n", " '''\n", " use with predictions in this function as it uses time in string as well\n", " pulls datetime from original file rather than recombine year month day time\n", " '''\n", "\n", " #extract name from original 'datetime' feature\n", " keep = pd.read_csv('data/test.csv')\n", " keep = keep['datetime']\n", " \n", " #save to file\n", " submit = pd.concat([keep,pred],axis=1)\n", " submit.columns=['datetime','count']\n", " submit['count']=submit['count'].astype(int)\n", "# submit.ix[submit['count'] <= 0, :] = 1\n", " \n", " timestr = time.strftime(\"%m-%d\")\n", " submit.to_csv('data/'+name+timestr+'.csv',index=False)\n", " \n", "\n", "def normalizedata(data):\n", " '''\n", " use if you wish to normalize any of the features from [0,1]\n", " '''\n", " features_to_norm = ['temp','atemp','humidity','windspeed']\n", " for x in features_to_norm:\n", " #normalized between 0 and 1 but can later change\n", " temporary = (data[x] - min(data[x]))/(max(data[x])- min(data[x]))\n", " data[x]=temporary \n", " return data\n", "#this removes warning that will otherwise come about\n", "pd.options.mode.chained_assignment = None" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "##Plot Data\n", "Here we will plot the data for 2 days, 1 working and 1 nonworking. Days are _NOT_ always 24 hours, sometimes data is missing. On the last day we will average over the month just to show that there is some similarity (i.e. the first few days are not so different from the days overall)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "data = pd.read_csv('data/train.csv')\n", "test = pd.read_csv('data/test.csv')\n", "data = nicedata(data)\n", "test2 = nicedata(test)\n", "\n", "day_1 = data[0:24]\n", "day_2 = data[24:47]\n", "day_3 = data[47:69]\n", "day_4 = data[69:92]\n", "\n", "#re add (ax2, ax3) to below command and uncomment out below to make 4 graphs\n", "f, (ax1, ax4) = plt.subplots(2, sharex=True, sharey=True)\n", "ax1.plot(day_1.time,day_1['count'])\n", "ax1.set_title('2 Weekends, 2 Working days')\n", "# ax2.plot(day_2.time,day_2['count'])\n", "# ax3.plot(day_3.time,day_3['count'])\n", "ax4.plot(day_4.time,day_4['count'])\n", "f.subplots_adjust(hspace=0)\n", "f.set_size_inches(12,7)\n", "\n", "jan2011 = data[(data['month']==1) & (data['year']==2011) & data['workingday']==True]\n", "grouped = jan2011.groupby('time')\n", "grouped = grouped.agg(np.mean)\n", "plt.plot(grouped['count'],c='r')\n", "# plt.figure()\n", "# below plot if necessary\n", "# plt.plot(data['time'],data['count'].values)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 48, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nAl0zRERERERERERERERERERERERERERERERERERERERERERERERERERERERERKSK/D+CvpNWPEcg\nhAAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 48 }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see, for working days (the second 2) there is a clear spike during morning and afternoon rushes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using two different models, SVR and RandomForestRegressor, then comparing cross validation scores. Note that you cannot use data from future data (i.e. you cant use data from Feb of 2011 for Jan 2011 dates) so I just iterated over each month in each year and created a seperate model for each. An intersting idea would be to use all previous months to create a model for each month but it did not work for me as expected." ] }, { "cell_type": "code", "collapsed": false, "input": [ "test = pd.read_csv('data/test.csv')\n", "data = pd.read_csv('data/train.csv')\n", "data = nicedata(data)\n", "test= nicedata(test)\n", "\n", "test = normalizedata(test)\n", "data = normalizedata(data)\n", "\n", "\n", "years = [2011,2012]\n", "months = list(xrange(1,13,1))\n", "hours = list(xrange(0,24,1))\n", "pred_months_years = []\n", "pd.DataFrame(pred_months_years)\n", "for y in [2011,2012]:\n", " for m in range(1,13,1):\n", "# print(y,m)\n", " monthSVR = SVR(kernel='rbf', C=1e3, gamma=1)\n", " muse = data[(data['month']==m) & (data['year']==y)]\n", " tuse = test[(test['month']==m) & (test['year']==y)]\n", " monthSVR.fit(muse[['time','workingday','atemp','humidity','windspeed','weather']],muse['count'])\n", " predmonthSVR = monthSVR.predict(tuse[['time','workingday','atemp','humidity','windspeed','weather']])\n", " pd.DataFrame(predmonthSVR)\n", " pred_months_years.append(predmonthSVR)\n", "\n", "z = pred_months_years\n", "merged = list(chain(*z))\n", "z = pd.Series(merged)\n", "z.astype(int);\n", "z.name = \"count\"\n", "predictionsSVR = pd.DataFrame(z)\n", "predictionsSVR.ix[predictionsSVR['count'] <= 1, :] = 1\n", "# submitdata(subsub,name='SVRrbf')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 96 }, { "cell_type": "markdown", "metadata": {}, "source": [ "compared to random forest" ] }, { "cell_type": "code", "collapsed": false, "input": [ "test = pd.read_csv('data/test.csv')\n", "data = pd.read_csv('data/train.csv')\n", "data = nicedata(data)\n", "test= nicedata(test)\n", "\n", "test = normalizedata(test)\n", "data = normalizedata(data)\n", "\n", "pred_months_years = []\n", "pd.DataFrame(pred_months_years)\n", "# final = []\n", "# pd.Series(final)\n", "for y in [2011,2012]:\n", " for m in range(1,13,1):\n", "# print(y,m)\n", " monthforest = RandomForestRegressor(n_estimators=250)\n", " muse = data[(data['month']==m) & (data['year']==y)]\n", " tuse = test[(test['month']==m) & (test['year']==y)]\n", " monthforest.fit(muse[['time','workingday','atemp','humidity','windspeed','weather']],muse['count'])\n", " predmonth = monthforest.predict(tuse[['time','workingday','atemp','humidity','windspeed','weather']])\n", " pd.DataFrame(predmonth)\n", " pred_months_years.append(predmonth)\n", "\n", "z = pred_months_years\n", "merged = list(chain(*z))\n", "predictionsRF = pd.Series(merged)\n", "predictionsRF.astype(int)\n", "submitdata(predictionsRF,name='timeinforest')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 58 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we will plot the random forest predictions and the svm predictions and compare it to a day near it. i would like to make it so it finds a random day from the predictions and then compares with nearest day from train in the future." ] }, { "cell_type": "code", "collapsed": false, "input": [ "fig = plt.figure()\n", "fig.set_size_inches(10,7)\n", "rf1 = plt.subplot2grid((3, 4), (0, 0), colspan=2)\n", "svr2 = plt.subplot2grid((3, 4), (0, 2), colspan=2)\n", "ax3 = plt.subplot2grid((3, 4), (1, 0), colspan=4, rowspan=1)\n", "\n", "rf1.plot(test.time[0:24],predictionsRF[0:24])\n", "svr2.plot(test.time[0:24],predictionsSVR[0:24])# example_plot(ax3)\n", "ax3.plot(day_19.time,day_19['count'])\n", "\n", "ax3.set_xlabel('Time')\n", "ax3.set_ylabel('Count')\n", "\n", "ax3.set_title('Day 19'),rf1.set_title('Day 20 Random Forest'),svr2.set_title('Day 20 SVR')\n", "\n", "\n", "\n", "plt.tight_layout()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAskAAAFmCAYAAACflwdLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XeYk2XWx/Hv0AUEBJQmCosKAiqKYAFlxAb2AiirIhYU\nBXWVdRWXd0V37R3sBcGGDVRYARV1pIkI0jtIF5DeyzCT94+T7GSGKcnM05L8PteVazJJJs8JQ+45\nuZ9znxtERERERERERERERERERERERERERERERERERERERERERERERERERERERERERESkpJYDu4Ht\nwBZgInA7kObS8d4EFgBZwI157isPvACsATYDrwBlXIpDRERERKRAy4D24euHApcCvwODXDreneHj\n/Qp0y3Pfw8BPQDWgJvAz0N+lOEREREREChSdJEe0wmZ6m4W/vxiYDmwDVmLJbMTXQO88Pz8LuLyI\n447n4CT5V6BT1Pddw8cTERGRBFDK7wBEXPYrsBpoG/5+J3A9UBVLmO8gJwkeHL4v4iSgLpY8F0d0\nmUcp4EhshltEREQCTkmypII/gOrh6z8Bc8PXZwMfA+3C348EjgMahb+/IXz/gWIccwxwD1ZqURu4\nGwgBFYvxXCIiIuIxJcmSCuphi+cATgN+BP4EtmIL+2qE79sLfIolx2nAtcD7xTzmY1hZxwxgAvAF\nlmyvL+bziYiIiIeUJEuya4UlyRPC338EfImVPlQDXif3+2AIcB1wHtYp45diHncvcFf4OMdgSfrU\nYj6XiIiIeExJsiSbSB1wFeASYCg2GxwpsaiMtYfbD7QG/oqVQUT8HP7+WeC9Io5VFqiAvY/Kha9H\njl83fEkDTgf6kXuRoIiIiIiIJ5aR0yd5K9Yn+Q5yL6C7GuunvB2rQR7AwclwPyAbaFDE8TLCj8sK\nf80Gzg7fd1Y4nl3AfKy7hYiIiAj1sdrPucAcbOES2AKq74BFwLfYKe+IvsBibIOGCzyLVCS3G4Bx\nfgchEgeNtyIiCaQ20CJ8vTKwEDgeeBr4R/j2B4Anw9ebYoucymIzeEtQOYh4ryIwmdyt4ESCTuOt\niEgC+xJbDLUAqBW+rXb4e7BZjQeiHj8Gq+UU8cqFWB/lL1DCIIlN462ISAmV8eg4DYCTsU4Btchp\ng7WenAG8LjaDF7Ea60og4pVvsFk4kUTWAI23IiIl5sVsWWVgGLaxwo4894XI3Vkgr8LuExGR3DTe\niog4xO2Z5LLYgP0+dvoPbDajNrAOqINt6gCwBlt8EnFk+LZcGjVqFFq6dKlb8YqIeG0p1ku7pBwd\nbzXWikgSimu8dXMmOQ14B5gHvBh1+wjgxvD1G8kZzEdgO5yVAxoCxwJT8j7p0qVLCYVCKXd5+OGH\nfY8h+nLWWSF69Uq9152qv2+9Zvcu5GyDHqjxVmNtMC5TptgJgClTUut1p+rvW6/b3Uu8462bM8lt\nsA4Bs7DtecEWizyJbf17C9avtkv4vnnh2+dh2/feiU7/BVIoBHPnwq5dfkciImEab5PUrFn2depU\naNXK31hEUo2bSfIECp6pPq+A2x8PXyTA1q+H7GxYsMAS5UqV/I5IJOVpvE1Ss2bBMcdYkiwi3lKb\nqwSRnp7udwj/M3cunHACnHgi/Pqru8cK0uv2Uiq+7lR8zRI8Qft/OHs23HST+0ly0F63V/S6pTBp\nRT8kcELhuhLxyYABMH8+HHIIHH449O3rd0QiiSstLQ2CORZrrPVZKGRj7LRp0LQpbNxo466IFE+8\n461mkiVuc+dC8+Zwxhnw889+RyMikpzWroW0NDjqKGjSBGbO9DsikdSiJFniNncuNGuWkyRrsklE\nxHmzZ1tZW1oanHqq6pJFvKYkWeIS6WzRrBkceSRUqABqpSoi4rxZsyxJBiXJIn5QkixxWbsWypa1\nOjmAM8+ESZP8jUnis3Ur9OsHe/f6HYmIFGbWLFskDUqSRfygJFniEplFjlBdcuKZMAGefhouuMAS\nZhEJpki5Bdi4u2wZ7Nzpb0wiqURJssRFSXLimzUL7r4bTjkFzjoL1hy0+buI+C0zExYutK4WAOXK\n2YLpGTP8jUsklShJlrjkTZJPPhkWL4YdO/yLSeIzaxa0aAEvvADXXw9t2tjGMCISHAsXWleLihVz\nblPJhYi3lCRLXPImyeXKWaI8ZYp/MUl8IouB0tLggQegf39IT4fJk/2OTEQiokstIpQkJ54nnoDn\nnvM7CikuJckSs1AI5s3LnSSDSi4Syd69VtfYpEnObd27w6BBcOml8PXXvoUmIlGiO1tEKElOPCNH\nwj//aR96JPEoSZaYrVljLd9q1Mh9u5LkxDF/Phx7rJ0BiHbRRfDf/8Itt8C77/oTm4jkiO5sEXH8\n8bB6NWzf7k9MEp8DB+z3+NhjcPPN9r0kFiXJErO8pRYRZ5xhp+qzs72PSeKT3x/eiNNOg59+gkcf\ntVOE2iRGxD/5lVuUKQMnnQS//eZPTBKf+fNtP4H77oOqVeH55/2OSOKlJFliNmdO/klynTpQpQos\nWuR9TBKf/E7hRmvcGCZOhKFD4Z579MFHxA9bttilQYOD71PJReKYOhVatrT1H2+9Za03Fy70OyqJ\nh5JkiVlBM8mgkotEUVSSDFC3LowbBzNnQteusG+fN7GJiJk929q9lcrnL3TLlkqSE8W0afahBqBh\nQ/jXv6ykTZMPiUNJssRMSXLiiyVJBqhWDb75xmroLrpINZAiXirsfaqZ5MQxdWpOkgzQu7d9feUV\nf+KR+ClJlpgU1NkiQkly8K1fb0lv3bqxPb5CBfj0UyvBaNcOtm1zNz4RMfnVI0c0bmzv5S1bvI1J\n4pOZab/Hk0/Oua1UKXjnHXjkEesyJMGnJFlisnIlHHooHHZY/vefdJK96ZVIBVd0f+RYlS5tsx51\n61r3CxFxX2ELbEuXtsRLi/eCbe5cOPpoqFw59+2NG8P990OPHlocnQiUJEtMCiu1AChb1mrlfvnF\nu5gkPrGWWuSVlmYlFz/84HxMIpJbdrYtki4oSQaVXCSC6HrkvPr0ga1bbVZZgk1JssSkqCQZVHIR\ndIWdwi1K+/bw/fea+RBx2/LldsauoLN2oCQ5EeStR45Wpoz1o+/b1/peS3ApSZaYKElOfIWdwi1K\nkyawf7/q6ETcFsv7VEly8EXavxXkhBNsId/tt2vyIciUJEtMYk2StalIMB04AAsWFP07LEhams0m\nq+RCxF2xlEUdcwxs3gwbN3oTk8Rn/377m9miReGP69sXVq2CDz/0Ji6Jn5JkKVJ2tu0c1LRp4Y87\n4gioWdMeK8GyaJHt/FSpUvGfQ0myiPtiKYsqVcpmKadN8yYmic+cOdCoUdHjbblyMGiQ1SivX+9N\nbBIfJclSpBUrrG9utWpFP1YlF8FU3EV70SJJsk4Nirgn1rIolVwEV2H1yHmdeircdFNOD2UJFreT\n5EHAemB21G39gdXA9PClY9R9fYHFwALgApdjkxjFUmoRoSQ5mJxIkhs0gIoVdaYgoDTWJoHdu63d\nZuPGRT9WSXJwFVWPnNfDD9sZhM8/dy8mKR63k+R3gQ55bgsBzwMnhy+jw7c3Ba4Jf+0AvOpBfBKD\neJPkSZPcjUfi50SSDCq5CDCNtUlg3jxLkMuWLfqxSpKDq7D2b/k55BBrB3fXXbBpk3txSfzcHhjH\nA/ntC5TfdgaXA0OBTGA5sARo7VpkErN4kuQTTrCWNps3uxuTxKck7d+iKUkOLI21SSCeD7MNG8Ku\nXbBunbsxSXz27rWzbSedFN/PtWkDXbrAvfe6E5cUj1+zB3cBM4F3gEila13s1GDEaqCex3FJPuJJ\nksuUgVattKlIkGzdah9aGjQo+XOdcw5kZEBWVsmfSzyhsTaBxNOmMS1Ni/eCaPZsOPZYmx2O1+OP\nw4QJ8PXXzsclxeNHkvwa0BBoAawFnivksVoi5LPsbGsdVlRni2iqSw6W2bOheXNbEV9SdepA7dow\nc2bJn0tcp7E2wcR7xkclF8ETb6lFtEqV4M034e671Uo1KMr4cMw/o66/DYwMX18D1I+678jwbQfp\n37///66np6eTnp7uaICSY9kyqFEDqlSJ/WfOOANefNG9mCQ+TtUjR0RKLk45xbnnTCUZGRlkZGR4\ncSiNtQkkFLIPn/EmyYMHuxaSFEM8nS3yc+65ttviN99Ax45FP14KV9LxNr96Nac1wAbnyEmkOtis\nBsC9QCvgr9giko+w2rh6wFjgGA6e4QiF1IPKMyNGwGuvwejRRT82YuNG6xG5eTOULu1ebBKb22+3\nP7y9ejnzfMOHw1tvxfd/QgqWlpYGzozFDdBYm7DWrrVSiw0brJQiFitW2KTEH3+4G5vErkULmw1u\nXYIq/3fegS+/hJEji36sxCfe8dbtcouhwCSgMbAKuBl4CpiF1cm1wwZvgHnAp+Gvo4E70SlA38VT\njxxRs6adkp87152YJD5OzySnp8PEibarlASGxtoEFym1iDVBBjjqKMjMVJIcFHv22MZNJR1vu3a1\nLlErVjgTlxSf2+UWXfO5bVAhj388fJGAmDvXTv/EK1KX7GRyJvHLzrbdn2JdDBSL6tVtYcqvv9qK\nbAkEjbUJrjgfZtPScuqSL7vMnbgkdrNmQZMmUKFCyZ6nYkW44QabkX7sMWdik+JRb0wp1Ny5tugr\nXuqXHAzLl1tSG8tuifFQKzgRZ8XT2SKaFu8FR0nrkaP17GllFzpj5y8lyVKgrCxYuBCOPz7+nz3z\nTHW4CILi/uEtipJkEWcVt5e5kuTgiHenvcI0aWKljsOHO/N8UjxKkqVAv/8OtWpB5crx/2zTprB+\nvS3iE/84XY8c0batlVvs2eP8c4ukmsxMm5CId/0H5CTJWmPpv5K0f8vPHXfYwnnxj5JkKVBxFu1F\nlC5tq3snT3Y2JomPW0nyoYfajlIqqREpuUWL4MgjrRY1XnXr2ni7apXzcUnsdu+GJUuKV55YkMsv\nh8WLbV2J+ENJshSoJEkyqC45CNxKkkElFyJOKcn7NHrxnvhnxgw7g1q+vHPPWbYs9OgBr7/u3HNK\nfJQkS4GcSJJVl+yfXbtg9Wo47jh3nl9JsogziluPHKEk2X9OLtqL1qMHfPQR7Nzp/HNL0ZQkS4FK\nmiSffroNHAcOOBeTxG7uXFv8UcalRo9nnGGnAbdvd+f5RVJFSRfYtmypJNlvTtcjRxx5JLRrBx9+\n6PxzS9GUJEu+DhywWqjidLaIOOwwqF/fZknEe26WWoD1Am3dGsaNc+8YIqmgpO/VSJKsxXv+cWsm\nGeDOO+HVV/X79YOSZMnX0qVQp07xFpJEU12yf0p6CjcWKrkQKZmtW2HLFmjYsPjPERmrly1zLi6J\n3c6d1pO+JGdeC3PuubYwUOWL3lOSLPkqaalFhOqS/eNWj+Ro556rJFmkJGbPtrG2VAn/Gqsu2T8z\nZlhXi7Jl3Xn+UqXUDs4vSpIlX3PmOJMka1MRf4RC7pdbgP1hXrZM/bBFisup96mSZP+4WWoR0b07\n/Pe/Gmu9piRZ8uXUTHKTJrB5s20sIt754w9bsFerlrvHKVMGzjoLMjLcPY5IsnKqLEpJsn+c3Gmv\nINWrW9/kQYPcPY7kpiRZ8uVUklyqFJx2mmaTvebFLHKE6pJFis+psqiWLeG33yA7u+TPJfHxYiYZ\nbAHfG2/od+wlJclykMxMW7jXpIkzz6e6ZO8pSRYJvuxsK21zIkk+/HCoVs3GbvHO9u3Wj75pU/eP\n1aqV/Y6//db9Y4lRkiwHWbzYejMecogzz6e6ZO95mSSfeKLVya1Z483xRJLFihVQtaqdSneCSi68\nN326fchxqx99tLQ0W8D36qvuH0tMLEly23xua+N0IBIcTpVaRJx2mp0GzMx07jmlcF60f4soVQrS\n0+HHH705nkiycLoDjZJk73lVahHRtStMnGgfsMR9sSTJA/O57WWnA5HgcDpJrlLFeoDOmOHcc0rB\n9u8v+UYw8VLJhUj8nD7joyTZe27ttFeQSpXg+uvhzTe9O2YqKyxJPgPoAxwO3Be+3gfoX8TPSYJz\nOkkG1SV7acEC+1BSoYJ3x2zfHr7/XjtCicTD6TM+LVva6f+sLOeeUwrn9UwyQM+e8M47NiEi7ios\n2S0HHAqUDn+tHL5sBzq5H5r4xY0kWXXJ3vGyHjmicWMrp/n9d2+PK5LInC63OOwwW8C3aJFzzykF\n27rV2m06tcg9VscfbwsFv/jC2+OmosJKzX8KXwYDy70IRvy3f78lOo0bO/u86elw//1w4IA3CxxS\nmR9Jclpazu57jRp5e2yRRLRnj9WVOj3WRkouvCy3SlW//QYtWkDp0t4f+4474OWX4ZprvD92Koml\nbKI88BbwHfBj+KLqwyS1aBEcfbTzp+obNLDn/eknZ59XDuZHkgyqSxaJx7x5cNxxUK6cs8+rumTv\neF2PHO2KK+zv9dy5/hw/VcSSJH8G/Ab0A+6PukgScqPUIqJTJ/j8c3eeW3L4nSSrLlmkaE6XWkQo\nSfaOFzvtFaRsWejRA15/3Z/jp4pYkuRM4DXgF2Bq+DLNzaDEP24myVdfDcOHa1GJmzZuhN27oX59\n74999NFQubLNkIlI4dz6MHvKKTBzppW2ibv8WLQXrUcP+PBD2LnTvxiSXSxJ8kigF1AHqB51kSTk\nZpJ87LFQpw5MmODO80vOavm0NH+Or5ILkdi41cu8alWoVw/mz3f+uSXHli2wYYOVzPilfn1o1w4+\n+si/GJJdLElyd+DvwCRsBjlyicUgYD0wO+q26lh98yLgW6Ba1H19gcXAAuCCGI8hDnIzSQaVXLjN\nrVO4sVKS7BuNtQkkFLLZXrfeq6edBuPGufPcYqZNg5NP9mfRXrQ77oDXXlOZm1tiSZIbAA3zucTi\nXaBDntsexAbu44Dvw98DNAWuCX/tALwaY3zikH37YPlydz8Zd+oEw4ZBdrZ7x0hlftUjR5xzji3O\nVEmN5zTWJpD1620MrFvXnef/619h8GB3nluMn/XI0c47z0rsxozxO5LkFMvAeCPQLZ9LLMYDW/Lc\ndhkwJHx9CHBF+PrlwFCsBno5sARoHeNxxAELF9omFOXLu3eMJk2genX1THaL30ly7dpWUqPdFT2n\nsTaBRN6nbpVFnX++JeJ6H7rH73rkiFKlrBVcz56wfbvf0SSfWJLkVlGXs7Ed9y4rwTFrYacFCX+t\nFb5eF1gd9bjVQL0SHEfi5HapRYRKLtyRlWWL5po39zcOlVwEhsbagJo9292yqNKl4eabbVc2cYef\n7d/yOv98uPBC24tAnBVLktwbuCt8uRU4BduBzwmh8KWw+8UjXifJKrlw1pIlNpN7qFPvzmKKbFEt\ngaKxNkC8OONz0022oGvPHnePk4o2boTNm+GYY/yOJMczz8Do0TB2rN+RJJfi7H22m9hrkvOzHqgN\nrMM6ZvwZvn0NEN246sjwbQfp37///66np6eTnp5egnAkYu5c6NrV/eM0awaVKsGvv9oCE3GG36UW\nEenpcOONtnuj0xslJIOMjAwyMjK8OJTG2oCaNQt69XL3GEcfDa1aWdvN665z91ipZto0a7VXKkCV\n/FWrwptvWlu4WbP8nywJipKOt7FURI2Mul4KW+zxKfBAjMdoEH6OyMmlp4FNwFPYQpJq4a9NgY+w\n2rh6wFjgGA6e4QiFtIzTFccdZ3vBezGb3K+fLRR85hn3j5Uq/vUvq3F85BG/I7HTkC++CG3b+h1J\n8KVZYaoT1akN0FgbeAcOQJUq1j6sUiV3j/XZZ/Dqq/Djj+4eJ9U8/ri1gAvi369bbrF1Ra++6nck\nwRTveBvL56DnwpdngcexuuRYE+ShWOu4xsAq4CbgSeB8rC1R+/D3APOw5HseMBq4E50C9MzevbBq\nlfUy9kKk5EJ/g53jd/u3aO3bwzff+B1FStFYmyAWLbI+xm4nyACXXWZnCBcvdv9YqSQonS3y89xz\nMHKk1oU4JdZsuja2cC8ETCHntJ0fNLvhghkz4PrrYc4cb44XCllC/sknwR1sEs1f/mJtgPxsbh+x\nYAGcdRZkZHhzZiKROTiT7DSNtS4YOtRmeIcP9+Z4ffpY2dMTT3hzvFRw1FGWhAapJjnaqFHQu7dN\nnFSu7Hc0weLGTHIXbEvqzuHrU8LXJYl4tWgvIi1NXS6ctH27tXxq1MjvSEyTJnYqsnNn2LXL72hE\nguPbb61u3yu33GI9kzMzvTtmMvvzT9ixIzhjbX4uugjOPhv69vU7ksQXS5LcD5tFjvRHbgX8n5tB\nife8TpJBJRdOmjPHfn9+7/4UrXt3W5h55536HYuA1SOPHAmXX+7dMZs2tbNMo0Z5d8xkNm2anf10\nq8e1U154wdYY/fST35EktliS5DRgQ9T3mwjmqUEpAT+S5JYtbXZj1ixvj5uMgtLZIq+XX7b6Pe3+\nJQITJ9qp+qOP9va4t94Kb7/t7TGTVZDrkaMddphtV33zzTqbVxKxJMljgG+A7thikFHYYg9JIn4k\nySq5cE5Qk+RKlaz+8h//8K7eXSSovvoKrrii6Mc5rXNnmDAB1uTb6E/iEZSd9mJx6aVw5pnw0EN+\nR5K4CkuSjwXaAvcDbwAnYq2FJgFvuh+aeGXDBquz8mMRQqdOlkTpdHzJzJ4dzCQZ7HTvs8/aH+qd\nO/2ORsQfoRB8+aU/SXLlytCli87olEQoZB80Jk1KjJnkiJdesomo8eP9jiQxFZYkvwhEdgIfBtwX\nvnwJvOByXOKhL76Ajh2hTHG2limh1q3tVNC8ed4fO1mEQsFq/5afG2+EM85QfbKkrtmz7f++X+/T\nW2+1baq102l89u+HDz6wjVluugn+8x9oWJLt1DxWvbr1TL75Zti92+9oEk9hSXItIL9q0VmUbMc9\nCZjPP7cZXT+UKgVXX62Si5JYudJmimrU8DuSwr38Mvz2G7z7rt+RiHgvMovs14KvU0+1Xdj82lhk\n6VKbiU2UD8kbNsBjj1lCPHgw9O8PCxfC7bcHf9FeXpdfbkl+v35+R5J4CkuSqxVyXwWnAxF/bNwI\nv/xiLWP8orrkkglqPXJeFSvCp5/CAw/YrJpIKvGr1CIiLc3fBXw9esCVV8Lpp9t4n5XlTxxFmTPH\nYj3uOFi2zHrPjx0Ll1wSrG2o4zVgAHz8sZWLSOwK+5VPBW7L5/YewDR3whGvffUVnH++N7s/FeTM\nM2HTJtuAQuITCtkAnghJMlh98nPPWX2k6pMlVaxYYWd82rTxN47rroPRo2289dLEiZZwrl4NDz5o\nY0DjxtZ9Yc+ekj//xo2W/F92mS1Wu/tueP5527Dlt99g8+bCZ7Czs+Hrr+1v4QUXWPeRRYvsOYNc\nxhaPmjXtbN5NNznzb54qCjtpUBv4AthPTlLcEigPXAmsdTe0AmkXKAd16GBvmmuu8TeO3r2hTh34\n5z/9jSORrFxpp/7WrrWZmaDu/pSfW26xWr/33ku8U5dO0457yW/gwOCUGl13nfUvv/tu74550UV2\nyv/22+37UMgS52eegcmTba1Cr16WyMVq3TpbT/P559a7+IILbKb6kENg+fLcl2XL7GcaNDj4smaN\nzbJWqQJ/+5t9gC9XzrGXHjjXXgv169u/fSqKd7wt6oFpwDlAc2xL6rmA3zuCa+B2yObNNkj88Yf/\nW1dmZMC998L06f7GkQiys20Gpn9/+ze7/34oW9bvqOKze7ct2rz3XkuYU5mS5OR37rlw113+lltE\n/PijJcizZnnzAXXaNEuQly6F8uUPvn/+fJtZHjbMEvj77rPNT/KzapXNDg8bZiVbF19sa1ouvNDK\nuQoSCsHWrQcnz8uX28/16mWz/KnwgX3DBjvzOHy4LaZONU4nyUGkgdsh775ruz8NH+53JFafVreu\nzS54NSO6f7+VKpxzjs0+JIKFC62uMDvbVqo3aeJ3RMU3f75tnfrDD8lzSrM4lCQnt8hkxLp1hSdy\nXsnOtnrbjz6yD6puu+oqaNcO7rmn8MetXWsz7m++Ce3b24f/Vq3g998tKR42DBYvtpKKTp3gvPPy\nT7qlaJ9/br2Tf/vN/wkyr8U73iZwGbqU1OefW+/aIChd2k6VDRvmzfH27LHj3XWXrV5+4gnYts2b\nYxdHZqbF2KaNlcaMH5/YCTLA8cdb3WDnzrBjh9/RiLjj668t6QtCggy2+OyWW7xZwDdnji0U69Gj\n6MfWqQOPP26lEWecYTPEDRrYQr8lS+DRR+2Dxrvv2gyyEuTi69QJ2rYt+oOLBHP2oiia3XDA1q22\nPeqaNdYWKAjGjoW+feHXX909zo4dtrijXj1r7bNgATz1lC1oue02q0urVcvdGOLx22/2R61WLXjj\nDe+3tHXbrbfah5YPPkiN0515aSY5uV19tY033bv7HUmOP/6wHVZXrXJ3JvGvf4UWLWzHzXhlZtpO\nsCecYJMo4qwdO+CUU2zyxa8WsH7QTLLEZMQIm90ISoIMdkpu2TKrE3PL5s12mq5JE1s0VrasDcIf\nfGDbjW7bZvf16uVuHLHYs8c+NHTsaLW7o0cnX4IMtmhm1iwrHxFJJnv25LQPC5K6da3U6dNP3TvG\nokXw3Xdwxx3F+/myZS3BVoLsjkMPhQ8/tL91q1b5HU1wKUlOUZ99FrxPj2XL2sIWt0ou1q61RLxd\nO1v4lnfwbdjQdiaaP98GkJYt4YYbbDYjXtu2wZQploi/+KJ9/fpr60m9ZAls2VL4zlfjx9sfiKVL\nLYHs1i15Z1krVrT/j3372r+PSLL4/ns4+eT4ujZ4xe2eyU88YeVsQZqIkdxat7aSi27dgtu32m+J\n+GdXpwBLaNs2awGzahVUrep3NLmNGQOPPAI//+zs865YYTPI3bvbgoVYEs6tWy1pHjDAWib17Wv1\ncRFZWdaGbcECW1AX/XXHDusD2rgxHH64zWBv2mT9PDdtssuuXXDYYbZTXo0a9oe0Rg3r/DBunPW0\nvPJKZ/8dgmzkSOjZ01pC1a/vdzTeUblF8rr1VitruPdevyM52IEDVnL33XcWo5OWL7dJhiVLbIyT\n4MrKsrPKF11kGz0lO3W3kCJ98AF88oklJUGzfz/Urg0zZzqXKC1caE3i//734vUG3b0bBg2yvpIN\nG8IRR1hVRYlWAAAgAElEQVQivGSJJbaNG1uJRuRrkyZW71xUIp6ZmZM8RyfQe/bA9den5h+XZ5+1\n/58TJqTOqmslyckpK8sWo02eXHBLM7/985823jz/vLPPe8cdNn49/rizzyvuWLnSti0fNcq+JjMl\nyVKkK66wtjzduvkdSf66d7dTlE6svJ0xwz4hP/54yRfOZGZa8/qsLEuIjzsudRI5r4RCtkhx82Zr\nTZjI28DGSklycpowweo9Z870O5KCLV1qZ8dWr3auW8SaNbbOY+FCO4smieHTT6Ffv+RvC6ckWQq1\nfTsceaR9cqxWze9o8vff/1q3ifHjS/Y8P/9sHwheeSV49ddSsP37beb/9NPt/0GyU5KcnO6/3+rt\nH3nE70gK1769lTl16eLM8917r51Fc3p2WtzXvTuUKeNNe0C/qLuFFOrrr+Gss4KbIIMlSHPmWJui\n4vr+e2s6P3iwEuREU65czuYBgwf7HY1I/EIhO+sUhB32iuLkAr4//4QhQ6y0TRLPwIG2+61X+xUk\nAiXJKSaIXS3yKl/emsV/8UXxfv6rr6BrV3ujd+zobGzijZo1rWb+H/8o+RkFEa/Nm2flWS1a+B1J\n0a66yk6xL1tW8ud6/nkbe+vWLflzifcibeHuvNNKcERJckrZudN6dl5+ud+RFK1TJ9sRMF4ffgi3\n324LEM4+2/m4xDvHH2+L+Lp0sa1pRRLFl1/aOJsIbRsrVLBNP0rap3zzZnjrreJtHCLBcdpp1rpP\nbeGMn2/h5cB2IAvIBFoD1YFPgKPD93cBtub5OdXJFdMnn9iWnmPG+B1J0fbssZXh55xjpy4jFyj4\n+wMHrMfxN98439JI/PPKK3b5+efgtSx0ggc1ycvRWOupVq2snr59e78jic2iRTapcN99VipRnAWz\n/ftbW1FtCpT4srLsb+8llyTfh55EWri3DGgJbI667WlgY/jrA8BhwIN5fk4DdzF17gwdOlj3gEQw\nc2bODGJaWs6lsO9btLDkWpJL797Wcu+//7WFJcnEgyRZY62HVq+Gk06Cdetsg6REsWqVnbWpWdPq\niqtXj/1nt2+3Nnc//wzHHutejOKdFSvsw97o0dbzOlkkWpJ8KrAp6rYFQDtgPVAbyACa5Pk5DdzF\nsGuX1YktXRrM3Z9ECnPggNWpN25sm7skE4+SZI21Hnn1VeuN/N57fkcSv/374cEHrf3ip5/ajmyx\nePJJmD3byt0keXz8MTz8sNWsV6pU9OOzs+2sxOTJMG2aTcgFrS4/kbpbhICxwFSgR/i2WtigTfhr\nLR/iSkqjRlmtkRJkSURlyli50Hff2ZbiEheNtR6K1CMnonLlbPHdCy/YqfaBA3PK2gqya5c9/qGH\nvIlRvHPttdaKs6AdI7dutfLGRx6xRfI1a9q+BN9+ayU7XbvC3r3exuw0P2eS6wBrgcOB74C7gBHY\nab+IzVjtXDTNbhTDNdfYtsw9ehT9WJGgWrIE2raF99+3VoHJwIOZZI21Htm61bZ6/uOPxN+QYelS\nK9E75hhrEVelSv6Pe/FF2zilOAutJfi2b7fNvZ56ys7kTZ5sZTWTJ1uJTsuWcMYZlkyfdprtmAv2\n4erqq2190L//7e9riBbveOtndd/a8NcNwBfYYpLIqb912MD+Z34/2L9///9dT09PJz093cUwE9/u\n3bZY7+WX/Y5EpGSOOcZmlDt3hnHjbAvwRJORkUFGRoaXh9RY65FRo6Bdu8RPkAEaNYJJk+Bvf7NE\n6PPPrdY62t698MwztlZAklOVKlZG07491K9vyfDpp8Pdd0Pz5gWvEUlLswXXJ51k4/WJJ3obd0RJ\nx1u/ZpIrAqWBHUAl4FvgEeA8rG7uKWwRSTW0mKTEhg+3OrmxY/2ORMQZgwbZVuNff22zG4nM5Zlk\njbUeuuYauOCCxFkcHasPP7Rk+Ykn7LVFFky/9pq9B5UkJ7+sLChdOv6fe+cdeP11m30OwqLrRFm4\n1xCb0QCbzf4QeAI73fcpcBRqS+SYrl1tdqNnT78jEXHOU0/BSy/Z1r8dOtjlnHNiW2ASJC4nyRpr\nPbJvH9SqZQuXjjjC72icN3++zQiecoolx+XK2Zmdjz+20+0i+QmFrNSzY8dg7MSYKElySWjgjkOk\n3/DChTaAiySTUMhW1Y8ZY5dff7W6uEjS3KxZ8Dd08KAmubg01sZh9Gg7u5HMO0Tu2mW7sU2daltu\n//KLzlBK0X7/3TqlTJ5sH6z8pCRZcvnyS5tt+/FHvyMRcd+OHfZ/fcwYS1oyM3MS5vPOg2rV/I7w\nYEqSk8Ptt1uP4CDMlrkpFLJyp7vusvdYu3Z+RySJ4IUXYMQI+OEHfyculCRLLtdfD2eeaZ/+RVJJ\nKASLF1vC/M03NsN34YW21XX58n5Hl0NJcuLLzrY+9OPHp85mGnv2wCGH+B2FJIqsLMtFbr3V3y5b\nSpLlf/butVKL+fNz2rKIpKq9e6FbN9uY5NNPg7GIBJQkJ4Off7Y//HPm+B2JSHDNmWPrRmbMgHr1\n/IkhkTYTEZd99521XVGCLAIVKlh/5V27LKHJzvY7IkkWX31lNboiUrDmzaFXLzuznSifv5UkJ7HP\nPoNOnfyOQiQ4ype3logLF1rtaKIM1BJsX36pJFkkFn372kY1n33mdySxCeIpvqLoFGAM9u2zGeS5\nc61WTkRybNliC466dIF+/fyNReUWiW3BAlsUumpV8DupiATBL7/Yh8o5c6BGDW+PrXILAawtT7Nm\nSpBF8nPYYfDttzB4sHailJL58ku4/HIlyCKxOu00uPZauPdevyMpmpLkJPX559b4XUTyV7u21e0/\n9ZTtKCYSr6ws65Zy5ZV+RyKSWP7zH5gwwboPBZmS5CS0f7/1I7z6ar8jEQm2hg1tkO7TB0aO9Dsa\nSTSvvw41a8K55/odiUhiqVQJ3nzTdgLescPvaAqWiCeIVCdXhBEj4MknYdIkvyMRSQxTpsDFF9ti\nkvR0b4+tmuTE9OefVtKWkWFfRSR+t9wCFSvCwIHeHE99klPc1q3QogW8+ipcdJHf0Ygkjh9+sDq5\nUaPg1FO9O66S5MR000226OjZZ/2ORCRxbdlireE++QTatnX/eEqSU1goZH/ka9WCAQP8jkYk8Xz5\npZ3++/FHOP54b46pJDnxTJwI11xjGzUdeqjf0YgktuHD4aGHbJORChXcPZa6W6SwIUNg3jx4+mm/\nIxFJTFdcYQv5LrwQVqzwOxoJogMHbDOE555TgizihKuustnk//zH70gOFpCNWaWkliyB+++3GTC3\nP4mJJLMbb7SypfPPh/Hj7cyMSMSrr9pivS5d/I5EJHm8/DJ8843fURwsiKf4iqJTgHlkZkKbNtCt\nG/Tu7Xc0Isnh4Ydtu+GMDKhWzb3jqNwicaxbByecAOPGeVeOIyLOiXe81UxyEnj4YTjiCNsTXUSc\n0b+/va9KqShNwv7xD7j5ZiXIIqkiiLMXRdHsRpQff4Trr4fp0+0PuogkFs0kJ4Zx4+C662yxXuXK\nfkcjIsWhhXspZPNmq58cNEgJsoiIWzIz7Uzd888rQRZJJUqSE1QoBD16QKdOthJfRETc8corUKeO\njbcikjpUk5yg3nkHli6Fjz7yOxIRkeT1xx/WmmriREgLYlGMiLgmEd/yKV8nt3Ch7Uzz00/QtKnf\n0YhISagmOdiuuw6OPhoef9zvSESkpNTdIsnt2wddu8K//60EWUTETRkZMGECvPmm35GIiB9Uk5xg\n+vWDo46C22/3OxIRkeQVWaz3wgtQqZLf0YiIHxJyJjkrC/bsscvu3Tlfo69Hvu7fb3VkaWnW7zTv\n9by3lSkDTZpYH8wyAfvXGTsWhg61/c1VGyci4p4BA6B+fbjySr8jERG/BDHV6gC8CJQG3gaeynN/\nKC0txCGHQMWK/O9r9PXor+XKWSeIyCU7++Dr0bft3Qvz5sHq1baX+Cmn5FyaN4fy5T3/9wBg40Zo\n0QKGDIFzz/UnBhFxno81yUWOtalak7xmDZx0Evz8Mxx7rN/RiIhT4h1vg5YklwYWAucBa4Bfga7A\n/KjHhLKzQ67PpO7YATNnwm+/5VyWLIHGjXMnziee6P6puFAI2rbNoE2bdJ5+2t1jBU1GRgbp6el+\nh+G5VHzdqfiawbckOaaxNhWT5IyMDN54I51GjayrRapI1fefXndqSfSFe62BJcDy8PcfA5eTe+D2\npNTg0EOtg0Tbtjm37dkDs2fnJM3vvmuzzlWqHDyrXdAsd8WKUKEClC5t5R2lSuW+nt/3s2fD779n\n8OOP6e6/8IBJ1TdyKr7uVHzNPopprHXb/v2wdSts22aXyPWCbtu508bPypVtjI7la9WqUK2aTWbE\n8rdj0KAMJk9O55133H/9QZKq7z+9bilM0JLkesCqqO9XA6f5FMtBDjkEWre2S8T+/bbzXd7a6Lw1\n0tHfb9tmJR5ZWfY1cino+1KloHNnKx0REXFATGNtjx6WXFaubJfCrleqZOPbpk25L5s3H3xb5LJ/\nvyWwkUS2atXc16tVg4YNc65XrmwdfnbssIQ58nXDBli2LOf7yH07dsD27ZZg79tnzxG5HHZY/tdH\njbI+9BUreva7EJGAClqSnHDn9sqVg9q13T9O//7uH0NEUkZMY22rVpZw7toFW7bYWo1IErpr18Ff\nK1SAGjUOvjRrdvBt1atb0uvVIuT9+22CYssWS5q3bs25Hvm6YgWccAJcdpk3MYlIsAWtJvl0oD+2\noASgL5BN7gUlS4BG3oYlIuKapcAxHh9TY62IpCI/xlvHlMFeQAOgHDADON7PgEREkpDGWhGRBNQR\nW3W9BJvdEBER52msFREREREREZHk1AFYACwGHvA5Fi8tB2YB04Ep/obiqkHAemB21G3Vge+ARcC3\nQDUf4nJbfq+7P9ZtYHr40uHgH0t49YEfgbnAHODu8O3J/jsv6HX3J1i/c423Gm+T7b0HqTneaqwN\n9ljriNLYKcEGQFlSq35uGfafOdmdBZxM7sHraeAf4esPAE96HZQH8nvdDwP3+ROOZ2oDLcLXK2On\n/Y8n+X/nBb3uIP3ONd4mP423OYL03nODxtoSjLWlnI/LFdGN7zPJaXyfKoLWhcQN44EteW67DBgS\nvj4EuMLTiLyR3+uG5P+dr8OSL4Cd2CYW9Uj+33lBrxuC8zvXeJv8NN7mlsy/c421JRhrEyVJzq/x\nfb0CHptsQsBYYCrQw+dYvFYLOzVG+GstH2Px2l3ATOAdku80WF4NsNmdX0it33kD7HVPDn8flN+5\nxluNt8n+3ssrKO89tzVAYy3E8ftOlCQ54TYZcVAb7JfbEeiFnS5KRSFS5//Ba0BD7FTRWuA5f8Nx\nVWVgGHAPsCPPfcn8O68MfI697p0E63eerP/msdB4a5L5vZdXkN57btJYW4yxNlGS5DVYEXZEfWx2\nIxWsDX/dAHyBnQpNFeuxuiKAOsCfPsbipT/JGbTeJnl/52WxQft94MvwbanwO4+87g/Ied1B+p1r\nvNV4m6zvvfwE6b3nFo21xRxrEyVJngocS07j+2uAEX4G5JGKwKHh65WAC8i94CDZjQBuDF+/kZz/\n5MmuTtT1K0nO33kadqprHvBi1O3J/jsv6HUH6Xeu8VbjbTK+9woSpPeeGzTWBnesdVQqNr5viBWe\nz8BamCTz6x4K/AHsx+ohb8JWmY8leVvUwMGv+2bgPawN1Uxs4ErGWrG22DbIM8jdiifZf+f5ve6O\nBO93rvE2uV+3xtvUGW811gZ7rBURERERERERERERERERERERERERERERERERERERERERERERERER\nERERERERERERERERERERERERERERERERERERERERkSSyHNgNbAe2ABOB24E0l473JrAAyAJuzHNf\neeAFYA2wGXgFKONSHCIiIiIiBVoGtA9fPxS4FPgdGOTS8e4MH+9XoFue+x4GfgKqATWBn4H+LsUh\nIiIiIlKg6CQ5ohU209ss/P3FwHRgG7ASS2YjvgZ65/n5WcDlRRx3PAcnyb8CnaK+7xo+nohISirl\n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\nSZIkSZLUS/4HjRXsV9lzmAcAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 99 }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "cross validation:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "scoreMF = cross_val_score(monthforest, muse[['time','workingday','atemp','humidity','windspeed','weather']],\n", " muse['count'], cv=5)\n", "scoreSVR = cross_val_score(monthSVR, muse[['time','workingday','atemp','humidity','windspeed','weather']],\n", " muse['count'], cv=5)\n", "\n", "print(\"Accuracy of Random Forest Regressor: %0.2f (+/- %0.2f)\" % (scoreMF.mean(), scoreMF.std() * 2))\n", "print(\"Accuracy of SVR: %0.2f (+/- %0.2f)\" % (scoreSVR.mean(), scoreSVR.std() * 2))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Accuracy of Random Forest Regressor: 0.87 (+/- 0.09)\n", "Accuracy of SVR: 0.81 (+/- 0.10)\n" ] } ], "prompt_number": 95 }, { "cell_type": "code", "collapsed": false, "input": [ "# from sklearn import tree\n", "# dt = tree.ExtraTreeRegressor()\n", "# #set target, train and test. train and test must have same number of features\n", "# df = data\n", "# target = df['count']\n", "# train = df[['time','holiday','season','temp','atemp','windspeed','weather','humidity']]\n", "# test = test2[['time','holiday','season','temp','atemp','windspeed','weather','humidity']]\n", "# dt.fit(train,target)\n", "\n", "\n", "# predicted_probs = dt.predict(test)\n", "# predicted_probs = pd.Series(predicted_probs)\n", "# predicted_probs = predicted_probs.map(lambda x: int(x))\n", "\n", "# keep = pd.read_csv('data/test.csv')\n", "# keep = keep['datetime']\n", "# #save to file\n", "# submit = pd.concat([keep,predicted_probs],axis=1)\n", "# # print(forest.feature_importances_)\n", "# submit.columns=['datetime','count']\n", "# submit.to_csv('data/submissiondtree.csv',index=False)\n", "\n", "# plt.figure()\n", "# # pl.scatter(tr, y, c=\"k\", label=\"data\")\n", "# plt.plot(train['time'], target, c=\"g\", label=\"train\", linewidth=2)\n", "# # plt.plot(test['time'], predicted_probs, c=\"r\", label=\"test\", linewidth=2)\n", "# plt.xlabel(\"data\")\n", "# plt.ylabel(\"target\")\n", "# plt.title(\"Decision Tree Regression\")\n", "# plt.legend()\n", "# plt.show()\n", "\n", "#removed plot for SVM\n", "\n", "# day_19 = data[(data['month']==1) & (data['year']==2011) & (data['day']==19)]\n", "# f, (ax1, ax2) = plt.subplots(2, sharex=True, sharey=True)\n", "# ax1.plot(day_19.time,day_19['count'])\n", "# # ax1.set_title('2 Weekends, 2 Working days')\n", "# ax2.plot(test.time[0:24],subsub[0:24])\n", "# # ax3.plot(day_3.time,day_3['count'])\n", "# # ax4.plot(day_4.time,day_4['count'])\n", "# f.subplots_adjust(hspace=0)\n", "# f.set_size_inches(10,7)\n", "\n", "\n", "\n", "#removed plot for random forest\n", "\n", "# day_19rf = data[(data['month']==1) & (data['year']==2011) & (data['day']==19)]\n", "# f, (ax1, ax2) = plt.subplots(2, sharex=True, sharey=True)\n", "# ax1.plot(day_19.time,day_19['count'])\n", "# # ax1.set_title('2 Weekends, 2 Working days')\n", "# ax2.plot(test.time[0:24],z[0:24])\n", "# # ax3.plot(day_3.time,day_3['count'])\n", "# # ax4.plot(day_4.time,day_4['count'])\n", "# f.subplots_adjust(hspace=0)\n", "# f.set_size_inches(10,7)\n", "# submitdata(z,name='timeinforest')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 94 } ], "metadata": {} } ] }