{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Расчет площадей лесных пожаров"
]
},
{
"cell_type": "code",
"execution_count": 119,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import math\n",
"import numpy as np\n",
"import pandas as pd\n",
"import random\n",
"import sklearn\n",
"\n",
"# importing sklearn libraries\n",
"from sklearn import neural_network, linear_model, preprocessing, svm, tree\n",
"from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier\n",
"from sklearn.metrics import accuracy_score, mean_squared_error, r2_score\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.linear_model import LassoLarsCV\n",
"from sklearn.linear_model import Lasso\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Загрузка данных"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"В данные входят следующие величины:\n",
"\n",
" X - Пространственная координата оси X на карте парка Монтезиньо: от 1 до 9\n",
" Y - Пространственная координата оси X на карте парка Монтезиньо: от 2 до 9\n",
" month - название месяца: \"jan\" до \"dec\"\n",
" day - день недели: \"mon\" до \"sun\"\n",
" FFMC - FFMC-индекс FWI-системы: от 18.7 до 96.20\n",
" DMC - DMC-индекс FWI-системы: от 1.1 до 291.3\n",
" DC - DC-индекс FWI-системы: от 7.9 до 860.6\n",
" ISI - ISI-индекс FWI-системы: от 0.0 до 56.10\n",
" temp - температура воздуха в Цельсиях: от 2.2 до 33.30\n",
" RH - относительная влажность в%: от 15.0 до 100\n",
" wind - скорочть ветра в км/ч: от 0.40 до 9.40\n",
" rain - количество осадков в мм/м2: от 0.0 до 6.4\n",
" area - размер территории леса, охваченной огнем(в гектарах): от 0.00 до 1090.84\n"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {},
"outputs": [],
"source": [
"forest_fires = pd.read_csv('forestfires.csv')"
]
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" X | \n",
" Y | \n",
" month | \n",
" day | \n",
" FFMC | \n",
" DMC | \n",
" DC | \n",
" ISI | \n",
" temp | \n",
" RH | \n",
" wind | \n",
" rain | \n",
" area | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 7 | \n",
" 5 | \n",
" mar | \n",
" fri | \n",
" 86.2 | \n",
" 26.2 | \n",
" 94.3 | \n",
" 5.1 | \n",
" 8.2 | \n",
" 51 | \n",
" 6.7 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" 1 | \n",
" 7 | \n",
" 4 | \n",
" oct | \n",
" tue | \n",
" 90.6 | \n",
" 35.4 | \n",
" 669.1 | \n",
" 6.7 | \n",
" 18.0 | \n",
" 33 | \n",
" 0.9 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" 2 | \n",
" 7 | \n",
" 4 | \n",
" oct | \n",
" sat | \n",
" 90.6 | \n",
" 43.7 | \n",
" 686.9 | \n",
" 6.7 | \n",
" 14.6 | \n",
" 33 | \n",
" 1.3 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" 3 | \n",
" 8 | \n",
" 6 | \n",
" mar | \n",
" fri | \n",
" 91.7 | \n",
" 33.3 | \n",
" 77.5 | \n",
" 9.0 | \n",
" 8.3 | \n",
" 97 | \n",
" 4.0 | \n",
" 0.2 | \n",
" 0.0 | \n",
"
\n",
" \n",
" 4 | \n",
" 8 | \n",
" 6 | \n",
" mar | \n",
" sun | \n",
" 89.3 | \n",
" 51.3 | \n",
" 102.2 | \n",
" 9.6 | \n",
" 11.4 | \n",
" 99 | \n",
" 1.8 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" X Y month day FFMC DMC DC ISI temp RH wind rain area\n",
"0 7 5 mar fri 86.2 26.2 94.3 5.1 8.2 51 6.7 0.0 0.0\n",
"1 7 4 oct tue 90.6 35.4 669.1 6.7 18.0 33 0.9 0.0 0.0\n",
"2 7 4 oct sat 90.6 43.7 686.9 6.7 14.6 33 1.3 0.0 0.0\n",
"3 8 6 mar fri 91.7 33.3 77.5 9.0 8.3 97 4.0 0.2 0.0\n",
"4 8 6 mar sun 89.3 51.3 102.2 9.6 11.4 99 1.8 0.0 0.0"
]
},
"execution_count": 121,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"forest_fires.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Статистический анализ данных"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Рассмотрим значение стандартных статистических величин у каждого из данных признаков, а так же попарную корелляцию"
]
},
{
"cell_type": "code",
"execution_count": 122,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" X | \n",
" Y | \n",
" FFMC | \n",
" DMC | \n",
" DC | \n",
" ISI | \n",
" temp | \n",
" RH | \n",
" wind | \n",
" rain | \n",
" area | \n",
"
\n",
" \n",
" \n",
" \n",
" count | \n",
" 517.000000 | \n",
" 517.000000 | \n",
" 517.000000 | \n",
" 517.000000 | \n",
" 517.000000 | \n",
" 517.000000 | \n",
" 517.000000 | \n",
" 517.000000 | \n",
" 517.000000 | \n",
" 517.000000 | \n",
" 517.000000 | \n",
"
\n",
" \n",
" mean | \n",
" 4.669246 | \n",
" 4.299807 | \n",
" 90.644681 | \n",
" 110.872340 | \n",
" 547.940039 | \n",
" 9.021663 | \n",
" 18.889168 | \n",
" 44.288201 | \n",
" 4.017602 | \n",
" 0.021663 | \n",
" 12.847292 | \n",
"
\n",
" \n",
" std | \n",
" 2.313778 | \n",
" 1.229900 | \n",
" 5.520111 | \n",
" 64.046482 | \n",
" 248.066192 | \n",
" 4.559477 | \n",
" 5.806625 | \n",
" 16.317469 | \n",
" 1.791653 | \n",
" 0.295959 | \n",
" 63.655818 | \n",
"
\n",
" \n",
" min | \n",
" 1.000000 | \n",
" 2.000000 | \n",
" 18.700000 | \n",
" 1.100000 | \n",
" 7.900000 | \n",
" 0.000000 | \n",
" 2.200000 | \n",
" 15.000000 | \n",
" 0.400000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" 25% | \n",
" 3.000000 | \n",
" 4.000000 | \n",
" 90.200000 | \n",
" 68.600000 | \n",
" 437.700000 | \n",
" 6.500000 | \n",
" 15.500000 | \n",
" 33.000000 | \n",
" 2.700000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" 50% | \n",
" 4.000000 | \n",
" 4.000000 | \n",
" 91.600000 | \n",
" 108.300000 | \n",
" 664.200000 | \n",
" 8.400000 | \n",
" 19.300000 | \n",
" 42.000000 | \n",
" 4.000000 | \n",
" 0.000000 | \n",
" 0.520000 | \n",
"
\n",
" \n",
" 75% | \n",
" 7.000000 | \n",
" 5.000000 | \n",
" 92.900000 | \n",
" 142.400000 | \n",
" 713.900000 | \n",
" 10.800000 | \n",
" 22.800000 | \n",
" 53.000000 | \n",
" 4.900000 | \n",
" 0.000000 | \n",
" 6.570000 | \n",
"
\n",
" \n",
" max | \n",
" 9.000000 | \n",
" 9.000000 | \n",
" 96.200000 | \n",
" 291.300000 | \n",
" 860.600000 | \n",
" 56.100000 | \n",
" 33.300000 | \n",
" 100.000000 | \n",
" 9.400000 | \n",
" 6.400000 | \n",
" 1090.840000 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" X Y FFMC DMC DC ISI \\\n",
"count 517.000000 517.000000 517.000000 517.000000 517.000000 517.000000 \n",
"mean 4.669246 4.299807 90.644681 110.872340 547.940039 9.021663 \n",
"std 2.313778 1.229900 5.520111 64.046482 248.066192 4.559477 \n",
"min 1.000000 2.000000 18.700000 1.100000 7.900000 0.000000 \n",
"25% 3.000000 4.000000 90.200000 68.600000 437.700000 6.500000 \n",
"50% 4.000000 4.000000 91.600000 108.300000 664.200000 8.400000 \n",
"75% 7.000000 5.000000 92.900000 142.400000 713.900000 10.800000 \n",
"max 9.000000 9.000000 96.200000 291.300000 860.600000 56.100000 \n",
"\n",
" temp RH wind rain area \n",
"count 517.000000 517.000000 517.000000 517.000000 517.000000 \n",
"mean 18.889168 44.288201 4.017602 0.021663 12.847292 \n",
"std 5.806625 16.317469 1.791653 0.295959 63.655818 \n",
"min 2.200000 15.000000 0.400000 0.000000 0.000000 \n",
"25% 15.500000 33.000000 2.700000 0.000000 0.000000 \n",
"50% 19.300000 42.000000 4.000000 0.000000 0.520000 \n",
"75% 22.800000 53.000000 4.900000 0.000000 6.570000 \n",
"max 33.300000 100.000000 9.400000 6.400000 1090.840000 "
]
},
"execution_count": 122,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"forest_fires.describe()"
]
},
{
"cell_type": "code",
"execution_count": 123,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" X | \n",
" Y | \n",
" FFMC | \n",
" DMC | \n",
" DC | \n",
" ISI | \n",
" temp | \n",
" RH | \n",
" wind | \n",
" rain | \n",
" area | \n",
"
\n",
" \n",
" \n",
" \n",
" X | \n",
" 1.000000 | \n",
" 0.539548 | \n",
" -0.021039 | \n",
" -0.048384 | \n",
" -0.085916 | \n",
" 0.006210 | \n",
" -0.051258 | \n",
" 0.085223 | \n",
" 0.018798 | \n",
" 0.065387 | \n",
" 0.063385 | \n",
"
\n",
" \n",
" Y | \n",
" 0.539548 | \n",
" 1.000000 | \n",
" -0.046308 | \n",
" 0.007782 | \n",
" -0.101178 | \n",
" -0.024488 | \n",
" -0.024103 | \n",
" 0.062221 | \n",
" -0.020341 | \n",
" 0.033234 | \n",
" 0.044873 | \n",
"
\n",
" \n",
" FFMC | \n",
" -0.021039 | \n",
" -0.046308 | \n",
" 1.000000 | \n",
" 0.382619 | \n",
" 0.330512 | \n",
" 0.531805 | \n",
" 0.431532 | \n",
" -0.300995 | \n",
" -0.028485 | \n",
" 0.056702 | \n",
" 0.040122 | \n",
"
\n",
" \n",
" DMC | \n",
" -0.048384 | \n",
" 0.007782 | \n",
" 0.382619 | \n",
" 1.000000 | \n",
" 0.682192 | \n",
" 0.305128 | \n",
" 0.469594 | \n",
" 0.073795 | \n",
" -0.105342 | \n",
" 0.074790 | \n",
" 0.072994 | \n",
"
\n",
" \n",
" DC | \n",
" -0.085916 | \n",
" -0.101178 | \n",
" 0.330512 | \n",
" 0.682192 | \n",
" 1.000000 | \n",
" 0.229154 | \n",
" 0.496208 | \n",
" -0.039192 | \n",
" -0.203466 | \n",
" 0.035861 | \n",
" 0.049383 | \n",
"
\n",
" \n",
" ISI | \n",
" 0.006210 | \n",
" -0.024488 | \n",
" 0.531805 | \n",
" 0.305128 | \n",
" 0.229154 | \n",
" 1.000000 | \n",
" 0.394287 | \n",
" -0.132517 | \n",
" 0.106826 | \n",
" 0.067668 | \n",
" 0.008258 | \n",
"
\n",
" \n",
" temp | \n",
" -0.051258 | \n",
" -0.024103 | \n",
" 0.431532 | \n",
" 0.469594 | \n",
" 0.496208 | \n",
" 0.394287 | \n",
" 1.000000 | \n",
" -0.527390 | \n",
" -0.227116 | \n",
" 0.069491 | \n",
" 0.097844 | \n",
"
\n",
" \n",
" RH | \n",
" 0.085223 | \n",
" 0.062221 | \n",
" -0.300995 | \n",
" 0.073795 | \n",
" -0.039192 | \n",
" -0.132517 | \n",
" -0.527390 | \n",
" 1.000000 | \n",
" 0.069410 | \n",
" 0.099751 | \n",
" -0.075519 | \n",
"
\n",
" \n",
" wind | \n",
" 0.018798 | \n",
" -0.020341 | \n",
" -0.028485 | \n",
" -0.105342 | \n",
" -0.203466 | \n",
" 0.106826 | \n",
" -0.227116 | \n",
" 0.069410 | \n",
" 1.000000 | \n",
" 0.061119 | \n",
" 0.012317 | \n",
"
\n",
" \n",
" rain | \n",
" 0.065387 | \n",
" 0.033234 | \n",
" 0.056702 | \n",
" 0.074790 | \n",
" 0.035861 | \n",
" 0.067668 | \n",
" 0.069491 | \n",
" 0.099751 | \n",
" 0.061119 | \n",
" 1.000000 | \n",
" -0.007366 | \n",
"
\n",
" \n",
" area | \n",
" 0.063385 | \n",
" 0.044873 | \n",
" 0.040122 | \n",
" 0.072994 | \n",
" 0.049383 | \n",
" 0.008258 | \n",
" 0.097844 | \n",
" -0.075519 | \n",
" 0.012317 | \n",
" -0.007366 | \n",
" 1.000000 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" X Y FFMC DMC DC ISI temp \\\n",
"X 1.000000 0.539548 -0.021039 -0.048384 -0.085916 0.006210 -0.051258 \n",
"Y 0.539548 1.000000 -0.046308 0.007782 -0.101178 -0.024488 -0.024103 \n",
"FFMC -0.021039 -0.046308 1.000000 0.382619 0.330512 0.531805 0.431532 \n",
"DMC -0.048384 0.007782 0.382619 1.000000 0.682192 0.305128 0.469594 \n",
"DC -0.085916 -0.101178 0.330512 0.682192 1.000000 0.229154 0.496208 \n",
"ISI 0.006210 -0.024488 0.531805 0.305128 0.229154 1.000000 0.394287 \n",
"temp -0.051258 -0.024103 0.431532 0.469594 0.496208 0.394287 1.000000 \n",
"RH 0.085223 0.062221 -0.300995 0.073795 -0.039192 -0.132517 -0.527390 \n",
"wind 0.018798 -0.020341 -0.028485 -0.105342 -0.203466 0.106826 -0.227116 \n",
"rain 0.065387 0.033234 0.056702 0.074790 0.035861 0.067668 0.069491 \n",
"area 0.063385 0.044873 0.040122 0.072994 0.049383 0.008258 0.097844 \n",
"\n",
" RH wind rain area \n",
"X 0.085223 0.018798 0.065387 0.063385 \n",
"Y 0.062221 -0.020341 0.033234 0.044873 \n",
"FFMC -0.300995 -0.028485 0.056702 0.040122 \n",
"DMC 0.073795 -0.105342 0.074790 0.072994 \n",
"DC -0.039192 -0.203466 0.035861 0.049383 \n",
"ISI -0.132517 0.106826 0.067668 0.008258 \n",
"temp -0.527390 -0.227116 0.069491 0.097844 \n",
"RH 1.000000 0.069410 0.099751 -0.075519 \n",
"wind 0.069410 1.000000 0.061119 0.012317 \n",
"rain 0.099751 0.061119 1.000000 -0.007366 \n",
"area -0.075519 0.012317 -0.007366 1.000000 "
]
},
"execution_count": 123,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Попарная корелляция между признаками\n",
"forest_fires.corr()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Линейная модель"
]
},
{
"cell_type": "code",
"execution_count": 124,
"metadata": {},
"outputs": [],
"source": [
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Значение весов и параметр регуляризации"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Для начала расчитаем коэффициенты регрессии в нашей модели и поймем все ли признаки имеют некоторый вес в нашей модели"
]
},
{
"cell_type": "code",
"execution_count": 125,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0. , 0. , 0. , 0.01194366, 0. ,\n",
" 0. , 0. , 0. , 0. , 0. ,\n",
" 0. , 0. , 0. , 0. , 0. ,\n",
" 0. , 0. , 0. , 0. , 0. ,\n",
" 0. , 0. , 0. , 0. , 0. ,\n",
" 0. , 0. ])"
]
},
"execution_count": 125,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"est = LassoLarsCV(cv=10, precompute=False).fit(X_train, y_train)\n",
"est.coef_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Как мы видим в данной модели только 1 признак имеет некоторый вес. Этот признак - DMC. Построим график зависимости веса от параметра регуляризации"
]
},
{
"cell_type": "code",
"execution_count": 126,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD8CAYAAABn919SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xl4VPXd/vH3JzuELUDYEiAZqrZq3ZrHarWLVq2VJAQREFBBUURQREVcUBYXFHFDFhWVRUUWAVmCa63V2ro0qK1rtUwCJAQSdsKa5fv7I/H5UR6RkJnkzEzu13XlYjI5mXPPV7w9npn5HHPOISIi4S/K6wAiIhIcKnQRkQihQhcRiRAqdBGRCKFCFxGJECp0EZEIoUIXEYkQKnQRkQihQhcRiRAxDbmztm3burS0tIbcpYhI2Fu9evVm51zykbZr0EJPS0sjLy+vIXcpIhL2zGxtbbbTKRcRkQihQhcRiRAqdBGRCKFCFxGJECp0EZEIoUIXEYkQKnQRkQgRFoW+++OP2Tp3Lq6y0usoIiIhKywKfdfrr7PpgQdZ238A+//zH6/jiIiEpLAo9PZ3302nyQ9xYO1a8nteTOmMGbgDB7yOJSISUsKi0M2MlllZ+Fbl0vz889n8xFTye/dh7+dfeB1NRCRkhEWhfy+mTRtSHn2E1BnTqdy2jYK+fdk0eTJVe/d6HU1ExHNhVejfa37uufhyV9KqVy+2PjcLf04Ouz/+2OtYIiKeCstCB4hu0YKO995Dlzmzocqx7oqBFI8fT2VZmdfRREQ8EbaF/r3EM87At3wZrQcNYvuil/FnZrHrL3/xOpaISIM7YqGb2SwzKzGz//MKpJmNMjNnZm3rJ17tRDVtSvvbbyNt/ktEN29G4dDrKLp1NBXbtnkZS0SkQdXmCH0OcOGhd5pZZ+B8YF2QM9VZk5NPJn3JEtoOH87O11/Hf1F3dqxahXPO62giIvXuiIXunHsP2PoDP3oMGA2EVFtaXBzJN1xP+uLFxKamsuGWURQOG075pk1eRxMRqVd1OoduZtlAkXPun0HOEzQJxx1L2oL5tBs9mt0ffIC/eybbFi3S0bqIRKyjLnQzawqMAcbWcvshZpZnZnmlpaVHu7uAWHQ0ba66Et/yZSQcfzwbx45j3aArObAuZM4SiYgETV2O0LsB6cA/zawASAU+MbMOP7Sxc26mcy7DOZeRnHzEi1bXi7iuXekyZzYd7pnAvi+/xJ/dgy2z52jYl4hElKMudOfc5865ds65NOdcGlAInOac2xj0dEFkUVEk9emDb1UuiWeeScmkSRT068++b7/1OpqISFDU5m2L84EPgOPMrNDMBtd/rPoT2749qTOm0+mRhylfv578XpdQOnWahn2JSNizhnyRMCMjw+Xl5TXY/o6kYts2Nt0/kZ25ucQf8xM63n8/TU46yetYIiL/xcxWO+cyjrRd2H9SNBAxSUmkPDyZ1CdnULlzFwWX9mPTg5M07EtEwlKjLvTvNT/nnOphX717s3XOHPzZPdj94UdexxIROSoq9BrRzZvTccJ4usydC1HGukGDKL57LJW7dnkdTUSkVlToh0j85en4li2j9eCr2L5kCf7umez685+9jiUickQq9B8Q1aQJ7W+9lbSFC4lu1YrCYcMpuvlmKrZs8TqaiMhhqdB/RJOfn0j64pdpO+IGdr71J/zdM9mxcqXGB4hISFKhH4HFxZE8bBi+pUuI7dqFDbeOpnDodZQXF3sdTUTkv6jQayn+mGNIe+kl2t9xO7s//hh/ZhbbFizAVVV5HU1EBFChHxWLjqb1wIH4Viwn4aSfs3H8BNYNHMSBggKvo4mIqNDrIq5zZ7rMmkXH++9j3zff4O+Rw5bnnsNVVHgdTUQaMRV6HZkZrXr1wpebS+LZZ1My+WEK+l7Kvm++8TqaiDRSKvQAxbZvR+q0qaQ8/hjlGzeSf0lvSqZMoUrDvkSkganQg8DMaHHhhfhyV9Ky+0VsefIp8ntezJ5PP/U6mog0Iir0IIpJSqLTpEl0nvk0VXv2sLb/ADZOnEjVnj1eRxORRkCFXg+a/eY3+FauJKlfP7Y9/wL+rGx2//3vXscSkQinQq8n0c0S6TD2brq++AIWE8O6qwazYcwYKnfs8DqaiEQoFXo9a5qRQfryZbS55hp2LFvOmsxMdr71ltexRCQCqdAbQFRCAu1uuZm0hQuJadOWohtGUDjyJio2b/Y6mohEkNpcU3SWmZWY2RcH3TfZzL4xs3+Z2Stm1qp+Y0aGJieeQPrLi0geOZKyt99mTfdMti9bpmFfIhIUtTlCnwNceMh9bwEnOudOAr4F7ghyrohlsbG0HXot6cuXEe/zUXz7Hawfci3lGzZ4HU1EwtwRC9059x6w9ZD73nTOff859w+B1HrIFtHifT66znuR9mPGsGf1avyZWWydN0/DvkSkzoJxDv0q4LUgPE6jY1FRtL78MnwrVtDklFPYdO99rL38Cvb7872OJiJhKKBCN7MxQAUw70e2GWJmeWaWV1paGsjuIlZcagqdn3uWjhMnsv+778jPyWHzzGdw5eVeRxORMFLnQjezgUAmMMD9yKt6zrmZzrkM51xGcnJyXXcX8cyMVhf3pNuqXJr99reUPvoo+X37su+rr7yOJiJhok6FbmYXArcB2c45fa49iGKSk0md+gQpU6ZQUVJKfu8+lDz2OFX793sdTURCXG3etjgf+AA4zswKzWwwMA1oDrxlZp+Z2VP1nLPRafGHC+iWu5KW2dlsefpp8nN6sueTT7yOJSIhzBryPdAZGRkuLy+vwfYXKcre/xsbx46lvLiYpAEDaHfTSKISE72OJSINxMxWO+cyjrSdPikaBpqdfRa+lStIGjCAbfPmsSYri7K/vu91LBEJMSr0MBGVmEiHu8bQdd6LRMUnsP6aa9hw+x1Ubt/udTQRCREq9DDT9LTTSF/2Cm2GXsuOlStZk5nFzjfe9DqWiIQAFXoYioqPp93IkaQvfpmYdskU3XgjhTeMoLykxOtoIuIhFXoYS/jZz0hftIjkW26m7N138WdmsX3pKxr2JdJIqdDDnMXE0Paaa0hftoz4Y46h+M47WT/4ag4UFnkdTUQamAo9QsT70un6wvO0H3s3ez/7DH92NluffwFXWel1NBFpICr0CGJRUbTu3x/fyhU0/cUv2DRxImsvu5z9a9Z4HU1EGoAKPQLFpqTQeebTdJr0IAf8fvJzerL5qac07EskwqnQI5SZ0bJHD3yrcml23u8pfXwK+b37sPfLL72OJiL1RIUe4WLatiX1scdInTaVii2bKejTl5JHHqFq3z6vo4lIkKnQG4nm551Ht9xcWvbMYcszz1YP+9JcHZGIokJvRKJbtqTTfffRZdZzuPJy1l52ORvvuYfKsjKvo4lIEKjQG6HEX/0K38oVtB54BdvmL8CflU3Ze+95HUtEAqRCb6Simjal/R130PWleUQlNmX9kGvZcNttVGzb5nU0EakjFXoj1/TUU0lfupS2w65jx6pX8XfPZOdrr2l8gEgYUqELUXFxJI8YQfqSxcR27EjRTTdTeP0NlG/SsC+RcKJCl/+VcNxxpC1cQLtbR7H7/ffxZ2ayffFiHa2LhInaXFN0lpmVmNkXB93X2szeMrPvav5Mqt+Y0lAsJoY2gwfjW76MhOOOo/iuu1l35VUcWL/e62gicgS1OUKfA1x4yH23A287544B3q75XiJIXFoaXZ6fS4fx49n3+ef4s3uwde5cDfsSCWFHLHTn3HvA1kPu7gHMrbk9F8gJci4JARYVRdKlffGtyiXx9NPZ9MCDFPTvz/7vvvM6moj8gLqeQ2/vnCsGqPmz3eE2NLMhZpZnZnmlpaV13J14KbZDB1KfepJOkydTvnYd/ot7UTpjBu7AAa+jichB6v1FUefcTOdchnMuIzk5ub53J/XEzGiZlYnv1VW0OP98Nj8xlfxLerP388+9jiYiNepa6JvMrCNAzZ96f1sjEdO6NSmPPkLqjOlUbt9OQd9L2fTQZKr27vU6mkijV9dCXwEMrLk9EFgenDgSLpqfey6+Vbm06tWLrbNm4c/JYfdHH3sdS6RRq83bFucDHwDHmVmhmQ0GHgTON7PvgPNrvpdGJrp5czreew9d5syGKse6gQMpHjeeyl27vI4m0ihZQ35oJCMjw+VpZGtEqtq7l9InprJ17lxikpPpMGE8zX/3O69jiUQEM1vtnMs40nb6pKgERVSTJrS/bTRpC+YT3aIFhUOvo2jUrVRsPfQdryJSX1ToElRNTjqJ9CWLaXv99ex84w383TPZkbtK4wNEGoAKXYLO4uJIvn549bCvzp3ZMGoUhdcNo3zjRq+jiUQ0FbrUm4RjjyVt/ku0u+02dn/4If7MLLYtXISrqvI6mkhEUqFLvbLoaNpcOQjfiuUknHACG8eNY92gKzmwdq3X0UQijgpdGkRcly50mTObDvfew76vvsLfI4cts2Zr2JdIEKnQpcGYGUm9e1cP+zrzTEoeeoiCS/ux79tvvY4mEhFU6NLgYtu3J3XGdFIefYTyoiLye11C6dRpVGnYl0hAVOjiCTOjxUUX4VuVS4sLL2Tz9OkU9OrF3n/+0+toImFLhS6eiklKImXyQ6Q+9SSVu8oouLQfmx54kKo9e7yOJhJ2VOgSEpr/7nf4clfS6tK+bJ07F3+PHHZ/+KHXsUTCigpdQkZ0s2Z0HDeOLs/PhShj3aArKb77bip37vQ6mkhYUKFLyEk8/XR8y5fT5urBbF+yFH9mFrv+/GevY4mEPBW6hKSohATajRpF2sKFRLdqReGw4RTdfDMVW7Z4HU0kZKnQJaQ1+fmJpC9+meQbR7DrrT/hv6g7O1as0LAvkR+gQpeQZ3FxtL3uOtJfWUpcWhobRt/G+qFDKS8u9jqaSEhRoUvYiP/JT+j60jza33kHez7+R/Wwr/nzNexLpEZAhW5mN5nZl2b2hZnNN7OEYAUT+SEWHU3rK67At3IFTU4+iY0T7mHdFQM5UFDgdTQRz9W50M0sBRgBZDjnTgSigUuDFUzkx8SlptL5uefoeP997Pv3v6uHfT37LK6iwutoIp4J9JRLDNDEzGKApsCGwCOJ1I6Z0apXL3y5uST++mxKHn6Egj592ffNN15HE/FEnQvdOVcEPAysA4qBHc65N4MVTKS2Ytu3I3XqVFIef5zyTZvIv6Q3JVOmaNiXNDqBnHJJAnoA6UAnINHMLvuB7YaYWZ6Z5ZWWltY9qciPMDNaXPgHfLkradm9O1uefIr8nhez59NPvY4m0mACOeVyHpDvnCt1zpUDS4FfHbqRc26mcy7DOZeRnJwcwO5EjiwmKYlOkx6k8zMzqdq7h7X9B7Bx4kSqdu/2OppIvQuk0NcBZ5hZUzMz4PfA18GJJRKYZr/+Nb4VK0nq149tz7+AP7sHZX/7m9exROpVIOfQPwIWA58An9c81swg5RIJWHSzRDqMvZuuL76AxcayfvDVbBgzhsodO7yOJlIvrCE/Qp2RkeHy8vIabH8i36vav5/N06azZdYsolsn0WHsWFqcf77XsURqxcxWO+cyjrSdPikqjUJUfDztbrmZtEULiWmbTNENIyi8cSQVeqFeIogKXRqVJiecQPqihSTfdBNl77zDmswsti9bpmFfEhFU6NLoWGwsba8dQvqyV4j3+Si+/Q7WXzOE8qIir6OJBESFLo1WvM9H13kv0v6uu9jzySf4s7LZOm+ehn1J2FKhS6NmUVG0vmwAvhUraHLqqWy69z7WXnY5+/35XkcTOWoqdBEgLjWFzs8+Q8cHHmD/mjXk5+Sw+emZuPJyr6OJ1JoKXaSGmdGqZw7dclfS7JxzKH3sMfL79mXfV195HU2kVlToIoeISU4mdcrjpDwxhYqSUvJ796Hk0ceo2r/f62giP0qFLnIYLS64gG6rcmnZowdbZs4kP6cnez75xOtYIoelQhf5EdEtW9Jp4v10fvZZ3P79rB1wGRvvvY/KMg37ktCjQhephWZnn4Vv5QqSLruMbS+9hD87i7K/vu91LJH/okIXqaWoxEQ6jLmTrvPmEZXQhPXXXMOG226ncvt2r6OJACp0kaPW9LRTSX9lKW2GXsuOVatY0z2Tna+/4XUsERW6SF1ExcfTbuRI0l9eRGz79hSNHEnhDSMoLynxOpo0Yip0kQAk/OxnpC1aSPItN1P27rv4M7PYvmSphn2JJ1ToIgGymBjaXnMN6cuXEX/sMRSPGcP6wVdzoLDQ62jSyKjQRYIkPj2drs8/T4dxY9n72WfVw76efwFXWel1NGkkVOgiQWRRUST164cvdyVN/yeDTRMnsnbAZexfs8braNIIBFToZtbKzBab2Tdm9rWZnRmsYCLhLLZTJzo//TSdHprEgfx88nN6svmppzTsS+pVoEfoU4DXnXM/BU4Gvg48kkhkMDNaZmfje3UVzc77PaWPTyH/kt7s/eJLr6NJhKpzoZtZC+A3wHMAzrkDzjl9wkLkEDFt2pD62GOkTptK5datFPTtS8kjj1C1b5/X0STCBHKE7gNKgdlm9qmZPWtmiUHKJRJxmp93Hr5VubTsmcOWZ54lv0cOe/7xD69jSQQJpNBjgNOAJ51zpwK7gdsP3cjMhphZnpnlleoK69LIRbdoQaf77qPL7Fm4ykrWXn4FxRMmUFlW5nU0iQCBFHohUOic+6jm+8VUF/x/cc7NdM5lOOcykpOTA9idSORIPPNMfCuW03rgQLYvWIg/K5uyd9/1OpaEuToXunNuI7DezI6ruev3gC7tIlJLUU2b0v6O20mb/xJRiU1Zf+1QikaPpmLbNq+jSZgK9F0uNwDzzOxfwCnAxMAjiTQuTU45hfSlS2k7bBg7X30Nf/dMdr72msYHyFELqNCdc5/VnE45yTmX45zToYVIHUTFxZE84gbSlywmtlMnim66mcLrb6B8k4Z9Se3pk6IiISThuONIWzCfdrfeyu7338efmcm2l1/W0brUigpdJMRYTAxtBl+Fb8VyEn76UzbePZZ1V17FgfXrvY4mIU6FLhKi4rp2pcvcOXSYMIF9n3+OPyubLXPmaNiXHJYKXSSEWVQUSX374FuVS+Ivf0nJg5Mo6N+f/d9953U0CUEqdJEwENuhA6lPPUmnhx+mfN16/Bf3onT6dNyBA15HkxCiQhcJE2ZGy8zu+Fbl0uKCC9g8dRr5vS5h7+efex1NQoQKXSTMxLRuTcojD5M6YwaVO3dS0PdSNk16iKq9e72OJh5ToYuEqebnnoMvdyWtevdm6+zZ+HvksPujj72OJR5SoYuEsejmzek4YTxd5swBYN3AgRSPHUflrl3eBhNPqNBFIkDiGb/Et3wZra+6iu2LF+PPzGLXO+94HUsamApdJEJENWlC+9G3krZgPtEtWlB43TCKbhlFxdatXkeTBqJCF4kwTU46ifQli2l7w/XsfPNN/N0z2ZG7SuMDGgEVukgEsrg4kocPx7d0CbFdOrNh1CgKrxtG+caNXkeTeqRCF4lg8cccQ9pLL9Hu9tvY/eGH+Ltnsm3BQlxVldfRpB6o0EUinEVH02bQIHwrV5Dw85+zcfx41g26kgNr13odTYJMhS7SSMR17kyX2bPocO897PvqK/zZPdjy3CxcRYXX0SRIVOgijYiZkdS7d/Wwr7POomTyZAr69Wffv7/1OpoEgQpdpBGKbd+e1OnTSHnsUcqLisjv1YvSJ6ZSpWFfYS3gQjezaDP71MxygxFIRBqGmdHij3+sHvZ10R/ZPGMG+RdfzN7PPvM6mtRRMI7QbwS+DsLjiIgHYpKSSHnoITo//RRVZbsp6NefTQ88SNWePV5Hk6MUUKGbWSrQHXg2OHFExCvNfvvb6mFfl/Zl69y5+LN7sPuDD7yOJUch0CP0x4HRwGHf1GpmQ8wsz8zySktLA9ydiNSn6GbN6DhuHF1feB6LjmbdlVdRfPfdVO7c6XU0qYU6F7qZZQIlzrnVP7adc26mcy7DOZeRnJxc192JSANq+j//Q/ryZbS5ejDblyzF3z2TXW+/7XUsOYJAjtDPArLNrABYAJxrZi8GJZWIeC4qIYF2o0aRtnAh0a1bUzj8egpvuomKzZu9jiaHUedCd87d4ZxLdc6lAZcCf3bOXRa0ZCISEpr8/ETSF79M8sgbKfvT29XDvlas0LCvEKT3oYvIEVlsLG2HDiV92SvEpaezYfRtrL/2Wso3bPA6mhwkKIXunPuLcy4zGI8lIqErvls3us57kfZ33smef+Thz8xi2/z5GvYVInSELiJHxaKjaX3F5fhWrqDJKSezccI9rL3iCvbn53sdrdFToYtIncSlptL5uefoeP/97P/2O/JzerLl2Wc17MtDKnQRqTMzo1Wvi/HlrqTZb35NycOPUNCnL/u++cbraI2SCl1EAhbbrh2pU6eSMmUK5SUl5F/Sm5LHH6dq/36vozUqKnQRCZoWf7iAbrkraZmZyZannia/58Xs+eRTr2M1Gip0EQmq6Fat6PTgA3R+5hmq9u1l7YABbLx/IlW7d3sdLeKp0EWkXjT79dn4VqwkqX9/tr3wAv7sHpT97W9ex4poKnQRqTfRzRLpcPdddJ33IhYXx/rBV7PhzjFU7tjhdbSIpEIXkXrX9Be/IH3ZK7QZMoQdy5ezJjOTnW++6XWsiKNCF5EGERUfT7ubbyL95UXEtE2maMSNFI64kQqN1Q4aFbqINKiE448nfdFCkm+6ibK//IU1mVlsf2WZhn0FgQpdRBqcxcbS9tohpC97hfhu3Si+4w7WXzOE8qIir6OFNRW6iHgm3uej64sv0P7uu9j7ySesycpm64vzNOyrjlToIuIpi4qi9YAB+FauoOlpp7HpvvtYe9nl7Pf7vY4WdlToIhISYlNS6PzMTDo++AD716whv0cOm596Glde7nW0sKFCF5GQYWa0ysmh26pcmp17LqWPP05+n77s++orr6OFBRW6iIScmLZtSZ3yOClPTKFicyn5vftQ8sijGvZ1BCp0EQlZLS64gG65ubTs0YMtzzxDfo8c9qxe7XWskFXnQjezzmb2jpl9bWZfmtmNwQwmIgIQ3bIlnSbeT+fnnsWVl7N2wGVsvOdeKss07OtQgRyhVwC3OOd+BpwBDDez44MTS0TkvzU76yx8K5aTdMXlbJs/H392FmV//avXsUJKnQvdOVfsnPuk5vYu4GsgJVjBREQOFZWYSIc776TrS/OIatKU9dcMYcNtt1OxbZvX0UJCUM6hm1kacCrw0Q/8bIiZ5ZlZXqlmNohIEDQ99VTSX1lKm+uGsmPVKvyZWex8/Y1GPz4g4EI3s2bAEmCkc27noT93zs10zmU45zKSk5MD3Z2ICABRcXG0u/FG0he/TGyHDhSNHEnRiBGUl5R4Hc0zARW6mcVSXebznHNLgxNJRKT2En76U9IWLqDdqFsoe++v+DOz2L5kaaM8Wg/kXS4GPAd87Zx7NHiRRESOjsXE0Obqq0lf9goJxx5L8ZgxrB88mAOFhV5Ha1CBHKGfBVwOnGtmn9V8XRSkXCIiRy0+PZ0uz8+lw/hx7P3nv/BnZbP1+edxlZVeR2sQ1pD/W5KRkeHy8vIabH8i0niVFxdTPG4cu9/7K01OOYWO991L/E9+4nWsOjGz1c65jCNtp0+KikhEiu3Ykc5PP02nyQ9xoKCA/J4Xs/nJJyN62JcKXUQilpnRMisL36pcmp9/HqVTniD/kt7s/eJLr6PVCxW6iES8mDZtSHn0UVKnT6Ny2zYK+vSh5OGHqdq3z+toQaVCF5FGo/nvf48vdyWtevViy7PPkd8jh90ff+x1rKBRoYtIoxLdogUd772HLnNm46qqWHfFQIrHj6eyrMzraAFToYtIo5R4xhn4li+j9aBBbF/0Mv7MLMrefdfrWAFRoYtIoxXVtCntb7+NtPkvEdUskfXXDqXo1tFhO+xLhS4ijV6Tk08mfelS2g4fzs7XXsPfPZOdr74aduMDVOgiIlQP+0q+4XrSlywhNiWFoptvoXD49ZRv2uR1tFpToYuIHCThuGNJWzCfdqNHs/vvf8ffPZNtixaFxdG6Cl1E5BAWHU2bq67Et3wZCccfz8ax41g36EoOrFvndbQfpUIXETmMuK5d6TJnNh0mTGDfl1/iz+7BltlzQnbYlwpdRORHWFQUSX374MtdSeIZZ1AyaRIF/fqz79tvvY72f6jQRURqIbZDB1KfnEGnRx6mfP168ntdQum06bgDB7yO9r9U6CIitWRmtOzeHd+rq2jxhz+wedo08ntdwt5//cvraIAKXUTkqMUkJZHy8GRSn5xB5c6dFFzaj02THqJq715Pc6nQRUTqqPk551QP++rdm62zZ+PP7sHuDz/yLE+gF4m+0Mz+bWb/MbPbgxVKRCRcRDdvTscJ4+kydy6YsW7QIIrHjqNy164GzxLIRaKjgenAH4HjgX5mdnywgomIhJPEX55ePezrqqvYvngx/u6Z7PrzOw2aIZAj9NOB/zjn/M65A8ACoEdwYomIhJ+oJk1oP/pW0hYuILpVKwqHDaPollFUbN3aIPuPCeB3U4D1B31fCPwysDg/7C/DnqJlXOv6eGgRkfrhGwA+2FcJJff8iR0HtvK7GUPrdZeBHKHbD9z3f4YdmNkQM8szs7zS0tIAdiciIj8mkCP0QqDzQd+nAhsO3cg5NxOYCZCRkVGn6Tb1/V81EZFIEMgR+j+AY8ws3czigEuBFcGJJSIiR6vOR+jOuQozux54A4gGZjnnvgxaMhEROSqBnHLBOfcq8GqQsoiISAD0SVERkQihQhcRiRAqdBGRCKFCFxGJECp0EZEIYQ15JWszKwXWBvAQbYHNQYoTabQ2h6e1OTytzeGF0tp0dc4lH2mjBi30QJlZnnMuw+scoUhrc3ham8PT2hxeOK6NTrmIiEQIFbqISIQIt0Kf6XWAEKa1OTytzeFpbQ4v7NYmrM6hi4jI4YXbEbqIiBxGSBT6kS42bWY3m9lXZvYvM3vbzLoe9LOHzOxLM/vazJ4wsx+68EbYCnBtJpnZFzVffRs2ecOoxfoMNbPPzewzM3v/4OvemtkdNb/3bzP7Q8Mmr391XRsza2Nm75hZmZlNa/jk9S+AtTnfzFbX/Gy1mZ3b8Ol/hHOqoykaAAADBklEQVTO0y+qR++uAXxAHPBP4PhDtjkHaFpz+zpgYc3tXwF/q3mMaOAD4HdeP6cQWZvuwFtUT9RMBPKAFl4/Jw/Wp8VBt7OB12tuH1+zfTyQXvM40V4/pxBZm0TgbGAoMM3r5xJia3Mq0Knm9olAkdfP5+CvUDhCP+LFpp1z7zjn9tR8+yHVV0eC6kveJVD9DyUeiAU2NUjqhhHI2hwPvOucq3DO7ab6L+2FDZS7odRmfXYe9G0i//8yiT2ABc65/c65fOA/NY8XKeq8Ns653c6594F9DRW2gQWyNp86576/MtuXQIKZxTdA5loJhUL/oYtNp/zI9oOB1wCccx8A7wDFNV9vOOe+rqecXqjz2lBd4H80s6Zm1pbqI/nOh/3N8FSr9TGz4Wa2BngIGHE0vxvGAlmbSBestekFfOqc218vKesgFAq9VhebBjCzy4AMYHLN9z8Bfkb1UWkKcK6Z/aaecnqhzmvjnHuT6ouP/B2YT/XpqIr6iemZWq2Pc266c64bcBtw19H8bhgLZG0iXcBrY2YnAJOAa+slYR2FQqHX6mLTZnYeMAbIPui/iD2BD51zZc65MqqPTs+o57wNKZC1wTl3v3PuFOfc+VT/Jf6unvM2tFqtz0EWADl1/N1wE8jaRLqA1sbMUoFXgCucc2vqJWFdeX0Sn+oX7fxUvzD1/QsUJxyyzalUv4hxzCH39wX+VPMYscDbQJbXzylE1iYaaFNz+yTgCyDG6+fkwfocc9DtLCCv5vYJ/PeLon4i60XROq/NQfcNIjJfFA3k702rmu17ef08fvC5eR2gZpEuAr6tKaYxNffdQ/URJzWlvQn4rOZrRc390cDTwNfAV8CjXj+XEFqbhJo1+YrqF0tP8fq5eLQ+U6h+8eozql9vOeGg3x1T83v/Bv7o9XMJsbUpALYCZVQf0R7f0PlDcW2oPvWy+6B/3z4D2nn9fL7/0idFRUQiRCicQxcRkSBQoYuIRAgVuohIhFChi4hECBW6iEiEUKGLiEQIFbqISIRQoYuIRIj/B+EBGGgFsSMvAAAAAElFTkSuQmCC\n",
"text/plain": [
"