{ "cells": [ { "cell_type": "markdown", "id": "c1084315", "metadata": {}, "source": [ "# 1-1,结构化数据建模流程范例" ] }, { "cell_type": "code", "execution_count": null, "id": "3922d854-7272-41fa-b70b-15fe0bdb01fc", "metadata": { "lines_to_next_cell": 2 }, "outputs": [], "source": [ "!pip install torch\n", "!pip install 'torchkeras>=4.0.0'" ] }, { "cell_type": "code", "execution_count": 1, "id": "83c3b159", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.__version__ = 2.4.0\n", "torchkeras.__version__ = 4.0.0\n" ] } ], "source": [ "import torch \n", "import torchkeras \n", "print(\"torch.__version__ = \", torch.__version__)\n", "print(\"torchkeras.__version__ = \", torchkeras.__version__) " ] }, { "cell_type": "markdown", "id": "29bd80bf", "metadata": {}, "source": [ "
\n", "\n", "\n", " \n", "公众号 **算法美食屋** 回复关键词:**pytorch**, 获取本项目源码和所用数据百度云盘下载链接。\n", " \n", " \n" ] }, { "cell_type": "markdown", "id": "021a78c0", "metadata": {}, "source": [ "### 一,准备数据" ] }, { "cell_type": "markdown", "id": "22985769", "metadata": {}, "source": [ "titanic数据集的目标是根据乘客信息预测他们在Titanic号撞击冰山沉没后能否生存。\n", "\n", "结构化数据一般会使用Pandas中的DataFrame进行预处理。\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "af13fa86", "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", "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
049301Molson, Mr. Harry Marklandmale55.00011378730.5000C30S
15311Harper, Mrs. Henry Sleeper (Myna Haxtun)female49.010PC 1757276.7292D33C
238812Buss, Miss. Katefemale36.0002784913.0000NaNS
319202Carbines, Mr. Williammale19.0002842413.0000NaNS
468703Panula, Mr. Jaako Arnoldmale14.041310129539.6875NaNS
51612Hewlett, Mrs. (Mary D Kingcome)female55.00024870616.0000NaNS
622803Lovell, Mr. John Hall (\"Henry\")male20.500A/5 211737.2500NaNS
788402Banfield, Mr. Frederick Jamesmale28.000C.A./SOTON 3406810.5000NaNS
816803Skoog, Mrs. William (Anna Bernhardina Karlsson)female45.01434708827.9000NaNS
975213Moor, Master. Meiermale6.00139209612.4750E121S
\n", "
" ], "text/plain": [ " PassengerId Survived Pclass \\\n", "0 493 0 1 \n", "1 53 1 1 \n", "2 388 1 2 \n", "3 192 0 2 \n", "4 687 0 3 \n", "5 16 1 2 \n", "6 228 0 3 \n", "7 884 0 2 \n", "8 168 0 3 \n", "9 752 1 3 \n", "\n", " Name Sex Age SibSp \\\n", "0 Molson, Mr. Harry Markland male 55.0 0 \n", "1 Harper, Mrs. Henry Sleeper (Myna Haxtun) female 49.0 1 \n", "2 Buss, Miss. Kate female 36.0 0 \n", "3 Carbines, Mr. William male 19.0 0 \n", "4 Panula, Mr. Jaako Arnold male 14.0 4 \n", "5 Hewlett, Mrs. (Mary D Kingcome) female 55.0 0 \n", "6 Lovell, Mr. John Hall (\"Henry\") male 20.5 0 \n", "7 Banfield, Mr. Frederick James male 28.0 0 \n", "8 Skoog, Mrs. William (Anna Bernhardina Karlsson) female 45.0 1 \n", "9 Moor, Master. Meier male 6.0 0 \n", "\n", " Parch Ticket Fare Cabin Embarked \n", "0 0 113787 30.5000 C30 S \n", "1 0 PC 17572 76.7292 D33 C \n", "2 0 27849 13.0000 NaN S \n", "3 0 28424 13.0000 NaN S \n", "4 1 3101295 39.6875 NaN S \n", "5 0 248706 16.0000 NaN S \n", "6 0 A/5 21173 7.2500 NaN S \n", "7 0 C.A./SOTON 34068 10.5000 NaN S \n", "8 4 347088 27.9000 NaN S \n", "9 1 392096 12.4750 E121 S " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np \n", "import pandas as pd \n", "import matplotlib.pyplot as plt\n", "import torch \n", "from torch import nn \n", "from torch.utils.data import Dataset,DataLoader,TensorDataset\n", "\n", "dftrain_raw = pd.read_csv('./eat_pytorch_datasets/titanic/train.csv')\n", "dftest_raw = pd.read_csv('./eat_pytorch_datasets/titanic/test.csv')\n", "dftrain_raw.head(10)\n" ] }, { "cell_type": "markdown", "id": "a7edf254", "metadata": {}, "source": [ "字段说明:\n", "\n", "* Survived:0代表死亡,1代表存活【y标签】\n", "* Pclass:乘客所持票类,有三种值(1,2,3) 【转换成onehot编码】\n", "* Name:乘客姓名 【舍去】\n", "* Sex:乘客性别 【转换成bool特征】\n", "* Age:乘客年龄(有缺失) 【数值特征,添加“年龄是否缺失”作为辅助特征】\n", "* SibSp:乘客兄弟姐妹/配偶的个数(整数值) 【数值特征】\n", "* Parch:乘客父母/孩子的个数(整数值)【数值特征】\n", "* Ticket:票号(字符串)【舍去】\n", "* Fare:乘客所持票的价格(浮点数,0-500不等) 【数值特征】\n", "* Cabin:乘客所在船舱(有缺失) 【添加“所在船舱是否缺失”作为辅助特征】\n", "* Embarked:乘客登船港口:S、C、Q(有缺失)【转换成onehot编码,四维度 S,C,Q,nan】\n" ] }, { "cell_type": "markdown", "id": "9a726f38", "metadata": {}, "source": [ "利用Pandas的数据可视化功能我们可以简单地进行探索性数据分析EDA(Exploratory Data Analysis)。\n", "\n", "label分布情况" ] }, { "cell_type": "code", "execution_count": 3, "id": "78e13165", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABAEAAAKzCAYAAABvURRcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA8nUlEQVR4nO3dfZTXdZ3//8eowADDhVxkIoiKSksuIiilphJREkgoom6Xprabpbv6xdLsSBdKB1fTla929c3UrFVLcHUV1xY0ZSPQlNTMBDTlwkpRGYarGUzm98ce5ufEgDAOzMjrdjtnzmle7/fr/X5+2nN2+tz5XFTU19fXBwAAANjl7dbaAwAAAAA7hwgAAAAAhRABAAAAoBAiAAAAABRCBAAAAIBCiAAAAABQCBEAAAAACiECAAAAQCH2aO0BdjUbN27Mn/70p3Tp0iUVFRWtPQ4AAAC7uPr6+qxevTp9+vTJbrtt/d/6RYAW9qc//Sn9+vVr7TEAAAAozLJly9K3b9+tniMCtLAuXbok+d//8rt27drK0wAAALCrq6mpSb9+/Rqej26NCNDCNr0FoGvXriIAAAAAO822vCXdBwMCAABAIUQAAAAAKIQIAAAAAIUQAQAAAKAQIgAAAAAUQgQAAACAQogAAAAAUAgRAAAAAAohAgAAAEAhRAAAAAAohAgAAAAAhRABAAAAoBAiAAAAABRCBAAAAIBCiAAAAABQCBEAAAAACiECAAAAQCFEAAAAACiECAAAAACFEAEAAACgECIAAAAAFEIEAAAAgEKIAAAAAFAIEQAAAAAKIQIAAABAIUQAAAAAKMQerT0AtHX7fWVma48AbMULl49t7REAAN4xvBIAAAAACiECAAAAQCFEAAAAACiECAAAAACFEAEAAACgECIAAAAAFEIEAAAAgEKIAAAAAFAIEQAAAAAKIQIAAABAIUQAAAAAKIQIAAAAAIUQAQAAAKAQIgAAAAAUQgQAAACAQogAAAAAUAgRAAAAAAohAgAAAEAhRAAAAAAohAgAAAAAhRABAAAAoBAiAAAAABRCBAAAAIBCiAAAAABQCBEAAAAACiECAAAAQCFEAAAAACiECAAAAACFEAEAAACgECIAAAAAFEIEAAAAgEKIAAAAAFAIEQAAAAAKIQIAAABAIUQAAAAAKIQIAAAAAIV4x0SAV199Ne9617tSUVGRAw88cKvn3nTTTRk+fHiqqqrSo0ePjBkzJr/+9a+3umfu3LkZM2ZMevTokaqqqgwfPjw333xzSz4EAAAAaFXvmAhwwQUX5JVXXnnL884///ycccYZeeqppzJq1KgMHz48s2bNyrHHHps777yzyT0zZszIcccdl/vuuy+DBw/O6NGjs3jx4px++un50pe+1MKPBAAAAFrHOyIC3H///fnxj3+cf/zHf9zqebNnz860adPSs2fPPPHEE7nzzjtz3333Zc6cOdl9991zxhlnpLq6utGe1157LWeeeWbeeOONTJ8+PQ8++GCmT5+eZ555JgceeGCuuuqqPPjggzvuwQEAAMBO0uYjwPr16/P5z38+gwYNest/lb/66quTJJdcckkOOuighvUjjzwyZ599dqqrq/OjH/2o0Z7rr78+NTU1GT9+fCZMmNCwvtdee+WKK65Iklx11VUt9XAAAACg1bT5CPDNb34zf/zjH/P9738/7dq12+J569evzwMPPJAkmThx4mbHN63dfffdjdZnzpy5xT1jx45NZWVlZs+endra2mY/BgAAAGgL2nQEePLJJ3PVVVfljDPOyDHHHLPVcxcuXJi6urr07t07ffv23ez40KFDG675Zk888USj42/Wvn37HHLIIamtrc2iRYua+zAAAACgTWizEWDjxo353Oc+l+7duze8LH9rli5dmiRNBoAk6dy5c7p3756VK1dm9erVSZKampqsWrVqq/s2rS9ZsmS7HwMAAAC0JXu09gBbcu211+Y3v/lNbrzxxvTs2fMtz1+zZk2SpFOnTls8p3Pnzqmurs7q1avTpUuXhj1b29e5c+ckaQgHf6uuri51dXUNv9fU1LzlrAAAANAa2uQrAZYuXZpLLrkkxx13XD772c+29jhbNXXq1HTr1q3hp1+/fq09EgAAADSpTUaAc845Jxs2bMj3v//9bd5TVVWVJFm3bt0Wz1m7dm2SpEuXLo32bG3f3+75WxdffHFWrVrV8LNs2bJtnhkAAAB2pjb5doB77rkn3bt3z9lnn91ofdMn9L/44osZMWJEkuS2227Lu9/97uy7775JkuXLlzd5zbVr16a6ujp77rlnwxP6rl27plu3blm1alWWL1+eQYMGbbZv0/X69+/f5HU7dOiQDh06bP+DBAAAgJ2sTUaAJKmurs5DDz3U5LHa2tqGY5vCwMCBA9OhQ4es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zEEHHdTwL/4LFy5MXV1devfunb59+262Z+jQoUmSJ598stH6E0880ej4m7Vv3z6HHHJIamtrs2jRopZ+GAAAALDT7dHaA7yVK6+8Mr///e+zdu3a/OEPf8jvf//79OnTJ7feemt23333JMnSpUuTpMkAkCSdO3dO9+7ds3LlyqxevTpdunRJTU1NVq1atdV9ffv2zaOPPpolS5Zk8ODBTZ5TV1eXurq6ht9ramqa/VgBAABgR2rzEeAXv/hF7r///obf+/fvn5tvvjnDhg1rWFuzZk2SpFOnTlu8TufOnVNdXd0QATbt2dq+zp07J0lWr169xetOnTo13/zmN7ftwQAAAEAravNvB5g9e3bq6+uzcuXKzJkzJwcddFCOO+64fOtb32rt0ZIkF198cVatWtXws2zZstYeCQAAAJrU5iPAJt27d88xxxyTe++9N8OGDcvkyZPzm9/8JklSVVWVJFm3bt0W969duzZJ0qVLl0Z7trbvb/c0pUOHDunatWujHwAAAGiL3jERYJN27drltNNOS319fcOn/e+7775JkuXLlze5Z+3atamurs6ee+7Z8IS+a9eu6dat21b3bVrv379/iz4GAAAAaA3vuAiQJL169UqSrFixIkkycODAdOjQIStWrMiLL7642fkLFixIks0+3O/QQw9tdPzNXn/99Tz11FOprKzMwQcf3KLzAwAAQGt4R0aAhx56KEkyYMCAJEnHjh0zcuTIJMntt9++2fnTp09PkowbN67R+tixYxsdf7N77rkntbW1GTVqVCorK1tueAAAAGglbTICzJ07N/fdd182btzYaP3111/Ptddem5/85Cfp2LFjTjvttIZjkyZNSpJMmTIlixcvblifN29efvCDH6R79+4566yzGl3vc5/7XLp27Zq77rord9xxR8P6yy+/nAsvvDBJcsEFF7T44wMAAIDW0Ca/InDx4sU544wz0qtXrwwbNiw9e/bMK6+8kt/97nf585//nMrKytx0003p169fw55Ro0blvPPOy7Rp0zJkyJB8+MMfzoYNGzJr1qzU19fnxhtvTPfu3Rvdp0ePHrnhhhty6qmnZuLEiRkxYkR69uyZ2bNnp7q6OpMmTcqIESN27oMHAACAHaSivr6+vrWH+FvPP/98rr/++jz00EP54x//mFdeeSXt27fPfvvtl5EjR+Zf/uVfcuCBBza596abbsp1112XP/zhD2nfvn3e//73Z/LkyTnqqKO2eL+5c+dmypQpmT9/fjZs2JBBgwbl3HPPzemnn77ds9fU1KRbt25ZtWqVbwrYRez3lZmtPQKwFS9cPra1RwAAaFXb8zy0TUaAdzIRYNcjAkDbJgIAAKXbnuehbfIzAQAAAICWJwIAAABAIUQAAAAAKIQIAAAAAIUQAQAAAKAQIgAAAAAUQgQAAACAQogAAAAAUAgRAAAAAAohAgAAAEAhRAAAAAAohAgAAAAAhRABAAAAoBAiAAAAABRCBAAAAIBCiAAAAABQCBEAAAAACiECAAAAQCFEAAAAACjEHq09AAAAu6b9vjKztUcAtuKFy8e29gi0Aq8EAAAAgEKIAAAAAFAIEQAAAAAKIQIAAABAIUQAAAAAKIQIAAAAAIUQAQAAAKAQIgAAAAAUQgQAAACAQogAAAAAUAgRAAAAAAohAgAAAEAhRAAAAAAohAgAAAAAhRABAAAAoBAiAAAAABRCBAAAAIBCiAAAAABQCBEAAAAACiECAAAAQCFEAAAAACiECAAAAACFEAEAAACgECIAAAAAFEIEAAAAgEKIAAAAAFAIEQAAAAAKIQIAAABAIUQAAAAAKIQIAAAAAIUQAQAAAKAQIgAAAAAUQgQAAACAQogAAAAAUAgRAAAAAAohAgAAAEAh9tgRF73vvvvy1FNPpV+/fpkwYULatWu3I24DAAAAbIdmvxLgu9/9bg444IDMnTu30fqpp56asWPH5qKLLsonPvGJHHPMMamtrX3bgwIAAABvT7MjwH/8x39k3bp1OfLIIxvW7rvvvkyfPj377LNPvvKVr2T48OH5zW9+kx/+8IctMiwAAADQfM1+O8DChQtzyCGHZLfd/v+OcNttt6WioiLTp0/P8OHDU1tbm/79++enP/1p/vmf/7lFBgYAAACap9mvBFixYkXe/e53N1p76KGH0q9fvwwfPjxJUllZmaOOOirPP//825sSAAAAeNuaHQG6deuWV155peH3559/PkuWLMmIESMande5c+esXbu22QMCAAAALaPZEeDAAw/MnDlzsnTp0iTJ//t//y8VFRUZPXp0o/OWL1++2SsGAAAAgJ2v2RHgC1/4QmprazN48OAMGzYsV1xxRXr37p0TTjih4Zz169fn0UcfzaBBg1pkWAAAAKD5mh0BPvnJT+aCCy5IXV1dfvvb32afffbJrbfemqqqqoZzfv7zn2fdunX50Ic+1CLDAgAAAM3X7G8HSJIrr7wyU6ZMSU1NTXr37r3Z8ZEjR+a3v/1tBgwY8HZuAwAAALSAZkeApUuXpqqqKj169GgyACRJv379UlVVlddee63RKwQAAACAna/ZbwfYf//98+Uvf/ktz7vwwgtzwAEHNPc2AAAAQAtpdgSor69PfX39Np8LAAAAtK5mR4Bt9corr6Rjx447+jYAAADAW9iuzwSYM2dOo9//8pe/bLa2yV//+tcsXLgwv/jFL/Le9763+RMCAAAALWK7IsCIESNSUVHR8PsvfvGL/OIXv9ji+fX19amoqMgFF1zQ/AkBAACAFrFdEeAzn/lMQwT48Y9/nAEDBuToo49u8tz27dunT58+GTduXIYOHfr2JwUAAADelu2KADfddFPDf/7xj3+cD3zgA7nhhhtaeiYAAABgB9iuCPBmGzdubMk5AAAAgB1sh387AAAAANA2NPuVAElSV1eXW2+9NXPmzMmf//zn1NXVNXleRUVF7r///rdzKwAAAOBtanYEePHFF/OhD30oixcvTn19/VbPffM3CgAAAACto9kR4Mtf/nIWLVqUo446KpMmTcrBBx+cLl26tORsAAAAQAtqdgT4xS9+kX333TezZ89OZWVlS84EAAAA7ADN/mDAurq6vO997xMAAAAA4B2i2RHg7//+7/PKK6+05CwAAADADtTsCHDRRRdlzpw5eeSRR1pyHgAAAGAHafZnAgwdOjSTJk3Khz70oUyaNCkf/vCH07dv3+y2W9NdYd999232kAAAAMDb1+wIsN9++6WioiL19fWZMmVKpkyZssVzKyoq8te//rW5twIAAABaQLMjwLHHHpuKioqWnAUAAADYgZodAR588MEWHAMAAADY0Zr9wYAAAADAO4sIAAAAAIVo9tsBLr300m0+t6KiIpMnT27urQAAAIAW0OwI8I1vfKPh2wGasulDA+vr60UAAAAAaAOaHQFuvPHGJtc3btyYZcuWZdasWZk7d27OOeecHH744c0eEAAAAGgZzY4Ap59++laPf+1rX8sVV1yRSy+9NP/0T//U3NsAAAAALWSHfjDghRdemL59++arX/3qjrwNAAAAsA12+LcD/P3f/31+9atf7ejbAAAAAG9hh0eA5557Ln/961939G0AAACAt7DDIsDKlStzwQUX5PHHH8/w4cN31G0AAACAbdTsDwY84IADtnhszZo1efXVV1NfX5+OHTtm6tSpzb0NAAAA0EKaHQFeeOGFLR5r165d+vXrl+OOOy4XXXRRBg0a1NzbAAAAAC2k2RFg48aNLTkHAAAAsIPt8A8GBAAAANqGFo0AK1euzMqVK1vykgAAAEALedsR4N57783xxx+fqqqq9OrVK7169UpVVVVGjx6de++9tyVmBAAAAFrA24oA/+f//J+MGzcus2bNyrp169K1a9d069Yt69aty3//939n3LhxmTRpUkvNCgAAALwNzY4AP/vZzzJt2rT07t07//f//t+GtwK89tprqa6uzrXXXpt3vetdmTZtWn7+85+35MwAAABAMzQ7Anz3u99NZWVl5syZk3PPPTfdunVrONa1a9ecc845eeihh9KhQ4d897vfbZFhAQAAgOZrdgR44oknMnLkyBx88MFbPOfggw/OyJEj8/jjjzf3NgAAAEALaXYE2LBhQzp37vyW53Xu3DkbNmxo7m0AAACAFtLsCDBgwIA89NBDWbt27RbPWbduXR566KEMGDCgubcBAAAAWkizI8Cpp56al19+OSeeeGIWL1682fHnnnsuEyZMyIoVK3Laaae9rSEBAACAt2+P5m780pe+lLvuuiv3339/Bg0alKFDh2a//fZLkixZsiSPPfZY3njjjRx++OG54IILWmpeAAAAoJmaHQE6duyYBx98MBdffHFuuOGG/OY3v8lvfvObRsfPPPPMTJ06NR07dmyRYQEAAIDma3YESJKqqqpce+21+dd//dc89thj+dOf/pQk6dOnT4YNG5ZOnTq1yJAAAADA27ddEeCBBx7I8uXLc/jhh2fQoEEN6506dcoxxxzT6Nynn346jz76aPr165cPfvCDLTMtAAAA0GzbHAGWLVuWsWPHpl+/fnnsscfe8vx+/frlpJNOyvLly7N48eL06dPnbQ0KAAAAvD3b/O0A119/fTZs2JArrrgiXbp0ecvzu3TpkiuvvDLr16/Pj370o7c1JAAAAPD2bXMEmDVrVnr37p0TTzxxmy/+sY99LHvttVf+67/+qzmzAQAAAC1omyPAM888kyOOOGK7b3D44Ydn4cKF270PAAAAaFnbHAHWrl2bbt26bfcNunXrljVr1mzXnnXr1uXOO+/MWWedlYEDB6aysjKdO3fOoYcemksvvXSr17vpppsyfPjwVFVVpUePHhkzZkx+/etfb/V+c+fOzZgxY9KjR49UVVVl+PDhufnmm7drZgAAAGjrtjkC7LnnnnnppZe2+wYvvfRS9txzz+3ac8stt+Skk07KDTfckN133z0f+9jHcswxx+T555/P17/+9RxxxBF5+eWXN9t3/vnn54wzzshTTz2VUaNGZfjw4Zk1a1aOPfbY3HnnnU3ea8aMGTnuuONy3333ZfDgwRk9enQWL16c008/PV/60pe2+/ECAABAW7XNEWDQoEGZP39+1q9fv80XX7duXebNm9fo6wS3Rbt27fJP//RPefrpp/P000/n5z//ee67774sXLgwhx12WJ555pmcf/75jfbMnj0706ZNS8+ePfPEE0/kzjvvzH333Zc5c+Zk9913zxlnnJHq6upGe1577bWceeaZeeONNzJ9+vQ8+OCDmT59ep555pkceOCBueqqq/Lggw9u1+wAAADQVm1zBDjhhBOydu3aTJkyZZsvPmXKlKxfvz7jxo3brqFOP/30/OAHP8jf/d3fNVrfe++9853vfCdJcscdd2TDhg0Nx66++uokySWXXJKDDjqoYf3II4/M2Wefnerq6s2+peD6669PTU1Nxo8fnwkTJjSs77XXXrniiiuSJFddddV2zQ4AAABt1TZHgLPPPjt77bVXLr/88kyZMiUbN27c4rkbN27MZZddlssvvzx77bVXPv/5z7fIsEly6KGHJknq6ury6quvJknWr1+fBx54IEkyceLEzfZsWrv77rsbrc+cOXOLe8aOHZvKysrMnj07tbW1LTY/AAAAtJY9tvXETp06ZcaMGRk1alS+/vWv54c//GFOOeWUDB06NL17906SrFixIgsWLMjtt9+e5cuXp7KyMjNmzEinTp1abOA//vGPSf73LQM9evRIkixcuDB1dXXp3bt3+vbtu9meoUOHJkmefPLJRutPPPFEo+Nv1r59+xxyyCF59NFHs2jRogwePLjFHgMAAAC0hm2OAEly1FFH5de//nU+/elP5/e//33+7d/+bbNz6uvrkyTvfe9789Of/rThX+5byrRp05Iko0ePTocOHZIkS5cuTZImA0CSdO7cOd27d8/KlSuzevXqdOnSJTU1NVm1atVW9/Xt2zePPvpolixZIgIAAADwjrddESBJhgwZkt/97ne57777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vXr1yv3335/TTz89Tz75ZL797W+30CMCAACA1tVmI8CRRx6ZwYMH54gjjsgRRxyR/fbbL3V1dVs8f/bs2Zk2bVp69uyZefPm5aCDDkqSzJs3LyNGjMgZZ5yRESNGpHv37g17XnvttZx55pl54403MmPGjEyYMCFJ8tJLL+UDH/hArrrqqpxwwgkZMWLEjnyoAAAAsFO02bcDXHTRRbn00kszbty4vPvd737L86+++uokySWXXNIQAJL/jQlnn312qqur86Mf/ajRnuuvvz41NTUZP358QwBIkr322itXXHFFkuSqq65qiYcDAAAAra7NRoDtsX79+jzwwANJkokTJ252fNPa3Xff3Wh95syZW9wzduzYVFZWZvbs2amtrW3pkQEAAGCn2yUiwMKFC1NXV5fevXunb9++mx0fOnRokuTJJ59stP7EE080Ov5m7du3zyGHHJLa2tosWrRoB0wNAAAAO9cuEQGWLl2aJE0GgCTp3LlzunfvnpUrV2b16tVJkpqamqxatWqr+zatL1myZIv3rqurS01NTaMfAAAAaIt2iQiwZs2aJEmnTp22eE7nzp2TpCECbNqztX1/u6cpU6dOTbdu3Rp++vXrt33DAwAAwE6yS0SA1nTxxRdn1apVDT/Lli1r7ZEAAACgSW32KwK3R1VVVZJk3bp1Wzxn7dq1SZIuXbo02rNpX9euXd9yT1M6dOiQDh06bP/QAAAAsJPtEq8E2HfffZMky5cvb/L42rVrU11dnT333LPhCX3Xrl3TrVu3re7btN6/f/+WHhkAAAB2ul0iAgwcODAdOnTIihUr8uKLL252fMGCBUmSwYMHN1o/9NBDGx1/s9dffz1PPfVUKisrc/DBB++AqQEAAGDn2iUiQMeOHTNy5Mgkye23377Z8enTpydJxo0b12h97NixjY6/2T333JPa2tqMGjUqlZWVLT0yAAAA7HS7RARIkkmTJiVJpkyZksWLFzesz5s3Lz/4wQ/SvXv3nHXWWY32fO5zn0vXrl1z11135Y477mhYf/nll3PhhRcmSS644IKdMD0AAADseG02AsycOTPvf//7G342bNiQJI3WZs6c2XD+qFGjct555+XVV1/NkCFDcuKJJ2bMmDE59thj89e//jU33nhjunfv3ugePXr0yA033JDddtstEydOzMiRI3PKKadk4MCBefbZZzNp0qSMGDFiJz5qAAAA2HHa7LcDrFixIg8//PBm629eW7FiRaNj11xzTYYMGZLrrrsus2bNSvv27TNq1KhMnjw5Rx11VJP3OfnkkzNnzpxMmTIl8+fPz4YNGzJo0KCce+65Of3001v2QQEAAEArqqivr69v7SF2JTU1NenWrVtWrVrV5NcO8s6z31dmvvVJQKt54fKxrT0CsAX+hkLb5m/ormN7noe22bcDAAAAAC1LBAAAAIBCiAAAAABQCBEAAAAACiECAAAAQCFEAAAAACiECAAAAACFEAEAAACgECIAAAAAFEIEAAAAgEKIAAAAAFAIEQAAAAAKIQIAAABAIUQAAAAAKIQIAAAAAIUQAQAAAKAQIgAAAAAUQgQAAACAQogAAAAAUAgRAAAAAAohAgAAAEAhRAAAAAAohAgAAAAAhRABAAAAoBAiAAAAABRCBAAAAIBCiAAAAABQCBEAAAAACiECAAAAQCFEAAAAACiECAAAAACFEAEAAACgECIAAAAAFEIEAAAAgEKIAAAAAFAIEQAAAAAKIQIAAABAIUQAAAAAKIQIAAAAAIUQAQAAAKAQIgAAAAAUQgQAAACAQogAAAAAUAgRAAAAAAohAgAAAEAhRAAAAAAohAgAAAAAhRABAAAAoBAiAAAAABRCBAAAAIBCiAAAAABQCBEAAAAACiECAAAAQCFEAAAAACiECAAAAACFEAEAAACgECIAAAAAFEIEAAAAgEKIAAAAAFAIEQAAAAAKIQIAAABAIUQAAAAAKIQIAAAAAIUQAQAAAKAQIgAAAAAUQgQAAACAQogAAAAAUAgRAAAAAAohAgAAAEAhRAAAAAAohAgAAAAAhRABAAAAoBAiAAAAABRCBAAAAIBCiAAAAABQCBEAAAAACiECAAAAQCFEAAAAACiECAAAAACFEAEAAACgECIAAAAAFEIEAAAAgEKIAAAAAFAIEQAAAAAKIQIAAABAIUQAAAAAKIQIAAAAAIUQAQAAAKAQIgAAAAAUQgQAAACAQogAAAAAUAgRAAAAAAohAgAAAEAhRAAAAAAohAgAAAAAhRABAAAAoBAiAAAAABRCBAAAAIBCiAAAAABQCBEAAAAACiECAAAAQCFEAAAAACiECAAAAACFEAEAAACgECIAAAAAFEIEAAAAgEKIAAAAAFAIEQAAAAAKIQIAAABAIUQAAAAAKIQIAAAAAIUQAQAAAKAQIgAAAAAUQgQAAACAQogAAAAAUAgRAAAAAAohAgAAAEAhRAAAAAAohAiQZP369fna176Wgw8+OJWVlenTp0/OPPPMvPjii609GgAAALSY4iNAbW1tRo4cmcsuuyxr1qzJ+PHj069fv9x444057LDD8sc//rG1RwQAAIAWUXwEmDJlSubPn58jjzwyixYtys9+9rM8/PDDueqqq7JixYqceeaZrT0iAAAAtIiiI8CGDRty3XXXJUm+853vpKqqquHYpEmTMnjw4Dz00EN57LHHWmtEAAAAaDFFR4C5c+dm1apVGTBgQA477LDNjk+cODFJcvfdd+/s0QAAAKDFFR0BnnjiiSTJ0KFDmzy+af3JJ5/caTMBAADAjlJ0BFi6dGmSpG/fvk0e37S+ZMmSnTYTAAAA7Ch7tPYArWnNmjVJkk6dOjV5vHPnzkmS1atXb/EadXV1qaura/h91apVSZKampqWGpNWtrFuXWuPAGyF/38LbZe/odC2+Ru669j0f8v6+vq3PLfoCNASpk6dmm9+85ubrffr168VpgEoT7drWnsCAHhn8jd017N69ep069Ztq+cUHQE2fRvAunVNV+q1a9cmSbp06bLFa1x88cWZNGlSw+8bN27Ma6+9lp49e6aioqIFpwVaQk1NTfr165dly5ala9eurT0OALxj+BsKbVd9fX1Wr16dPn36vOW5RUeAfffdN0myfPnyJo9vWu/fv/8Wr9GhQ4d06NCh0Vr37t1bZkBgh+natav/AQMAzeBvKLRNb/UKgE2K/mDAQw89NEmyYMGCJo9vWh88ePBOmwkAAAB2lKIjwNFHH51u3brlueeey+OPP77Z8enTpydJxo0bt5MnAwAAgJZXdARo3759zj333CTJOeec0/AZAEly9dVX58knn8xxxx2XYcOGtdaIQAvr0KFDvv71r2/2Nh4AYOv8DYVdQ0X9tnyHwC6strY2I0aMyMMPP5y99947xxxzTJYsWZKHH344vXv3zvz583PAAQe09pgAAADwthUfAZJk/fr1mTp1am655ZYsW7YsPXr0yOjRo3PZZZelb9++rT0eAAAAtAgRAAAAAApR9GcCAAAAQElEAGCXt379+nzta1/LwQcfnMrKyvTp0ydnnnlmXnzxxdYeDQDarMceeyyXX355JkyYkL59+6aioiIVFRWtPRbwNnk7ALBLq62tzQc/+MHMnz+/4cM/X3jhhTzyyCM+/BMAtuLEE0/MXXfdtdm6pw/wzuaVAMAubcqUKZk/f36OPPLILFq0KD/72c/y8MMP56qrrsqKFSty5plntvaIANAmHXnkkZk8eXL+8z//M3/+8599NSDsIrwSANhlbdiwIe9617uyatWqLFiwIIcddlij44ceemiefPLJPProoxk2bFgrTQkA7wyVlZWpq6vzSgB4h/NKAGCXNXfu3KxatSoDBgzYLAAkycSJE5Mkd999984eDQAAWoUIAOyynnjiiSTJ0KFDmzy+af3JJ5/caTMBAEBrEgGAXdbSpUuTJH379m3y+Kb1JUuW7LSZAACgNYkAwC5rzZo1SZJOnTo1ebxz585JktWrV++0mQAAoDWJAAAAAFAIEQDYZVVVVSVJ1q1b1+TxtWvXJkm6dOmy02YCAIDWJAIAu6x99903SbJ8+fImj29a79+//06bCQAAWpMIAOyyDj300CTJggULmjy+aX3w4ME7bSYAAGhNIgCwyzr66KPTrVu3PPfcc3n88cc3Oz59+vQkybhx43byZAAA0DpEAGCX1b59+5x77rlJknPOOafhMwCS5Oqrr86TTz6Z4447LsOGDWutEQEAYKeqqK+vr2/tIQB2lNra2owYMSIPP/xw9t577xxzzDFZsmRJHn744fTu3Tvz58/PAQcc0NpjAkCbM3PmzFx22WUNvz/yyCOpr6/P+973voa1yZMnZ+zYsa0xHtBMe7T2AAA7UmVlZX75y19m6tSpueWWW3LnnXemR48e+exnP5vLLrssffv2be0RAaBNWrFiRR5++OHN1t+8tmLFip05EtACvBIAAAAACuEzAQAAAKAQIgAAAAAUQgQAAACAQogAAAAAUAgRAAAAAAohAgAAAEAhRAAAAAAohAgAAAAAhRABAKAAv/zlL3PyySdnn332Sfv27bPnnntm4MCBOeWUU3Lddddl1apVrT3iZj772c+moqIiDz74YGuPspmKiorst99+rT0GAGy3PVp7AABgx7r00kvz9a9/PUnyd3/3d3nf+96Xdu3aZeHChbnjjjsyffr0HH744Xn/+9/fypMCADtaRX19fX1rDwEA7BiPPfZYjjjiiOyxxx75+c9/nhNPPLHR8b/85S/56U9/mhNOOCHvec97WmfILfjzn/+cVatWZd99902nTp1ae5xGKioq0r9//7zwwgutPQoAbBevBACAXdgdd9yR+vr6nHrqqZsFgCR597vfnS996Us7f7BtsPfee2fvvfdu7TEAYJfiMwEAYBe2YsWKJEnv3r23ec/W3u9+0003paKiIt/4xjcarY8YMSIVFRV54YUXcsstt+T9739/unTpku7du2fBggWpqKjI+973vi3e89prr01FRUUmTZrUsPa3nwnw+uuvp1evXqmsrEx1dXWT1/nd736XioqKDB06dLNj9913X8aOHZvevXunQ4cOOeCAAzJp0qS8+uqrTV7rtddey7nnnps+ffqksrIygwYNyrRp0+JFlAC8k4kAALAL69evX5JkxowZefnll3f4/aZOnZpPf/rTad++fU444YQccsghGTp0aN7znvfkkUceyXPPPdfkvn//939PknzqU5/a4rXbtWuXU045JXV1dZkxY8Z2XecrX/lKPvrRj2b27NkZOHBgPvaxj2WPPfbIv/3bv+V973tfXnrppUbnr1y5Mh/4wAfyne98J/X19Rk/fnz22WeffOlLX8q//Mu/bPN/HwDQ1ogAALAL++QnP5mOHTtm2bJlOfDAA/PZz342119/fX7729/mjTfeaPH73XzzzXnggQcyZ86c3HrrrfnVr37VMEeS3HLLLZvtee655/Lwww/nPe95T5P/gv+3j2dL16mvr8+tt96a3XbbLf/wD//QsH777bfnX//1X3PIIYfk97//fX71q1/l9ttvz8KFC/O1r30tzz33XM4777xG1/rqV7+aP/zhDxk9enSee+65/OxnP8usWbMyd+7c3HTTTdv13wkAtCUiAADswg444IDcfffd6devX1avXp0f//jH+cd//McMHTo0vXr1yhe/+MX8+c9/brH7nXXWWTnuuOM2W9/ak/dN/3q/6ZytOfroo7PffvvlwQcfzJ/+9KdGx/7nf/4nS5cuzQc/+MH06dOnYf1b3/pWkuTWW2/NgQce2LC+6W0NQ4YMyfTp0/PKK68kSdauXZsf//jH2W233XLdddc1+lDC4cOH55xzznnLOQGgrRIBAGAX96EPfSjPPvts7rjjjpx99tkZOnRo9thjj1RXV+d73/tehgwZkoULF7bIvT72sY81ub7//vvnqKOOyjPPPJMFCxY0OrY9EaCioiKf+MQnsnHjxtx2221NXufNbwV4+eWX88QTT+Sggw7KIYcc0uT1jj766Lzxxht57LHHkvzvNyqsX78+hx9+eAYMGLDZno9//ONvOScAtFUiAAAUoH379jnppJPyve99L4899lhWrFiR733ve9lzzz3z8ssv59xzz22R++y7775bPLbpSf6mJ+tJ8uijj2bRokU56qijsv/++2/TPZq6zoYNG3L77bensrIyEyZMaFjf9BV+ixcvTkVFRZM/3/nOd5Kk4ZUAm15h0L9//ybvv6UPTQSAdwJfEQgABerevXvOPvvs9OnTJ+PHj88vf/nLrFu3rtFL35uycePGrR6vrKzc4rHTTjst559/fm677bZceeWV2W233bbrVQCbDBo0KIcddlgWLFiQhQsXZuDAgfmv//qvrFy5Mqecckq6du262bzvfve7c/zxx2/1ult60g8AuxIRAAAKNnLkyCTJG2+8kerq6nTq1Cnt2rXLmjVrmjx/2bJlzb5Xz549c/zxx+eee+7Jgw8+mOOOOy633XZb2rVrl9NOO227rvXJT34yv/3tb/Pv//7vufTSS7f4rQB9+/ZNkvTq1WubP9Bv7733TpIsWbKkyeNbWgeAdwJvBwCAXdhbfaf9s88+m+R/3y7Qq1evJP/7JPjVV1/Nq6++utn5s2fPflvzvPkDAh944IH85S9/yfHHH5+ePXtu13U+/vGPZ7fddsutt96ampqa3H333enRo0c++tGPNjqvb9++ec973pOnn346ixYt2qZrDxs2LB07dsxjjz2WP/7xj5sd/9vPIgCAdxIRAAB2YZMnT86Xv/zlPPfcc5sde/HFF/P5z38+yf9+oF/79u2TpOHT/adMmdLo/CuuuKLhK/+aa/z48enSpUtmzJiRG264Icn2vRVgkz59+uSDH/xgnn322Vx00UWpra3NKaecknbt2m127uTJk7Nx48acfPLJefzxxzc7/uqrr+aHP/xhw+9VVVX59Kc/nTfeeCP//M//nPXr1zcce/TRR3Pddddt97wA0FaIAACwC1uzZk2+/e1v58ADD8zAgQNz0kkn5eMf/3iOOeaY7L///nnkkUdy4IEH5pprrmnYc9FFF6Vjx4655pprcthhh2XixIkZOHBgvvGNb+SLX/zi25qnY8eOOemkk1JdXZ3bbrstXbp0yfjx45t1rU3x4Pvf/36Szd8KsMknPvGJfPWrX81TTz2VYcOGZdiwYTn11FNzyimnZOjQodlrr73y5S9/udGeqVOnZuDAgbn33nszYMCA/MM//EOOP/74HHnkkfnMZz7TrHkBoC0QAQBgF3bJJZfkJz/5ST71qU+lQ4cO+Z//+Z9Mnz49Tz/9dIYPH54rrrgijz/+ePbZZ5+GPe9973vzwAMPZMSIEVm0aFFmzZqVAQMGZN68eTniiCPe9kxv/pf/k046KR07dmzWdU4++eSGDyLs379/jj766C2e+61vfSsPPfRQTj755PzlL3/JnXfemV/+8pd544038oUvfCH/+Z//2ej8Hj16ZO7cufnCF76Q+vr63HnnnVm6dGkuv/zyXHvttc2aFwDagor6t3qzIAAAALBL8EoAAAAAKIQIAAAAAIUQAQAAAKAQIgAAAAAUQgQAAACAQogAAAAAUAgRAAAAAAohAgAAAEAhRAAAAAAohAgAAAAAhRABAAAAoBAiAAAAABRCBAAAAIBC/H/fuhjvSNm66QAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "%config InlineBackend.figure_format = 'png'\n", "ax = dftrain_raw['Survived'].value_counts().plot(kind = 'bar',\n", " figsize = (12,8),fontsize=15,rot = 0)\n", "ax.set_ylabel('Counts',fontsize = 15)\n", "ax.set_xlabel('Survived',fontsize = 15)\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "2f6fa85c", "metadata": {}, "source": [ "年龄分布情况" ] }, { "cell_type": "code", "execution_count": 4, "id": "2284f17f", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/MAAAKzCAYAAABS0117AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABUJklEQVR4nO3deZyXZb0//tcIMgyLDCDmwqICmpobFqaGEgcNzT3Uo1lCtljZ0ePRTpqmuPzsZKi0e8rQ1MzEfckTZqEpqUlKJiJugFuCsg7DyHL//iim+M6g2Kw3Pp+Px+fxaK7ruu/7fXP1QV5z3UtFURRFAAAAgNLYqK0LAAAAAN4dYR4AAABKRpgHAACAkhHmAQAAoGSEeQAAACgZYR4AAABKRpgHAACAkhHmAQAAoGQ6tnUB7dnq1avzyiuvpHv37qmoqGjrcgAAANjAFUWRJUuWZMstt8xGG617/V2YfxuvvPJK+vXr19ZlAAAA8B4zd+7c9O3bd539wvzb6N69e5K//SFusskmbVwNAAAAG7rFixenX79+9Xl0XYT5t7Hm0vpNNtlEmAcAAKDVvNOt3h6ABwAAACUjzAMAAEDJCPMAAABQMsI8AAAAlIwwDwAAACUjzAMAAEDJCPMAAABQMsI8AAAAlIwwDwAAACUjzAMAAEDJCPMAAABQMu06zD/66KM5+uijs+WWW2bjjTdOdXV1hg0blokTJ6YoigbjV61alcsuuyw777xzqqqq0qdPnxx99NGZMWNGG1QPAAAALaOiaCwVtwM33XRTjjnmmKxatSpDhgzJoEGDMm/evDzwwANZuXJljjvuuFx33XX141evXp3Ro0fnlltuSXV1df7t3/4t8+fPz/3335+qqqr89re/zdChQ99VDYsXL06PHj2yaNGibLLJJs19igAAALCW9c2h7TLMr1y5MltttVVef/31XHfddTnuuOPq+2bMmJGPfOQjefPNN3Pfffflox/9aJLkJz/5ST73uc9l8ODBeeCBB/K+970vyd9+KTB69OgMGjQoM2bMSMeOHde7DmEeAACA1rS+ObRdXmb/9NNP5/XXX8/222+/VpBPkh122CHHH398kr9dhr/GpZdemiT51re+VR/kk+QTn/hEDj300Dz77LO57bbbWqF6AAAAaFntMsxXVlau17jevXsnSV544YXMmDEjVVVV+fjHP95g3OjRo5Mkd9xxR/MVCQAAAG2kXYb5bbfdNgMHDszMmTPz85//fK2+GTNm5Nprr03Pnj1zxBFHJEmeeOKJJMkHPvCBbLzxxg32N2TIkCTJ9OnTW7hyAAAAaHntMsx36NAhV199daqrq/PJT34ye+yxR/793/89I0aMyC677JK+ffvmN7/5TXr16pUkmTNnTpKkb9++je5vTfvs2bNb5wQAAACgBa3/0+Ba2T777JMpU6bkiCOOyLRp0zJt2rQkSadOnbL//vtn2223rR+7dOnSJEmXLl0a3VfXrl2TJEuWLHnbY9bV1aWurq7+58WLFzfpHAAAAKAltMuV+SS5/vrrM3To0PTr1y8PP/xwli5dmmeeeSZjxozJ+PHjM2LEiLWCd3O4+OKL06NHj/pPv379mnX/AAAA0BzaZZifNWtWTjjhhGy66aa58847M3To0HTt2jWDBw/OFVdckYMPPjjTpk3LT3/60yRJt27dkiTLli1rdH81NTVJku7du7/tcc8888wsWrSo/jN37txmPCsAAABoHu0yzP/iF7/IihUrMmrUqPqg/s+OPvroJMn999+fJOnfv3+S5KWXXmp0f2vaBwwY8LbHrayszCabbLLWBwAAANqbdhnm14TvHj16NNq/pn3BggVJkl133TVJ8uSTT2bFihUNxq+5336XXXZp9loBAACgtbXLML/55psnSf74xz822v/oo48mSbbeeuskyTbbbJMddtghtbW1ueuuuxqMnzRpUpLkkEMOaYFqAQAAoHW1yzB/2GGHJfnbZfQ//OEP1+r7wx/+kMsuuyxJMnr06Pr20047LUny1a9+Na+//np9+80335zbb789gwYNqt8vAAAAlFlFURRFWxfRmDPOOCPf/va3kyQ77bRTdtxxx7zyyiuZOnVqVq9enc9//vO54oor6sevXr06o0ePzi233JKePXvm3/7t3zJ//vxMmTIlnTt3zm9/+9vsueee76qGxYsXp0ePHlm0aJH75wEAAGhx65tD222YT5JbbrklP/rRj/LYY49l0aJF6d69e3bbbbd87nOfy7HHHttg/KpVqzJhwoT89Kc/zXPPPZeuXbvmox/9aMaNG5cdd9zxXR9fmIf3pnEV49q6hPVybnFuW5cAAEAz2yDCfFsT5uG9SZgHAKCtrG8ObZf3zAMAAADrJswDAABAyQjzAAAAUDLCPAAAAJSM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1dWlT58+6du3b4N9DBkyJEkyffr0VqkZAAAAWlK7D/MXXnjhWj+ffvrpOeecc3LOOefUt82ZMydJGg3ySdK1a9dUV1dnwYIFWbJkSbp3797ouLq6utTV1dX/vHjx4qaWDwAAAM2u3V5mv+++++aaa67Jc889l2XLlmXmzJm56KKL0rFjx3zjG9/IhAkT6scuXbo0SdKlS5d17q9r165JkiVLlqxzzMUXX5wePXrUf/r169dMZwMAAADNp92G+fPPPz/HH398tt1221RVVWW77bbLWWedlVtvvTVJct5556W2trZZj3nmmWdm0aJF9Z+5c+c26/4BAACgObTbML8uBxxwQD74wQ9m4cKFefjhh5Ok/j30y5YtW+d2NTU1SbLOS+yTpLKyMptssslaHwAAAGhvShfmk9S/eu7VV19NkvoH4r300kuNjq+pqcnChQvTs2fPtw3zAAAAUAalDPMLFixI8o/74LfffvtUVlZm3rx5efnllxuMnzZtWpJkl112ab0iAQAAoIWULszPmzcvDzzwQJJ/vHKuqqoqI0aMSJLceOONDbaZNGlSkuSQQw5ppSoBAACg5bTLMP/QQw/l1ltvzapVq9Zqf/HFF3PEEUekpqYmhx566FqvojvttNOS/O1VdrNmzapvnzp1aq644opUV1fnxBNPbJ0TAAAAgBbULt8z/8wzz2Ts2LHZfPPNM2TIkFRXV2f27Nl57LHHsnz58uy000758Y9/vNY2I0eOzCmnnJIJEyZkt912y/7775+33norkydPTlEUmThxYqqrq9vmhAAAAKAZtcswv+eee+aLX/xiHn744Tz66KNZsGBBunbtmt122y1HHXVUvvjFL6aqqqrBdpdffnl22223fO9738vkyZPTqVOnjBw5Muecc0723nvvNjgTAAAAaH4VRVEUbV1Ee7V48eL06NEjixYt8po6aKJxFePaugTYYJxbnNvWJQAALWR9c2i7vGceAAAAWDdhHgAAAEpGmAcAAICSEeYBAACgZJoU5gcOHJhvfvObee2115qrHgAAAOAdNCnMv/jii/n617+e/v3758gjj8w999wTD8cHAACAltWkMD979ux84xvfyBZbbJFbb701H//4x7P11lvn/PPPz0svvdRcNQIAAAD/pElhvm/fvjn33HPz4osv5u67787hhx+e1157Leedd1622WabHHLIIbn99tuzevXq5qoXAAAA3vOa5QF4FRUVGTVqVG666abMnTs33/zmN7PNNtvkrrvuyhFHHJF+/frlnHPOyYsvvtgchwMAAID3tGZ/mv1mm22Wr371q5kxY0b+8z//M0VR5NVXX81FF12UQYMG5bDDDsvjjz/e3IcFAACA94xmD/Nr7qPfeuutc/nllydJ9t5775x99tkZNGhQ7rjjjgwdOjS33HJLcx8aAAAA3hOaJcyvXLkyN910U0aNGpWBAwfmwgsvzJIlS/LFL34x06dPz+9///ucf/75efrpp3PDDTekQ4cO+cY3vtEchwYAAID3nI5N2XjWrFn5yU9+kquvvjrz5s1LURQZMmRITjrppBx33HHp0qVLg22OOuqo/PKXv8ztt9/elEMDAADAe1aTwvz222+fioqKVFVVZezYsTnppJPywQ9+8B2369GjR1asWNGUQwMAAMB7VpMus99xxx0zYcKEvPLKK/nJT36yXkE+SX7yk594XR0AAAD8i5q0Mv/kk082Vx0AAADAemrSyvzq1auzePHit71kfsWKFVm8eLGVeAAAAGgmTQrzl112WXr27JkpU6asc8yUKVPSs2fPfPe7323KoQAAAIC/a1KYv+WWW9KvX7+MHDlynWNGjhyZvn375qabbmrKoQAAAIC/a1KYnzVrVnbaaad3HPeBD3wgs2bNasqhAAAAgL9rUphftGhRevTo8Y7jevTokQULFjTlUAAAAMDfNSnMb7HFFpk+ffo7jps+fXo222yzphwKAAAA+LsmhfkRI0ZkxowZueGGG9Y55pe//GWeeuqpfPSjH23KoQAAAIC/a1KYP+OMM9KpU6d8+tOfzsknn5zp06enpqYmNTU1mT59ek4++eR86lOfSqdOnXLGGWc0V80AAADwntaxKRu///3vz89+9rOccMIJ+eEPf5gf/vCHa/UXRZHOnTtn4sSJ+cAHPtCkQgEAAIC/adLKfJIcddRRmT59er7whS9k0KBBqaysTGVlZQYNGpQvfvGLeeKJJ3LMMcc0R60AAABAmrgyv8agQYPygx/8oDl2BQAAALyDJq/MAwAAAK2rWVbmk2TlypV54403UldXt84x/fv3b67DAQAAwHtWk8P8vffemwsvvDB/+MMfsmLFinWOq6ioyMqVK5t6OAAAAHjPa1KYv/POO3PEEUdk1apV6dmzZ7bZZpt07969uWoDAAAAGtGkMD9u3LisXr06l112WU4++eR06NChueoCAAAA1qFJYf4vf/lL9tprr5xyyinNVQ8AAADwDpr0NPtu3bp5qB0AAAC0siaF+ZEjR+aPf/xjc9UCAAAArIcmhfn/+Z//yeLFi/Pf//3fnlQPAAAAraRJ98xPnDgxBx54YL797W/npptuyvDhw9O3b99stFHD3xFUVFTknHPOacrhAAAAgCQVRVEU/+rGG220USoqKrI+u6ioqMiqVav+1UO1icWLF6dHjx5ZtGhRNtlkk7YuB0ptXMW4ti4BNhjnFue2dQkAQAtZ3xza5JV5AAAAoHU1KcyfcMIJzVUHAAAAsJ6a9AA8AAAAoPU1aWV+jZUrV+auu+7KI488kvnz52fPPffMZz7zmSTJK6+8kvnz52fHHXdMx47NcjgAAAB4T2tyuv7973+f448/PnPnzk1RFKmoqMiKFSvqw/zUqVNz9NFH58Ybb8yRRx7Z5IIBAADgva5Jl9k/9dRTGTVqVF599dV85StfyS9/+csGT7Y/5JBD0qVLl9x0001NKhQAAAD4myatzF9wwQVZvnx57r777hxwwAGNjunUqVOGDBmSP/3pT005FAAAAPB3TVqZ/+1vf5uhQ4euM8ivsdVWW+WVV15pyqEAAACAv2tSmF+4cGH69ev3juNqamqyYsWKphwKAAAA+LsmhfnNNtsszz777DuOmzFjxnqFfgAAAOCdNSnMjxgxIo8//nh++9vfrnPMLbfckmeffTb7779/Uw4FAAAA/F2TwvzXvva1dOrUKYcffnh++MMf5rXXXqvvW7BgQX7605/mxBNPTNeuXXPaaac1uVgAAACgiWH+/e9/f66//vqsXr06J598crbaaqtUVFTk6quvzqabbprPfe5zqaury3XXXZdtttmmuWoGAACA97QmhfkkOfzww/Pkk0/mK1/5St7//venc+fO6dSpU7bddtt84QtfyPTp03PooYc2R60AAABAmvie+TUGDBiQyy+/vDl2BQAAALyDJq/MAwAAAK1LmAcAAICSadJl9h06dFjvsRUVFVm5cmVTDgcAAACkiWG+X79+qaioaNC+evXqvPbaa1mxYkWSv91TDwAAADSPJl1m/+KLL+aFF15o8Jk9e3Zqa2vz61//OjvssEP23HPPPP/8800q9I033shmm22WioqKDBo06G3HXnXVVRk6dGi6deuWXr165aCDDspDDz3UpOMDAABAe9Fi98xvtNFGGTlyZO68887cdddd+Z//+Z8m7e+//uu/Mn/+/Hccd+qpp2bs2LF58sknM3LkyAwdOjSTJ0/Ovvvum1tvvbVJNQAAAEB70OIPwNtmm23y4Q9/OD/96U//5X385je/ydVXX53Pfe5zbzvu3nvvzYQJE9K7d+888cQTufXWW3PPPffk/vvvT4cOHTJ27NgsXLjwX64DAAAA2oNWeZp9ly5dMnfu3H9p29ra2nzhC1/IjjvumNNPP/1tx1566aVJkrPPPjuDBw+ub99rr71y0kknZeHChbnyyiv/pToAAACgvWjxMD979uzcf//9ed/73vcvbT9u3Lg8//zz+dGPfpSNN954neNqa2tz3333JUlGjx7doH9N2x133PEv1QEAAADtRZOeZv+zn/1snX1Lly7NM888k2uvvTaLFy/Ol770pXe9/+nTp2f8+PEZO3Zshg0blhdffHGdY2fOnJm6urr06dMnffv2bdA/ZMiQ+n0CAABAmTUpzI8ZM6bRV9OtURRFkuTTn/50xo0b9672vXr16nz2s59NdXV1vvWtb73j+Dlz5iRJo0E+Sbp27Zrq6uosWLAgS5YsSffu3d9VPQAAANBeNCnMf+Mb31hnmO/UqVO22GKL7Lvvvtl2223f9b6/+93v5tFHH83EiRPTu3fvdxy/dOnSJH+7P39dunbtmoULF64zzNfV1aWurq7+58WLF7/rugEAAKClNSnMn3feec1UxtrmzJmTs88+O/vtt1/GjBnTIsdozMUXX/yuryAAAACA1tYqT7N/t7785S/nrbfeyo9+9KP13qZbt25JkmXLlq1zTE1NTZKs8xL7M888M4sWLar//KtP4AcAAICW1KSV+ZZy5513prq6OieddNJa7cuXL0+SvPzyyxk+fHiS5Be/+EU233zz9O/fP0ny0ksvNbrPmpqaLFy4MD179lxnmK+srExlZWUznQUAAAC0jCaF+X/lXvg1Kioq8txzz62zf+HChZkyZUqjfcuXL6/vWxPwt99++1RWVmbevHl5+eWXs9VWW621zbRp05Iku+yyy79cMwAAALQHTQrzb/equKZY8xT8xo63zTbbZODAgXn22WfX6quqqsqIESPyq1/9KjfeeGNOPfXUtfonTZqUJDnkkENapGYAAABo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9+7r3MeZZ56Z0047rf7n1atX580330zv3r1TUVHRjNU2zeLFi9OvX7/MnTs3m2yySVuXwzqYp3IwT+VgnsrDXJWDeSoH81QO5qk8yjJXRVFkyZIl2XLLLd923AYT5vv3758keemllxrtX9M+YMCAde6jsrIylZWVa7VVV1c3T4EtYJNNNmnX/yfkb8xTOZincjBP5WGuysE8lYN5KgfzVB5lmKu3W5FfY4N5AN6uu+6aJJk2bVqj/Wvad9lll1arCQAAAFrCBhPm99lnn/To0SPPPfdcHn/88Qb9kyZNSpIccsghrVwZAAAANK8NJsx36tQpJ598cpLky1/+cv098kly6aWXZvr06dlvv/2yxx57tFWJzaaysjLnnntug1sCaF/MUzmYp3IwT+VhrsrBPJWDeSoH81QeG9pcVRTv9Lz7Elm+fHmGDx+ehx9+OFtssUWGDRuW2bNn5+GHH06fPn3yhz/8Idtuu21blwkAAABNskGF+SSpra3NxRdfnJ///OeZO3duevXqlVGjRuWCCy5I375927o8AAAAaLINLswDAADAhm6DuWceAAAA3iuE+ZKora3NN77xjWy33Xbp3Llzttxyy3zmM5/Jyy+/3Nalvec89thj+eY3v5kjjzwyffv2TUVFRSoqKt5xu6uuuipDhw5Nt27d0qtXrxx00EF56KGHWqHi955ly5bl1ltvzYknnpjtt98+nTt3TteuXbPrrrvm/PPPz9KlS9e5rXlqfZdeemmOPPLIDB48OD169EhlZWUGDBiQT3/60/nzn/+8zu3MVdt54403stlmm6WioiKDBg1627HmqXUNHz68/r9LjX3uueeeRrczT21j3rx5Of3007P99tunqqoqvXr1ypAhQ3LGGWc0Ov6OO+7IfvvtV/+O7OHDh+euu+5q5arfO373u9+97fdpzef8889vsK3vVOt79NFHc/TRR2fLLbfMxhtvnOrq6gwbNiwTJ05MYxejr1q1Kpdddll23nnnVFVVpU+fPjn66KMzY8aMNqj+X1TQ7tXW1hYf/vCHiyTFFltsURx99NHF0KFDiyRFnz59iueee66tS3xPOeyww4okDT5v55RTTimSFFVVVcVhhx1WfOxjHys6duxYdOjQobjllltap/D3kB//+Mf187LDDjsURx11VPGxj32s6N69e5GkeP/731/89a9/bbCdeWobvXv3Ljp37lwMHTq0OOKII4ojjjii2G677YokxcYbb1zccccdDbYxV23rhBNOKCoqKookxcCBA9c5zjy1vv32269IUnziE58oTjjhhAaf6dOnN9jGPLWNP/7xj0Xv3r2LJMVOO+1UHHPMMcWBBx5YDBgwoOjQoUOD8ZdddlmRpOjYsWMxatSo4rDDDiuqqqqKJMV3v/vdNjiDDd+MGTMa/R6dcMIJxfHHH1//b4377rtvre18p1rfpEmTig4dOhRJiiFDhhRHH3108dGPfrTo2LFjkaQ47rjj1hq/atWq4ogjjiiSFNXV1cUnPvGJYr/99isqKiqKLl26FA8//HAbncm7I8yXwNe//vUiSbHXXnsVS5YsqW8fP358kaTYb7/92q6496BvfvObxTnnnFPcfvvtxauvvlpUVla+bZifPHlykaTo3bt38cwzz9S3P/TQQ0WnTp2K6urqYsGCBa1Q+XvHVVddVXz+858vnnrqqbXaX3nllWL33XcvkhTHHnvsWn3mqe38/ve/L2praxu0f//73y+SFO973/uKFStW1Lebq7Z17733FkmKz3/+828b5s1T21gT5l944YX1Gm+e2sbrr79ebLrppkWXLl2K2267rUH//xsknn766aJDhw5FZWVl8dBDD9W3z5w5s+jdu3fRsWPHYtasWS1eN/9w9913F0mKfv36FatXr65v951qfStWrCg222yzIklx3XXXrdX31FNPFb169WrwS5c1Cz+DBw8uXnvttfr2SZMmFUmKQYMGrfVvj/ZKmG/n6urqih49ehRJimnTpjXo32WXXYokxR//+Mc2qI6iKN4xzB944IFFkuKyyy5r0Pcf//EfRZLi29/+dgtWyD976KGHiiRFZWVlUVdXV99untqngQMHFkmKJ554or7NXLWdZcuWFQMHDix23HHH4plnnnnbMG+e2sa7DfPmqW188YtfLJIU3//+99/V+FNOOaVB36WXXlokKU4++eRmrpK3c9xxxxVJiq997WtrtftOtb4///nPRZJi++23b7R/zZ/7//zP/9S37bDDDkWSRq+UOPTQQ4skxaRJk1qq5Gbjnvl27sEHH8yiRYsycODA7L777g36R48eneRv91DR/tTW1ua+++5L8o+5+mfmr/XtuuuuSZK6urq88cYbScxTe7bxxhsnSTp16pTEXLW1cePG5fnnn8+PfvSj+rlpjHkqB/PUNmpra3Pttdema9euGTt27Hpts+a+ePPUPtTU1OS2225LknzqU5+qb/edahuVlZXrNa53795JkhdeeCEzZsxIVVVVPv7xjzcYV6Z56tjWBfD2nnjiiSTJkCFDGu1f0z59+vRWq4n1N3PmzNTV1aVPnz7p27dvg37z1/qef/75JH8Lib169Upintqra665JjNnzszgwYMzePDgJOaqLU2fPj3jx4/P2LFjM2zYsLz44ovrHGue2t6VV16ZN954IxtttFG22267HH744enfv/9aY8xT2/jjH/+YJUuW5CMf+Uiqqqryq1/9KpMnT87y5cuz3Xbb1T/Aa42FCxdmzpw5SdLowk6/fv2y6aabZvbs2Vm8eHE22WSTVjuX96qbb745NTU12X333bPjjjvWt/tOtY1tt902AwcOzMyZM/Pzn/88xx13XH3fjBkzcu2116Znz5454ogjkvwjX33gAx9o9BfTZZonYb6dW/OXd2N/Ifxz++zZs1utJtbfO81f165dU11dnQULFmTJkiXp3r17a5b3njRhwoQkyahRo+p/k2ue2odLLrkkf/nLX1JTU5MZM2bkL3/5S7bccstcf/316dChQxJz1VZWr16dz372s6murs63vvWtdxxvntrehRdeuNbPp59+es4555ycc8459W3mqW089dRTSZLNNtsshx9+eP0K7xpnnXVWrrzyyhx77LFJ/jFPPXv2TNeuXRvdZ9++fTN//vzMnj07O++8cwtWT5Jce+21SdZelU98p9pKhw4dcvXVV+fggw/OJz/5yYwfPz6DBw/O66+/ngceeCA77rhjrrrqqvpFnA0pX7nMvp1b8wqtLl26NNq/5i/1JUuWtFpNrL93mr/EHLamu+++O1deeWU23njjXHDBBfXt5ql9+L//+79cffXVmTRpUv7yl79kwIABuf7667PHHnvUjzFXbeO73/1uHn300VxyySX1lym+HfPUdvbdd99cc801ee6557Js2bLMnDkzF110UTp27JhvfOMb9b/QTMxTW1mwYEGS5Pbbb88999yT73//+3n99dfz4osv5vTTT09tbW1OOOGEPP7440nMU3vz6quv5je/+U06dOhQ/wuXNcxV29lnn30yZcqUbLvttpk2bVpuuOGG/Pa3v81GG22U/fffP9tuu2392A0pXwnzwHvC008/neOPPz5FUeSSSy6pv3ee9uPee+9NURRZsGBB7r///gwePDj77bdfLrroorYu7T1tzpw5Ofvss7PffvtlzJgxbV0O7+D888/P8ccfn2233TZVVVXZbrvtctZZZ+XWW29Nkpx33nmpra1t2yLf41avXp0kWblyZc4///x86UtfSp8+fTJgwIBccsklOeqoo7JixYpccsklbVwpjbn++uuzatWq7L///tl8883buhz+7vrrr8/QoUPTr1+/PPzww1m6dGmeeeaZjBkzJuPHj8+IESNSV1fX1mU2O2G+nevWrVuSZNmyZY3219TUJInLdNqpd5q/xBy2hpdffjmjRo3KggULctppp+WUU05Zq988tS/V1dUZNmxY7r777uyxxx4555xz8uijjyYxV23hy1/+ct5666386Ec/Wu9tzFP7c8ABB+SDH/xgFi5cmIcffjiJeWora/7ckzT6ALw1bVOmTFlrvHlqH9Z1iX1irtrKrFmzcsIJJ2TTTTfNnXfemaFDh6Zr164ZPHhwrrjiihx88MGZNm1afvrTnybZsPKVMN/OrXlYzUsvvdRo/5r2AQMGtFpNrL93mr+amposXLgwPXv2LMVfGGX05ptv5oADDsjs2bMzduzYfPvb324wxjy1TxtvvHGOOeaYFEVR/0RZc9X67rzzznTp0iUnnXRShg8fXv/593//9yR/+2XZmrbXXnstiXlqr9Y8SPLVV19NYp7aypp/s3Xp0iV9+vRp0L/11lsnSV5//fUk/5inBQsW1IeM/5d/D7aOGTNm5E9/+lO6deuWww8/vEG/71Tb+MUvfpEVK1Zk1KhRa/2ybI2jjz46SXL//fcn2bDylQfgtXNrLgWeNm1ao/1r2nfZZZdWq4n1t/3226eysjLz5s3Lyy+/nK222mqtfvPXspYuXZoDDzwwTz31VI488sj8+Mc/TkVFRYNx5qn92nTTTZMk8+bNS2Ku2srChQvrVwn/X8uXL6/vW758eRLz1F6tuVd7zf2g5qltrHkifW1tberq6hq8VuvNN99M8o/Vw+rq6vTv3z9z5szJn/70p3zkIx9Za/zcuXMzf/78DBgwwJPsW9g111yTJDnyyCMbvd/ad6ptrAnfPXr0aLR/TfuavwPX5Ksnn3wyK1asaPBE+zLNk5X5dm6fffZJjx498txzz9U/COWfTZo0KUlyyCGHtHJlrI+qqqqMGDEiSXLjjTc26Dd/Laeuri6HHXZYHnnkkXzsYx9b64no/y/z1H6tCYkDBw5MYq7aQlEUjX5eeOGFJH+bmzVta1YUzVP7M2/evDzwwANJ/vHaJfPUNvr3759dd901RVE0+kuyNW3//Bq6Ne/CXjMn/8w8tY6iKPLzn/88SeOX2Ce+U21lzbML/vjHPzbav+ZWvTX/jdpmm22yww47pLa2NnfddVeD8aWap4J27+tf/3qRpNh7772LpUuX1rePHz++SFLst99+bVccRWVlZfF2X6XJkycXSYrevXsXzzzzTH37Qw89VFRWVhbV1dXFggULWqHS946VK1cWRxxxRJGkGDZsWFFTU/OO25intvH73/+++NWvflWsWrVqrfa33nqr+M53vlNstNFGRVVVVTFnzpz6PnPVPrzwwgtFkmLgwIGN9pun1vfggw8Wt9xyS7Fy5cq12l944YVin332KZIUhx566Fp95qltXHfddUWSYueddy5eeeWV+vY//elPRa9evYokxS9/+cv69qeffrro0KFDUVlZWUydOrW+/Zlnnil69+5ddOzYsZg1a1arnsN7zZQpU4okxVZbbdXgv1n/zHeq9T322GNFkiJJ8YMf/GCtvqlTpxZdu3YtkhSTJ0+ub//xj39cJCkGDx5c/PWvf61vv+mmm4okxaBBg4oVK1a02jn8q4T5EqitrS323HPPIkmxxRZbFEcffXT9z3369Cmee+65ti7xPeXOO+8s9txzz/pPRUVFkWSttjvvvHOtbU455ZQiSdGlS5fisMMOKw488MCiY8eORYcOHYpbbrmlbU5kA3b55ZfX/6V+xBFHFCeccEKjn3nz5q21nXlqfRMnTiySFJtuumnxsY99rDjuuOOKAw44oNhiiy2KJEXnzp2LG264ocF25qrtvVOYLwrz1NrWfJ8233zz4qCDDiqOO+64Yp999ik6d+5cJCl22mmntf7RuoZ5ahsnnHBCkaSorq4uDjrooOKjH/1o/QLB5z73uQbjL7300iJJ0bFjx+LAAw8sDjvssKKqqqpIUnznO99pgzN4b/nc5z5XJCnOOOOMdxzrO9X6Tj/99Pp/++20007FUUcdVeyzzz7FRhttVCQpPv/5z681ftWqVfULPz179ixGjx5dDB8+vKioqCiqqqqKP/zhD210Ju+OMF8Sy5YtK84555xi4MCBRadOnYrNN9+8GDNmTDF37ty2Lu09Z80/lt7uM3HixEa322OPPYouXboU1dXVxahRo4oHH3yw9U/gPeDcc899xzlKUrzwwgsNtjVPrev5558vzjrrrGKfffYptthii2LjjTcuunbtWuy0007FV77ylbddaTJXbWt9wnxRmKfW9NRTTxVf/OIXiyFDhhR9+vQpOnbsWPTo0aP48Ic/XIwfP75YtmzZOrc1T61v9erVxf/+7//W/7l37dq12GuvvYqrrrpqndvcfvvtxbBhw4pu3boV3bp1K4YNG1bccccdrVj1e9Py5cuLnj17FkmKJ554Yr228Z1qfTfffHNxwAEH1F+t0rNnz+KjH/1o8fOf/7zR8StXrizGjx9f7LTTTkXnzp2L3r17F6NHjy7+8pe/tHLl/7qKoiiKpl+sDwAAALQWD8ADAACAkhHmAQAAoGSEeQAAACgZYR4AAABKRpgHAACAkhHmAQAAoGSEeQAAACgZYR4AAABKRpgHANbpkUceSUVFRSoqKnL++ee3dTkAwN8J8wDAOl1zzTX1//u6665rw0oAgH8mzAMAjVqxYkV+8YtfJEk233zzPPPMM3n44YfbuCoAIBHmAYB1uOeeezJ//vzss88++dKXvpRk7ZV6AKDtCPMAQKOuvfbaJMnxxx+f448/Pklyww03ZMWKFY2Onz59eg455JBUV1ene/fu2XfffTN58uT87ne/S0VFRcaMGdNgm6Iocv3112fEiBHp2bNnOnfunB122CHnnXdeli1b1mLnBgBlJ8wDAA0sWrQot99+ezp16pSjjz4622yzTfbee+/Mnz8/99xzT4PxU6dOzV577ZU777wzAwYMyMEHH5zly5dn1KhRufnmmxs9xurVq/PJT34yxx13XB599NHstttuOeigg1JTU5Nx48blox/9aGpra1v6VAGglIR5AKCBSZMmZfny5TnwwAPTq1evJKlfnf9/L7VfvXp1xowZk2XLluWiiy7KE088keuvvz6PPPJI/vd//zff/e53Gz3G+PHjc/3112f48OGZNWtWfvvb3+bmm2/Os88+mxNPPDGPPPJIxo0b17InCgAlVVEURdHWRQAA7cvw4cMzZcqU3HjjjRk9enSS5I033sgWW2yRDh065LXXXkuPHj2SJPfee2/233//DB48OE8//XQ22mjttYKPfOQjefDBB3PCCSfkqquuSpKsXLkyW2yxRWpra/Pcc8/lfe9731rb1NbWZtttt01dXV3mz5/fYJ8A8F7nv4wAwFrmzJmT+++/P9XV1TnkkEPq23v37p2DDjooy5cvz4033ljf/uCDDyZJPvGJTzQauo855pgGbdOmTcv8+fOz9957NwjySVJVVZU99tgjCxYsyKxZs5rjtABggyLMAwBrue6661IURUaPHp3Kysq1+tZcar/m4XhJ8uqrryZJ+vXr1+j++vfv36DtxRdfTJJMnjw5FRUVjX7uuuuuJMn8+fObfE4AsKHp2NYFAADty5p74n/3u9/lIx/5yFp9b731VpLk/vvvz+zZszNgwIB/6RirV69OkgwaNCj77LPP247t3bv3v3QMANiQCfMAQL3HHnssM2bMSJI8++yzefbZZxsdVxRFrrvuupx11lnZYostkiRz585tdGxj7X379k2SvP/976+/jx4AWH8uswcA6q25fP70009PURSNfn73u9+tNXbNyvott9ySxp6r+8tf/rJB24c+9KH06NEjU6ZMyZtvvtlCZwMAGy5hHgBIkqxatSrXX399kuTYY49d57hhw4Zlq622yowZM/LYY49lxIgRGTx4cGbOnJlvfetba4296qqr8sADDzTYR2VlZb761a9myZIlOfLII/P88883GPPyyy83eA0eAPA3wjwAkCT59a9/nb/+9a/ZbrvtMmTIkHWO22ijjeqfUH/NNddko402ytVXX50uXbrka1/7Wnbbbbccd9xx2XPPPfOZz3wmX/7yl5MknTp1Wms/X/va1/KpT30qU6ZMyQ477JAPf/jDOfbYY/OJT3wiH/jAB9KvX7+MHz++5U4YAEpMmAcAkvzjwXdvtyq/xpox119/fVauXJm99torDz30UA4++OC88MILuf3227Pxxhvn7rvvzl577ZWk4YPsNtpoo/zsZz/Lbbfdlv333z8vvPBCbrrppvz+979P586dc8YZZ+SnP/1pM58lAGwYKorGbm4DAGgmJ510Uq644or84he/aPSd8wDAuyfMAwBN9uabb2bx4sXZeuut12q/4YYb8slPfjLdu3fPSy+9lK5du7ZNgQCwgfFqOgCgyZ555pnstdde2WWXXbLtttsmSWbMmJGZM2emQ4cOueKKKwR5AGhGVuYBgCZ7/fXXc/755+e+++7LK6+8kpqammy66abZe++9c/rpp9ffNw8ANA9hHgAAAErG0+wBAACgZIR5AAAAKBlhHgAAAEpGmAcAAICSEeYBAACgZIR5AAAAKBlhHgAAAEpGmAcAAICSEeYBAACgZP5/2RPsOioTNwAAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "%config InlineBackend.figure_format = 'png'\n", "ax = dftrain_raw['Age'].plot(kind = 'hist',bins = 20,color= 'purple',\n", " figsize = (12,8),fontsize=15)\n", "\n", "ax.set_ylabel('Frequency',fontsize = 15)\n", "ax.set_xlabel('Age',fontsize = 15)\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "25ab6193", "metadata": {}, "source": [ "年龄和label的相关性" ] }, { "cell_type": "code", "execution_count": 5, "id": "e8a0979c", "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABBQAAAKzCAYAAACu1l7wAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAADljklEQVR4nOzdeXhU5f3//+dMlslCFkICZGcn7DvIJosrCrihqLWtolW/rkitrdaPe9VWRXFrqy1qf1QNuFAR3FAEFcIOYQ17yEZIIBsh68z8/jiZQEggCZnMTJLX47pyneGcM/d5E2mTvHLf79tkt9vtiIiIiIiIiIg0gtndBYiIiIiIiIhIy6NAQUREREREREQaTYGCiIiIiIiIiDSaAgURERERERERaTQFCiIiIiIiIiLSaAoURERERERERKTRFCiIiIiIiIiISKMpUBARERERERGRRvN2dwFybjabjczMTIKCgjCZTO4uR0RERERERFo5u91OUVERUVFRmM1nn4egQMHDZWZmEhsb6+4yREREREREpI1JS0sjJibmrNcVKHi4oKAgwPgPGRwc7OZqREREREREpLUrLCwkNja2+ufRs1Gg4OEcyxyCg4MVKIiIiIiIiIjL1LfsXk0ZRURERERERKTRFCiIiIiIiIiISKMpUBARERERERGRRlOgICIiIiIiIiKNpqaMIiIiIiIiTmS327FarVRWVrq7FJEavL298fLyqrfZYoPHc8ooIiIiIiIibZzdbic/P5+cnBysVqu7yxGpk5eXFx07diQkJKTJwYICBRERERERESc4cuQI+fn51Vu+e3t7O+03wSJNZbfbqayspLCwkKysLEpKSoiMjGzSmAoUREREREREmshqtVJQUEBERATh4eHuLkfkrIKCgrBYLOTm5tKxY0e8vLzOeyw1ZRQREREREWmiiooK7HY7gYGB7i5FpF6BgYHY7XYqKiqaNI4CBRERERERESfREgdpCZz171SBgoiIiIiIiIg0mgIFEREREREREWk0BQoiIiIiIiLS4tx666106dLFLc82mUw89dRTbnm2J1GgICIiIiIiIvXatm0bM2bMID4+Hj8/P6Kjo7nkkkt444033F1am5SRkcENN9xAaGgowcHBXHXVVRw4cMClNWjbSBERERERETmn1atXM2nSJOLi4vjd735H586dSUtLIykpiXnz5nH//fe7vKZ3330Xm83m8ud6ghMnTjBp0iQKCgp47LHH8PHx4dVXX2XChAls2bKFDh06uKQOBQoiIiIiIiJyTn/5y18ICQlh/fr1hIaG1rh29OhRpzyjuLi4Udtu+vj4OOW5LdHbb7/N3r17WbduHSNGjABgypQp9O/fn1deeYXnn3/eJXVoyYOIiIiIiIic0/79++nXr1+tMAGgY8eOABw6dAiTycT7779f654zew489dRTmEwmdu7cyc0330z79u0ZN24cL7/8MiaTidTU1FpjPProo/j6+pKXlwfU7KFQUVFBWFgYt912W633FRYW4ufnx8MPP1x9rqysjCeffJIePXpgsViIjY3lkUceoaysrMZ7y8rKeOihh4iIiCAoKIjp06eTnp5e36er2X3yySeMGDGiOkwASEhI4KKLLmLhwoUuq0MzFEREREREROSc4uPjWbNmDdu3b6d///5OG/f666+nZ8+ePP/889jtdqZOncojjzzCwoUL+cMf/lDj3oULF3LppZfSvn37WuP4+PhwzTXX8Nlnn/HPf/4TX1/f6muLFy+mrKyMG2+8EQCbzcb06dP5+eefufPOO+nTpw/btm3j1VdfZc+ePSxevLj6vXfccQcLFizg5ptvZsyYMfzwww9ceeWVtZ5fUVFBQUFBg/7OYWFhmM3G7/bLysooKipq0PvCw8Or609OTmbWrFm17hk5ciTffvstRUVFBAUFNWjcplCgICIiIiIi0kzsdjslFVZ3l1HN38cLk8nU6Pc9/PDDTJkyhcGDBzNy5EjGjx/PRRddxKRJk5q09GDQoEF8+OGHNc5dcMEFJCYm1ggU1q9fz4EDB865s8LMmTOZP38+3377LVOnTq0+n5iYSLdu3Rg+fDgAH374IcuXL2flypWMGzeu+r7+/ftz9913s3r1asaMGcPWrVtZsGAB99xzD2+99RYA9957L7/61a9ITk6u8exffvmFSZMmNejvfPDgweqZFR999FGdsyrqYrfbATh+/DhlZWVERkbWusdxLjMzk969ezdo3KZQoCAiIiIiItJMSiqs9H3iG3eXUW3nM5cR4Nv4HwMvueQS1qxZwwsvvMA333zDmjVr+Nvf/kZERAT/+te/mD59+nnVc/fdd9c6N3PmTGbPns3+/fvp3r07YIQCFouFq6666qxjTZ48mfDwcBITE6sDhby8PL777rsa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GivQ4s3t47oC8MYP+7Da1EtBRERE3EOBgoiISDP7YE0qALeN7YKfj1eTx/vN6HhC/H04kFPM19vVS0FERETcQ4GCiIhIM9qZWcjWtHx8vEzMHBHrlDGD/Hz4zeh4AN775aBTxhQRERFpLAUKIiIizejj9YcBuLRvZ8LbWZw27i0XxONtNrEhNY9t6QVOG1dERKSluPXWW+nSpYtbnm0ymXjqqafc8mxPokBBRESkmZRWWPl8cwYAN408v50dzqZTsB9XDowENEtBRERcY9u2bcyYMYP4+Hj8/PyIjo7mkksu4Y033nB3aW1OSkoKDz30EGPGjMHPzw+TycShQ4dcXocCBRERkWbyw+6jFJVWEh3qz5juHZw+/q1jugCwdFsWBSUVTh9fRETEYfXq1QwfPpytW7fyu9/9jjfffJM77rgDs9nMvHnz3FLTu+++S0pKilue7W5r1qzh9ddfp6ioiD59+ritDm+3PVlERKSV+2KLsa3jtEFRmM0mp48/ODaUXp3asSf7BEu2ZnLLBfFOf4aIiAjAX/7yF0JCQli/fj2hoaE1rh09etQpzyguLiYwMLDB9/v4+DjluS3R9OnTyc/PJygoiJdffpktW7a4pQ7NUBAREWkGhaUV/JBifIM1fVBUszzDZDJx/TCj0eOijenN8gwRERGA/fv3069fv1phAkDHjh0BOHToECaTiffff7/WPWf2HHjqqacwmUzs3LmTm2++mfbt2zNu3DhefvllTCYTqamptcZ49NFH8fX1JS8vD6jZQ6GiooKwsDBuu+22Wu8rLCzEz8+Phx9+uPpcWVkZTz75JD169MBisRAbG8sjjzxCWVlZjfeWlZXx0EMPERERQVBQENOnTyc93f1fc8PCwggKCnJ3GZqhICIi0hy+25FNeaWN7hGB9Ilsvi/4Vw+J5sWvd7M1LZ+92UX07OT+by5ERKT1iY+PZ82aNWzfvp3+/fs7bdzrr7+enj178vzzz2O325k6dSqPPPIICxcu5A9/+EONexcuXMill15K+/bta43j4+PDNddcw2effcY///lPfH19q68tXryYsrIybrzxRgBsNhvTp0/n559/5s4776RPnz5s27aNV199lT179rB48eLq995xxx0sWLCAm2++mTFjxvDDDz9w5ZVX1np+RUUFBQUNa5IcFhaG2Wz8br+srIyioqIGvS88PLxB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luDl5cUVV1zR4PpWrlwJQPfu3Wucv/LKK2vUd741i4hIy5CcYcxO6NIhgJAAz2y8FRcWQOdgPyqsdjYdznN3OSIiItKKeGSg4Ovry3333QfAvffeW2MJwdy5c0lOTmbChAkMGzas+vybb75JQkICjz76aI2xIiMjuemmmygvL+eee+6hsrKy+tojjzxCTk4Ot9xyCx07dqw+v2vXLhYuXEh5eXmNsex2Ox9//DF/+9vfMJlM/Pa3v61x/cEHH8TLy4t//OMfJCUlVZ/fu3cvf/nLX/D29ubBBx9swmdGREQ8ybb0fAAGxoS6tY5zMZlMXNAtDIC1B465uRoRERFpTTxy20iAxx9/nOXLl7N69Wp69uzJ+PHjSU1NZe3atURERDB//vwa9+fm5pKSkkJWVlatsV577TWSkpL49NNPSUhIYPjw4ezYsYPt27fTs2dP5s6dW+P+7OxsZs6cSUhICMOGDaNz587k5+ezc+dODh06hNlsZu7cuYwYMaLG+3r37s1LL73EnDlzGD9+PJdccgm+vr58++23lJSU8Prrr9OjRw/nf7JERMQttnp4/wSHUd06sHhLJkkHjru7FBEREWlFPHKGAoCfnx8rVqzg//7v/wgICGDx4sWkpqZy6623smnTJrp169bgscLDw1m3bh33338/5eXlfP755xQUFPDAAw+wbt06wsLCatzfr18/nnnmGYYNG8aePXv49NNPWbFiBT4+PsyaNYv169cze/bsOp/10EMP8cUXXzB69Gh++uknvv/+e4YPH86SJUu4//77m/IpERERD5PcAmYoAIzqanyd25KWT2mF+iiIiIiIc5jsdrvd3UXI2RUWFhISEkJBQYGaOYqIeJDswlJGPf89ZhNsf/oyAnw9dtIfdrudkc9/T05RGR/97oLqRo0iIiIidWnoz6EeO0NBRETEk21NywegZ8cgjw4TwNFHwQgR1h5UHwURERFxDgUKIiIi52FbRsvon+DgWPawVn0URERExEkUKIiIiJyHltKQ0cGx08Omw3mUVaqPgoiIiDSdAgUREZHzsDOzEIB+0S0jUOge0Y7wdr6UVdrYmlbg7nJERESkFVCgICIi0khHi0rJPVGGyQQJnYPcXU6DmEwmRnWt6qNwQH0UREREpOkUKIiIiDTSrqwiALqGB3p8Q8bTjapa9rDukPooiIiISNMpUBAREWmk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yjUpUHjxxReZNGkSBQUF1ecKCwsZN24cixYtYufOnXz99ddcdNFF7N27t8nFioiI1KUyaxsA2ZYu4KUO/21OnDFLgbQkHr6sN0F+3mzPKCRR20iKiIg0qyYFCj/++CN9+/alV69e1efef/99srOzuemmm0hJSWHu3LmUlJTwyiuvNLlYERGRulhydwGQH9SrnjulVYodZRwPJxHezsLsi41/B3/7ZjfHTpS5sTAREZHWrUmBQkZGBt261ZxaunTpUry9vXnttdfo2bMns2fPZtCgQaxcubJJhYqIiJxNSOFuAErD+7q5EnGLuNHGMX0DWCv4zeh4+kQGk3+ygr8s3eXe2kRERFqxJgUKRUVFBASc2u3barWyZs0ahg0bRnh4ePX5hIQE0tPTm/IoERGRs4oq3QeAV6R2eGiTwnuBXyhUlsCRZHy8zLxw7QBMJvhscwY/7811d4UiIiKtUpMChaioKHbv3l39559//pkTJ04wceLEGvdVVlbi6+vblEeJiIjUrSSfzjajOXBg/GD31iLuYTbXWPYAMDg2lN9cYGxv/efF2yitsLqrOhERkVarSYHC6NGjSU5O5rXXXmPbtm08/vjjmEwmpk2bVuO+Xbt2ER0d3aRCRURE6lKWYTRkTLeH07lTpJurEbdxNGY8fGpnqYcv603nYD9Sj53kjR/UHFpERMTZmhQoPProo1gsFn7/+98zePBgfvnlFyZOnMiYMWOq7zl06BA7d+5k1KhRTS5WRETkTEWHNgGwhy4E+2mHhzareqeHtWA3tosM8vPhqen9APjnygOkHClyV3UiIiKtUpMChX79+vHzzz9zyy23cPnll/P444+zePHiGvd88803DBo0iKuvvropjxIREamTNTMZgAxLD0wmk5urEbeJGgJmHziRDXkHq09f3r8zl/TtRKXNzh8/TcZqs7uxSBERkdalyb/KGTp0KB988MFZr991113cddddTX2MiIhInXxydwKQF6wtI9s0H38jVEhfB4fXQtipXaieuaofa/YfY0taPh+sPsSscV3dWKiIiEjr0aQZCiIiIm5lrSC4yFgbX9qhn5uLEbeLq1pemZZU43RkiD+PXpEAwEvfpJB2/KSrKxMREWmVnLbY9PDhw2RlZVFWVnbWey688EJnPU5ERARy9+Btr6DQ7o9fhH7r3ObFXgC8UaMxo8NNI+L435ZM1h08zmOfb+M/s0ZqiYyIiEgTNTlQmD9/Ps8++yyHDx+u916rVVs2iYiIEx0xdnjYZY8nun2gm4sRt3M0ZszZDSePQ0BY9SWz2cSL1w7g8nk/8dPeXD7dlMGMYTFuKlRERKR1aFKg8N5773HHHXcA0L9/f3r16kVQUJBTChMREamXI1CwxZHQ3t/NxYjbBYZDhx5wbB+kr4del9W43C2iHQ9d3Iu/fr2bZ7/cyYReEUQEWdxUrIiISMvXpEBh7ty5eHt788knnzB9+nRn1SQiItIg9iPbMAE77fFcFKpAQTCWPRzbB4fX1AoUAH43vitfJmeyI7OQp77YwVu/GuqGIkVERFqHJjVl3Lt3LxdeeKHCBBERcT27HXuWMUNhtz2eziF+bi5IPIJj2cPhtXVe9vYy89frBuJlNrF0Wxbf7DjiwuJERERalyYFCmFhYYSHhzurFhERkYYrzMRcepxKu5nCdj3w8dLGRQLEjTaOGRuhorTOW/pHh3Dnhca2kv+3eDsFJRWuqk5ERKRVadJ3X1dddRW//PILFRX6QiwiIi5W1T9hvz2K8PYhbi5GPEaH7tCuE1jLIGPDWW978KKedA0P5GhRGS9+tcuFBYqIiLQeTQoUnn/+eQIDA7ntttvIy8tzVk0iIiL1yzYChZ32eKLVkFEcTCaIH2O8Tl191tv8fLx48doBAHy0Lo3V+3NdUZ2IiEir0qSmjL///e/p27cvH330EUuXLmXYsGHExMRgNtfOKUwmE//+97+b8jgREZFTqmYo7LTFE62GjHK6+LGw43M49DNMeOSst43q1oFfjYrjv2sP8+hn2/j6wQvx9/VyYaEiIiItW5MChffff7/6dUFBAT/88MNZ71WgICIiTnXk1AyFKzRDQU7XZZxxTFsHleXg7XvWW/80JYEfdh8l9dhJXlu+h0ev6OOiIkVERFq+JgUKK1ascFYdIiIiDVdWBMcPALDLFs/vNENBThfeG/zDoOQ4ZG2B2JFnvTXIz4fnru7P7R9s4N2fDnDlwEgGxoS6rFQREZGWrEk9FCZMmNCoj8YqKSnhiSeeoFevXvj5+REVFcWsWbPIyMho9Fh5eXk8+OCDxMfHY7FYiI+PZ/bs2eTn59d5f0pKCq+++io33XQT3bt3x2QyYTKZOHTo0Fmf8f7771ffV9fHjTfe2Oi6RUSkDtk7jYO9PccJJkYzFOR0ZvOpPgqHfq739ov6dGLaoChsdnjkk2QqrLZmLlBERKR1aNIMheZUWlrK5MmTSUpKIjIykquuuopDhw7x3nvv8eWXX5KUlES3bt0aNFZubi6jR49m3759dOvWjauvvpodO3Ywb948vvrqK9asWUNYWFiN9/z9739n3rx551X7oEGDGDx4cK3zo0aNOq/xRETkDEeSAdhhiwcgSjMU5ExdxsHuL43GjOPn1Hv7k9P68vPeHHYfKeKdVQe4d1IPFxQpIiLSsjklUDh27BgLFixg3bp15ObmctFFF/HII0YTpB07drB//34uvvhiAgICGjzmc889R1JSEqNHj+bbb7+lXbt2AMydO5ff//73zJo1ix9//LFBY82ePZt9+/Zx7bXXkpiYiLe38dd+4IEHeOONN5gzZ06NfhAAAwYM4I9//CMjRoxg+PDhXHbZZaSkpDToeVdffTVPPfVUQ/+qIiLSWKf1T2gf4EOAr8fm4+IujhkKh5PAWgle5/43Et7OwhPT+vJQ4lbmLd/LZf0606NjOxcUKiIi0nI1ackDwKJFi+jWrRtz5szho48+Yvny5ezevbv6ekZGBtdccw2fffZZg8csLy/nzTffBOCtt96qDhMA5syZw8CBA1m5ciUbN26sd6ysrCw++ugjfH19efvtt6vDBICXXnqJiIgIFixYwNGjR2u87/bbb+fFF1/kuuuuIz4+vsG1i4iIC2RtBap2eNByB6lLp/5gCYHyouoZLfW5enA0E3tHUG618ehnydhs9mYuUkREpGVrUqCwZs0abr75Zry9vXnllVdYt24ddnvNL74XXXQRISEhjQoUfvnlFwoKCujevTtDhgypdX3GjBkALFmypN6xvv76a2w2G+PHj6dTp041rlksFqZNm4bVamXZsmUNrk9ERNyosgyydwCwzd5VW0ZK3cxeEHeB8Tp1dYPeYjKZ+Ms1Awj09WL9oTz+uza1GQsUERFp+ZoUKDz//POYzWa+++47Zs+ezfDhw2vd4+XlxdChQ9m+fXuDx9261fjN09ChQ+u87jifnFz/bxycOVZDbdy4kT/84Q/cddddPPnkk6xcudJpY4uItHlHd4KtghKvYNLsHYkObfhyOmljuow1jqm/NPgt0aH+PHJ5AgAvfrWbjPyS5qhMRESkVWhSoLB69WpGjx591h/WHTp37kxWVlaDxz18+DAAMTExdV53nE9Nrf83B84cq6G+/PJLXn75Zd555x2eeeYZJk6cyMSJE8nOzq73vWVlZRQWFtb4EBGR02RuASDVtwdg0pIHObv4ccYxdTXYGr5zw68viGd4fHuKy6383+KG/0JERESkrWlSoHDy5EkiIiLqvS8vL69R4544cQLgrE0cAwMDASgqKnLpWPWJjIzkqaeeYvPmzRQUFHDkyBG++OILEhISWLlyJVOnTsVqtZ5zjBdeeIGQkJDqj9jY2CbXJSLSqmRtAWAHxk4/0aF+bixGPFrkQPAJhNJ8OLqjwW8zm028eN1AfLxM/LD7KCt2H63/TSIiIm1QkwKF6Ohoduw49xdou93O9u3b6dq1a1Me1SJcdtllPPnkkwwePJjg4GA6derEtGnTWL9+Pb169WLDhg0sXLjwnGM8+uijFBQUVH+kpaW5qHoRkRaiaobC+rI4AC15kLPz8oH40cbrg6sa9dYeHdsxa5zxvcuzX+6kvLLhMxxERETaiiYFCpdffjkpKSl8/PHHZ73nX//6F2lpaVx55ZUNHtexq8PJkyfrvF5cXAxAUFCQS8c6X+3ateOBBx4A4JtvvjnnvRaLheDg4BofIiJSpbLc6KEArC4xZnBpyYOcU9cJxrGRgQLAfZN6EN7OwoHcYj5Yfci5dYmIiLQCTQoU/vSnPxESEsJvfvMb/vjHP5KUlAQYP6Rv3ryZJ554gvvvv5+IiAgeeuihBo8bF2f81ik9Pb3O647zDdnO0ZljNUXPnj0BGtVLQkREznB0J1jLsVpCOGzviL+PF+0DfNxdlXiyrhcax0O/gLWyUW8N8vPhkct7A/D693vJKSpzdnUiIiItWpMChZiYGJYuXUp4eDgvvfQSY8eOxWQy8cknnzB8+HCee+45QkND+eKLL+jYsWODxx00aBAAmzZtqvO64/zAgQNdOlZTOPpIOHo2iIjIeajqn1AU2hdHQ0aTyeTWksTDdR4IfqFQXgSZdX8vcC4zhsYwIDqEorJKXvk2xfn1iYiItGBNChQARo8eTUpKCnPnzuXyyy8nISGBXr16MXnyZF588UVSUlIYNWpUo8YcO3YsISEh7N+/ny1bttS6/sknnwAwbdq0ese6/PLLMZvN/PTTTxw9WrOpUllZGUuWLMHLy4srrriiUTU21qeffgqcfftKERFpgKr+CVmBxrZ+UaFa7iD1MJuh63jj9cHGb+NsNpt4anpfABI3pLE9o8CZ1YmIiLRoTQ4UwOg/MHv2bJYuXcqOHTvYtWsX3333HY888gghISGNHs/X15f77rsPgHvvvbe6zwHA3LlzSU5OZsKECQwbNqz6/JtvvklCQgKPPvpojbEiIyO56aabKC8v55577qGy8tR0x0ceeYScnBxuueWWRs2gOJsXXniB3NzcGucqKip4+umnWbRoEf7+/tx2221Nfo6ISJtVNUNhv3cPAKIVKEhDOPooHGh8oAAwLD6MqwZHYbfDc0t3YrfbnViciIhIy+Xt7gLO5vHHH2f58uWsXr2anj17Mn78eFJTU1m7di0RERHMnz+/xv25ubmkpKTU2aPgtddeIykpiU8//ZSEhASGDx/Ojh072L59Oz179mTu3Lm13rNp0ybuueee6j+npqYCcM0112CxWAC44447uOOOO6rveeyxx3j66acZPnw4sbGxFBYWsmXLFjIzM/Hz82PBggVER0c75fMjItLmVJZDtrGzULKtCwAxasgoDdFtonFMWwcVJeDT+H83j1yewFfbj5B04Dir9uYyoVf922aLiIi0dk0KFFavXs2KFSvYtWsXeXl5mEwmwsLC6Nu3L5MmTWr0UofT+fn5sWLFCl544QU+/PBDFi9eTFhYGLfeeivPPvssMTExDR4rPDycdevW8dRTT7F48WI+//xzOnXqxAMPPMDTTz9NaGhorfcUFhaydu3aWudPX4Jx+eWX17j2xBNPsGbNGlJSUti0aRN2u52YmBjuuusuHnroIXr37t3gmkVE5Aw5u8BaDpYQtp4IA/I0Q0EapkMPCIqEoixIW3sqYGiE6FB/fnNBPP/6+SB//Wo343uEYzarf4eIiLRtJvt5zNtLTk5m1qxZbN68GaDW1D9Hg6yRI0fy73//m759+zqh1LapsLCQkJAQCgoKtIWkiLRtGz+AJQ9Al/GMy55Del4Ji+4ezYguYe6uTFqCz+6C5I9h3By4+MnzGuJ4cTkT/raCorJKXr9pCNMHRTm5SBEREc/Q0J9DGz1DYf369UyePJni4mICAwOZMmUKgwcPJjw8HLvdTm5uLps3b+abb75h7dq1jB49mh9//JEhQ4Y06S8kIiJtXFX/BFvkEI7sKQXUQ0EaodsEI1A4uOq8hwgL9OXOC7vxynd7eOXbFC7v1xlfb6e0oxIREWmRGhUoWK1WfvWrX1FcXMztt9/OK6+8cta0orCwkDlz5jB//nxuvvlmdu7cqa29RETk/FXt8FDQvi+VNjteZhMdgyzurUlajq4XGsfMTVBaAH6NbxoNMGtcVz5Yk0rqsZMkrj/Mr0d3cV6NIiIiLUyjYvX//e9/7Nu3j5kzZ/Luu++ec+pDcHAw//rXv7j++uvZs2cPS5YsaXKxIiLSRlkrqhsypvsZ/Wg6B/vh7aXfDksDhcRAWHew2+DQL+c9TKDFmwcuMnYZmff9Pk6WV9bzDhERkdarUd+JLVmyBLPZzPPPP9/g97zwwgsALF68uFGFiYiIVMveDtYy8Athf6XRXV87PEijdXNsH/ljk4a5cUQccWEB5J4o44PVqU2vS0REpIVqVKCwceNGevfuTdeuXRv8nm7dupGQkMDGjRsbXZyIiAgA6RuMY/Qw0vKM/gmxYQFuLEhapG6TjOP+H5o0jK+3mQcu6gnAv346oFkKIiLSZjUqUMjKyqJXr16NfkivXr3IzMxs9PtEREQAyKgKpaOHk55XAmiGgpyHbhPA5AXH9kLeoSYNddXgKOLCAjhWXM6Haw87pz4REZEWplGBQkFBASEhjW9iFBwcTGFhYaPfJyIiApwWKAwjLe8kALHtNUNBGskvBGJHGa/3fd+koXy8zNw7qTsA/1x1gNIKa1OrExERaXEaFShUVlZiNje+AZbZbKayUtMBRUTkPJTkQ+4e43XM8FOBgpY8yPnocZFxbGKgAHDNkBiiQ/3JKSrj43WapSAiIm2P2mOLiIhny9xkHEPjqfQLIyvf6KGgJQ9yXnpcbBwProTK8iYN5ett5p6qWQp/X7lfsxRERKTNaXSg8MEHH+Dl5dWoj//85z/NUbuIiLQF6VXLHWKGc6SwlEqbHR8vE52C/dxbl7RMnQdCYASUn4C0tU0ebsawGCJD/MguLGPRxnQnFCgiItJyNDpQsNvt5/UhIiJyXjIcOzwMJ+240ZAxOtQfL7PJjUVJi2U2Q3fHsoflTR7O4u3F3ROMWQr/+HE/5ZW2Jo8pIiLSUjQqULDZbOf9YbVqGqCIiDSS3X6qIWPMcNKr+ifEqCGjNIVj2YMT+igAzBwRS0SQhYz8Er5M1q5WIiLSdqiHgoiIeK78w1CcA2Zv6DyAtKotI2PD1D9BmqD7JMAE2dugMKvJw/n5eHHrmC4AvLPqgGZmiohIm6FAQUREPJdjuUOn/uDjrxkK4hyB4RA1xHi9/wenDHnLqHgCfL3YfaSIn/bmOmVMERERT6dAQUREPNdpDRkB0qt6KGiHB2my6mUPTe+jABAS4MPMEbGAMUtBRESkLVCgICIinistyTjGjDT+WDVDITZMMxSkiRyBwv4fwFrplCFvH9cVL7OJn/flsiOzwCljioiIeDIFCiIi4pnKT0LWVuN13CjKK20cKSwFIFZLHqSpooeBfxiU5p8Krpoopn0AVw6IBOBdzVIQEZE2QIGCiIh4psxNYKuEdp0hNJ7M/BLsdvDzMRPeztfd1UlL5+UNvS4zXqd85bRh77ywGwBLkrPIyC9x2rgiIiKeSIGCiIh4psNVvzWOGwUmE+l5jv4JAZhMJjcWJq1G7ynGcfdSY4tSJ+gfHcKY7h2w2uzM//mgU8YUERHxVAoURETEM6WtNY5xo40/Vu/woIaM4iTdJ4OXL+QdhNw9Thv2d1WzFBauT+NEmXP6M4iIiHgiBQoiIuJ5bLZTgULsKADSjlc1ZFT/BHEWSxB0vdB4nbLMacNO6BlBt/BAisoq+WxTutPGFRER8TQKFERExPPkpkBpAfgEQOcBANVLHmLDNENBnMix7MGJfRTMZhO/HdMFgA9WH8LupOUUIiIinkaBgoiIeJ7Da4xj9DDw8gFOX/KgGQriRL2qAoW0dXAix2nDXjcshnYWb/bnFPPzvlynjSsiIuJJFCiIiIjnOezon3BB9am041UzFBQoiDOFREPkIMAOe7522rDtLN7MGBYDwPu/HHLauCIiIp5EgYKIiHietKodHmKNQKG0wkruiTLjlJY8iLP1vtI47v7SqcP+ZnQ8AD+kHOXwsZNOHVtERMQTKFAQERHPUnQE8g4BJogdAUB61XKHdhZvQvx93FebtE59rzKO+38wenc4SbeIdkzoFYHdDv9Zc8hp44qIiHgKBQoiIuJZDv1sHDv3B78QAA4fP7VlpMlkcldl0lp1TIDw3mAthxTnLXsAuLWqOWPihjSKtYWkiIi0MgoURETEsxz6yTh2ubD6lGO6eHwH9U+QZuKYpbDzf04ddkKvCLp0CKCotJLPN2c4dWwRERF3U6AgIiKe5WBVoNB1fPWp1OOOQCHQHRVJW+AIFPYth7Iipw1rNpv49eguAPx37WFtISkiIq2KAgUREfEchZlwfD+YzBA/pvq0Y4ZCXJhmKEgz6dQPwrqDtQz2fOPUoa8bGo3F28yurEK2pOU7dWwRERF3UqAgIiKewzE7IXJQdf8EOH2GggIFaSYmE/S72njt5GUPoQG+XDkwEjBmKYiIiLQWChRERMRzHFplHLucWu5gs9mrmzLGh2nJgzQjx7KHvd9B2QmnDv2rUXEAfJmcSUFJhVPHFhERcRcFCiIi4jkcOzycFihkF5VSXmnDy2wiKtTPTYVJm9B5oLHsobIEdi916tBD49qT0DmI0gobn29Kd+rYIiIi7qJAQUREPEN+GuQdApMXxI+uPp1a1T8hOtQfby992ZJmZDLBwBuM18mJTh7axM1VsxTUnFFERFoLfWcmIiKewbFdZNQQsARVnz6s/gniSgOuN44HVsCJo04d+uoh0fj7eLH36Ak2pOY5dWwRERF3UKAgIiKeoY7tIkE7PIiLdegO0cPBboPtnzp16GA/H6YPigLgv0mpTh1bRETEHRQoiIiI+9lssP9743W3iTUuaYcHcblmWvYAVC97WLb9CMeLy50+voiIiCspUBAREffL3g4nssEnEOJG17h0+FgxAHHa4UFcpd+1Ri+PzM2Qu9epQw+MCaF/dDDllTY+3ajmjCIi0rIpUBAREffbt9w4dr0QvC01LmmGgrhcuwjocZHxujmaM46MB+DDdWrOKCIiLZsCBRERcT9HoOD4Ia5KQUkF+ScrAPVQEBcbONM4bvkQbFanDn3V4CgCfb04mFvMuoPHnTq2iIiIKylQEBER9yotgLS1xuseF9e45GjIGN7OQqDF29WVSVuWMBX820NhBuz73qlDB1q8mVbVnDFxQ5pTxxYREXElBQoiIuJeB1eBrRI69ICwrjUupR539E/wd0dl0pb5+MGgm4zXmz5w+vA3jIgFYNm2LApLK5w+voiIiCsoUBAREffa+51xPGN2AsDh6v4JasgobjD0N8Zxz9dQlO3UoYfEhtKzYztKK2x8sSXTqWOLiIi4igIFERFxH7v91HTyHpfUuuxY8qD+CeIWHftAzEhjBs3WD506tMlkYmbVLIWFWvYgIiItlAIFERFxn5zdUJgO3n7QZWyty6nHtMODuJljlsKm/xgBmBNdOzQGHy8TyekF7MwsdOrYIiIirqBAQURE3Gf3l8ax64XgU7tPwmFtGSnu1v9a8A2C4wfgwAqnDh0W6MslfTsBmqUgIiItkwIFERFxn91LjWPC1FqXyiqtZBaUABAXph4K4ia+gTD4ZuN10j+cPvzMEXEAfL45g9IK525PKSIi0twUKIiIiHsUpEPmZsAEvafUupyeV4LdDgG+XoS383V9fSIOo+4yjnu/gWP7nTr0uB7hRIX4UVBSwTc7jjh1bBERkeamQEFERNxj9zLjGDsK2nWsdTn1mGPLyABMJpMrKxOpqUN36Hmp8XrdO04d2stsYsZwNWcUEZGWSYGCiIi4x+4lxrFP7eUOAAdyjEChe0Q7V1Ukcnaj7jaOm/8Lpc5toHj9sBhMJvhl3zHSqvqGiIiItAQKFERExPVO5MChn43XCVfWecvBXCNQ6Bqu/gniAbpPhvBeUF4EW5y7hWRsWADjeoQDmqUgIiItiwIFERFxvZ2LwW6DqKEQ1q3OWxQoiEcxmU71UljzFlgrnDr8DVXLHj7ZmI7V5tztKUVERJqLAgUREXG9bZ8Yx/7XnfWW6kAhQoGCeIjBv4LACCg4fOrfsJNc2q8ToQE+ZBWUsmpvjlPHFhERaS4KFERExLXy0yAtCTBB/2vrvOVkeSVZBaUAdNMMBfEUPv4w+l7j9c9zwWZz2tAWby+uGRINQOI6LXsQEZGWQYGCiIi41o7PjGP8WAiOqvOWQ7lGY7r2AT6EBmjLSPEgw28HvxDI3XOqsaiTzBxhLHtYviub3BNlTh1bRESkOShQEBER17HbTzW0GzDjrLepf4J4LL9gGFnVS+GnV4x/006S0DmYQbGhVNrsfLYp3WnjioiINBcFCiIi4joZGyFnN3j7n3W5A8DB3BMAdA3XlpHigUbdDT4BkLUV9nzt1KFnVjVnTFyfht2JYYWIiEhzUKAgIiKus+k/xrHvVca08bM4UDVDoZsaMoonCuxwaseH758Bm9VpQ08bFIm/jxf7c4rZdDjPaeOKiIg0BwUKIiLiGuXFsL2qf8LQX5/zVi15EI839kEjFDu606k7PgT5+TB1YCQAH6s5o4iIeDgFCiIi4hrbPoHyImjf1WjIeA4KFMTj+beHsbON1yueg8pypw3taM74ZXIWRaUVThtXRETE2RQoiIhI87PbIenvxusRd4DJdNZb84rLyT9p/BDVpYMCBfFgo+6Gdp0h/zBsfM9pww6Lb0/3iEBKKqws2ZrltHFFREScTYGCiIg0v4MrIWcX+ATCkFvOeaujf0JUiB/+vl6uqE7k/PgGwIQ/GK9/fBFOHnfKsCaTiRtHxAGQuEHLHkRExHMpUBARkeaX9A/jOPhm8A89563Vyx3UkFFagqG/hYg+UHIcfnzBacNeMzQaHy8TW9Py2ZVV6LRxRUREnEmBgoiINK/snbDnK+O1ozP+OZzaMlKBgrQAXj4w5a/G6/X/giPbnTJseDsLl/TtBBhbSIqIiHgiBQoiItK8Vv3NOPa9CsJ71nv7qYaM7ZqzKhHn6TbB+Pdtt8FXfzR6hjjBDcON5oyfb86gtMJ5W1OKiIg4iwIFERFpPkd3w47FxusJf2zQWw7kGIFCN81QkJbk0ufA2x9Sf4bkRKcMOb5nBFEhfhSUVPDNjiNOGVNERMSZFCiIiEjzWfEXwA59pkGnfvXebrPZOXRMW0ZKCxQaBxc+bLz++k9wIqfJQ3qZTVxfNUthoZozioiIB1KgICIizePgT7DrCzCZYeKjDXrLkcJSSitseJtNxLT3b+YCRZxs7IPQaQCU5MFXjzhlyOuHx2AywS/7jnH42EmnjCkiIuIsChRERMT5bFb4uipEGD6rQbMTAPbnGA0Z4zoE4O2lL1HSwnj5wFVvgskLdnwGu5c2eciY9gGM7xkBaJaCiIh4Ho/+bq2kpIQnnniCXr164efnR1RUFLNmzSIjI6PRY+Xl5fHggw8SHx+PxWIhPj6e2bNnk5+fX+f9KSkpvPrqq9x00010794dk8mEyWTi0KFD9T5ryZIlTJgwgeDgYIKDg5k4cSJLlzb9mwoRkRZj7T8hexv4hcDExxr8tr3ZRqDQs6MaMkoLFTUYxtxvvF4yG4pzmzzkzKplD4s2plFptTV5PBEREWfx2EChtLSUyZMn8+yzz3LixAmuuuoqYmNjee+99xgyZAgHDhxo8Fi5ubmMHDmS119/HW9vb66++mqCgoKYN28eo0aN4vjx47Xe8/e//505c+bw8ccfN+pZr732GtOnT2f16tWMHTuWyZMns27dOqZOncqbb77Z4HFERFqsnBT4/mnj9cVPQWCHBr91X9UMhR4KFKQlm/gniEiA4qPwv/uavOvDxX07EhboS3ZhGav2Nr03g4iIiLN4bKDw3HPPkZSUxOjRo9mzZw+JiYmsXbuWV155hZycHGbNmtXgsWbPns2+ffu49tprSUlJITExke3bt3P//fezZ88e5syZU+s9AwYM4I9//COffPIJhw4donfv3vU+JyUlhYcffhiLxcKqVav46quvWLx4MVu2bKFDhw489NBD7Nu3r1GfBxGRFqWiFD67EypLocfFMOy2Rr1931HHDIWg5qhOxDV8/OG6f4GXL+z5Cja+16ThLN5eXDskGoCP12nZg4iIeA6PDBTKy8urf5v/1ltv0a7dqd9UzZkzh4EDB7Jy5Uo2btxY71hZWVl89NFH+Pr68vbbb+Pt7V197aWXXiIiIoIFCxZw9OjRGu+7/fbbefHFF7nuuuuIj49vUN3z5s3DarVy9913M3r06OrzvXr14s9//jOVlZXMmzevQWOJiLQ4djsseRCytoBfKEx/A0ymRg3hCBQ0Q0FavM4DjBk6AF8/Zmyh2gQzRxjLHr7ffZSjRaVNLE5ERMQ5PDJQ+OWXXygoKKB79+4MGTKk1vUZM2YARq+C+nz99dfYbDbGjx9Pp06dalyzWCxMmzYNq9XKsmXLmly3o0+Co77zrVlEpEVa+TdI/thoSHf9+xAc1ai3HztRxvHicgC6RWjLSGkFRv0/6D4ZKktg4a+hrOi8h+rZKYihcaFYbXY+3dj4XlIiIiLNwSMDha1btwIwdOjQOq87zicnJ7t0rHPJz8/n8OHDAHWGILGxsYSHh5OamkphYWGTniUi4lHsdvj+WfjxeePPU/4K3Sc1ehjH7ISY9v4E+HrXc7dIC2A2wzXvQFAU5O5pcj+FG0fEAcZuD/Ym9mUQERFxBo8MFBw/mMfExNR53XE+NTXVpWM15Dnt27cnMLDu36w561kiIh6jtAA+mQU/vWz8+ZJnYOTvzmsoNWSUVqldBNzwAZi9YediSPr7eQ915cBIAn29OJhbzLqDtRtKi4iIuJpHBgonThjfVAYEBNR53fEDe1FR/VMHnTlWU57T0GeVlZVRWFhY40NExGmsFVCYBTl7IO8QFB2ByvLGj2OzwpaP4O9jYcdnxg9LV74CYx8879K0ZaS0WrEj4bKqGTzf/R+krj6vYQIt3kwfbCwl+ni9mjOKiIj7aU6ph3nhhRd4+umn3V2GiLQWdjtkbIRtiyD1F8jeCXZrzXtMZmNKdvsu0D4eQuNPHUNiwDfQGKckD3JTjB+GdiyGwnTj/aFxcN18iB3RpFL3a4aCtGYj74S0dbD9E1j4G/jdD8b/dhpp5og4PlqXxrJtWTwxtS/tA32boVgREZGG8chAwbGrw8mTJ+u8XlxcDEBQUP3bijlzrKY8p6HPevTRR2tsY1lYWEhsbGyTahORNshuh33L4ftn4MgZPWJMXmAJMmYrVJaA3WaEA4XpkPpzw5/hFwrjZsPIu8D37LOzGurUDg/aMlJaIZMJpr9uhHJHtsGHN8Lt3xj/W2yEQTEh9I0MZmdWIZ9sTOd3F3ZrpoJFRETq55GBQlyckdinp6fXed1xviHbOTpzrIY8Jy8vj+Li4jr7KDTkWZb/v737jo6qWvs4/p2STHqDAAFCTWjSQToiNhBEQBBFuYK9g2K59u7r9So27F4RFUQERGkqRUQEAekCoUMInUB6T+a8fxwSiAmQQGYm5fdZa9bsnLL3M7NXpjyzz94OBw6H44JiEZEqLv0EzB4NMSdXlfHyg+YDoGk/qNMBguqYk8WBmXhIPQqJsZAQa14GkRh76u/kg+DMMY/1DjBHMUS0gSZ9Ifoq8PIpk5BTMnM4lGQuhacRClJpefvD8G/h095wdDN8fxfcMAmsthJXYbFY+FfX+jz5/d9MXhnL7T0aYrWWbnlWERGRslIuEwpt2rQBYO3atcXuz9/eunVrt9Z1NiEhIdSrV499+/axbt06evToUWh/XFwc8fHx1K9fn6CgoAtqS0TkjA5tgG9ugJRDYPWCzndDj7HgX6344y0WCKxp3iI7FX9MXi5ggM3LZWHvOmaO4AoPdBDs67p2RDwuuC4MnwJf9INt82DhC3DVy6WqYmDb2vzf3Bj2Hk9n2a54ekaHuyZWERGRcyiXkzJ2796d4OBgdu3axfr164vsnz59OgADBgw4Z119+/bFarWydOlSjh49WmhfVlYWs2fPxmaz0a9fvwuOu3///oXiO9+YRUTOy+4l8EV/M5lQLRruWAh9Xj1zMqGkbHaXJhMAdhwxJ6vVhIxSJdTtCIM+NMvL34N1k0p1up+3neva1wHg6z+1cpSIiHhOuUwoeHt788ADDwBw//33F8w9APDWW2+xceNGevXqRYcOHQq2v//++zRr1ownn3yyUF0REREMHz6c7Oxs7rvvPnJzcwv2Pf744xw7dowRI0ZQo0aNC457zJgx2Gw2Pv74Y1asWFGwfceOHbz66qvY7XbGjDn/GdBFRM5o30pzZEJ2CjToCXcugtptPR1ViW1XQkGqmlZDode/zfLsh2BvKeYvAUZ0MS+fXBhzhENJGWUcnIiISMmUy0seAJ555hkWLlzI8uXLiY6OpmfPnsTGxrJy5UrCw8OZMGFCoePj4+PZtm0bhw4dKlLXO++8w4oVK5gxYwbNmjWjY8eObN68mU2bNhEdHc1bb71V5Jy1a9dy3333FfwdG2v+AjB48OCCOQ7uuOMO7rjjjoJjmjZtyhtvvMHYsWPp2bMnV155Jd7e3syfP5+MjAzee+89oqKiyuT5EREpcHQrfDPMnGAx+irzmmx7xZqLZethM6HQLEKXhEkV0usJiN8Om2fC1BFwxyKo1rhEp0bXDKRzwzBW7jnBlFVxjL2yiYuDFRERKapcjlAA8PHxYfHixTz77LP4+fnxww8/EBsby6hRo1i7di2NGpV8VuPq1auzatUqHnzwQbKzs5k5cyZJSUmMHj2aVatWERYWVuSc5ORkVq5cWXDLzDQnC1u/fn3BtuImenz44YeZNWsWXbt2ZenSpSxatIiOHTsye/ZsHnzwwfN/QkREipOVAlNvhsxEqHsxXP9lhUsmAGw7mVBoWksrPEgVYrXCoI+gTkdzWdbJ15uTqpbQv7qaoxS+XbWPnDynq6IUERE5I4thGIang5AzS05OJjg4mKSkJE3mKCKFGQZMvw02f2+u3HD37+Bf3dNRldqJtGzav7wAgE0v9iHAUW4Hz4m4RupR+OwySIozL1ka8T3Yvc95Wnauk27/+ZX41Cw+vLk9/VpFuCFYERGpCkr6PbTcjlAQEZFz2DDFTCZY7XD9xAqZTADYejgZgMgwXyUTpGoKqAE3TQXvQNi7FOY8bCYMz8HbbuXGiyMBmLRCkzOKiIj7KaEgIlIRpRyGn58wy72fPvOSjxVA/uUOzWppFJZUYTUvMhODFiusnwTL3inRacM718NqgeW7jrPzaIpLQxQREfknJRRERCqiuY9AZhJEtIVuoz0dzQU5lVDQ/AlSxUVfAX1fN8sLX4Ats855Sp0QXy5vXhOAL5drlIKIiLiXEgoiIhXNzoWwdY55qcPAD8BWsS8T2KoJGUVO6XwXdLrLLH9/FxxYe85Tbu3WAIDpa/aTlJ7jwuBEREQKU0JBRKQiycuFX542y53uglotPRvPBXI6DbYf0QgFkUL6vAZRV5pLwU65EZKKrip1uq6Nq9GsViAZOXlMXb3PTUGKiIgooSAiUrGs+QKObQXfMOj1uKejuWD7EzJIz87D226lQTV/T4cjUj7Y7DB0AtRoAalH4JsbzCViz8BisXBr9waAedlDrpaQFBERN1FCQUSkoshOgyX/Ncu9nwLfUM/GUwZiTq7wEF0jALtNb0kiBXyCzJUf/GvAkU0w/XZw5p3x8IFt6xDm782BxAwWbDnixkBFRKQq06c3EZGKYtVnkHYUQupDh1GejqZMbNP8CSJnFlIPhk8Buw/s+AUWv3rGQ328bNzcuR4AE5btcVeEIiJSxSmhICJSEWSlwLJ3zXKvf4PNy7PxlJGtJ0coaP4EkTOo29GcfBVg6TjYOu+Mh47oUh8vm4W/9ibw9/4kNwUoIiJVmRIKIiIVweoJkHECqkVB6xs8HU2Z2XzQTChcVDvYw5GIlGOthkKnu83yzHvg+K5iD6sZ5EP/VhEAfKFRCiIi4gZKKIiIlHe52bDiY7Pc4+EKv0xkvuTMHGKPpwNwUe0gD0cjUs5d9QpEdoasJPjuFshOL/aw23o0BGD2xoMcTsp0Z4QiIlIFKaEgIlLebf4eUg5CQE1odb2noykzW06OTqgT4kuIn7eHoxEp5+zecP1E8A83J2mc8zAYRpHDWtcNoVODMHLyDD7/Y7f74xQRkSpFCQURkfLMMGD5eLPc+W6wOzwbTxnadMC8xrtlHY1OECmRoNow9Auw2GDjt+YyssW499LGAHyzch9J6TnujFBERKoYJRRERMqz3YvNXyO9/KHDrZ6Opkxt0fwJIqXXsCdc8bxZ/vlJOBpT5JBLm4bTrFYgadl5fL1ir3vjExGRKkUJBRGR8ix/dEL7f4FfmGdjKWObDmqEgsh56fogNL4ccjNh+u2QU3iuBIvFwj29zFEKXyzbS2ZOnieiFBGRKkAJBRGR8ur4Ltj1K2CBzvd4OpoylZGdx86jqQC01AgFkdKxWmHwx+Z8Ckc3w4JnixxyTesI6ob6cjwtm2mr4zwQpIiIVAVKKIiIlFdrvzTvo66AsIaejaWMbT2cjNOA6gEOagT5eDockYonoAYMOrn6y6pPYdtPhXbbbVbu7NkIgE9+301untPdEYqISBWghIKISHmUmw3rJpvlDqM8GoorbDo5f4IudxC5ANFXQJf7zfKP90PqsUK7h3WMJMzfm/0JGcz9+5AHAhQRkcpOCQURkfJo6xxIj4eAWtCkr6ejKXOb81d40OUOIhfmiuehZktIPw5zHiq0lKSvt41buzUA4MPFu3A6iy4zKSIiciGUUBARKY/yl4Nr/y+w2T0biwtsLljhQSMURC6I3QGDPgKr3UxE/j2t0O5bujYg0GFn25EUftp02ENBiohIZaWEgohIeXN8F+z5HbBA+1s8HU2Zy8zJY+vh/EseNEJB5IJFtIZe/zbL8x6F5IMFu4L9vLi9pzkHyzsLt5OnUQoiIlKGlFAQESlv1k0y76OugJB6no3FBTYfTCYnz6B6gDd1Q309HY5I5dDjYajdDjKTYNaDhS59uK1HQ4J87Ow4msqcjQfPUomIiEjpKKEgIlKeOJ2nhiy3u9mzsbjI+rhEANpGhmCxWDwbjEhlYfMyV32wOWDnQlj/TcGuIB+vghUf3l20Q6MURESkzCihICJSnsQug6Q4cARDk6s9HY1LnJ5QEJEyVKMZXPqEWZ7/dKFVH0Z1b0CInxe7j6Uxa8MBDwUoIiKVjRIKIiLlycZvzfuLBoKXj2djcZH1cQkAtI0M9XAkIpVQtwehZivISIBfnirYHHjaKIX3Fu0kN8/pqQhFRKQSUUJBRKS8yE6HzT+a5dY3ejYWF4lPzSLuRAYWC7SO1ISMImXO5gXXvgtY4O/vzMsfThrZrQFh/t7siU/j+3UapSAiIhdOCQURkfJi2zzIToHgelCvq6ejcYn1+xIBiAoPIMjHy7PBiFRWdTpA53vM8pyHITsNgACHnbsvMUcpvL1gO5k5eZ6KUEREKgklFEREyouNU8371sPAWjlfnjV/goibXPY0BNWFxH3w238KNo/s1oDawT4cSspkwrI9HgxQREQqg8r5iVVEpKJJOw47F5nl1jd4NhYXKkgo1AvxaBwilZ4jEPqPM8t/fgCHNgDg42Xj0T5NAfho8S6Op2Z5KkIREakElFAQESkPts4BIw9qtYLwJp6OxiWcToMNGqEg4j5N+8JFg83XlrmPmMvSAoPa1qFFRBApWbmM/3Wnh4MUEZGKTAkFEZHyYPNM877FII+G4Uo7j6WSkpWLr5eNpjUDPR2OSNXQ5zXwDoD9f8GGKQBYrRae6tccgEkrYtkbn+bJCEVEpAJTQkFExNPSjsOe383yRYM9G4sLrdxzAoD29UOw2/T2I+IWQRHQ699mecFzkJEIQI/o6vRqEk6u0+DVeTGei09ERCo0faITEfG00y93qNbY09G4zKqTCYVODap5OBKRKqbzPVC9CaTHw2+vFWx+pn9z7FYLC7YcYfG2ox4MUEREKiolFEREPC3/codKPDrBMAz+OplQuLhhqIejEali7N5w9X/N8qpP4fAmAKJrBnJr9wYAvDR7C1m5WkZSRERKRwkFERFPOv1yh0o8f0LciQwOJ2fiZbPQLlIJBRG3a9wbWgwEwwnzHgPDAGD05dGEBzrYE5/G539oGUkRESkdJRRERDyp4HKH1pX6coeVe44D0LpuCL7eNg9HI1JFXfUq2H1h33L4ezoAgT5ePNWvGQDjF+3kYGKGJyMUEZEKRgkFERFPKrjcYZBHw3C1gvkTGoZ5OBKRKiwkEi55xCzPfwayUgBzGcmLG4SSkZPH87M2Y5wcvSAiInIuSiiIiHhKFbncAWDVXiUURMqFbqMhrBGkHoYl5rwKFouFVwa1Kpigcd7fhz0cpIiIVBRKKIiIeMq2eVXicocjyZnEHk/HYoEO9TV/gohH2R3Q9z9meeXHcGI3AE1rBXLfpebr0POzNpGYnu2pCEVEpAJRQkFExFO2/WTeNx/g2ThcbMVuc/6E5rWCCPLx8nA0IkL0VdD4MsjLhgXPFWy+/7IoomoEEJ+azStzYzwYoIiIVBRKKIiIeEJOBuxebJab9PVsLC72x454ALpHVfNwJCICgMViTtBosULMbNj7BwAOu43Xh7TCYoHpa/azZPsxDwcqIiLlnRIKIiKesOd3yEmHoLpQq5Wno3EZwzBYejKh0DM63MPRiEiBmi2gwyiz/MtT4HQC0KF+GCO7NgDg8ekbdOmDiIiclRIKIiKekH+5Q9O+5q+FldTOo6kcTs7EYbdqQkaR8qb30+AIgkMbYMOUgs3/7tuMRuH+HEnO4qmZf2vVBxEROSMlFERE3M0wYPvPZrnJ1Z6NxcV+Pzk6oVPDMHy8bB6ORkQK8a8Olzxmlhe9CFmpAPh623jnhrbYrRbm/X2Y79ce8GCQIiJSnimhICLibofWQ8oh8PKHBj08HY1LLd1hXoN9iS53ECmfOt8NoQ0h9Qgse6dgc+u6ITx8ZRMAnp+1mbgT6R4KUEREyjMlFERE3G3bydEJjXuDl49nY3GhrNy8ghUeejap7uFoRKRYdgdc9bJZXj4eEuMKdt3TqzEd64eSmpXL/d+sJSs3z0NBiohIeaWEgoiIu23Pnz+hn2fjcLE1exPIzHESHuigac1AT4cjImfS7Bqo3wNyM2HhCwWbbVYL7w5vR4ifFxv3J/GqlpIUEZF/UEJBRMSdkg6YE6BhMdeCr8SWnLzcoWd0dSyVeOJJkQrPYoG+/wdYYNN0iPurYFedEF/evqEtAF/9GcusDQc9E6OIiJRLSiiIiLhT/mSMdS+GgMo9r8DCLUcA6NWkcj9OkUohog20u9ks//yEOXnsSb2b1uCB3lEAPDFjIzuOpHgiQhERKYeUUBARcaf8hELTyr26w86jqew6loaXzULvZjU8HY6IlMRlz5qTxR5YDX9PL7Tr4Sub0LVRNdKz87jjq9UkpGV7KEgRESlPlFAQEXGX7DTYvcQsV/KEwoKToxO6Nq5OkI+Xh6MRkRIJrAU9HzbLC1+AnIyCXTarhfdvakdkmC+xx9O5Z9IasnOdnolTRETKDSUURETcZddiyMuCkPoQ3szT0bjU/C2HAehzUU0PRyIipdL1AQiqC8n74c8PCu2qFuDg85EXE+Cws3LPCZ6ftQnjtEsjRESk6lFCQUTEXQpWd7janAStkjqanMm6fYkAXNlcCQWRCsXLF654wSz/8TakHCm0u0nNQMYPb4fVAlNWxTFh2V63hygiIuWHEgoiIu7gdML2+Wa5sl/uEGN+AWlXL4QaQT4ejkZESq3VUKjTEbJTYfErRXb3blaDp/o1B+DVuVv4edMhd0coIiLlhBIKIiLucHAtpB0FRxDU6+bpaFzql81mQuGqFrU8HImInBeLBfr8n1le+zUc/rvIIbf3aMhNnevhNGD0lPUs3xXv5iBFRKQ8UEJBRMQdts0z76MuB7u3Z2NxoWMpWSzbaX6x6NtSCQWRCqteZ7joOsCAX54qtIwkgMVi4eWBLelzUU2y85zc9dUaNh1I8kysIiLiMUooiIi4w7b85SL7eTYOF5u94SB5ToO2kSE0rO7v6XBE5EJc8QLYHLDnd9j+S5HdNquFd29sR+eGYaRm5TLqi1XsjU9zf5wiIuIxSiiIiLhaQiwc3QwWG0Rd4eloXOqH9QcAGNyujocjEZELFlofut5nluc/A3k5RQ7x8bLx2ciOtIgIIj41m5v/t5L9CeluDlRERDxFCQUREVfbfnJ0Qr0u4Bfm2VhcaOfRVDbuT8JutTCgTW1PhyMiZaHHWPCrDsd3wOoJxR4S5OPFl7d1omF1fw4kZjD8sxUcTMxwc6AiIuIJSiiIiLjatpPLRTbp69k4XGzmuv0AXNo0nDD/yjtPhEiV4hMElz1tln97DTISij0sPNDBlDu7UL+aH3EnzKTC4aRMNwYqIiKeoISCiIgrZSbD3j/MciWeP8HpNPhh3UEABulyB5HKpd0tUKOFmUxY8sYZD6sV7MOUO7sQGeZL7PF0hn+2giPJSiqIiFRmSiiIiLjSrl/BmQPVoqB6lKejcZmlO+M5kJhBoI+dK5rX9HQ4IlKWbHa46hWzvOpTOL7rjIfWDvFlyp1dqBPiy574NIZ/toKjSiqIiFRaSiiIiLhSFbncYdKKWACGtK+Lj5fNw9GISJmLuhyirzITpAueO+uhdUP9+PYuM6mw+1gawz75kwOaU0FEpFJSQkFExFWcebBjvlmuxJc7HEzMYFHMEQBGdKnn4WhExGWuesVcrWbrHHMpybOIDDOTCpFhvuw9ns6wj/8k9riWlBQRqWyUUBARcZW4VZBxAnxCILKzp6NxmW9W7sNpQJdGYUTVCPR0OCLiKuFNoeNtZvmXp8yk6VlEhvnx3d1daXRy9YfrP/6TnUdT3BCoiIi4ixIKIiKusm2eeR99lXkNciWUlpXL1ycvdxjVrYFngxER17v0SXAEw+G/YcOUcx4eEezL1Lu70rRmIEdTsrjhkxVsOZjshkBFRMQdlFAQEXGV7T+b900r7/wJ362OIykjhwbV/LiyRS1PhyMiruZfDXo9ZpYXvQxZqec8JTzQwbd3daFlnSCOp2Uz/LMVbIhLdG2cIiLiFkooiIi4wvFdEL8drHaIusLT0bhETp6Tz//YA8AdPRths1o8HJGIuEWnuyC0AaQehmXvluiUUH9vJt/Rhfb1QkjKyOHm/63kr70nXBuniIi4nBIKIiKukD86oX538An2bCwuMmPNfvYnZFA9wJuhHep6OhwRcRe7A658ySwvHw9J+0t0WrCvF1/f3pkujcJIzcrlls9XsWxnvAsDFRERV1NCQUTEFfKXi2x6tWfjcJGs3DzG/7oTgHt6NdZSkSJVTfNroV43yM0wL30oIX+HnYm3dqJXk3AycvK4deJfLN561IWBioiIK5XrhEJGRgbPPfccTZo0wcfHh9q1a3Pbbbdx4MCBUteVkJDAmDFjqF+/Pg6Hg/r16/PQQw+RmJh4xnPy8vJ4++23adWqFb6+voSHhzNs2DBiYmKKPX7ixIlYLJYz3m688cZSxy0iFVBGAsQuN8tNKuf8CVP/iuNAYgY1Ah2M6FLf0+GIiLtZLNDnVbO88VvYv6bEp/p42fj0lg5c1aIm2blO7v56DQu3HHFRoCIi4krldtrxzMxMLrvsMlasWEFERAQDBw5k7969fPHFF8yZM4cVK1bQqFGjEtUVHx9P165d2blzJ40aNWLQoEFs3ryZd999l59++ok///yTsLCwQuc4nU6uv/56Zs6cSUhICP379yc+Pp7p06czd+5cFi9eTKdOnYptr02bNrRt27bI9s6dK++ycSJymp2LwMiD8OYQ1tDT0ZS5pIwc3l6wHYAHLovS6ASRqqpOe2hzE2z4BuY9CncsAmvJfqty2G18cHN7Hvp2PXP/PsS9k9cwfnh7+rbU5K4iIhVJuU0ovPLKK6xYsYKuXbsyf/58AgICAHjrrbd45JFHuO222/jtt99KVNdDDz3Ezp07ue6665g6dSp2u/mwR48ezfjx4xk7diwTJ04sdM6ECROYOXMm0dHRLF26lJo1awIwY8YMhg4dys0330xMTExBXacbNGgQL7zwwnk/dhGp4PKXi6ykqzuMX7SDhPQcomoEMLxTPU+HIyKedMULEDMbDq6F9ZOh/b9KfKqXzcq7N7bFarUwe8NBHvhmLe8Nb0e/VhGui1dERMpUubzkITs7m/fffx+ADz74oCCZADB27Fhat27NkiVLWLPm3MPrDh06xJQpU/D29ubDDz8slAB44403CA8PZ9KkSRw9Wvj6vbfeeguA//73vwXJBIAhQ4Zw7bXXsnPnTn788ccLepwiUgnl5cCOhWa5SeWbP2Hr4WQmLt8LwLPXtMDLVi7fRkTEXQJrwqX/NssLX4CMxFKdbrdZeXtYGwa3q0Ou0+DBKeuYveFgmYcpIiKuUS4/CS5btoykpCQaN25Mu3btiuwfOnQoALNnzz5nXT///DNOp5OePXsWSgwAOBwOBgwYQF5eHvPmzSvYvmfPHmJiYvD19aV///4X1L6IVDH7/oSsJPCrDnU7ejqaMpXnNPj3jL/JdRpc1aImvZqEezokESkPOt0N1ZtAejwseb3Up9ttVt68vg1DO9Qlz2kw5tt1/LCu9PNliYiI+5XLhMKGDRsAaN++fbH787dv3LjRJXXln9OyZUu8vLxK3f6aNWt47LHHuPvuu3n++edZsmTJOeMUkUpi28nlIpv0AWvlmlvgf0t3syEukUCHnZcHtfR0OCJSXti94eqTiYSVn8DR4ievPhub1cJ/h7TmxosjcRrw8Hfrmb6mZMtRioiI55TLORT27dsHQN26xa9rnr89NjbWJXVdaPtz5sxhzpw5BX+/9NJL9OrVi6lTpxYZJfFPWVlZZGVlFfydnJx81uNFpBwxjFPzJ1Sy1R3W7UvgjV+2AfB0/+bUDPLxcEQiUq40vgyaXQNb58BPj8Mts8yVIErBarXwf4NbYbVa+GblPh6bvgG71cKgdnVcFLSIiFyocjlCITU1FQA/P79i9/v7+wOQkpLikrrOt/2IiAheeOEF1q1bR1JSEocPH2bWrFk0a9aMJUuWcM0115CXl3fWeF977TWCg4MLbpGRked8jCJSTsRvh4Q9YPM2P1xXEkkZOTw4ZR25ToP+rSK44WK9LolIMfq8CnYf2PM7bDm/eaasVguvDmrJiC71MAx4ZNoGft50uIwDFRGRslIuEwoVVZ8+fXj++edp27YtQUFB1KxZkwEDBvDXX3/RpEkTVq9ezXfffXfWOp588kmSkpIKbnFxcW6KXkQuWP7ohIaXgCPg7MdWEHlOg0e+W8/+hAwiw3x5bUgrLKX81VFEqojQBtB9jFme/wxkp59XNRaLhZeubcmQ9uacCg9OWctv246e+0QREXG7cplQyF/VIT29+DeitLQ0AAIDA11SV1m2n1/f6NGjAfjll1/OeqzD4SAoKKjQTUQqiK35y0X282wcZcQwDF6cvZmFMUfxtlt5f3h7gnyKzisjIlKg+0MQHAlJcbDsnfOuxmq18PqQVvRvFUFOnsHdX69hxe7jZRamiIiUjXKZUKhXz1zXfP/+4ifjyd9ev359l9RVlu3ni46OBsxlLEWkEko9Cvv/MstNK8dykZ/8vpuv/ozFYoF3bmhLm8gQT4ckIuWdtx9c9YpZ/uMdOLHnvKuy26y8fUNbLmtWg6xcJ7dP/It1+xLKJk4RESkT5TKh0KZNGwDWrl1b7P787a1bt3ZJXfnnbNq0iZycnAtqP19CgvkGmD//gohUMtt/Bgyo3Q6Cans6mgv26e+7+M9PWwF4ul9z+rWK8HBEIlJhtBgIDXtBXhbMe9ScsPY8edutfHhze7o1rkZadh4jJ6wi5pAmrBYRKS/KZUKhe/fuBAcHs2vXLtavX19k//Tp0wEYMGDAOevq27cvVquVpUuXcvRo4evvsrKymD17NjabjX79Tg1RbtiwIc2bNycjI4O5c+deUPv5ZsyYAZx5+UoRqeC2/WTeV/DLHQzDYPyiHfzfPDOZ8EDvKO7o2cjDUYlIhWKxQP9x5gS1Oxee9wSN+Xy8bHx2S0fa1wshOTOXUV+s4kBiRhkFKyIiF6JcJhS8vb154IEHALj//vsL5iwAeOutt9i4cSO9evWiQ4cOBdvff/99mjVrxpNPPlmoroiICIYPH052djb33Xcfubm5Bfsef/xxjh07xogRI6hRo0ah88aOHVtwzOmJiO+//55Zs2YRFRXFwIEDC53z2muvER8fX2hbTk4OL774ItOmTcPX15dbb731fJ4SESnPstNh12KzXIETCtm5Tp6a+TfjFmwH4JErm/Bon6YejkpEKqTq0eZ8CgA/PwlZ516Z62z8HXa+GNWJJjUDOJKcxS2fryQhLfvC4xQRkQtiMYwLGIfmQpmZmVx66aWsXLmSiIgIevbsSWxsLCtXriQ8PJwVK1bQqNGpX81eeOEFXnzxRUaOHMnEiRML1RUfH0+XLl3YtWsXjRs3pmPHjmzevJlNmzYRHR3NihUrCAsLK3SO0+lk6NChzJw5k9DQUC6//HLi4+NZsmQJPj4+LF68mM6dOxc6x2Kx4HA46NixI5GRkSQnJ7N+/XoOHjyIj48PkydP5rrrrivV85CcnExwcDBJSUmaoFGkvNo6D74dDsH14KGNpV57vTyIT83igW/WsmL3CSwWeLZ/C27r0dDTYYlIRZaTAR92gYS90OV+6Pt/F1zlwcQMhny0nENJmXSoH8rkOzrj42W78FhFRKSQkn4PLZcjFICCL+3PPvssfn5+/PDDD8TGxjJq1CjWrl1bKJlwLtWrV2fVqlU8+OCDZGdnM3PmTJKSkhg9ejSrVq0qkkwAsFqtTJs2jXHjxlG7dm3mzJnD33//zZAhQ1i9enWRZALAc889xyWXXEJcXBw//vgjv/76K35+ftx9992sX7++1MkEEakgtp28NKpZvwqZTJi/+TB93v6dFbtP4O9t4/ORHZVMEJEL5+UL/caZ5ZUfwaGNF1xl7RBfvrytE0E+dtbEJvDAN+vIzXNecL0iInJ+yu0IBTFphIJIOefMgzebQHo83PIjNLrU0xGVWHJmDi/N3sL0NebKNc1qBfLe8HY0qVmyJXFFRErku5Gw5QeoezHcNh+sF/571qo9Jxjx+Uqyc50M71SP/xvcEksFTOiKiJRXFX6EgohIhbB/tZlMcARD/e6ejqbE/tx1nKvfWcr0NfuxWODuXo348YHuSiaISNnr+xp4B5hL6679skyq7NQwjPdubIfVAlNW7eP9X3eWSb0iIlI6SiiIiFyIbfPM++grwebl2VhKIDMnj5fnbGH4Zys4kJhBZJgv393dlSevbo7DruuQRcQFgmrDZc+Y5YXPQ+qxMqm2b8tavDiwJQDjFmznx/UHyqReEREpOSUUREQuRH5CoVn5X91h04EkBoz/g8//2APA8E6R/DTmEi5uUHQeGRGRMnXxnVCrFWQmwYJny6zaf3Wpz509zTlfHpu+kTWxJ8qsbhEROTclFEREzlf8TojfDlYviLrC09GcUW6ek/GLdjDog2XsOJpK9QAHn4/syGvXtSbAYfd0eCJSFdjscM07gAU2TDm11G4ZeOLq5lzVoibZuU7u/GoN+46nl1ndIiJydkooiIicr/zVHRr0AJ9gz8ZyBvuOpzP04z8Zt2A7uU6Dq1vWYv7Dl3B585qeDk1Eqpq6HeHiO8zynIcgu2y++NusFt65sS2t6gRzIi2bWyeuIikjp0zqFhGRs1NCQUTkfG2ZZd43v8azcZzBj+sP0O+9payPSyTQx87bN7Thw5vbE+bv7enQRKSquvw5CKoDCXvht/8rs2r9vO38b2RHIoJ92HUsjfsmryFHy0mKiLicEgoiIucj6QAcWA1YoNkAT0dTSFpWLo9O28CYb9eTmpVLx/qh/DSmJ4Pb1dWyaiLiWT5B0P8ts/znB3BgbZlVXTPIh89HXoy/t41lO4/zzMxNaHV0ERHXUkJBROR8xMw27+t1gcDyc/nA3vg0Bn2wjOlr9mO1wOjLo/n2ri7UDfXzdGgiIqamfaHlEDCcMGs05JXd5Qktagcx/iZzOcmpq+P45PfdZVa3iIgUpYSCiMj52PKjed9ioGfjOM2ynfEMPDnxYs0gB1Pu7MLYK5tgt+mlXkTKmb6vg28oHPkblr9XplVf1qwmz13TAoD//LSVnzcdKtP6RUTkFH3KFBEprZQjsO9Ps9y8fFzuMGlFLLdMMCciaxsZwuwHetC5UTVPhyUiUryAcOjzmln+7XVz1ZwyNKp7Q0Z1awDAQ1PXs3F/YpnWLyIiJiUURERKa+scwIA6HSC4rkdDMQyDdxfu4JkfNpHnNLiufR2+vasLNYJ8PBqXiMg5tbkRGl8GeVkwezQ4y3YSxWf6N+fSpuFk5ji548vVHErKKNP6RURECQURkdKLyV/d4VqPhuF0Grw0ZwtvL9wOwENXRDPu+jb4eNk8GpeISIlYLHDNO+DlB7HLYO2XZVq93WZl/PB2NK0ZyNGULG6fuJq0rNwybUNEpKpTQkFEpDTST8CepWa5hecSCk6nwRPfb+SLZXsBeGFACx66oolWcRCRiiW0Plz2rFle8Bwk7S/T6gN9vPh8VEeqB3iz5VAyY75dR55TKz+IiJQVJRREREpj61ww8qBmKwhr5JEQDMPguVmb+G71fmxWC2/f0IZR3Rt6JBYRkQvW+W6oezFkJZurPpTxUo91Q/349JaOeNutLIw5ymvzYsq0fhGRqkwJBRGR0si/3MFDqzsYhsFrP21l0op9WCzw1rA2DG7n2XkcREQuiNUGgz4Cuw/sWgRrvyrzJtrXC2Xc9W0A+N8fe/hm5b4yb0NEpCpSQkFEpKTST8CuX82yhxIK43/dyacn11V/bXArBrat45E4RETKVPVouOwZs/zL05AYV+ZNDGhTm7FXNgHg2R838ceO+DJvQ0SkqlFCQUSkpLb8AM5cqNUawpu4vfkZa/bz1gJzAsbnrmnBjZ3quT0GERGX6XIfRHaG7BSY9UCZX/oA8OBlUQxuV4c8p8G9k9ew82hKmbchIlKVKKEgIlJSf08371sNdXvTK3Yf54nvNwJwT6/G3NZDcyaISCVjtcHAD8HuC7t/gzVflHkTFouF/wxpRcf6oaRk5nLbxNWcSMsu83ZERKoKJRREREoiaT/ELjfLLYe4teldx1K5++s15OQZ9G8VweN9mrq1fRERt6keBZc/Z5bnPwsJsWXehMNu45N/dSAyzJd9J9K5++vVZOXmlXk7IiJVgRIKIiIlsel7wID63SHYfZMgJmfmcMeXq0nKyKF9vRDGDWuD1aqlIUWkEut8D9TrBtmp5qUPTmeZN1EtwMGEkRcT6LDz194EnpzxN4YLLrEQEanslFAQESmJv6eZ92683MHpNBg7dQN74tOoE+LLp7d0xMfL5rb2RUQ8wmqFge+Dlx/s+R1Wf+6SZqJrBvLhiPbYrBa+X3eADxbvdEk7IiKVmRIKIiLncmwbHN4IVju0GOS2Zj9YvJOFMUfwtlv5aER7qgc43Na2iIhHVWsMV7xglhc8B/Gu+bLfMzqcF6+9CIA3529nzsaDLmlHRKSyUkJBRORc8idjbHw5+IW5pcnF247y1kJzRYdXBrWkdd0Qt7QrIlJuXHwnNLwEctJh5l2Ql+OSZkZ0qc9t3c2Jbh/5bgPr9iW4pB0RkcpICQURkbMxDNiUv7rD9W5p8lhKFo9+twHDgJs712NYx0i3tCsiUq5YrTDoY/AJhgNr4Pc3XNbU0/2bc3mzGmTlOrnzq9XEHk9zWVsiIpWJEgoiImdzYA2c2G1ey9v0apc3ZxgG/56xkeNp2TSrFchzA1q4vE0RkXIruA5c87ZZ/v0NiFvlkmZsVgvvDm9Hi4gg4lOzuWXCKuJTs1zSlohIZaKEgojI2aybZN43uwYcAS5v7ptV+/h161G87VbevbEdDrsmYRSRKq7lEGh9AxhO+P5OyEpxSTMBDjsTb72YuqG+xB5P59Yv/iItK9clbYmIVBZKKIiInEl2OmyaYZbbjXB5c7uPpfLKnBgAHu/TlKa1Al3epohIhdDvDQiOhIS98PMTLmumRpAPX93WiTB/b/4+kMQ9k9aQnVv2y1aKiFQWSiiIiJzJ1jmQlQwh9aBBT5c2lZPn5OHvNpCRk0f3qGoFE4SJiAjmPAqDPwEs5sixLbNc1lSj8AA+H9kRXy8bS3fE8+8ZG3E6DZe1JyJSkSmhICJyJvmXO7S92ZwczIXe/3UnG+ISCfKx8+b1bbBaLS5tT0SkwmnQHbqPMcuzx0DKYZc11a5eKB+OaI/NamHmugO8/vNWl7UlIlKRKaEgIlKchFjY87tZbjPcpU2t25fA+4vNNdZfGdyKiGBfl7YnIlJh9X4aarWCjBPww73gdN3lCL2b1uD1Ia0B+OT33fxv6W6XtSUiUlEpoSAiUpwNUwDDXAM9tL7LmknLyuXhqevJcxoMbFuba9vUdllbIiIVnt0brvsf2H1h16+w/F2XNje0Q10e79sUgFfmxvDdX3EubU9EpKJRQkFE5J+ceadd7uDayRhfmRvD3uPp1A724aWBLV3alohIpVCjGVz9ulle9LLLlpLMd2+vxtzew5zX5t/fb2T2hoMubU9EpCJRQkFE5J+2/wJJceAbBi0GuqyZhVuOMGXVPiwWeHNYG4J9vVzWlohIpdL+FnM5SSMPpt8GGQkua8pisfBM/+YM71QPw4CHp65n4ZYjLmtPRKQiUUJBROSf/vqfed/+X+Dl45Im4lOzeOL7jQDc0aMh3RpXd0k7IiKVksUC17wDoQ3NBPCPD4DhupUYLBYLrwxqyaC2tcl1Gtz3zVqW7Yx3WXsiIhWFEgoiIqc7vgt2LQIs0OFWlzRhGAZPzNhIfGo2zWoF8mifpi5pR0SkUvMJgqETwOplLvObnwx2EZvVwpvXt6HPRTXJznVyx5erWb33hEvbFBEp75RQEBE53eoJ5n30lRDW0CVNfPtXHAtjjuJts/LOjW1x2G0uaUdEpNKr0x6uetks//IUHNro0ubsNivvDW/HJU3CycjJ49Yv/mLdPtddbiEiUt4poSAiki8n49RkjBff4ZIm9san8fKcLQA81qcpzWoFuaQdEZEqo/M90LQf5GXDtFGQmeTS5hx2G5+M6EDnhmGkZOVyy+erWKukgohUUUooiIjk2/gdZCZCcD2IuqLMq8/Nc/LQ1PWkZ+fRtVG1glnDRUTkAlgsMPADCI6EE7tg5r3gdLq0SV9vGxNGXVwoqbAmVkkFEal6lFAQEQHzw+ef75vlzneDtewvQ/hg8S7WxyUS6GNn3LA2WK2WMm9DRKRK8guDYV+BzQHb5sIf41zepL/Dzhe3XkyXRmGkZuVyy+crNaeCiFQ5SiiIiADsmA/x28ERDB1Glnn16+MSee/XHQC8MqgltUN8y7wNEZEqrU576P+mWf71Vdi50OVN+nnb+WJUJ7o1rkZadh4jJ6ziLyUVRKQKUUJBRARg+XvmfcdR4Ags06rTs3N5eOp68pwGA9rUZmDbOmVav4iInNT+Fmg/EjBgxh2QEOvyJn29bXw+8mK6R51KKqzao6SCiFQNSiiIiOxfA7HLzKXHOt9T5tW/OjeGPfFpRAT78MrAlmVev4iInObq/0LtdpCRAFNHmBPuulh+UqFndHXSTyYVlu445vJ2RUQ8TQkFEZH80Qmtroeg2mVa9a9bjzB55T4A3ry+DcF+XmVav4iI/IOXDwz7GvyqweGNMGcsGIbLm/XxsvHZLR3pdXJJydsnrubnTYdd3q6IiCcpoSAiVdvRGNjyo1nu9kCZVn0sJYvHp5trot/eoyHdo6qXaf0iInIGIZEwdAJYrLDhm1OT7rqYj5eNT2/pwNUta5Gd5+T+b9YyY81+t7QtIuIJSiiISNX2238AA5pfCzUvKrNqDcPgsekbiE/NpmnNQB7r07TM6hYRkRJodCn0+T+zPP9Z2DrPLc067DbGD2/H9R3qkuc0eGTaBiYu2+OWtkVE3E0JBRGpuo5shi0/mOVLnyjTqicu38tv247hbbfy3vB2+HiV/TKUIiJyDp3vgY63UTBJ46GNbmnWbrPy+pDW3Na9IQAvzN7C+EU7MNxw6YWIiDspoSAiVddv/zHvWwwq09EJMYeSee2nrQA80785TWuV7aoRIiJSQhaLOUljo0shJw2+uQGSD7mlaavVwrPXNOehK6IBGLdgO/83LwanU0kFEak8lFAQkarp0EaImQVYynR0QmZOHqOnrCM718nlzWrwry71y6xuERE5DzYvuP5LqN4EUg7Ct8MhO80tTVssFh66ognPXtMCgM+W7uHh79aTnet0S/siIq6mhIKIVD2GAfOfMcstr4Mazcus6v+bF8OOo6mEBzr479DWWCyWMqtbRETOk28I3DQVfMPg4DqYNgryctzW/O09GjLu+jbYrRZ+XH+QWyeuIjnTfe2LiLiKEgoiUvVs/xn2LAGbAy5/rsyq/XnTYb76MxaAcde3oVqAo8zqFhGRCxTWCIZ/C3Zf2DEfZj0ITveNFBjSoS4TRl2Mv7eNZTuPM+zjPzmclOm29kVEXEEJBRGpWnKzT41O6HofhDYok2p3H0vl0WkbALizZ0MuaRJeJvWKiEgZqtcZhn0JFhtsmAILn3dr85c0CWfq3V0JD3Sw9XAK1324jB1HUtwag4hIWVJCQUSqltWfw/Gd4B8OPcaWSZXp2bncO2ktqVm5XNwglMf7NiuTekVExAWa9IGB75vl5e/BH2+7tfmWdYL5/t5uNAr352BSJkM+Ws7K3cfdGoOISFlRQkFEqo7kQ7D4NbN82TPgE3TBVRqGwdMzN7HtSArVAxx8cFN7vGx6aRURKdfa3gRXvmyWF74Ay993a/ORYX7MuKcbHeqHkpyZy78+X8X0NfvdGoOISFnQp14RqTp+egyykqB2e2j3rzKpctKKWGauO4DNauGDm9pRI8inTOoVEREX6z4aLn3KLM9/GlZ87NbmQ/29mXxHZ65uWYvsPCePTtvAaz/FkKdlJUWkAlFCQUSqhi2zIGY2WO1w7Xiw2i64yj93HeelOVsAeKJvMzo3qnbBdYqIiBtd+m+45HGz/PO/YeWnbm3ex8vGBze158HLogD4ZMlu7v56DalZuW6NQ0TkfCmhICKVX0YizHvULHd/CGq1vOAqdx9L5Z5Ja8jJM7imdQR39Gx4wXWKiIgH9H7q1Jw6Pz0GS8eZywu7idVq4ZGrmvLujW3xtltZGHOEoR8tZ39CuttiEBE5X0ooiEjlZhgw52FIPQLVouGSxy64yoS0bG6b+BdJGTm0jQzhzevbYLFYyiBYERFxO4vFXEK458nE86KXzNWA3JhUABjYtg5T7+pSsALEwPeXsXxXvFtjEBEpLSUURKRyW/slbP7evNRh0EfgdWFzHGTm5HH3pDXsPZ5OnRBfPrulIz5eF375hIiIeJDFApc/C33+z/z7z/fhx/shz72XHrSrF8qP93fnotpBHE/LZsT/VvLxkl0Ybk5uiIiUlBIKIlJ5HdkCP/3bLF/2LERefEHV5eQ5uX/yWlbtOUGAw86EURcTHugog0BFRKRc6Ho/DPwQLDZYPxkmD4GMBLeGUDvEl+n3dGNI+7o4DfjPT1u5++s1JGfmuDUOEZGSUEJBRCqnzCSYNgpyM6Hx5dBt9AVVl+c0GPvdBhZtPYrDbuXzkR1pWiuwbGIVEZHyo93NcMMk8PKH3b/BZ5fDse1uDcHX28ab17fm1cEt8bZZmb/lCNeO/4MtB5PdGoeIyLkooSAilU9eDnw3EuK3QWAEDP4ErOf/cud0Gjw9829mbziI3Wrh4xEdtKKDiEhl1qwf3P4LBEfCiV3wvytg+3y3hmCxWLi5c32m3dOVOiG+7D2ezqAPlvG/pbtxamlJESknlFAQkcrFMGDeY7B7MXj5wfBvISD8vKvLyXMy9rv1fPtXHFYLvHtjO3o3q1GGAYuISLlUqxXcuRgiu0BWEnxzPfzyNORmuzWMNpEhzH6wB5c3q0F2npNX5sYw8otVHEnOdGscIiLFUUJBRCqX39+ENV8AFhjyOdRue95VZebkcd/ktfyw/iA2q4W3b2hL/9YRZRaqiIiUcwHhMHIWdLrL/PvP9+HzK+H4LreGEebvzf9GduTlQS3x8bKydEc8fd/5nZ83HXJrHCIi/2QxNG1suZacnExwcDBJSUkEBQV5OhyR8u33N+DXV8xyn9eg633nXVViejb3TlrLn7uP42238uFN7bmiRc0yClRERCqcrXPNlR8yEswRcL2fgs73gs3u1jB2Hk1lzLfr2HxyPoX+rSJ4/toW1Ai8sFWMREROV9LvoUoolHNKKIiUgGGYIxMWn0wmXP4c9HzkvKvbfiSFO79aTezxdPy9bXw2siPdGlcvo2BFRKTCSjoAM++GvUvNv2u1ggHvQp0Obg0jO9fJ2wu38+nvu8lzGgT52Hm6f3OGdYzEYrG4NRYRqZyUUKgklFAQOYe8HJj3KKyZaP59gcmEBVuO8PDU9aRm5VI31JfPbulI8wj974mIyElOJ6yfBPOfhcxEwAJtb4ZLn4CQSLeGsulAEk98v5FNB8zRChc3COW5ay6iVd1gt8YhIpWPEgqVhBIKImeRkWCu5rBnCWCBPv933pc5ZGTn8eq8LUxasQ+ALo3C+PDmDoT5e5dhwCIiUmmkHoNfnoK/vzP/tnlDx9uh51gIcN/kvbl5Tr5Ytpe3FmwnIycPgOva1+HxPs2oFazLIETk/CihUEkooSByBnuWwsx7IHm/uVb40M+h6dXnVdX6uETGTl3P7vg0AG7v0ZAnrm6Gl03z1oqIyDnE/QWLXjx1GYTNAa2GQue7IaKN28I4mJjBG79sY+a6AwD4etkY1b0Bd/RoSLUAh9viEJHKQQmFSkIJBZF/yE6HJf+BZe8BBoQ1guu/hIjWpa4qPjWLN3/ZxtTVcRgG1Ary4c3r29AjWvMliIhIKRiGuVzxr6/CgdWntkd2htbDoPnAC1rCuDTWxyXy8pwtrIlNAMzEwogu9bjzkkaauFFESqxSJBQyMjJ47bXX+Pbbb9m3bx9hYWH07duXl19+mTp16pSqroSEBF544QV++OEHDh8+TK1atRg8eDAvvPACISEhxZ6Tl5fHe++9x4QJE9i5cycBAQH07t2bF198kebNm5+xrdmzZ/Pmm2+ybt06ANq3b89jjz1G//79SxUzKKEgUsAwYMsP8Msz5qgEgHb/gr7/AUdAqapKz85l0opYxv+6k5TMXAAGt6vD8wNaEOKnSxxEROQ8GQbsXw0rP4ItP4LTfI/BYoWGl0D0VdCgJ9RsCVbXjYIzDIOFMUcZ/+sONu5PAsDbbmVA69rc0rU+bSJDTh2cm23OBZGZBDkZkJsFuZkn7zMgL9uM32Iz7602sNrNlS4cAeAdAI5A8+bl67LHJCLuVeETCpmZmfTu3ZsVK1YQERFBz5492bt3L6tWrSI8PJwVK1bQqFGjEtUVHx9P165d2blzJ40aNaJjx45s3ryZzZs306RJE/7880/CwsIKneN0Ohk6dCgzZ84kJCSEyy+/nPj4eH7//Xd8fX1ZvHgxnTp1KtLWO++8w8MPP4zdbueKK67A4XAwf/58MjIyGD9+PA888ECpngclFKTKMwzY9hMsfRMOrDG3BUfC1a9Ds9Il6ZIzc/j6z1g+/2MPJ9KyAbiodhAvXnsRHRuEneNsERGRUkg+CH9Pg80z4eC6wvt8Q83RCzUvghotzFtIpPml/ELkZEJ6PKTFQ/pxjLR4du7dy/ptu8hJPkawJZUQ0ojwzqCmVwZ+eclYctIurM3TefmbIzH8a4B/uFkOqAnBdc337pB6ZtmuSzBEyrsKn1B45plnePXVV+natSvz588nIMD8BfKtt97ikUceoVevXvz2228lqmvEiBFMnjyZ6667jqlTp2K3m+sFjx49mvHjxzNy5EgmTpxY6Jz//e9/3HnnnURHR7N06VJq1jTXn58xYwZDhw4lKiqKmJiYgroAtm3bxkUXXYTdbmfx4sV07doVgO3bt9OtWzeSkpKIiYkhKiqqxM+DEgpSZWUkwMZpsOYLOLrF3Gb3he5jzJu3X4mqMQyDNbEJfPtXHHM3HiqYsKp+NT/uvzSKIR3qYrNqiS0REXGhE7shZg7s+R32/QnZqcUf5wiCoNrgG3bq1/9//urvzIOcNMhOg6zUk/cpkH7c3H4eDCzgCMLi7Wd+2bf7nLq3eYPhNG/OvJP3Oae1n3rmx3MmATVPJhdOJhlC60NIfQhtYG6za7SgiKdV6IRCdnY2NWrUICkpibVr19KuXbtC+9u0acPGjRtZvXo1HTqcfd3fQ4cOUbduXex2O/v27StIDABkZWURGRnJiRMnOHjwIDVqnJqRt0WLFsTExDBz5kwGDRpUqM6BAwcya9Yspk+fzpAhQwq233fffXz00UeMGTOGd955p9A5b7/9NmPHjuWBBx5g/PjxJX4ulFCQKiXtOOz4xRyRsGO+OeQSwDsQLr4dut5fopmzc/OcrIlNYMGWI8zfcoR9J9IL9jWpGcB9l0ZxTesI7Jp0UURE3C0vBw6uh0Pr4cgmOLIF4reZlxyUBasX+FUD/+rgFwZ+1U/97RtGijWApXG5/LInm3XxVhINf1Lww2Kx0jYyhEuahNMzujqt6oTgbS/h+6TTaSYV0o6duqUeNe9TDkPSfkjcB0lxkJN+jsosZlIlpP5piYaTyYaQ+hAY4dLLRUTEVNLvofYz7vGgZcuWkZSUROPGjYskEwCGDh3Kxo0bmT179jkTCj///DNOp5OePXsWSiYAOBwOBgwYwIQJE5g3bx6jRo0CYM+ePcTExODr61vsvAdDhw5l1qxZzJ49u1BCYe7cuQX7iztn7NixzJ49u1QJBZFKyzDMDxn7V0HcKohbaV7SYDhPHVPjIugw0pzQyjf0jFUlpeew+VASq/cm8NfeE6yNTSAtO69gv6+XjWtaR3Bjp0ja1wvFYtGIBBER8RCbF0RebN5Ol5UKKYcg+QBkJJpf0LNSzHkNCt63LGbZ298cveAdcKrsF2YmDRxBpx1fVCDQ72LoB+w8msLsDYeY+/chdh5NZe2+RNbuS+SdhTvwtllpUTuItpEhtIkMJrpGII3C/fHzLubrg9UKPkHmrVrjMz92wzBHUuQnFxL3mbeEWEiMNe9zM8znIPkA7FtezPPnbY5iOD3ZkH8fWNu81MJWLr/iiFRK5fK/bcOGDYA5mWFx8rdv3LixTOqaMGFCobryz2nZsiVeXl4laj8xMZF9+8z164tLgkRGRlK9enViY2NJTk7WaAOpGrLTzKRBymHzQ1JSHMTvOHnbbk4C9U+1WkHTfuYtog1YLGTnOjmRlMnBpAwOJmZwKDGTA4kZ7DqWyrbDKRxNySpSTbCvF5c3q8FVF9WkZ3Q4/o5y+XInIiJicgSAIxqqR7utyagagTx8ZSAPX9mEA4kZLN1+jKU74lm+K56E9BzWxyWyPi6x0Dl1QnyJqhFA3VBfIoJ9iAg272sE+RDi50Wwr9eZl122WMykh391qFPMZ3PDMEc1FCQY9p5KNCTGQmKcOUnkiV3mrfhGzBEZATXNUY359/7h4BsCPsHgE1K47AjSqAeR81QuP2HnfzGvW7dusfvzt8fGxrqkrgs5JzQ0FH9//zOeFx8fT2xsLK1atTpn7BXKjoWFr9sr9kqaf2wryTFnOC4hLZvYE2dvr+gmZ5H9ltPaM/7ZvlGkcMa28redvseCUfjMM5xX5Jwih5XkOTGK7D6vx3b60capmKzOXKzObKxGjnnvzMFWcJ+DLS8T79wUvHJT8M5NxSsnFe/cVOzOzGLqP8WJlaO+jdnr24LdPi2IcbThENVJ2pZD0vokkjIWkZSRQ2aO86z1gPkBp129EDo1DKNj/TCa1grU3AgiIiIlVCfElxs71ePGTvUwDIPY4+msj0tk3b4EYg6lsPNYKifSsjmQmMGBxIyz1hXgsBPsayYXAn3s+HjZ8PGymvf2k2VvGw67DbvVgi3/ZrFgtVqwWapjs9XA5uiELQKstU/uN/LwzTyCX9p+/DP245d2AL/0/filH8Av/QA+mfFYcJoTU6bHw9HNJXrsBhZy7X44bb7k2XzMm90Hp82HPJsveXbz3mlzYFjsGFYbhsWG0+J1qmz1wrCYZaOgbMUcVXJynoqTI0xOlcH8pHVy5Emh8sl9J7efKpd/dUP9CA+4wIk3K8hjPW+BtYuOUqqgymVCITXVnNjFz6/4Sdfyv7CnpKS4pC5XnFPSuLOyssjKOvVra3Jy8hmPLVfmjjUzx24SevIm5V+64eCwEcpRQjlkhLHbGcEuoza7jNrsNWqRlekNCflHO4GjxdZjs1qoFeRDRLAPtUN8iQjxoVF1f6JrBhJdI4BAn6KjiURERKT0LBYLDar706C6P4PanVqq/URaNjuPprLrWCqHEjM4mJTJoaQMDiVlciwlq2Ap5tSsXFKzcs+ZeDh/DqDxydspVpyEkkK4JYlwSyLhJBaUq1mSCSKdYEsaQaQRbEkjmDR8LDlYMPDKTYPcMlzxQuRsml8LN3zt6SjKRLlMKFRlr732Gi+++KKnwyi92u3MCXQK+UdmsdhMY0mO+ecpFhIzcog7baI945/1/OPvovuLNl3MhqLnleAxFNvWP441LIXPLP6covX+s/mzt1V0v8VSeJulhG3nWuzkWbzItXiRZ7GTY/EuKOdavcixOMiw+pNh9SfTGkCmLYAMqz9p1kAybf4Fz5sFcx3sYLuVrnYbvexWvG1WvO1WHHbz3sfLRpCPV8EvG6f/wmHViAMRERGPCfP3plPDMDo1LH6p5TynQXJGDokZOSSmZ5OYkUNqZi6ZOXlk5jrJyskzyznOk9vyyHOC02mQ6zRwGgZ5ToM8wzi17eTfec7TRl4WGnT5z+3hAOQacAjzZhQzkjOf3cjGz5mKj5GJw5mJw8jC28jG28jEmywcRv42c7sVJ3YjFxt52Iw8bORhJQ+7kYuVPGyGExu52Iw8rDgLRoyaYw8MTo1VMMA4rXxy/8lPioXLhoGF4kaVlk+1gn0I87uQlToqzmM9b9WbeDqCMlMuEwr5S0Smpxc/C2xampk9DAw891q951OXK84padxPPvkkY8eOLfg7OTmZyMjIMx5fbgz70q3NhZy8iYiIiEj5YLNaCPX3JtTfGyj+EmARqVzKZUKhXr16AOzfv7/Y/fnb69ev75K6LuSchIQE0tLSip1HoSRxOxwOHI4LvOZIRERERERExMXK5XSmbdq0AWDt2rXF7s/f3rp1a5fUlX/Opk2byMnJKdE5ISEhBUmFdevWFTknLi6O+Ph46tevrxUeREREREREpMIrlwmF7t27ExwczK5du1i/fn2R/dOnTwdgwIAB56yrb9++WK1Wli5dytGjhSd7y8rKYvbs2dhsNvr161ewvWHDhjRv3pyMjAzmzp1b4vb79+9faP/5xiwiIiIiIiJS3pXLhIK3tzcPPPAAAPfff3/B3AMAb731Fhs3bqRXr1506NChYPv7779Ps2bNePLJJwvVFRERwfDhw8nOzua+++4jNze3YN/jjz/OsWPHGDFiBDVq1Ch0Xv48Bo8//nihRMT333/PrFmziIqKYuDAgYXOGTNmDDabjY8//pgVK1YUbN+xYwevvvoqdrudMWPGnO/TIiIiIiIiIlJulMs5FACeeeYZFi5cyPLly4mOjqZnz57ExsaycuVKwsPDmTBhQqHj4+Pj2bZtG4cOHSpS1zvvvMOKFSuYMWMGzZo1o2PHjmzevJlNmzYRHR3NW2+9VeSc2267jXnz5jFz5kyaNWvG5ZdfTnx8PEuWLMHX15dJkyZhtxd++po2bcobb7zB2LFj6dmzJ1deeSXe3t7Mnz+fjIwM3nvvPaKiosr2iRIRERERERHxgHI5QgHAx8eHxYsX8+yzz+Ln58cPP/xAbGwso0aNYu3atTRq1KjEdVWvXp1Vq1bx4IMPkp2dzcyZM0lKSmL06NGsWrWKsLCiS99YrVamTZvGuHHjqF27NnPmzOHvv/9myJAhrF69ms6dOxfb1sMPP8ysWbPo2rUrS5cuZdGiRXTs2JHZs2fz4IMPnvfzISIiIiIiIlKeWAzDqAILfVZcycnJBAcHk5SUpMkcRURERERExOVK+j203I5QEBEREREREZHySwkFERERERERESk1JRREREREREREpNSUUBARERERERGRUlNCQURERERERERKTQkFERERERERESk1JRREREREREREpNSUUBARERERERGRUlNCQURERERERERKTQkFERERERERESk1JRREREREREREpNSUUBARERERERGRUlNCQURERERERERKTQkFERERERERESk1JRREREREREREpNSUUBARERERERGRUlNCQURERERERERKTQkFERERERERESk1u6cDkLMzDAOA5ORkD0ciIiIiIiIiVUH+98/876NnooRCOZeSkgJAZGSkhyMRERERERGRqiQlJYXg4OAz7rcY50o5iEc5nU4OHjxIYGAgFovF0+EUkpycTGRkJHFxcQQFBXk6HDkD9VPFoH6qONRXFYP6qWJQP1UM6qeKQ31VMVSEfjIMg5SUFGrXro3VeuaZEjRCoZyzWq3UrVvX02GcVVBQULn9R5BT1E8Vg/qp4lBfVQzqp4pB/VQxqJ8qDvVVxVDe++lsIxPyaVJGERERERERESk1JRREREREREREpNSUUJDz5nA4eP7553E4HJ4ORc5C/VQxqJ8qDvVVxaB+qhjUTxWD+qniUF9VDJWpnzQpo4iIiIiIiIiUmkYoiIiIiIiIiEipKaEgIiIiIiIiIqWmhIKIiIiIiIiIlJoSCnLBXn75ZSwWCxaLhUmTJp3xuP3793PrrbdSu3ZtfHx8aNKkCc8//zyZmZlujLZq2Lp1K6+//jq9e/emevXqeHl5UatWLa677jqWLl161nPVT+6VkZHBc889R5MmTfDx8aF27drcdtttHDhwwNOhVSnp6en88MMP3H777TRt2hQfHx/8/f1p06YNL730EqmpqWc8d+LEiXTq1ImAgADCwsLo168fy5cvd2P0Vdvx48epUaMGFouFqKiosx6rvnK/Y8eO8eijj9K0aVN8fX0JCwujffv2PPbYY8UeP3v2bHr16lWwNvull17K3Llz3Rx11fLXX38xbNgwateujZeXFyEhIfTs2ZMvvviC4qZay8vL4+2336ZVq1b4+voSHh7OsGHDiImJ8UD0lcuaNWv4z3/+w3XXXUfdunULPl+fy/m8ti1btox+/foRFhZGQEAAnTp14quvviqrh1KplaafnE4nS5cu5fHHH6dDhw4EBgbicDho3Lgx99xzD3v27DlrWxWinwyRC7B161bD4XAYFovFAIyvv/662ON27NhhVK9e3QCMli1bGsOGDTMaNWpkAEb37t2NzMxMN0deudWpU8cAjICAAOOKK64whg0bZrRs2dIADIvFYrz99tvFnqd+cq+MjAyjS5cuBmBEREQYw4YNMzp16mQARnh4uLFr1y5Ph1hlfPbZZwZgAEbz5s2N66+/3ujTp48RGBhoAEazZs2MI0eOFDlvzJgxBmD4+voaAwcONPr06WPY7XbDZrMZM2fOdP8DqYJGjhxZ8B7UuHHjMx6nvnK/1atXG9WqVTMA46KLLjJuuOEG4+qrrzbq169v2Gy2Ise//fbbBmDY7Xajb9++xsCBAw1fX18DMMaPH++BR1D5TZ8+3bDZbAZgtG/f3hg2bJjRu3dvw263G4Bx0003FTo+Ly/PGDx4sAEYISEhxpAhQ4xevXoZFovF8PPzM1auXOmhR1I5DBw4sOC96PTb2ZzPa1t+v1ssFqNXr17GkCFDjJCQEAMwHnnkERc8ssqlNP20Y8eOgv21atUyrr32WmPw4MEFn9UDAwONpUuXFntuReknJRTkvDmdTuOSSy4xatasWfCPdaaEQvfu3Q3AGD16dMG2nJycgjel559/3k1RVw2XX3658dVXXxkZGRmFtn/88ccGYNhsNmPz5s1FzlM/udfTTz9tAEbXrl2NlJSUgu3jxo0zAKNXr16eC66KmThxonHXXXcZW7ZsKbT94MGDRrt27QzAGD58eKF9CxYsMACjWrVqxvbt2wu2L1++3PD29jZCQkKMhIQEd4RfZS1cuNAAjLvuuuusCQX1lfsdPXrUqF69uuHn52f8+OOPRfb/84vn1q1bDZvNZjgcDmP58uUF27dt22ZUq1bNsNvtxo4dO1wed1WSk5Nj1KhRwwCMyZMnF9q3ZcsWIywszACMX3/9tWB7fvI1OjraOHz4cMH26dOnG4ARFRVl5OTkuO0xVDb/+c9/jGeffdaYNWuWcejQIcPhcJw1oXA+r23Hjx83goKCDMCYMWNGwfbDhw8bUVFRBmAsXry4rB9apVKaftq5c6dx5ZVXGosWLTKcTmfB9szMTGPUqFEGYNSrV8/Izs4udF5F6iclFOS8ffrppwZgTJo0yRg5cuQZEworV640AKNGjRpFfuE+fPiw4eXlZYSGhuoNyE2uuuoqAzBeeOGFQtvVT+6VlZVlBAcHG4Cxdu3aIvtbt25tAMbq1as9EJ2cbvny5QZgOBwOIysrq2D71VdfbQDFjvgZPXq0ARhvvvmmGyOtWtLT043GjRsbLVq0MLZv337WhIL6yv3uvfdeAzA++OCDUh0/ZsyYIvveeustAzAeeOCBMo6yavv7778NwGjatGmx+/P/N15//fWCbc2bNzeAYn/5vvbaaw3AmD59uqtCrnLOlVA4n9e2119/3QCMgQMHFjnn+++/NwDjmmuuudDQq5Rz9dOZpKenF3wW/O233wrtq0j9pDkU5LwcPnyYxx9/nMsvv5ybb775rMfmX/s4YMAAHA5HoX01a9akZ8+eJCQk8Mcff7gsXjmlTZs2ABw8eLDQdvWTey1btoykpCQaN25Mu3btiuwfOnQoYF5PLJ6V/z+TlZXF8ePHAXPui19//RU41VenU/+53osvvsju3bv5+OOP8fLyOuNx6iv3y8jIYNKkSfj7+3PrrbeW6Jz89yD1kfv8873+TKpVqwbAnj17iImJwdfXl/79+xc5Tv3kXuf72na2/7X+/fvj4+PDwoULNXeWG/j6+tKkSRPgzJ/LK0I/KaEg52X06NFkZGTw0UcfnfPYDRs2ANC+ffti9+dv37hxY9kFKGe0e/duAGrVqlVou/rJvfR8Vxz5/zNeXl6EhYUBsG3bNrKysggPD6du3bpFzlH/udbGjRsZN24ct956Kz179jzrseor91u9ejUpKSm0a9cOX19ffvrpJ8aOHct9993HO++8U+SDc2JiIvv27QMoNsEaGRlJ9erViY2NJTk52S2PoSpo1KgRjRs3Ztu2bXzzzTeF9sXExDBp0iRCQ0MZPHgwcOp9q2XLlsUm8fS/5F7n+9p2ts8f3t7etGzZkszMTLZv3+6CqOV0TqeT2NhYoHSfy8tbPymhIKU2Z84cpk2bxlNPPUV0dPQ5j8//kFDci93p2/P/ocR1du3axZw5cwC49tprC+1TP7mXnu+K49133wWgb9++Bb/onav//P39CQkJISEhgZSUFPcEWkU4nU7uuOMOQkJC+O9//3vO49VX7rdlyxYAatSowaBBg+jXrx9vv/02H330EQ8//DBRUVFMmTKl4Pj8PgoNDcXf37/YOvWaWPZsNhtffvklISEh3HzzzXTo0IEbb7yRyy67jNatW1O3bl0WLVpUkEjV+1b5cj6vbcnJySQlJZ31PPWj+0yZMoWjR48SHh5Ot27dCrZXtH5SQkFKJTU1lfvuu48mTZrw73//u8TnAPj5+RW7P//Dgz7IuVZubi6jRo0iKyuLG264gQ4dOhTar35yLz3fFcO8efP4/PPP8fLy4uWXXy7Yfq7+A/Whq4wfP56//vqLN954o2Ao9tmor9wvISEBgFmzZvHzzz/zwQcfcPToUfbu3cujjz5KRkYGI0eOZP369YD6yJO6d+/OkiVLaNSoEWvXrmXq1KksXrwYq9XKlVdeSaNGjQqO1ftW+XI+/zenL4GsfvSsuLg4HnroIQBeeumlQpcgVbR+sns6AHGvwYMHl3qd4K+++opOnToB8NRTTxEXF8eiRYtKfO2dlN6F9lNxRo8ezR9//EGjRo348MMPLzREkUpv69atjBgxAsMweOONNwrmUhDP2bdvH8888wy9evVi1KhRng5HzsDpdAJmIvvVV1/lvvvuK9j3xhtvEBsby7Rp03jjjTeYPHmyp8IUzF9Ib731Vrp06cKUKVO46KKLOHjwIG+++Sbjxo1j8eLFLF++XJ/5RMpQWloa1113HfHx8QwaNIh77rnH0yFdECUUqpg9e/awbdu2Up2Tnp4OwKpVq/jggw/417/+xWWXXVbi8wMCAgrV809paWkABAYGliquyuxC+qk4r776Kh999BE1a9bkl19+KRi+eDr1k3vp+S7fDhw4QN++fUlISGDs2LGMGTOm0P5z9R+oD13h/vvvJzs7m48//rjE56iv3C//OQeKnZTx1ltvZdq0aSxZsqTQ8eoj99qxYwcjR46kRo0azJkzp6AfoqOj+eSTTzh48CBz5sxhwoQJ3HvvvXrfKmfO5//m9P/N9PR0goKCznmOlK2cnByuv/56Vq9eTY8ePYrMXwIVr5+UUKhi8ocXno958+bhdDr5+++/ufTSSwvt27p1K2B+cf3f//5H3759eeKJJwCoV68e69atY//+/cXWm7+9fv365x1bZXMh/fRPH3/8Mc888wzBwcH8/PPPREVFFXuc+sm96tWrB6Dnuxw6ceIEV111FbGxsdx66628+eabRY45V/+lpaWRmJhIaGhouXizryzmzJlDSEhIkV9z8me5PnDgQMH707fffkutWrXUVx6Q/7rl5+dHeHh4kf0NGjQA4OjRo8Cp/6eEhATS0tKKnUdBr4ll79tvvyUnJ4e+ffsW+gKTb9iwYcyZM4fff/+de++9V+9b5cz5vLYFBQURHBxMUlIS+/fvp0WLFkXOUz+6jtPpZOTIkfz000+0bduW2bNn4+vrW+S4itZPSihIqZ3ty+7WrVvZunVrwYcFMJdc+/HHH1m7dm2x5+Rvb926dVmGKZgfFu6//378/PyYO3cubdu2PeOx6if3yh8+r+e7fElNTeXqq69my5YtXHfddXz22WdYLJYixzVt2hSHw8GxY8c4cOAAderUKbRf/ec6iYmJBb9s/1NmZmbBvvwkg/rK/fJXasjIyCArK6vIcPkTJ04Ap36FCwkJoV69euzbt49169bRo0ePQsfHxcURHx9P/fr1i/2lTs5P/heS4ODgYvfnb8+fEyP/fWvTpk3k5OQUWelB/0vudb6vbW3atOH3339n7dq1Rb6o5uTksGnTJnx8fAqWM5Sy8+CDDzJlyhSaNGnCL7/8QkhIyBmPrUj9pEkZpcReeOEFDMMo9jZy5EgAvv76awzDYOLEiQXn5a9VPHv2bLKysgrVeeTIEZYuXUpoaCjdu3d322OpCubNm8ctt9yC3W5n5syZ53x+1U/u1b17d4KDg9m1a1exSbrp06cDMGDAADdHVnVlZWUxcOBAVq1aRZ8+fZgyZQo2m63YY319fQsu/Zo2bVqR/eo/1zjTe9CePXsAaNy4ccG2/MS2+sr96tWrR5s2bTAMo9jkT/6205eIzH8Pyu+P06mPXCN/mbrVq1cXu/+vv/4CTo0oadiwIc2bNycjI4O5c+cWOV795F7n+9p2tv+1OXPmkJmZyRVXXIGPj09Zh1ylPfPMM3z44YfUq1ePBQsWUKNGjbMeX6H6yRApAyNHjjQA4+uvvy52f/fu3Q3AGDNmTMG2nJwc47rrrjMA4/nnn3dPoFXEH3/8Yfj6+hp2u92YOXNmic9TP7nX008/bQBGt27djNTU1ILt48aNMwCjV69enguuisnNzTUGDx5sAEbPnj2NtLS0c56zYMECAzCqVatmbN++vWD78uXLDYfDYYSEhBgJCQkujFry7dmzxwCMxo0bF7tffeV+kydPNgCjVatWxsGDBwu2r1u3zggLCzMA47vvvivYvnXrVsNmsxkOh8P4888/C7Zv377dqFatmmG3240dO3a49TFUdmvWrDEAAzA+/PDDQvv+/PNPw9/f3wCMBQsWFGz/7LPPDMCIjo42jhw5UrB9xowZBmBERUUZOTk5bnsMlZ3D4TDO9nXtfF7bjh8/bgQFBRmAMWPGjILtR44cMaKiogzAWLx4cVk/lErtXP301ltvGYBRq1atQv10NhWpn5RQkDJxroRC/geC/A8XN9xwg9GoUaOCL1OZmZlujrhyCwkJMQCjYcOGxsiRI4u9ffbZZ0XOUz+5V0ZGhtG5c2cDMCIiIoxhw4YV/B0eHm7s2rXL0yFWGe+8807BB+vBgwef8f/m2LFjhc4bM2aMARh+fn7GwIEDjauvvtqw2+2GzWYrVTJPLsy5EgqGob7yhPzPBiEhIUa/fv2M3r17F3zwvvPOO4scn/+h2263G1dffbUxcOBAw9fX1wCM9957zwOPoPJ79NFHC177LrroIuP66683unfvblitVgMw7rrrrkLH5+XlFSRfQ0NDjaFDhxqXXnqpYbFYDF9fX2PFihUeeiSVw5w5c4zOnTsX3CwWiwEU2jZnzpxC55zPa9v06dMNq9VqWCwWo3fv3sbQoUMLPjuOHTvWDY+0YitNP61bt65gf9euXc/4+WLp0qVF2qko/aSEgpSJcyUUDMMw9u3bZ4waNcqoVauW4e3tbURFRRnPPvuskZGR4cZIq4b8Dwdnu40cObLYc9VP7pWenm48++yzRuPGjQ1vb2+jVq1axqhRo4y4uDhPh1alPP/88yX6v9mzZ0+Rc7/44gujQ4cOhp+fnxESEmL07dvXWLZsmfsfRBVWkoSCYaiv3M3pdBqffvppwXPu7+9vdO3a1Zg4ceIZz5k1a5bRs2dPIyAgwAgICDB69uxpzJ49241RVz3ff/+9cdVVVxWMBAkNDTV69+5tfPPNN8Uen5uba4wbN8646KKLDB8fH6NatWrG0KFDjc2bN7s58srniy++OOf70BdffFHseaV9bfvjjz+Mvn37GiEhIYafn5/RsWPHs/5vyiml6afFixeX6PNFcf1qGBWjnyyGYRjnuixCREREREREROR0mpRRREREREREREpNCQURERERERERKTUlFERERERERESk1JRQEBEREREREZFSU0JBREREREREREpNCQURERERERERKTUlFERERERERESk1JRQEBEREREREZFSU0JBREREyrVVq1ZhsViwWCy89NJLng5HRERETlJCQURERMq1r7/+uqA8efJkD0YiIiIip1NCQURERMqtnJwcvv32WwBq1arF9u3bWblypYejEhEREVBCQURERMqxn3/+mfj4eLp37859990HFB6xICIiIp6jhIKIiIiUW5MmTQJgxIgRjBgxAoCpU6eSk5NT7PEbN25kwIABhISEEBgYyCWXXMKCBQv47bffsFgsjBo1qsg5hmEwZcoULrvsMkJDQ/Hx8aF58+a88MILpKenu+yxiYiIVHRKKIiIiEi5lJSUxKxZs/D29mbYsGE0bNiQbt26ER8fz88//1zk+D///JOuXbsyZ84c6tevzzXXXENmZiZ9+/bl+++/L7YNp9PJzTffzE033cRff/1F27Zt6devH2lpabz44ov07t2bjIwMVz9UERGRCkkJBRERESmXpk+fTmZmJldffTVhYWEABaMU/nnZg9PpZNSoUaSnp/Pqq6+yYcMGpkyZwqpVq/j0008ZP358sW2MGzeOKVOmcOmll7Jjxw4WL17M999/z86dO7n99ttZtWoVL774omsfqIiISAVlMQzD8HQQIiIiIv906aWXsmTJEqZNm8bQoUMBOH78OBEREdhsNg4fPkxwcDAACxcu5MorryQ6OpqtW7ditRb+zaRHjx4sW7aMkSNHMnHiRAByc3OJiIggIyODXbt2UbNmzULnZGRk0KhRI7KysoiPjy9Sp4iISFWnd0YREREpd/bt28fvv/9OSEgIAwYMKNherVo1+vXrR2ZmJtOmTSvYvmzZMgCGDBlS7Bf/G264oci2tWvXEh8fT7du3YokEwB8fX3p0KEDCQkJ7NixoyweloiISKWihIKIiIiUO5MnT8YwDIYOHYrD4Si0L/+yh/wJGwEOHToEQGRkZLH11atXr8i2vXv3ArBgwQIsFkuxt7lz5wIQHx9/wY9JRESksrF7OgARERGRf8qfI+G3336jR48ehfZlZ2cD8PvvvxMbG0v9+vXPqw2n0wlAVFQU3bt3P+ux1apVO682REREKjMlFERERKRcWbNmDTExMQDs3LmTnTt3FnucYRhMnjyZp556ioiICADi4uKKPba47XXr1gWgWbNmBfMqiIiISMnpkgcREREpV/IvZXj00UcxDKPY22+//Vbo2PwRBjNnzqS4+aa/++67ItsuvvhigoODWbJkCSdOnHDRoxEREam8lFAQERGRciMvL48pU6YAMHz48DMe17NnT+rUqUNMTAxr1qzhsssuIzo6mm3btvHf//630LETJ05k6dKlRepwOBw8/vjjpKSkcN1117F79+4ixxw4cKDIEpUiIiJiUkJBREREyo358+dz5MgRmjRpQvv27c94nNVqLVi54euvv8ZqtfLll1/i5+fHE088Qdu2bbnpppvo3Lkzt912G/fffz8A3t7ehep54okn+Ne//sWSJUto3rw5Xbp0Yfjw4QwZMoSWLVsSGRnJuHHjXPeARUREKjAlFERERKTcyB8NcLbRCfnyj5kyZQq5ubl07dqV5cuXc80117Bnzx5mzZqFl5cX8+bNo2vXrkDRyRWtVitfffUVP/74I1deeSV79uxhxowZ/PHHH/j4+PDYY48xYcKEMn6UIiIilYPFKO5CQxEREZFK5J577uGTTz7h22+/LRjZICIiIhdGCQURERGpFE6cOEFycjINGjQotH3q1KncfPPNBAYGsn//fvz9/T0ToIiISCWjZSNFRESkUti+fTtdu3aldevWNGrUCICYmBi2bduGzWbjk08+UTJBRESkDGmEgoiIiFQKR48e5aWXXuLXX3/l4MGDpKWlUb16dbp168ajjz5aMI+CiIiIlA0lFERERERERESk1LTKg4iIiIiIiIiUmhIKIiIiIiIiIlJqSiiIiIiIiIiISKkpoSAiIiIiIiIipaaEgoiIiIiIiIiUmhIKIiIiIiIiIlJqSiiIiIiIiIiISKkpoSAiIiIiIiIipaaEgoiIiIiIiIiU2v8DcXC5DpPsLYkAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "%config InlineBackend.figure_format = 'png'\n", "ax = dftrain_raw.query('Survived == 0')['Age'].plot(kind = 'density',\n", " figsize = (12,8),fontsize=15)\n", "dftrain_raw.query('Survived == 1')['Age'].plot(kind = 'density',\n", " figsize = (12,8),fontsize=15)\n", "ax.legend(['Survived==0','Survived==1'],fontsize = 12)\n", "ax.set_ylabel('Density',fontsize = 15)\n", "ax.set_xlabel('Age',fontsize = 15)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "d4ba0563", "metadata": {}, "source": [ "下面为正式的数据预处理" ] }, { "cell_type": "code", "execution_count": 6, "id": "1d64c292-33ed-406d-9b00-5b47ba6bff2f", "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", "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
049301Molson, Mr. Harry Marklandmale55.00011378730.5000C30S
15311Harper, Mrs. Henry Sleeper (Myna Haxtun)female49.010PC 1757276.7292D33C
238812Buss, Miss. Katefemale36.0002784913.0000NaNS
319202Carbines, Mr. Williammale19.0002842413.0000NaNS
468703Panula, Mr. Jaako Arnoldmale14.041310129539.6875NaNS
.......................................
70785913Baclini, Mrs. Solomon (Latifa Qurban)female24.003266619.2583NaNC
7086501Stewart, Mr. Albert AmaleNaN00PC 1760527.7208NaNC
70913003Ekstrom, Mr. Johanmale45.0003470616.9750NaNS
7102102Fynney, Mr. Joseph Jmale35.00023986526.0000NaNS
71147601Clifford, Mr. George QuincymaleNaN0011046552.0000A14S
\n", "

712 rows × 12 columns

\n", "
" ], "text/plain": [ " PassengerId Survived Pclass Name \\\n", "0 493 0 1 Molson, Mr. Harry Markland \n", "1 53 1 1 Harper, Mrs. Henry Sleeper (Myna Haxtun) \n", "2 388 1 2 Buss, Miss. Kate \n", "3 192 0 2 Carbines, Mr. William \n", "4 687 0 3 Panula, Mr. Jaako Arnold \n", ".. ... ... ... ... \n", "707 859 1 3 Baclini, Mrs. Solomon (Latifa Qurban) \n", "708 65 0 1 Stewart, Mr. Albert A \n", "709 130 0 3 Ekstrom, Mr. Johan \n", "710 21 0 2 Fynney, Mr. Joseph J \n", "711 476 0 1 Clifford, Mr. George Quincy \n", "\n", " Sex Age SibSp Parch Ticket Fare Cabin Embarked \n", "0 male 55.0 0 0 113787 30.5000 C30 S \n", "1 female 49.0 1 0 PC 17572 76.7292 D33 C \n", "2 female 36.0 0 0 27849 13.0000 NaN S \n", "3 male 19.0 0 0 28424 13.0000 NaN S \n", "4 male 14.0 4 1 3101295 39.6875 NaN S \n", ".. ... ... ... ... ... ... ... ... \n", "707 female 24.0 0 3 2666 19.2583 NaN C \n", "708 male NaN 0 0 PC 17605 27.7208 NaN C \n", "709 male 45.0 0 0 347061 6.9750 NaN S \n", "710 male 35.0 0 0 239865 26.0000 NaN S \n", "711 male NaN 0 0 110465 52.0000 A14 S \n", "\n", "[712 rows x 12 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dftrain_raw " ] }, { "cell_type": "code", "execution_count": 7, "id": "a28dcead", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x_train.shape = (712, 15)\n", "x_test.shape = (179, 15)\n", "y_train.shape = (712, 1)\n", "y_test.shape = (179, 1)\n" ] } ], "source": [ "def preprocessing(dfdata):\n", "\n", " dfresult= pd.DataFrame()\n", "\n", " #Pclass\n", " dfPclass = pd.get_dummies(dfdata['Pclass']).astype(float)\n", " dfPclass.columns = ['Pclass_' +str(x) for x in dfPclass.columns ]\n", " dfresult = pd.concat([dfresult,dfPclass],axis = 1)\n", "\n", " #Sex\n", " dfSex = pd.get_dummies(dfdata['Sex']).astype(float)\n", " dfresult = pd.concat([dfresult,dfSex],axis = 1)\n", "\n", " #Age\n", " dfresult['Age'] = dfdata['Age'].fillna(0)\n", " dfresult['Age_null'] = pd.isna(dfdata['Age']).astype(float)\n", "\n", " #SibSp,Parch,Fare\n", " dfresult['SibSp'] = dfdata['SibSp']\n", " dfresult['Parch'] = dfdata['Parch']\n", " dfresult['Fare'] = dfdata['Fare']\n", "\n", " #Carbin\n", " dfresult['Cabin_null'] = pd.isna(dfdata['Cabin']).astype(float)\n", "\n", " #Embarked\n", " dfEmbarked = pd.get_dummies(dfdata['Embarked'],dummy_na=True).astype(float)\n", " dfEmbarked.columns = ['Embarked_' + str(x) for x in dfEmbarked.columns]\n", " dfresult = pd.concat([dfresult,dfEmbarked],axis = 1)\n", "\n", " return(dfresult)\n", "\n", "x_train = preprocessing(dftrain_raw).values\n", "y_train = dftrain_raw[['Survived']].values\n", "\n", "x_test = preprocessing(dftest_raw).values\n", "y_test = dftest_raw[['Survived']].values\n", "\n", "print(\"x_train.shape =\", x_train.shape )\n", "print(\"x_test.shape =\", x_test.shape )\n", "\n", "print(\"y_train.shape =\", y_train.shape )\n", "print(\"y_test.shape =\", y_test.shape )\n" ] }, { "cell_type": "markdown", "id": "95d6c6d9", "metadata": {}, "source": [ "进一步使用DataLoader和TensorDataset封装成可以迭代的数据管道。" ] }, { "cell_type": "code", "execution_count": 8, "id": "1d744935", "metadata": {}, "outputs": [], "source": [ "dl_train = DataLoader(TensorDataset(torch.tensor(x_train).float(),torch.tensor(y_train).float()),\n", " shuffle = True, batch_size = 8)\n", "dl_val = DataLoader(TensorDataset(torch.tensor(x_test).float(),torch.tensor(y_test).float()),\n", " shuffle = False, batch_size = 8)\n" ] }, { "cell_type": "code", "execution_count": 9, "id": "5ec2fc6b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tensor([[ 0.0000, 0.0000, 1.0000, 0.0000, 1.0000, 0.0000, 1.0000, 0.0000,\n", " 0.0000, 7.2292, 1.0000, 1.0000, 0.0000, 0.0000, 0.0000],\n", " [ 0.0000, 0.0000, 1.0000, 1.0000, 0.0000, 45.0000, 0.0000, 0.0000,\n", " 1.0000, 14.4542, 1.0000, 1.0000, 0.0000, 0.0000, 0.0000],\n", " [ 0.0000, 1.0000, 0.0000, 0.0000, 1.0000, 28.0000, 0.0000, 0.0000,\n", " 0.0000, 10.5000, 1.0000, 0.0000, 0.0000, 1.0000, 0.0000],\n", " [ 0.0000, 0.0000, 1.0000, 1.0000, 0.0000, 15.0000, 0.0000, 1.0000,\n", " 0.0000, 14.4542, 1.0000, 1.0000, 0.0000, 0.0000, 0.0000],\n", " [ 0.0000, 1.0000, 0.0000, 1.0000, 0.0000, 36.0000, 0.0000, 1.0000,\n", " 0.0000, 26.0000, 1.0000, 0.0000, 0.0000, 1.0000, 0.0000],\n", " [ 0.0000, 0.0000, 1.0000, 0.0000, 1.0000, 1.0000, 0.0000, 5.0000,\n", " 2.0000, 46.9000, 1.0000, 0.0000, 0.0000, 1.0000, 0.0000],\n", " [ 1.0000, 0.0000, 0.0000, 1.0000, 0.0000, 33.0000, 0.0000, 0.0000,\n", " 0.0000, 86.5000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000],\n", " [ 0.0000, 1.0000, 0.0000, 0.0000, 1.0000, 0.6700, 0.0000, 1.0000,\n", " 1.0000, 14.5000, 1.0000, 0.0000, 0.0000, 1.0000, 0.0000]]) tensor([[0.],\n", " [0.],\n", " [0.],\n", " [1.],\n", " [1.],\n", " [0.],\n", " [1.],\n", " [1.]])\n" ] } ], "source": [ "# 测试数据管道\n", "for features,labels in dl_train:\n", " print(features,labels)\n", " break" ] }, { "cell_type": "code", "execution_count": null, "id": "0008e20c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "25126768", "metadata": {}, "source": [ "### 二,定义模型" ] }, { "cell_type": "markdown", "id": "3a275e98", "metadata": {}, "source": [ "使用Pytorch通常有三种方式构建模型:使用nn.Sequential按层顺序构建模型,继承nn.Module基类构建自定义模型,继承nn.Module基类构建模型并辅助应用模型容器进行封装。\n", "\n", "此处选择使用最简单的nn.Sequential,按层顺序模型。" ] }, { "cell_type": "code", "execution_count": 10, "id": "617186ef", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sequential(\n", " (linear1): Linear(in_features=15, out_features=20, bias=True)\n", " (relu1): ReLU()\n", " (linear2): Linear(in_features=20, out_features=15, bias=True)\n", " (relu2): ReLU()\n", " (linear3): Linear(in_features=15, out_features=1, bias=True)\n", ")\n" ] } ], "source": [ "def create_net():\n", " net = nn.Sequential()\n", " net.add_module(\"linear1\",nn.Linear(15,20))\n", " net.add_module(\"relu1\",nn.ReLU())\n", " net.add_module(\"linear2\",nn.Linear(20,15))\n", " net.add_module(\"relu2\",nn.ReLU())\n", " net.add_module(\"linear3\",nn.Linear(15,1))\n", " return net\n", " \n", "net = create_net()\n", "print(net)" ] }, { "cell_type": "code", "execution_count": null, "id": "cdef0374", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "6761227a", "metadata": {}, "source": [ "### 三,训练模型" ] }, { "cell_type": "markdown", "id": "af89d5af", "metadata": {}, "source": [ "Pytorch通常需要用户编写自定义训练循环,训练循环的代码风格因人而异。\n", "\n", "有3类典型的训练循环代码风格:脚本形式训练循环,函数形式训练循环,类形式训练循环。\n", "\n", "此处介绍一种较通用的仿照Keras风格的脚本形式的训练循环。\n", "\n", "该脚本形式的训练代码与 torchkeras 库的核心代码基本一致。\n", "\n", "torchkeras详情: https://github.com/lyhue1991/torchkeras \n" ] }, { "cell_type": "code", "execution_count": 11, "id": "87c5039d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "================================================================================2024-09-11 10:45:33\n", "Epoch 1 / 20\n", "\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 89/89 [00:00<00:00, 1092.33it/s, train_acc=0.612, train_loss=0.662]\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 23/23 [00:00<00:00, 1775.68it/s, val_acc=0.687, val_loss=0.616]" ] }, { "name": "stderr", "output_type": "stream", "text": [ "<<<<<< reach best val_acc : 0.6871508359909058 >>>>>>\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "================================================================================2024-09-11 10:45:33\n", "Epoch 2 / 20\n", "\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 89/89 [00:00<00:00, 1377.66it/s, train_acc=0.691, train_loss=0.596]\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 23/23 [00:00<00:00, 1653.62it/s, val_acc=0.709, val_loss=0.548]" ] }, { "name": "stderr", "output_type": "stream", "text": [ "<<<<<< reach best val_acc : 0.7094972133636475 >>>>>>\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "================================================================================2024-09-11 10:45:34\n", "Epoch 3 / 20\n", "\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 89/89 [00:00<00:00, 1352.33it/s, train_acc=0.729, train_loss=0.554]\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 23/23 [00:00<00:00, 1625.89it/s, val_acc=0.749, val_loss=0.509]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "<<<<<< reach best val_acc : 0.748603343963623 >>>>>>\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "================================================================================2024-09-11 10:45:34\n", "Epoch 4 / 20\n", "\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████| 89/89 [00:00<00:00, 1293.46it/s, train_acc=0.77, train_loss=0.515]\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 23/23 [00:00<00:00, 1669.97it/s, val_acc=0.732, val_loss=0.483]\n", "\n", "================================================================================2024-09-11 10:45:34\n", "Epoch 5 / 20\n", "\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████| 89/89 [00:00<00:00, 768.35it/s, train_acc=0.772, train_loss=0.518]\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 23/23 [00:00<00:00, 1374.77it/s, val_acc=0.777, val_loss=0.475]\n", "\n", "================================================================================2024-09-11 10:45:34" ] }, { "name": "stderr", "output_type": "stream", "text": [ "<<<<<< reach best val_acc : 0.7765362858772278 >>>>>>\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Epoch 6 / 20\n", "\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████| 89/89 [00:00<00:00, 1144.28it/s, train_acc=0.784, train_loss=0.51]\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 23/23 [00:00<00:00, 1443.71it/s, val_acc=0.782, val_loss=0.451]" ] }, { "name": "stderr", "output_type": "stream", "text": [ "<<<<<< reach best val_acc : 0.7821229100227356 >>>>>>\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "================================================================================2024-09-11 10:45:34\n", "Epoch 7 / 20\n", "\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 89/89 [00:00<00:00, 1058.84it/s, train_acc=0.791, train_loss=0.475]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 23/23 [00:00<00:00, 1315.87it/s, val_acc=0.777, val_loss=0.42]\n", "\n", "================================================================================2024-09-11 10:45:34\n", "Epoch 8 / 20\n", "\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 89/89 [00:00<00:00, 1061.54it/s, train_acc=0.785, train_loss=0.482]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 23/23 [00:00<00:00, 1328.48it/s, val_acc=0.793, val_loss=0.42]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "<<<<<< reach best val_acc : 0.7932960987091064 >>>>>>\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "================================================================================2024-09-11 10:45:34\n", "Epoch 9 / 20\n", "\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 89/89 [00:00<00:00, 1077.93it/s, train_acc=0.801, train_loss=0.462]\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 23/23 [00:00<00:00, 1285.21it/s, val_acc=0.799, val_loss=0.413]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "<<<<<< reach best val_acc : 0.7988826632499695 >>>>>>\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "================================================================================2024-09-11 10:45:34\n", "Epoch 10 / 20\n", "\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 89/89 [00:00<00:00, 1118.12it/s, train_acc=0.795, train_loss=0.466]\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 23/23 [00:00<00:00, 1670.20it/s, val_acc=0.793, val_loss=0.447]\n", "\n", "================================================================================2024-09-11 10:45:34\n", "Epoch 11 / 20\n", "\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 89/89 [00:00<00:00, 1322.75it/s, train_acc=0.805, train_loss=0.461]\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 23/23 [00:00<00:00, 1569.32it/s, val_acc=0.771, val_loss=0.434]\n", "\n", "================================================================================2024-09-11 10:45:34\n", "Epoch 12 / 20\n", "\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 89/89 [00:00<00:00, 1313.24it/s, train_acc=0.798, train_loss=0.446]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 23/23 [00:00<00:00, 1565.37it/s, val_acc=0.81, val_loss=0.426]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "<<<<<< reach best val_acc : 0.8100558519363403 >>>>>>\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "================================================================================2024-09-11 10:45:35\n", "Epoch 13 / 20\n", "\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 89/89 [00:00<00:00, 1258.56it/s, train_acc=0.812, train_loss=0.443]\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 23/23 [00:00<00:00, 1679.09it/s, val_acc=0.804, val_loss=0.407]\n", "\n", "================================================================================2024-09-11 10:45:35\n", "Epoch 14 / 20\n", "\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 89/89 [00:00<00:00, 1312.92it/s, train_acc=0.801, train_loss=0.456]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 23/23 [00:00<00:00, 1661.83it/s, val_acc=0.81, val_loss=0.405]\n", "\n", "================================================================================2024-09-11 10:45:35\n", "Epoch 15 / 20\n", "\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 89/89 [00:00<00:00, 1346.36it/s, train_acc=0.805, train_loss=0.449]\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 23/23 [00:00<00:00, 1544.44it/s, val_acc=0.804, val_loss=0.453]\n", "\n", "================================================================================2024-09-11 10:45:35\n", "Epoch 16 / 20\n", "\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 89/89 [00:00<00:00, 1286.41it/s, train_acc=0.803, train_loss=0.445]\n", "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 23/23 [00:00<00:00, 1599.58it/s, val_acc=0.799, val_loss=0.451]\n", "\n", "================================================================================2024-09-11 10:45:35\n", "Epoch 17 / 20\n", "\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████| 89/89 [00:00<00:00, 785.39it/s, train_acc=0.794, train_loss=0.457]\n", "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 23/23 [00:00<00:00, 1554.25it/s, val_acc=0.793, val_loss=0.4]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "<<<<<< val_acc without improvement in 5 epoch, early stopping >>>>>>\n" ] } ], "source": [ "import os,sys,time\n", "import numpy as np\n", "import pandas as pd\n", "import datetime \n", "from tqdm import tqdm \n", "\n", "import torch\n", "from torch import nn \n", "from copy import deepcopy\n", "from torchkeras.metrics import Accuracy\n", "\n", "\n", "def printlog(info):\n", " nowtime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')\n", " print(\"\\n\"+\"==========\"*8 + \"%s\"%nowtime)\n", " print(str(info)+\"\\n\")\n", " \n", "\n", "loss_fn = nn.BCEWithLogitsLoss()\n", "optimizer= torch.optim.Adam(net.parameters(),lr = 0.005) \n", "metrics_dict = {\"acc\":Accuracy()}\n", "\n", "epochs = 20 \n", "ckpt_path='checkpoint.pt'\n", "\n", "#early_stopping相关设置\n", "monitor=\"val_acc\"\n", "patience=5\n", "mode=\"max\"\n", "\n", "history = {}\n", "\n", "for epoch in range(1, epochs+1):\n", " printlog(\"Epoch {0} / {1}\".format(epoch, epochs))\n", "\n", " # 1,train ------------------------------------------------- \n", " net.train()\n", " \n", " total_loss,step = 0,0\n", " \n", " loop = tqdm(enumerate(dl_train), total =len(dl_train),file = sys.stdout)\n", " train_metrics_dict = deepcopy(metrics_dict) \n", " \n", " for i, batch in loop: \n", " \n", " features,labels = batch\n", " #forward\n", " preds = net(features)\n", " loss = loss_fn(preds,labels)\n", " \n", " #backward\n", " loss.backward()\n", " optimizer.step()\n", " optimizer.zero_grad()\n", " \n", " #metrics\n", " step_metrics = {\"train_\"+name:metric_fn(preds, labels).item() \n", " for name,metric_fn in train_metrics_dict.items()}\n", " \n", " step_log = dict({\"train_loss\":loss.item()},**step_metrics)\n", "\n", " total_loss += loss.item()\n", " \n", " step+=1\n", " if i!=len(dl_train)-1:\n", " loop.set_postfix(**step_log)\n", " else:\n", " epoch_loss = total_loss/step\n", " epoch_metrics = {\"train_\"+name:metric_fn.compute().item() \n", " for name,metric_fn in train_metrics_dict.items()}\n", " epoch_log = dict({\"train_loss\":epoch_loss},**epoch_metrics)\n", " loop.set_postfix(**epoch_log)\n", "\n", " for name,metric_fn in train_metrics_dict.items():\n", " metric_fn.reset()\n", " \n", " for name, metric in epoch_log.items():\n", " history[name] = history.get(name, []) + [metric]\n", " \n", "\n", " # 2,validate -------------------------------------------------\n", " net.eval()\n", " \n", " total_loss,step = 0,0\n", " loop = tqdm(enumerate(dl_val), total =len(dl_val),file = sys.stdout)\n", " \n", " val_metrics_dict = deepcopy(metrics_dict) \n", " \n", " with torch.no_grad():\n", " for i, batch in loop: \n", "\n", " features,labels = batch\n", " \n", " #forward\n", " preds = net(features)\n", " loss = loss_fn(preds,labels)\n", "\n", " #metrics\n", " step_metrics = {\"val_\"+name:metric_fn(preds, labels).item() \n", " for name,metric_fn in val_metrics_dict.items()}\n", "\n", " step_log = dict({\"val_loss\":loss.item()},**step_metrics)\n", "\n", " total_loss += loss.item()\n", " step+=1\n", " if i!=len(dl_val)-1:\n", " loop.set_postfix(**step_log)\n", " else:\n", " epoch_loss = (total_loss/step)\n", " epoch_metrics = {\"val_\"+name:metric_fn.compute().item() \n", " for name,metric_fn in val_metrics_dict.items()}\n", " epoch_log = dict({\"val_loss\":epoch_loss},**epoch_metrics)\n", " loop.set_postfix(**epoch_log)\n", "\n", " for name,metric_fn in val_metrics_dict.items():\n", " metric_fn.reset()\n", " \n", " epoch_log[\"epoch\"] = epoch \n", " for name, metric in epoch_log.items():\n", " history[name] = history.get(name, []) + [metric]\n", "\n", " # 3,early-stopping -------------------------------------------------\n", " arr_scores = history[monitor]\n", " best_score_idx = np.argmax(arr_scores) if mode==\"max\" else np.argmin(arr_scores)\n", " if best_score_idx==len(arr_scores)-1:\n", " torch.save(net.state_dict(),ckpt_path)\n", " print(\"<<<<<< reach best {0} : {1} >>>>>>\".format(monitor,\n", " arr_scores[best_score_idx]),file=sys.stderr)\n", " if len(arr_scores)-best_score_idx>patience:\n", " print(\"<<<<<< {} without improvement in {} epoch, early stopping >>>>>>\".format(\n", " monitor,patience),file=sys.stderr)\n", " break \n", " net.load_state_dict(torch.load(ckpt_path,weights_only=True))\n", " \n", "dfhistory = pd.DataFrame(history)\n" ] }, { "cell_type": "code", "execution_count": null, "id": "6c5ba3ad", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "ec78a930", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "70f7f3b3", "metadata": {}, "source": [ "### 四,评估模型" ] }, { "cell_type": "markdown", "id": "cefbce96", "metadata": {}, "source": [ "我们首先评估一下模型在训练集和验证集上的效果。" ] }, { "cell_type": "code", "execution_count": 13, "id": "2a731173", "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", "
train_losstrain_accval_lossval_accepoch
00.6615940.6123600.6164070.6871511
10.5964480.6910110.5481760.7094972
20.5535930.7289330.5089820.7486033
30.5145010.7696630.4827260.7318444
40.5176880.7724720.4749830.7765365
50.5097550.7837080.4506120.7821236
60.4746830.7907300.4200940.7765367
70.4824960.7851120.4200830.7932968
80.4615510.8005620.4132040.7988839
90.4659860.7949440.4466650.79329610
100.4613250.8047750.4342900.77095011
110.4459430.7977530.4255590.81005612
120.4428020.8117980.4070310.80446913
130.4556150.8005620.4046790.81005614
140.4494650.8047750.4526110.80446915
150.4449320.8033710.4506960.79888316
160.4571840.7935390.3995760.79329617
\n", "
" ], "text/plain": [ " train_loss train_acc val_loss val_acc epoch\n", "0 0.661594 0.612360 0.616407 0.687151 1\n", "1 0.596448 0.691011 0.548176 0.709497 2\n", "2 0.553593 0.728933 0.508982 0.748603 3\n", "3 0.514501 0.769663 0.482726 0.731844 4\n", "4 0.517688 0.772472 0.474983 0.776536 5\n", "5 0.509755 0.783708 0.450612 0.782123 6\n", "6 0.474683 0.790730 0.420094 0.776536 7\n", "7 0.482496 0.785112 0.420083 0.793296 8\n", "8 0.461551 0.800562 0.413204 0.798883 9\n", "9 0.465986 0.794944 0.446665 0.793296 10\n", "10 0.461325 0.804775 0.434290 0.770950 11\n", "11 0.445943 0.797753 0.425559 0.810056 12\n", "12 0.442802 0.811798 0.407031 0.804469 13\n", "13 0.455615 0.800562 0.404679 0.810056 14\n", "14 0.449465 0.804775 0.452611 0.804469 15\n", "15 0.444932 0.803371 0.450696 0.798883 16\n", "16 0.457184 0.793539 0.399576 0.793296 17" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfhistory " ] }, { "cell_type": "code", "execution_count": 12, "id": "10ab56d5", "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "%config InlineBackend.figure_format = 'svg'\n", "\n", "import matplotlib.pyplot as plt\n", "\n", "def plot_metric(dfhistory, metric):\n", " train_metrics = dfhistory[\"train_\"+metric]\n", " val_metrics = dfhistory['val_'+metric]\n", " epochs = range(1, len(train_metrics) + 1)\n", " plt.plot(epochs, train_metrics, 'bo--')\n", " plt.plot(epochs, val_metrics, 'ro-')\n", " plt.title('Training and validation '+ metric)\n", " plt.xlabel(\"Epochs\")\n", " plt.ylabel(metric)\n", " plt.legend([\"train_\"+metric, 'val_'+metric])\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 14, "id": "e3b47c77", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-09-11T10:45:51.760370\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.9.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_metric(dfhistory,\"loss\")" ] }, { "cell_type": "code", "execution_count": 15, "id": "4bdfcf5a", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-09-11T10:45:53.781421\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.9.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_metric(dfhistory,\"acc\")" ] }, { "cell_type": "code", "execution_count": null, "id": "c1f1cb9e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "17d7e80c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "05c4494b", "metadata": {}, "source": [ "### 五,使用模型" ] }, { "cell_type": "code", "execution_count": 16, "id": "da16f9ab", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([[0.0771],\n", " [0.6915],\n", " [0.3397],\n", " [0.9527],\n", " [0.6116],\n", " [0.8747],\n", " [0.1023],\n", " [0.8377],\n", " [0.5713],\n", " [0.0841]])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#预测概率\n", "\n", "y_pred_probs = torch.sigmoid(net(torch.tensor(x_test[0:10]).float())).data\n", "y_pred_probs" ] }, { "cell_type": "code", "execution_count": 17, "id": "a31cb281", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([[0.],\n", " [1.],\n", " [0.],\n", " [1.],\n", " [1.],\n", " [1.],\n", " [0.],\n", " [1.],\n", " [1.],\n", " [0.]])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#预测类别\n", "y_pred = torch.where(y_pred_probs>0.5,\n", " torch.ones_like(y_pred_probs),torch.zeros_like(y_pred_probs))\n", "y_pred" ] }, { "cell_type": "code", "execution_count": null, "id": "48f6cacc", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "57fe8bba", "metadata": {}, "source": [ "### 六,保存模型" ] }, { "cell_type": "markdown", "id": "89eb7506", "metadata": {}, "source": [ "Pytorch 有两种保存模型的方式,都是通过调用pickle序列化方法实现的。\n", "\n", "第一种方法只保存模型参数。\n", "\n", "第二种方法保存完整模型。\n", "\n", "推荐使用第一种,第二种方法可能在切换设备和目录的时候出现各种问题。\n" ] }, { "cell_type": "markdown", "id": "9113eb43", "metadata": {}, "source": [ "**1,保存模型参数(推荐)**" ] }, { "cell_type": "code", "execution_count": 18, "id": "e6098000", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "odict_keys(['linear1.weight', 'linear1.bias', 'linear2.weight', 'linear2.bias', 'linear3.weight', 'linear3.bias'])\n" ] } ], "source": [ "print(net.state_dict().keys())\n" ] }, { "cell_type": "code", "execution_count": 19, "id": "4cfa68ac", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([[0.0771],\n", " [0.6915],\n", " [0.3397],\n", " [0.9527],\n", " [0.6116],\n", " [0.8747],\n", " [0.1023],\n", " [0.8377],\n", " [0.5713],\n", " [0.0841]])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 保存模型参数\n", "\n", "torch.save(net.state_dict(), \"./data/net_parameter.pt\")\n", "\n", "net_clone = create_net()\n", "net_clone.load_state_dict(torch.load(\"./data/net_parameter.pt\",weights_only=True))\n", "\n", "torch.sigmoid(net_clone.forward(torch.tensor(x_test[0:10]).float())).data\n" ] }, { "cell_type": "code", "execution_count": null, "id": "1fcfbadf", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "bee51ce5", "metadata": {}, "source": [ "**2,保存完整模型(不推荐)**" ] }, { "cell_type": "code", "execution_count": 20, "id": "4c969c33", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([[0.0771],\n", " [0.6915],\n", " [0.3397],\n", " [0.9527],\n", " [0.6116],\n", " [0.8747],\n", " [0.1023],\n", " [0.8377],\n", " [0.5713],\n", " [0.0841]])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "torch.save(net, './data/net_model.pt')\n", "net_loaded = torch.load('./data/net_model.pt',weights_only=False)\n", "torch.sigmoid(net_loaded(torch.tensor(x_test[0:10]).float())).data\n" ] }, { "cell_type": "markdown", "id": "52eacb75", "metadata": {}, "source": [ "**如果本书对你有所帮助,想鼓励一下作者,记得给本项目加一颗星星star⭐️,并分享给你的朋友们喔😊!** \n", "\n", "如果对本书内容理解上有需要进一步和作者交流的地方,欢迎在公众号\"算法美食屋\"下留言。作者时间和精力有限,会酌情予以回复。\n", "\n", "也可以在公众号后台回复关键字:**加群**,加入读者交流群和大家讨论。\n", "\n", "![算法美食屋logo.png](https://tva1.sinaimg.cn/large/e6c9d24egy1h41m2zugguj20k00b9q46.jpg)" ] } ], "metadata": { "jupytext": { "cell_metadata_filter": "-all", "formats": "ipynb,md" }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.14" } }, "nbformat": 4, "nbformat_minor": 5 }