ium_z487175/02_Dane-Zadanie01.ipynb
2023-04-03 21:27:41 +02:00

1875 lines
211 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "code",
"execution_count": 5,
"id": "d80a4450",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: pandas in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (1.5.3)\n",
"Requirement already satisfied: python-dateutil>=2.8.1 in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (from pandas) (2.8.2)\n",
"Requirement already satisfied: pytz>=2020.1 in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (from pandas) (2023.2)\n",
"Requirement already satisfied: numpy>=1.21.0 in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (from pandas) (1.24.2)\n",
"Requirement already satisfied: six>=1.5 in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (from python-dateutil>=2.8.1->pandas) (1.16.0)\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
],
"source": [
"%pip install --user pandas"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "350abc87",
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: kaggle in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (1.5.13)\n",
"Requirement already satisfied: six>=1.10 in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (from kaggle) (1.16.0)\n",
"Requirement already satisfied: certifi in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (from kaggle) (2022.12.7)\n",
"Requirement already satisfied: python-dateutil in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (from kaggle) (2.8.2)\n",
"Requirement already satisfied: requests in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (from kaggle) (2.28.2)\n",
"Requirement already satisfied: tqdm in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (from kaggle) (4.65.0)\n",
"Requirement already satisfied: python-slugify in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (from kaggle) (8.0.1)\n",
"Requirement already satisfied: urllib3 in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (from kaggle) (1.26.15)\n",
"Requirement already satisfied: text-unidecode>=1.3 in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (from python-slugify->kaggle) (1.3)\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (from requests->kaggle) (3.1.0)\n",
"Requirement already satisfied: idna<4,>=2.5 in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (from requests->kaggle) (3.4)\n",
"Requirement already satisfied: colorama in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (from tqdm->kaggle) (0.4.6)\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
],
"source": [
"%pip install --user kaggle"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "0063a986",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"UsageError: Line magic function `%python` not found (But cell magic `%%python` exists, did you mean that instead?).\n"
]
}
],
"source": [
"%python -m kaggle datasets download -d ulrikthygepedersen/diamonds"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "5bc46bfd",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Downloading diamonds.zip to c:\\Users\\admin\\ium_z487175\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
" 0%| | 0.00/733k [00:00<?, ?B/s]\n",
"100%|██████████| 733k/733k [00:00<00:00, 1.35MB/s]\n",
"100%|██████████| 733k/733k [00:00<00:00, 1.33MB/s]\n"
]
}
],
"source": [
"!kaggle datasets download -d shivam2503/diamonds"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "75024e0f",
"metadata": {},
"outputs": [],
"source": [
"!tar -xf diamonds.zip\n",
"## rozpakowanie archiwum .zip w windowsie"
]
},
{
"cell_type": "code",
"execution_count": 88,
"id": "99c20a95",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Unnamed: 0</th>\n",
" <th>carat</th>\n",
" <th>cut</th>\n",
" <th>color</th>\n",
" <th>clarity</th>\n",
" <th>depth</th>\n",
" <th>table</th>\n",
" <th>price</th>\n",
" <th>x</th>\n",
" <th>y</th>\n",
" <th>z</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0.23</td>\n",
" <td>Ideal</td>\n",
" <td>E</td>\n",
" <td>SI2</td>\n",
" <td>61.5</td>\n",
" <td>55.0</td>\n",
" <td>326</td>\n",
" <td>3.95</td>\n",
" <td>3.98</td>\n",
" <td>2.43</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>0.21</td>\n",
" <td>Premium</td>\n",
" <td>E</td>\n",
" <td>SI1</td>\n",
" <td>59.8</td>\n",
" <td>61.0</td>\n",
" <td>326</td>\n",
" <td>3.89</td>\n",
" <td>3.84</td>\n",
" <td>2.31</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>0.23</td>\n",
" <td>Good</td>\n",
" <td>E</td>\n",
" <td>VS1</td>\n",
" <td>56.9</td>\n",
" <td>65.0</td>\n",
" <td>327</td>\n",
" <td>4.05</td>\n",
" <td>4.07</td>\n",
" <td>2.31</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>0.29</td>\n",
" <td>Premium</td>\n",
" <td>I</td>\n",
" <td>VS2</td>\n",
" <td>62.4</td>\n",
" <td>58.0</td>\n",
" <td>334</td>\n",
" <td>4.20</td>\n",
" <td>4.23</td>\n",
" <td>2.63</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0.31</td>\n",
" <td>Good</td>\n",
" <td>J</td>\n",
" <td>SI2</td>\n",
" <td>63.3</td>\n",
" <td>58.0</td>\n",
" <td>335</td>\n",
" <td>4.34</td>\n",
" <td>4.35</td>\n",
" <td>2.75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53935</th>\n",
" <td>53936</td>\n",
" <td>0.72</td>\n",
" <td>Ideal</td>\n",
" <td>D</td>\n",
" <td>SI1</td>\n",
" <td>60.8</td>\n",
" <td>57.0</td>\n",
" <td>2757</td>\n",
" <td>5.75</td>\n",
" <td>5.76</td>\n",
" <td>3.50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53936</th>\n",
" <td>53937</td>\n",
" <td>0.72</td>\n",
" <td>Good</td>\n",
" <td>D</td>\n",
" <td>SI1</td>\n",
" <td>63.1</td>\n",
" <td>55.0</td>\n",
" <td>2757</td>\n",
" <td>5.69</td>\n",
" <td>5.75</td>\n",
" <td>3.61</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53937</th>\n",
" <td>53938</td>\n",
" <td>0.70</td>\n",
" <td>Very Good</td>\n",
" <td>D</td>\n",
" <td>SI1</td>\n",
" <td>62.8</td>\n",
" <td>60.0</td>\n",
" <td>2757</td>\n",
" <td>5.66</td>\n",
" <td>5.68</td>\n",
" <td>3.56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53938</th>\n",
" <td>53939</td>\n",
" <td>0.86</td>\n",
" <td>Premium</td>\n",
" <td>H</td>\n",
" <td>SI2</td>\n",
" <td>61.0</td>\n",
" <td>58.0</td>\n",
" <td>2757</td>\n",
" <td>6.15</td>\n",
" <td>6.12</td>\n",
" <td>3.74</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53939</th>\n",
" <td>53940</td>\n",
" <td>0.75</td>\n",
" <td>Ideal</td>\n",
" <td>D</td>\n",
" <td>SI2</td>\n",
" <td>62.2</td>\n",
" <td>55.0</td>\n",
" <td>2757</td>\n",
" <td>5.83</td>\n",
" <td>5.87</td>\n",
" <td>3.64</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>53940 rows × 11 columns</p>\n",
"</div>"
],
"text/plain": [
" Unnamed: 0 carat cut color clarity depth table price x \\\n",
"0 1 0.23 Ideal E SI2 61.5 55.0 326 3.95 \n",
"1 2 0.21 Premium E SI1 59.8 61.0 326 3.89 \n",
"2 3 0.23 Good E VS1 56.9 65.0 327 4.05 \n",
"3 4 0.29 Premium I VS2 62.4 58.0 334 4.20 \n",
"4 5 0.31 Good J SI2 63.3 58.0 335 4.34 \n",
"... ... ... ... ... ... ... ... ... ... \n",
"53935 53936 0.72 Ideal D SI1 60.8 57.0 2757 5.75 \n",
"53936 53937 0.72 Good D SI1 63.1 55.0 2757 5.69 \n",
"53937 53938 0.70 Very Good D SI1 62.8 60.0 2757 5.66 \n",
"53938 53939 0.86 Premium H SI2 61.0 58.0 2757 6.15 \n",
"53939 53940 0.75 Ideal D SI2 62.2 55.0 2757 5.83 \n",
"\n",
" y z \n",
"0 3.98 2.43 \n",
"1 3.84 2.31 \n",
"2 4.07 2.31 \n",
"3 4.23 2.63 \n",
"4 4.35 2.75 \n",
"... ... ... \n",
"53935 5.76 3.50 \n",
"53936 5.75 3.61 \n",
"53937 5.68 3.56 \n",
"53938 6.12 3.74 \n",
"53939 5.87 3.64 \n",
"\n",
"[53940 rows x 11 columns]"
]
},
"execution_count": 88,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"diamonds = pd.read_csv('diamonds.csv')\n",
"#Wyświetlenie zbioru danych\n",
"diamonds"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "122b0b57",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>carat</th>\n",
" <th>cut</th>\n",
" <th>color</th>\n",
" <th>clarity</th>\n",
" <th>depth</th>\n",
" <th>table</th>\n",
" <th>price</th>\n",
" <th>x</th>\n",
" <th>y</th>\n",
" <th>z</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0.23</td>\n",
" <td>Ideal</td>\n",
" <td>E</td>\n",
" <td>SI2</td>\n",
" <td>61.5</td>\n",
" <td>55.0</td>\n",
" <td>326</td>\n",
" <td>3.95</td>\n",
" <td>3.98</td>\n",
" <td>2.43</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>0.21</td>\n",
" <td>Premium</td>\n",
" <td>E</td>\n",
" <td>SI1</td>\n",
" <td>59.8</td>\n",
" <td>61.0</td>\n",
" <td>326</td>\n",
" <td>3.89</td>\n",
" <td>3.84</td>\n",
" <td>2.31</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>0.23</td>\n",
" <td>Good</td>\n",
" <td>E</td>\n",
" <td>VS1</td>\n",
" <td>56.9</td>\n",
" <td>65.0</td>\n",
" <td>327</td>\n",
" <td>4.05</td>\n",
" <td>4.07</td>\n",
" <td>2.31</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>0.29</td>\n",
" <td>Premium</td>\n",
" <td>I</td>\n",
" <td>VS2</td>\n",
" <td>62.4</td>\n",
" <td>58.0</td>\n",
" <td>334</td>\n",
" <td>4.20</td>\n",
" <td>4.23</td>\n",
" <td>2.63</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0.31</td>\n",
" <td>Good</td>\n",
" <td>J</td>\n",
" <td>SI2</td>\n",
" <td>63.3</td>\n",
" <td>58.0</td>\n",
" <td>335</td>\n",
" <td>4.34</td>\n",
" <td>4.35</td>\n",
" <td>2.75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53935</th>\n",
" <td>53936</td>\n",
" <td>0.72</td>\n",
" <td>Ideal</td>\n",
" <td>D</td>\n",
" <td>SI1</td>\n",
" <td>60.8</td>\n",
" <td>57.0</td>\n",
" <td>2757</td>\n",
" <td>5.75</td>\n",
" <td>5.76</td>\n",
" <td>3.50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53936</th>\n",
" <td>53937</td>\n",
" <td>0.72</td>\n",
" <td>Good</td>\n",
" <td>D</td>\n",
" <td>SI1</td>\n",
" <td>63.1</td>\n",
" <td>55.0</td>\n",
" <td>2757</td>\n",
" <td>5.69</td>\n",
" <td>5.75</td>\n",
" <td>3.61</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53937</th>\n",
" <td>53938</td>\n",
" <td>0.70</td>\n",
" <td>Very Good</td>\n",
" <td>D</td>\n",
" <td>SI1</td>\n",
" <td>62.8</td>\n",
" <td>60.0</td>\n",
" <td>2757</td>\n",
" <td>5.66</td>\n",
" <td>5.68</td>\n",
" <td>3.56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53938</th>\n",
" <td>53939</td>\n",
" <td>0.86</td>\n",
" <td>Premium</td>\n",
" <td>H</td>\n",
" <td>SI2</td>\n",
" <td>61.0</td>\n",
" <td>58.0</td>\n",
" <td>2757</td>\n",
" <td>6.15</td>\n",
" <td>6.12</td>\n",
" <td>3.74</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53939</th>\n",
" <td>53940</td>\n",
" <td>0.75</td>\n",
" <td>Ideal</td>\n",
" <td>D</td>\n",
" <td>SI2</td>\n",
" <td>62.2</td>\n",
" <td>55.0</td>\n",
" <td>2757</td>\n",
" <td>5.83</td>\n",
" <td>5.87</td>\n",
" <td>3.64</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>53940 rows × 11 columns</p>\n",
"</div>"
],
"text/plain": [
" id carat cut color clarity depth table price x y \\\n",
"0 1 0.23 Ideal E SI2 61.5 55.0 326 3.95 3.98 \n",
"1 2 0.21 Premium E SI1 59.8 61.0 326 3.89 3.84 \n",
"2 3 0.23 Good E VS1 56.9 65.0 327 4.05 4.07 \n",
"3 4 0.29 Premium I VS2 62.4 58.0 334 4.20 4.23 \n",
"4 5 0.31 Good J SI2 63.3 58.0 335 4.34 4.35 \n",
"... ... ... ... ... ... ... ... ... ... ... \n",
"53935 53936 0.72 Ideal D SI1 60.8 57.0 2757 5.75 5.76 \n",
"53936 53937 0.72 Good D SI1 63.1 55.0 2757 5.69 5.75 \n",
"53937 53938 0.70 Very Good D SI1 62.8 60.0 2757 5.66 5.68 \n",
"53938 53939 0.86 Premium H SI2 61.0 58.0 2757 6.15 6.12 \n",
"53939 53940 0.75 Ideal D SI2 62.2 55.0 2757 5.83 5.87 \n",
"\n",
" z \n",
"0 2.43 \n",
"1 2.31 \n",
"2 2.31 \n",
"3 2.63 \n",
"4 2.75 \n",
"... ... \n",
"53935 3.50 \n",
"53936 3.61 \n",
"53937 3.56 \n",
"53938 3.74 \n",
"53939 3.64 \n",
"\n",
"[53940 rows x 11 columns]"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#przydzielanie nazwy kolumny z id\n",
"diamonds = diamonds.rename(columns={diamonds.columns[0]: 'id'})\n",
"diamonds"
]
},
{
"cell_type": "code",
"execution_count": 98,
"id": "a489dab8",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Unnamed: 0</th>\n",
" <th>carat</th>\n",
" <th>cut</th>\n",
" <th>color</th>\n",
" <th>clarity</th>\n",
" <th>depth</th>\n",
" <th>table</th>\n",
" <th>price</th>\n",
" <th>x</th>\n",
" <th>y</th>\n",
" <th>z</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0.23</td>\n",
" <td>ideal</td>\n",
" <td>E</td>\n",
" <td>SI2</td>\n",
" <td>61.5</td>\n",
" <td>55.0</td>\n",
" <td>326</td>\n",
" <td>3.95</td>\n",
" <td>3.98</td>\n",
" <td>2.43</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>0.21</td>\n",
" <td>premium</td>\n",
" <td>E</td>\n",
" <td>SI1</td>\n",
" <td>59.8</td>\n",
" <td>61.0</td>\n",
" <td>326</td>\n",
" <td>3.89</td>\n",
" <td>3.84</td>\n",
" <td>2.31</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>0.23</td>\n",
" <td>good</td>\n",
" <td>E</td>\n",
" <td>VS1</td>\n",
" <td>56.9</td>\n",
" <td>65.0</td>\n",
" <td>327</td>\n",
" <td>4.05</td>\n",
" <td>4.07</td>\n",
" <td>2.31</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>0.29</td>\n",
" <td>premium</td>\n",
" <td>I</td>\n",
" <td>VS2</td>\n",
" <td>62.4</td>\n",
" <td>58.0</td>\n",
" <td>334</td>\n",
" <td>4.20</td>\n",
" <td>4.23</td>\n",
" <td>2.63</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0.31</td>\n",
" <td>good</td>\n",
" <td>J</td>\n",
" <td>SI2</td>\n",
" <td>63.3</td>\n",
" <td>58.0</td>\n",
" <td>335</td>\n",
" <td>4.34</td>\n",
" <td>4.35</td>\n",
" <td>2.75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53935</th>\n",
" <td>53936</td>\n",
" <td>0.72</td>\n",
" <td>ideal</td>\n",
" <td>D</td>\n",
" <td>SI1</td>\n",
" <td>60.8</td>\n",
" <td>57.0</td>\n",
" <td>2757</td>\n",
" <td>5.75</td>\n",
" <td>5.76</td>\n",
" <td>3.50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53936</th>\n",
" <td>53937</td>\n",
" <td>0.72</td>\n",
" <td>good</td>\n",
" <td>D</td>\n",
" <td>SI1</td>\n",
" <td>63.1</td>\n",
" <td>55.0</td>\n",
" <td>2757</td>\n",
" <td>5.69</td>\n",
" <td>5.75</td>\n",
" <td>3.61</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53937</th>\n",
" <td>53938</td>\n",
" <td>0.70</td>\n",
" <td>very good</td>\n",
" <td>D</td>\n",
" <td>SI1</td>\n",
" <td>62.8</td>\n",
" <td>60.0</td>\n",
" <td>2757</td>\n",
" <td>5.66</td>\n",
" <td>5.68</td>\n",
" <td>3.56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53938</th>\n",
" <td>53939</td>\n",
" <td>0.86</td>\n",
" <td>premium</td>\n",
" <td>H</td>\n",
" <td>SI2</td>\n",
" <td>61.0</td>\n",
" <td>58.0</td>\n",
" <td>2757</td>\n",
" <td>6.15</td>\n",
" <td>6.12</td>\n",
" <td>3.74</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53939</th>\n",
" <td>53940</td>\n",
" <td>0.75</td>\n",
" <td>ideal</td>\n",
" <td>D</td>\n",
" <td>SI2</td>\n",
" <td>62.2</td>\n",
" <td>55.0</td>\n",
" <td>2757</td>\n",
" <td>5.83</td>\n",
" <td>5.87</td>\n",
" <td>3.64</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>53940 rows × 11 columns</p>\n",
"</div>"
],
"text/plain": [
" Unnamed: 0 carat cut color clarity depth table price x \\\n",
"0 1 0.23 ideal E SI2 61.5 55.0 326 3.95 \n",
"1 2 0.21 premium E SI1 59.8 61.0 326 3.89 \n",
"2 3 0.23 good E VS1 56.9 65.0 327 4.05 \n",
"3 4 0.29 premium I VS2 62.4 58.0 334 4.20 \n",
"4 5 0.31 good J SI2 63.3 58.0 335 4.34 \n",
"... ... ... ... ... ... ... ... ... ... \n",
"53935 53936 0.72 ideal D SI1 60.8 57.0 2757 5.75 \n",
"53936 53937 0.72 good D SI1 63.1 55.0 2757 5.69 \n",
"53937 53938 0.70 very good D SI1 62.8 60.0 2757 5.66 \n",
"53938 53939 0.86 premium H SI2 61.0 58.0 2757 6.15 \n",
"53939 53940 0.75 ideal D SI2 62.2 55.0 2757 5.83 \n",
"\n",
" y z \n",
"0 3.98 2.43 \n",
"1 3.84 2.31 \n",
"2 4.07 2.31 \n",
"3 4.23 2.63 \n",
"4 4.35 2.75 \n",
"... ... ... \n",
"53935 5.76 3.50 \n",
"53936 5.75 3.61 \n",
"53937 5.68 3.56 \n",
"53938 6.12 3.74 \n",
"53939 5.87 3.64 \n",
"\n",
"[53940 rows x 11 columns]"
]
},
"execution_count": 98,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Convert to lowerCase\n",
"\n",
"diamonds['cut'] = diamonds['cut'].str.lower()\n",
"diamonds\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 58,
"id": "1cc3a8af",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: scikit-learn in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (1.2.2)\n",
"Requirement already satisfied: numpy>=1.17.3 in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (from scikit-learn) (1.24.2)\n",
"Requirement already satisfied: scipy>=1.3.2 in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (from scikit-learn) (1.10.1)\n",
"Requirement already satisfied: joblib>=1.1.1 in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (from scikit-learn) (1.2.0)\n",
"Requirement already satisfied: threadpoolctl>=2.0.0 in c:\\users\\admin\\appdata\\roaming\\python\\python311\\site-packages (from scikit-learn) (3.1.0)\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
],
"source": [
"%pip install scikit-learn"
]
},
{
"cell_type": "code",
"execution_count": 60,
"id": "1836b2a3",
"metadata": {},
"outputs": [],
"source": [
"import sklearn\n",
"from sklearn.model_selection import train_test_split"
]
},
{
"cell_type": "code",
"execution_count": 91,
"id": "fcf6448a",
"metadata": {},
"outputs": [],
"source": [
"#podział danych na train/test/dev w proporcji 4:1:1\n",
"#losować ustawiona na 10\n",
"\n",
"#1. Dzielimy na zbiór treningowy 80 % i resztę danych\n",
"diamonds_train, diamonds_test_dev = sklearn.model_selection.train_test_split(diamonds, test_size=0.2, random_state=10)\n",
"\n",
"#2. Podział reszty danych na zbiór testowy 10% i walidacyjny 10%\n",
"diamonds_test, diamonds_dev = train_test_split(diamonds_test_dev, test_size=0.5, random_state=10)\n"
]
},
{
"cell_type": "code",
"execution_count": 92,
"id": "9476846a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Rozmiar diamonds: (53940, 11)\n",
"Rozmiar diamonds_train: (43152, 11)\n",
"Rozmiar diamonds_test: (5394, 11)\n",
"Rozmiar diamonds_dev: (5394, 11)\n"
]
}
],
"source": [
"#Wyświetlenie rozmiarów zbiorów danych train/test/dev\n",
"print(\"Rozmiar diamonds: \", diamonds.shape)\n",
"print(\"Rozmiar diamonds_train: \", diamonds_train.shape)\n",
"print(\"Rozmiar diamonds_test: \", diamonds_test.shape)\n",
"print(\"Rozmiar diamonds_dev: \", diamonds_dev.shape)\n"
]
},
{
"cell_type": "code",
"execution_count": 99,
"id": "7e1f11cb",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Unnamed: 0 carat depth table price \\\n",
"count 53940.000000 53940.000000 53940.000000 53940.000000 53940.000000 \n",
"mean 26970.500000 0.797940 61.749405 57.457184 3932.799722 \n",
"std 15571.281097 0.474011 1.432621 2.234491 3989.439738 \n",
"min 1.000000 0.200000 43.000000 43.000000 326.000000 \n",
"25% 13485.750000 0.400000 61.000000 56.000000 950.000000 \n",
"50% 26970.500000 0.700000 61.800000 57.000000 2401.000000 \n",
"75% 40455.250000 1.040000 62.500000 59.000000 5324.250000 \n",
"max 53940.000000 5.010000 79.000000 95.000000 18823.000000 \n",
"\n",
" x y z \n",
"count 53940.000000 53940.000000 53940.000000 \n",
"mean 5.731157 5.734526 3.538734 \n",
"std 1.121761 1.142135 0.705699 \n",
"min 0.000000 0.000000 0.000000 \n",
"25% 4.710000 4.720000 2.910000 \n",
"50% 5.700000 5.710000 3.530000 \n",
"75% 6.540000 6.540000 4.040000 \n",
"max 10.740000 58.900000 31.800000 \n"
]
}
],
"source": [
"# średnią, minimum, maksimum, odchylenia standardowe, medianę wartości poszczególnych parametrów)\n",
"print(diamonds.describe())"
]
},
{
"cell_type": "code",
"execution_count": 100,
"id": "88a89b38",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Unnamed: 0 carat depth table price \\\n",
"count 43152.000000 43152.000000 43152.000000 43152.000000 43152.000000 \n",
"mean 26971.712111 0.795979 61.748241 57.448355 3920.786939 \n",
"std 15565.585777 0.472184 1.426394 2.224297 3975.894633 \n",
"min 3.000000 0.200000 43.000000 44.000000 327.000000 \n",
"25% 13469.750000 0.400000 61.000000 56.000000 946.000000 \n",
"50% 27019.500000 0.700000 61.800000 57.000000 2400.000000 \n",
"75% 40439.250000 1.040000 62.500000 59.000000 5313.250000 \n",
"max 53938.000000 5.010000 79.000000 76.000000 18823.000000 \n",
"\n",
" x y z \n",
"count 43152.000000 43152.000000 43152.000000 \n",
"mean 5.726933 5.731011 3.535791 \n",
"std 1.119635 1.147069 0.693846 \n",
"min 0.000000 0.000000 0.000000 \n",
"25% 4.710000 4.720000 2.910000 \n",
"50% 5.690000 5.710000 3.520000 \n",
"75% 6.540000 6.530000 4.030000 \n",
"max 10.740000 58.900000 8.060000 \n"
]
}
],
"source": [
"print(diamonds_train.describe())"
]
},
{
"cell_type": "code",
"execution_count": 101,
"id": "80b5060f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Unnamed: 0 carat depth table price \\\n",
"count 5394.000000 5394.000000 5394.000000 5394.000000 5394.000000 \n",
"mean 26951.351316 0.802666 61.760808 57.470189 3970.308676 \n",
"std 15565.740253 0.482062 1.464893 2.309900 4083.195823 \n",
"min 1.000000 0.210000 52.300000 43.000000 326.000000 \n",
"25% 13519.750000 0.400000 61.000000 56.000000 958.000000 \n",
"50% 27013.500000 0.700000 61.900000 57.000000 2375.500000 \n",
"75% 40342.250000 1.050000 62.500000 59.000000 5273.750000 \n",
"max 53930.000000 3.510000 78.200000 95.000000 18806.000000 \n",
"\n",
" x y z \n",
"count 5394.000000 5394.000000 5394.000000 \n",
"mean 5.738817 5.739106 3.542097 \n",
"std 1.132069 1.123925 0.701446 \n",
"min 3.840000 3.780000 0.000000 \n",
"25% 4.710000 4.710000 2.900000 \n",
"50% 5.690000 5.700000 3.530000 \n",
"75% 6.550000 6.540000 4.040000 \n",
"max 9.660000 9.630000 6.030000 \n"
]
}
],
"source": [
"print(diamonds_test.describe())"
]
},
{
"cell_type": "code",
"execution_count": 102,
"id": "31f4af56",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Unnamed: 0 carat depth table price \\\n",
"count 5394.000000 5394.000000 5394.000000 5394.000000 5394.000000 \n",
"mean 26979.951798 0.808901 61.747312 57.514813 3991.393029 \n",
"std 15625.161644 0.480344 1.449816 2.238671 4002.742530 \n",
"min 2.000000 0.200000 53.200000 51.000000 326.000000 \n",
"25% 13525.500000 0.400000 61.000000 56.000000 961.000000 \n",
"50% 26529.500000 0.710000 61.850000 57.000000 2484.500000 \n",
"75% 40665.500000 1.050000 62.500000 59.000000 5465.250000 \n",
"max 53940.000000 3.040000 73.600000 68.000000 18779.000000 \n",
"\n",
" x y z \n",
"count 5394.000000 5394.000000 5394.000000 \n",
"mean 5.757290 5.758066 3.558910 \n",
"std 1.128191 1.120344 0.797759 \n",
"min 3.790000 3.750000 0.000000 \n",
"25% 4.730000 4.740000 2.930000 \n",
"50% 5.710000 5.730000 3.540000 \n",
"75% 6.560000 6.540000 4.040000 \n",
"max 9.510000 9.460000 31.800000 \n"
]
}
],
"source": [
"print(diamonds_dev.describe())"
]
},
{
"cell_type": "code",
"execution_count": 120,
"id": "eab3e1f9",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Ideal 17292\n",
"Premium 10954\n",
"Very Good 9708\n",
"Good 3929\n",
"Fair 1269\n",
"Name: cut, dtype: int64"
]
},
"execution_count": 120,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Wyświetlenie częstości przykładów dla poszczególnych klas diamentów\n",
"diamonds_train[\"cut\"].value_counts()\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 105,
"id": "2e7c37d9",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Ideal 2184\n",
"Premium 1385\n",
"Very Good 1183\n",
"Good 473\n",
"Fair 169\n",
"Name: cut, dtype: int64"
]
},
"execution_count": 105,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diamonds_test[\"cut\"].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 106,
"id": "a7ccece5",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Ideal 2075\n",
"Premium 1452\n",
"Very Good 1191\n",
"Good 504\n",
"Fair 172\n",
"Name: cut, dtype: int64"
]
},
"execution_count": 106,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diamonds_dev[\"cut\"].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 109,
"id": "17223f54",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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9NJLhre3t/V1gwYNMvLmzfvAv3v3v+frr79u096tW7cUHUdyn/err75q5MyZ07h165a1rWHDhoYkY968eda2o0ePGpIMBwcHY/v27db233//Pcm5DgoKMgoWLGhERkbavFeXLl0Md3d3ax1//PGHIckoV66czXf+iy++MCQZBw8etLa1atXKKFq0aJL6J02aZEgyfvjhB2vbnTt3DD8/PyNXrlxGbGysYRiG8fPPPxuSjD///NMwDMNYunSp4ezsbLRp08bo3Lmz9bWVK1c22rdvn+R9gLTEdAsgk2nSpIk8PT1VpEgRderUSa6urlq6dKkKFy4sSbp48aJCQ0PVo0cP5c2b1/q6ypUr64UXXtDKlSuT3e/cuXM1ZcoUjRs3To0bN06yff78+ercubNeffVVffPNN9aLwY4dO6aaNWsqMjJSjRs3VpUqVSTdm0uZOCKdkJCgqKgoxcXFqWbNmtq7d691vytXrlS2bNnUr18/a5ujo2OKL5765ZdfVKVKFbVv3z7JtuSmjfz555/q1auX2rZtq/fff1/SvZHUX375Rc8995x1+ook5ciRQ3369FFoaKj++usvSZKHh4fOnz+vXbt2pai++yV+9sHBwTbtQ4YMkSStWLHC+h7SvVH7u3fvJruvX375RRaLRSNHjkyyLbVLtP3bc5AjRw7rn2NiYhQZGamGDRvq9OnTiomJeejrnJyctH79el29evWR7xMfH6+uXbvq2rVr+vXXX9NkibaUnhNPT0+VLVtWGzdulCRt2bJFjo6OGjp0qCIiInTixAlJ90Yw69ev/9BzkPieiaPPiR52Mdv97v+8r127psjISPn7++vmzZs6evSoTd9cuXKpS5cu1udlypSRh4eHypUrp9q1a1vbE/98+vRpSf/3nWjdurUMw1BkZKT10axZM8XExNh8jyWpZ8+eNr+FSvwuJe7zYVauXKkCBQqoa9eu1rbs2bNr0KBBun79ujZs2GCzz8TzsGnTJj377LN64YUXrKP40dHROnTokM13GUgPhGQgk5k8ebJCQkK0aNEitWzZUpGRkTYXZyWGuTJlyiR5bbly5RQZGZnkJgmhoaF67bXX1LVr1yRhQZLCwsL08ssvq2PHjvrqq69sAoCrq6t69eqlZ555Jsnr5syZo8qVK8vFxUX58uWTp6enVqxYYROc/vrrLxUsWND6a9dEydWf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znJ2dn6MIwMAAEBmluqR5JMnT2rIkCHWgCxJjo6OCg4O1smTJ9O0uOLFi6tAgQJau3attS02NlY7duyQn5+fJMnPz0/R0dHas2ePtc+6deuUkJCg2rVrW/ts3LhRd+/etfYJCQlRmTJllCdPHmuf+98nsU/i+wAAACDrSHVIrl69unUu8v2OHDmiKlWqpLqA69evKzQ0VKGhoZLuXawXGhqqs2fPymKx6M0339R///tfLV26VAcPHtQrr7wiHx8f6woY5cqVU/PmzdWnTx/t3LlTW7Zs0YABA9SlSxf5+PhIkrp16yYnJycFBQXp8OHDWrBggb744gsFBwdb63jjjTe0atUqff755zp69KhGjRql3bt3a8CAAak+JgAAADzZUjTd4sCBA9Y/Dxo0SG+88YZOnjypOnXqSJK2b9+uyZMn65NPPkl1Abt371bjxo2tzxODa2BgoGbPnq23335bN27cUN++fRUdHa369etr1apVcnFxsb7mxx9/1IABA/T888/LwcFBHTt21Jdffmnd7u7urtWrV6t///6qUaOG8ufPrxEjRtispVy3bl3NmzdP77//vt59912VKlVKS5YsUcWKFVN9TAAAAHiypWidZAcHB1kslkfeUc9isSg+Pj7NinvSsE6yfWTVdVQ531kL5xsA0kZK81qKRpLDwsLSrDAAAAAgs0tRSC5atGh61wEAAABkGqm+cM/R0VGNGzdWVFSUTXtERITNihcAAADAkyrVIdkwDN2+fVs1a9bU4cOHk2wDAAAAnnSpDskWi0W//PKLWrduLT8/P/3222822wAAAIAn3WONJDs6OuqLL77QZ599ps6dO+u///0vo8gAAAB4aqT6ttT369u3r0qVKqWXXnpJGzduTKuaAAAAALtK9Uhy0aJFbS7Qa9y4sbZv365z586laWEAAACAvaR6JDm5NZNLliypffv2KSIiIk2KAgAAAOwp1SPJu3bt0o4dO5K079+/X5cvX06TogAAAAB7SnVI7t+/f7JTK/7++2/1798/TYoCAAAA7CnVIfnPP/9U9erVk7RXq1ZNf/75Z5oUBQAAANhTqkOys7NzsnOPL168qGzZ/tViGQAAAECmkOqQ3LRpUw0fPlwxMTHWtujoaL377rt64YUX0rQ4AAAAwB5SPfT72WefqUGDBipatKiqVasmSQoNDZW3t7e+//77NC8Q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",
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"plt.figure(figsize=(8, 6))\n",
"diamonds['cut'].value_counts().plot(kind='bar')\n",
"plt.title('Rozkład częstości dla szlifów diamentów dla zbioru diamonds')\n",
"plt.xlabel('Szlif')\n",
"plt.ylabel('Liczba wystąpień')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 110,
"id": "8633ea7c",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsAAAAJdCAYAAAA818FyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABhhElEQVR4nO3dd3gU1f/28TuFFAJJaEkIJUDoELr00KQjXaQpLYhgAAVFRflKUQRB6U0UAZEqICIoXYqA9CKI1NCE0JPQ0+b5gyf7Y0mARDdZyLxf17XXlT0zu/OZzJY7J2fOOBiGYQgAAAAwCUd7FwAAAACkJQIwAAAATIUADAAAAFMhAAMAAMBUCMAAAAAwFQIwAAAATIUADAAAAFMhAAMAAMBUCMDAc2z27NmaNGmSvcswhQ0bNujTTz/V7du37V2KqX377bf66quv7F0GgOccARj/Sq1atVSyZMmnrpcvXz516dLFZts9ffq0HBwcNGvWLJs95/NqxYoV6tWrl8qWLZvix/6X45LUMRgyZIgcHBz+1fOlJgcHBw0ZMsRyf9asWXJwcNDp06et1hs9erQKFCggJycnlSlTJtHznDx5Ui1btpSPj488PDxSt+gkJHc/0rsffvhBb731ll544YU03/bGjRvl4OCgjRs3Wtq6dOmifPnypWkdDg4O6t2791PXe55eI8/TZ4qtPfreRtohAD/nEj7kEm7Ozs7KlSuXunTpon/++cfe5eEh27Zt05AhQxQREfGfn+uff/5RSEiI5syZo2rVqv334kxszZo1eu+991StWjXNnDlTn332mdXy+/fvq02bNurdu7d69OhhpyrTt3nz5mncuHFPXOf48ePq2bOnFi1apHLlyqVNYcBzwpbfL0/y2WefadmyZam6jbRCAE4nhg0bpjlz5mjatGlq1KiRvv/+e9WsWVP37t2zd2n4/7Zt26ahQ4fa5APqwIEDmjx5slq3bv2vHn/06FF9/fXX/7mO581rr72mu3fvKiAgwNK2YcMGOTo6asaMGerUqZMaN25s9Zg///xTXbt21fDhw9O63MdKaj+eZ8kJwAcOHNDMmTPVqFGjtCnqOfe8v0YGDRqku3fv2ruM54Ytv1+eJD0FYGd7FwDbaNSokSpUqCBJ6t69u7Jnz67PP/9cy5cv1yuvvGLn6mBrj4a0lHJ1dbVRJc8XJycnOTk5WbVdvnxZ7u7ucnFxSfIxFSpUsLy3nhVJ7Ud69/LLL9u7hOeKrV8jd+7cUcaMGW32fE/j7OwsZ2ciClIPPcDpVHBwsKQHYxcftmHDBgUHB8vDw0Pe3t5q3ry5jhw5YlmeMBbrcbcnWbNmjTJmzKj27dsrNjbWatmJEyckSdHR0fr4449Vvnx5eXl5ycPDQ8HBwfrtt98SPV9ERIS6dOkiLy8veXt7q3Pnzin66zYiIkL9+vVTvnz55Orqqty5c6tTp066evWqpAfjYB+3nw+P8/vnn3/UrVs3+fr6ys3NTeXLl9eqVasSbW/ixIkqUaKEMmbMqCxZsqhChQqaN2+epAfj2QYMGCBJyp8/v2U7CePzYmNj9cknnygwMFCurq7Kly+fPvzwQ92/f99qG7t371aDBg2UPXt2ubu7K3/+/OrWrZvVOvHx8Ro/fryCgoLk5uamHDlyqGHDhtq9e7dlneSOAf4vx2DmzJmqU6eOfHx85OrqquLFi2vq1KnJemx4eLi6du2q3Llzy9XVVTlz5lTz5s0tv6+E8YFJ3Z60X4+Oi3RwcNDMmTN1+/Zty+MTxiEm55j0799f2bJlk2EYlrY+ffrIwcFBEyZMsLRdunRJDg4OT93/+/fvq1+/fsqRI4cyZ86sZs2a6fz580/dD0n66aef1KRJE/n7+8vV1VWBgYH65JNPFBcXZ/XYhPH7Bw8eVM2aNZUxY0YVLFhQixcvliRt2rRJlSpVkru7u4oUKaJ169Yl2v7D7wlXV1eVKFFC3377rdU6CWNmFy1apOHDhyt37txyc3PTiy++aPk8SKhn5cqVOnPmjOUYPDyu9vLlywoJCbG8/0qXLq3Zs2dbbatcuXJq1aqVVVtQUJAcHBx08OBBS9vChQvl4OBg9ZmXlPPnz6tFixby8PCQj4+P+vXrl+i9+DhffPGFqlatqmzZssnd3V3ly5e3/G6f5NHhbA/fatWqlWj9uXPnqkiRIpbPpM2bNyf5fI+OAZ4yZYpKlCghV1dX+fv7KzQ0NNF7OuE1smfPHtWoUUMZM2bUhx9+KOnxY1Zt/ZmS1Bjg5H6m5MuXTy+99JI2btyoChUqyN3dXUFBQZbP9aVLl1o+H8uXL699+/Yleo6nfVc+XOOJEyfUpUsXeXt7y8vLS127dtWdO3es1k3ue/vmzZt6++23Ld9bPj4+qlevnvbu3fvY3+nTvl8k6fvvv1f58uXl7u6urFmzql27djp37pzV8xw/flytW7eWn5+f3NzclDt3brVr106RkZGSHhz727dva/bs2cn6vH3W8edVOpXwws+SJYulbd26dWrUqJEKFCigIUOG6O7du5o4caKqVaumvXv3Kl++fMqRI4fmzJlj9VwxMTHq16/fY3vIpAcnZL388stq27atvv32W6ueh7Vr1+rHH39UWFiY4uPj9c0336h9+/Z6/fXXdfPmTc2YMUMNGjTQzp07LScgGYah5s2b6/fff1fPnj1VrFgx/fjjj+rcuXOy9v/WrVsKDg7WkSNH1K1bN5UrV05Xr17V8uXLdf78eWXPnl3jxo3TrVu3rB43duxY7d+/X9myZZP0ILhUrlxZ169fV2hoqPLkyaO5c+fqpZde0po1a1SnTh1J0tdff62+ffvq5Zdf1ltvvaV79+7p4MGD2rFjhzp06KBWrVrp2LFjmj9/vsaOHavs2bNLknLkyCHpQa/97Nmz9fLLL+udd97Rjh07NGLECB05ckQ//vijpAdBoH79+sqRI4c++OADeXt76/Tp01q6dKnVPoSEhGjWrFlq1KiRunfvrtjYWG3ZskV//PFHinoy/+sxmDp1qkqUKKFmzZrJ2dlZP//8s958803Fx8crNDT0iY9t3bq1Dh8+rD59+ihfvny6fPmy1q5dq7Nnzypfvnxq1aqVChYsaPWYPXv2aNy4cfLx8Un2Ps6ZM0fTp0/Xzp079c0330iSqlatKil5xyQ4OFhjx47V4cOHLSeFbtmyRY6OjtqyZYv69u1raZOkGjVqPLGe7t276/vvv1eHDh1UtWpVbdiwQU2aNEnWvsyaNUuZMmVS//79lSlTJm3YsEEff/yxoqKiNHr0aKt1b9y4oZdeeknt2rVTmzZtNHXqVLVr105z587V22+/rZ49e6pDhw4aPXq0Xn75ZZ07d06ZM2eW9H/viYSTsXLkyKFff/1VISEhioqK0ttvv221rZEjR8rR0VHvvvuuIiMjNWrUKHXs2FE7duyQJH300UeKjIzU+fPnNXbsWElSpkyZJEl3795VrVq1dOLECfXu3Vv58+fXDz/8oC5duigiIkJvvfWW5TjMnz/fss3r16/r8OHDluNQqlQpy3HIkSOHihUr9tjf4927d/Xiiy/q7Nmz6tu3r/z9/TVnzhxt2LAhWcdh/PjxatasmTp27Kjo6GgtWLBAbdq00YoVK554LGvUqJHos/fMmTMaNGhQotf0pk2btHDhQvXt21eurq6aMmWKGjZsqJ07dz7x5OQhQ4Zo6NChqlu3rnr16qWjR49q6tSp2rVrl7Zu3aoMGTJY1r127ZoaNWqkdu3a6dVXX5Wvr2+y9v9J0vIz5cSJE+rQoYPeeOMNvfrqq/riiy/UtGlTTZs2TR9++KHefPNNSdKIESP0yiuv6OjRo3J0fNAnmJzvyoe98soryp8/v0aMGKG9e/fqm2++kY+Pjz7//HPLOsl9b/fs2VOLFy9W7969Vbx4cV27dk2///67jhw58tix70/7fhk+fLj+97//6ZVXXlH37t115coVTZw4UTVq1NC+ffvk7e2t6OhoNWjQQPfv31efPn3k5+enf/75RytWrFBERIS8vLw0Z84cde/eXRUrVrScDxEYGJisY/dMMvBcmzlzpiHJWLdunXHlyhXj3LlzxuLFi40cOXIYrq6uxrlz5yzrlilTxvDx8TGuXbtmaTtw4IDh6OhodOrU6bHbePPNNw0nJydjw4YNlraaNWsaJUqUMAzDMJYsWWJkyJDBeP311424uDjLOjdu3DCyZ89u5M2b19i/f79hGIYRGxtr3L9/3+r5b9y4Yfj6+hrdunWztC1btsyQZIwaNcrSFhsbawQHBxuSjJkzZz7x9/Lxxx8bkoylS5cmWhYfH5/kYxYtWmRIMoYNG2ZpCwkJMSQZmzdvtrTduXPHKFq0qFGmTBlLW/PmzS2/j8cZPXq0IckICwuzat+/f78hyejevbtV+7vvvmtIsvzef/zxR0OSsWvXrsduY8OGDYYko2/fvomWPbzfAQEBRufOnZ9Yb0qOweDBg41HP07u3LmT6DkbNGhgFChQ4InbvXHjhiHJGD169BPXe9iVK1eMvHnzGkFBQcatW7cs7ZKMwYMHW+4nvF8ePgadO3c2PDw8rJ4vucfk8uXLhiRjypQphmEYRkREhOHo6Gi0adPG8PX1tTyub9++RtasWR/72nt4m2+++aZVe4cOHZK1H0n9vt944w0jY8aMxr179yxtNWvWNCQZ8+bNs7T9/fffhiTD0dHR+OOPPyztq1evTnSsQ0JCjJw5cxpXr1612la7du0MLy8vSx2//fabIckoVqyY1Xt+/PjxhiTjzz//tLQ1adLECAgISFT/uHHjDEnG999/b2mLjo42qlSpYmTKlMmIiooyDMMwfvjhB0OS8ddffxmGYRjLly83XF1djWbNmhlt27a1PLZUqVJGy5YtE20nqW0uWrTI0nb79m2jYMGChiTjt99+s7R37tw5Ud2PHofo6GijZMmSRp06dZ643UfdvXvXKF++vOHv729cvHjR0i7JkGTs3r3b0nbmzBnDzc3Nat8efY1cvnzZcHFxMerXr2/1OT1p0iRDkvHtt99a2hJeI9OmTUtU16OvxQTP0mdKQECAIcnYtm2bpS3htezu7m6cOXPG0v7VV18lOq7J/a5MqPHh7y7DMIyWLVsa2bJls9xPyXvby8vLCA0NTbSfT/O475fTp08bTk5OxvDhw63a//zzT8PZ2dnSvm/fPkOS8cMPPzxxOx4eHk89zs8LhkCkE3Xr1lWOHDmUJ08evfzyy/Lw8NDy5cuVO3duSdLFixe1f/9+denSRVmzZrU8rlSpUqpXr55++eWXJJ/3u+++05QpUzRq1CjVrl070fL58+erbdu2euONN/TVV19Z/oI+evSoKlSooKtXr6p27doqXbq0pAfj0hJ6kuPj43X9+nXFxsaqQoUKVv/i+eWXX+Ts7KxevXpZ2pycnNSnT59k/T6WLFmi0qVLq2XLlomWJTWU46+//lK3bt3UvHlzDRo0SNKD3oolS5aoTp06liElkuTu7q7XX39d+/fv15kzZyRJ3t7eOn/+vHbt2pWs+h6W8Lvv37+/Vfs777wjSVq5cqVlG9KD3vaYmJgkn2vJkiVycHDQ4MGDEy1L6ZRC//UYuLu7W36OjIzU1atXVbNmTZ06dcryL7XHPc7FxUUbN27UjRs3nrqduLg4tW/fXjdv3tSPP/5ok2nKkntMcuTIoaJFi1r+/bx161Y5OTlpwIABunTpko4fPy7pQc9j9erVn3gMEraZ0Guc4NEe1cd5+Pd98+ZNXb16VcHBwbpz547+/vtvq3UzZcqkdu3aWe4XKVJE3t7eKlasmCpVqmRpT/j51KlTkv7vPdG0aVMZhqGrV69abg0aNFBkZGSif9V27drV6r9HCe+lhOd8kl9++UV+fn5q3769pS1Dhgzq27evbt26pU2bNlk9Z8Jx2LJli1544QXVq1fP0vseERGhQ4cOWb2XH7fNnDlzWo05zpgxY7JnAHn4ONy4cUORkZEKDg5+4r+wk/Lmm2/qzz//1JIlS+Tn52e1rEqVKipfvrzlft68edW8eXOtXr060ZCXBOvWrVN0dLTefvtty+e0JL3++uvy9PS0vKYTuLq6qmvXrimq+WnS8jOlePHiqlKliuV+wmu5Tp06yps3b6L2hNfjv/mu7Nmzp9X94OBgXbt2TVFRUZb9lpL33vb29taOHTt04cKFx/wWUmbp0qWKj4/XK6+8YvV+9fPzU6FChSzDD728vCRJq1evTjR8I70iAKcTkydP1tq1a7V48WI1btxYV69etTrRKSGoFSlSJNFjixUrpqtXryaa4H///v3q2bOn2rdvnygISFJYWJheffVVtW7dWhMnTrT6cvfw8FC3bt2sPmgSzJ49W6VKlZKbm5uyZcumHDlyaOXKlVYfYGfOnFHOnDkt/wpNkFT9STl58mSy5imWpKioKLVq1Uq5cuXSd999Z9mPK1euKCIiQiVKlLD64Lh69arl34HHjh2TJL3//vvKlCmTKlasqEKFCik0NFRbt25N1vbPnDkjR0fHRP/S9/Pzk7e3t+XY1axZU61bt9bQoUOVPXt2NW/eXDNnzrQam3jy5En5+/tbfXD/W//1GGzdulV169a1jKHLkSOHZRzhkwKwq6urPv/8c/3666/y9fVVjRo1NGrUKIWHhye5/qBBg7RhwwbNmzfPZv+OS+4xkR582SWErC1btlhOmsuaNau2bNmiqKgoHThw4KnBK2Gbj+5Dcn/fhw8fVsuWLeXl5SVPT0/lyJFDr776qqTEv+/cuXMnCuNeXl7KkydPojZJlj9EEt4T06dPV44cOaxuCWHp8uXLVs/x6GdAwrCs5Pxxc+bMGRUqVMgqsEmyDGFIOA6+vr4qVKiQ1XEIDg5WjRo1dOHCBZ06dUpbt25VfHx8so5DwYIFE/1+knscVqxYocqVK8vNzU1Zs2ZVjhw5NHXq1Ce+5h/11VdfaebMmZo4caIqV66caHmhQoUStRUuXFh37tzRlStXknzOx30HuLi4qECBAlavaUnKlSvXE4e9/Rtp+Zny6Osu4bX8tNf4v/mufNprPCXv7VGjRunQoUPKkyePKlasqCFDhiTrj8XHOX78uAzDUKFChRK9Z48cOWJ5v+bPn1/9+/fXN998o+zZs6tBgwaaPHlyil63zxsCcDpRsWJF1a1bV61bt9by5ctVsmRJdejQIdEY1+S6ceOGWrdurcKFC1vGRj4qZ86cqlq1qn755RerE6ykB1+wH374YaIvke+//15dunRRYGCgZsyYoVWrVmnt2rWqU6eO4uPj/1Wt/1WXLl104cIFLVu2TJ6enpb2hHomTpyY6IMjIVjcvHlT0oMPxqNHj2rBggWqXr26lixZourVqyfZE/s4T+uhdXBw0OLFi7V9+3b17t3bciJS+fLl//VxTi0nT57Uiy++qKtXr2rMmDFauXKl1q5dq379+knSU4/122+/rWPHjmnEiBFyc3PT//73PxUrVizRySrLli3T559/rmHDhqlhw4Y234/k9JpXr15d//zzj06dOmUJXg4ODqpevbq2bNmibdu2JSt4/RcRERGqWbOmDhw4oGHDhunnn3/W2rVrLWMQH/19P252gMe1G///JL+E53n11Ve1du3aJG+Pzkv9tOe0lYTf9927d7Vnzx4FBwerZMmS8vb21pYtW7RlyxZlypTpX104Jrm2bNmiZs2ayc3NTVOmTNEvv/yitWvXqkOHDsne3507d+qtt95S9+7d7Trv9MO9rcnxuJ5nW0npZ8q/fY3/G7Z8zldeeUWnTp3SxIkT5e/vr9GjR6tEiRL69ddf/1Vt8fHxcnBwsHzXPnp7+KqKX375pQ4ePKgPP/xQd+/eVd++fVWiRIkkT9ZLDzgJLh1ycnLSiBEjVLt2bU2aNEkffPCBZS7Io0ePJlr/77//Vvbs2S3/Oo6Pj1fHjh0VERGhdevWPXbqGzc3N61YsUJ16tRRw4YNtWnTJpUoUeKJtS1evFgFChTQ0qVLrcLFo0ExICBA69ev161bt6x6C5KqPymBgYE6dOjQU9cbOXKkli1bpqVLl6po0aJWyxLO1m3SpIlCQkKSfHzCyTXSg17vtm3bqm3btoqOjlarVq00fPhwDRw4UG5ubo8NUwEBAYqPj9fx48etTs65dOmSIiIiEs3jWblyZVWuXFnDhw/XvHnz1LFjRy1YsEDdu3dXYGCgVq9erevXr//nXuD/cgx+/vln3b9/X8uXL7fqHUlqto/HCQwM1DvvvKN33nlHx48fV5kyZfTll1/q+++/l/Sg971z585q0aKFpRfIVlJyTBKC7dq1a7Vr1y598MEHkh6c1DR16lT5+/vLw8PD6l/WT9rmyZMnrXqGkvP73rhxo65du6alS5danWgXFhaWvB1OpoT3RFxcnOrWrWuz533Se+PgwYOKj4+36gVOGNLx6HGYOXOmFixYoLi4OFWtWlWOjo6WYHzkyBFVrVr1qVODBQQE6NChQzIMw6qu5ByHJUuWyM3NTatXr7b6D9zMmTOf+ljpQQ/7yy+/rDJlymjy5MmPXS9haM3Djh07powZM1pOfHrUw98BBQoUsLRHR0crLCws2cczS5YsiWZtiI6O1sWLF5/6WHt/piRHSr4rU/KcKXlv58yZU2+++abefPNNXb58WeXKldPw4cOfOAf2495DgYGBMgxD+fPnV+HChZ9aa1BQkIKCgjRo0CBt27ZN1apV07Rp0/Tpp58+cTvPI3qA06latWqpYsWKGjdunO7du6ecOXOqTJkymj17ttWH16FDh7RmzRqreWWHDh2q1atXa/78+cqfP/8Tt+Pl5aXVq1dbpmp5dNq1RyV8+Tz8l/GOHTu0fft2q/UaN26s2NhYqylu4uLiNHHixKfuu/RgFoEDBw5YztZ/WMK2161bp0GDBumjjz5SixYtkqy1devW+vPPP1W1alXVrVs30S3h7Oxr165ZPdbFxUXFixeXYRiW8boJH5qPfnkk/O4fvRDAmDFjJMlypvCNGzcS9SgkzJqRMAyidevWMgxDQ4cOfex+J9d/OQZJHefIyMhkBYE7d+4kuoBLYGCgMmfObNnPW7duqWXLlsqVK5dlSh5bSu4xkR786zBXrlwaO3asYmJiLD2gwcHBOnnypBYvXqzKlSs/dU7ThC+3h6dPS6qGpCT1+46OjtaUKVOe+tiUSHhPLFmyJMk/MB/37/en8fDwSPJfrY0bN1Z4eLgWLlxoaYuNjdXEiROVKVMm1axZ09Ke8IfI559/rlKlSln+tR0cHKz169dr9+7dyeqFb9y4sS5cuGA1ddmdO3c0ffr0pz7WyclJDg4OVr2hp0+fTtaFA+Li4tSuXTtFR0dryZIlTxx+sH37dqsxxefOndNPP/2k+vXrPzbg161bVy4uLpowYYLV62TGjBmKjIxM9mwjgYGBiaZcmz59erJ6gO31mZISKfmuTK7kvrfj4uISvQ98fHzk7+//1Gn4Hvf90qpVKzk5OWno0KGJvgMMw7B8d0VFRSWavjQoKEiOjo5W2/bw8Ej1i22kFXqA07EBAwaoTZs2mjVrlnr27KnRo0erUaNGqlKlikJCQixTu3h5eVnmdfzzzz/1ySefqEaNGrp8+bKlty1Bwr/+H5Y9e3atXbtW1atXV926dfX7778rV65cSdb00ksvaenSpWrZsqWaNGmisLAwTZs2TcWLF7f6N37Tpk1VrVo1ffDBBzp9+rSKFy+upUuXJns80oABA7R48WK1adPGMkzg+vXrWr58uaZNm6bSpUurffv2ypEjhwoVKpRoP+vVqydfX1+NHDlSlSpVUlBQkF599VXlzZtXN2/e1MmTJ7V582YdOHBAklS/fn35+fmpWrVq8vX11ZEjRzRp0iQ1adLEMn1UQg/gRx99pHbt2ilDhgxq2rSpSpcurc6dO2v69OmWf2Xv3LlTs2fPVosWLSwnH86ePVtTpkxRy5YtFRgYqJs3b+rrr7+Wp6en5UO5du3aeu211zRhwgQdP35cDRs2VHx8vLZs2aLatWurd+/eyfr9/ddjUL9+fbm4uKhp06Z64403dOvWLX399dfy8fF5ak/RsWPH9OKLL+qVV15R8eLF5ezsrB9//FGXLl2ynLg1dOhQ/fXXXxo0aJB++uknq8cHBgZanfzybyT3mCQIDg7WggULFBQUZBn/V65cOXl4eOjYsWPq0KHDU7dZpkwZtW/fXlOmTFFkZKSqVq2q9evXW82Z+zhVq1ZVlixZ1LlzZ/Xt21cODg6aM2eOzYcZSA/+a/Lbb7+pUqVKev3111W8eHFdv35de/fu1bp163T9+vUUP2f58uW1cOFC9e/fXy+88IIyZcqkpk2bqkePHvrqq6/UpUsX7dmzR/ny5dPixYu1detWjRs3zvLekqSCBQvKz89PR48etTqpqkaNGnr//fclKVkB+PXXX9ekSZPUqVMn7dmzRzlz5tScOXOSdRGIJk2aaMyYMWrYsKE6dOigy5cva/LkySpYsKDVfMRJmTZtmjZs2KCePXsm6tX09fVVvXr1LPdLliypBg0aWE2DJinJP3wT5MiRQwMHDtTQoUPVsGFDNWvWTEePHtWUKVP0wgsvJPnZnpTu3burZ8+eat26terVq6cDBw5o9erVlqm3nsRenykplZzvypRI7nv75s2byp07t15++WWVLl1amTJl0rp167Rr1y59+eWXT9zG475fAgMD9emnn2rgwIE6ffq0WrRoocyZMyssLEw//vijevTooXfffVcbNmxQ79691aZNGxUuXFixsbGaM2eO5Y/eh7ezbt06jRkzRv7+/sqfP7/VibPPlbSbcAKpIWGqm6SmxoqLizMCAwONwMBAIzY21jAMw1i3bp1RrVo1w93d3fD09DSaNm1qmTrIMP5v6qLH3RI8PA1aghMnThg5c+Y0ihUrZly5csUwjMRT48THxxufffaZERAQYLi6uhply5Y1VqxYkeR0QteuXTNee+01w9PT0/Dy8jJee+01y1QtT5sGLeHxvXv3NnLlymW4uLgYuXPnNjp37myZvulJ+/nwlDiXLl0yQkNDjTx58hgZMmQwJBmFChUypk+fblnnq6++MmrUqGFky5bNcHV1NQIDA40BAwYYkZGRVjV98sknRq5cuQxHR0erKWtiYmKMoUOHGvnz5zcyZMhg5MmTxxg4cKDV9FV79+412rdvb+TNm9dwdXU1fHx8jJdeeslqOiTDeDCt0OjRo42iRYsaLi4uRo4cOYxGjRoZe/bssayTnCmLUnIMkpqyaPny5UapUqUMNzc3I1++fMbnn39ufPvtt0lO1fOwq1evGqGhoUbRokUNDw8Pw8vLy6hUqZLVtFSdO3d+7LF7eL/0L6dBM4zkHZMEkydPNiQZvXr1smqvW7euIclYv379Y/f3YXfv3jX69u1rZMuWzfDw8DCaNm1qnDt3Lln7sXXrVqNy5cqGu7u74e/vb7z33nuWqZ8efj0n9d41jAeviSZNmiRql5RoWqZH3xN+fn7Giy++aPWeSPgseXRapbCwsESvn1u3bhkdOnQwvL29DUlWnwWXLl0yunbtamTPnt1wcXExgoKCHvv+b9OmjSHJWLhwoaUtOjrayJgxo+Hi4mLcvXs3ycc96syZM0azZs2MjBkzGtmzZzfeeustY9WqVcmaBm3GjBlGoUKFDFdXV6No0aLGzJkzk3x/PCphnaRuNWvWtKyXcDy+//57y3bKli1rVZdhJP0aMYwH054VLVrUyJAhg+Hr62v06tXLuHHjhtU6j3uNGMaD75X333/fyJ49u5ExY0ajQYMGxokTJ56pz5SUvJYTXo+PTrv4tO/Kh2tM+L5LkNTvPjnv7fv37xsDBgwwSpcubWTOnNnw8PAwSpcubZlm8Wke9/1iGA+mK61evbrh4eFheHh4GEWLFjVCQ0ONo0ePGoZhGKdOnTK6detmBAYGGm5ubkbWrFmN2rVrG+vWrbPaxt9//23UqFHDcHd3T/R5+7xxMIxU6CIA0rGqVatq7Nixz+9fvQAAmBwBGEiBkydPqnz58ulmDBQAAGbESXBACty8eVP379/XoUOHLON/AQDA84UADKRAqVKl1KRJE73wwgv67LPP7F0OAAD4FxgCAQAAAFOhBxgAAACmQgAGAACAqXAhjGSKj4/XhQsXlDlz5nR1KUAAAID0wjAM3bx5U/7+/laXUH8UATiZLly4oDx58ti7DAAAADzFuXPnlDt37scuJwAnU8IlN8+dOydPT087VwMAAIBHRUVFKU+ePFaXSk8KATiZEoY9eHp6EoABAACeYU8brspJcAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAU3G2dwFInnwfrLR3CXZxemQTe5cAAADSGXqAAQAAYCoEYAAAAJgKARgAAACmQgAGAACAqRCAAQAAYCoEYAAAAJgKARgAAACmQgAGAACAqRCAAQAAYCoEYAAAAJgKARgAAACmQgAGAACAqRCAAQAAYCoEYAAAAJgKARgAAACmQgAGAACAqRCAAQAAYCoEYAAAAJgKARgAAACmQgAGAACAqRCAAQAAYCoEYAAAAJgKARgAAACmQgAGAACAqRCAAQAAYCoEYAAAAJgKARgAAACmQgAGAACAqRCAAQAAYCoEYAAAAJgKARgAAACmQgAGAACAqdg1AI8YMUIvvPCCMmfOLB8fH7Vo0UJHjx61WufevXsKDQ1VtmzZlClTJrVu3VqXLl2yWufs2bNq0qSJMmbMKB8fHw0YMECxsbFW62zcuFHlypWTq6urChYsqFmzZqX27gEAAOAZZNcAvGnTJoWGhuqPP/7Q2rVrFRMTo/r16+v27duWdfr166eff/5ZP/zwgzZt2qQLFy6oVatWluVxcXFq0qSJoqOjtW3bNs2ePVuzZs3Sxx9/bFknLCxMTZo0Ue3atbV//369/fbb6t69u1avXp2m+wsAAAD7czAMw7B3EQmuXLkiHx8fbdq0STVq1FBkZKRy5MihefPm6eWXX5Yk/f333ypWrJi2b9+uypUr69dff9VLL72kCxcuyNfXV5I0bdo0vf/++7py5YpcXFz0/vvva+XKlTp06JBlW+3atVNERIRWrVqVrNqioqLk5eWlyMhIeXp62n7nnyLfByvTfJvPgtMjm9i7BAAA8JxIbl57psYAR0ZGSpKyZs0qSdqzZ49iYmJUt25dyzpFixZV3rx5tX37dknS9u3bFRQUZAm/ktSgQQNFRUXp8OHDlnUefo6EdRKeIyn3799XVFSU1Q0AAADPv2cmAMfHx+vtt99WtWrVVLJkSUlSeHi4XFxc5O3tbbWur6+vwsPDLes8HH4Tlicse9I6UVFRunv3bpL1jBgxQl5eXpZbnjx5/vM+AgAAwP6emQAcGhqqQ4cOacGCBfYuRZI0cOBARUZGWm7nzp2zd0kAAACwAWd7FyBJvXv31ooVK7R582blzp3b0u7n56fo6GhFRERY9QJfunRJfn5+lnV27txp9XwJs0Q8vM6jM0dcunRJnp6ecnd3T7ImV1dXubq6/ud9AwAAwLPFrj3AhmGod+/e+vHHH7Vhwwblz5/fann58uWVIUMGrV+/3tJ29OhRnT17VlWqVJEkValSRX/++acuX75sWWft2rXy9PRU8eLFLes8/BwJ6yQ8BwAAAMzDrj3AoaGhmjdvnn766SdlzpzZMmbXy8tL7u7u8vLyUkhIiPr376+sWbPK09NTffr0UZUqVVS5cmVJUv369VW8eHG99tprGjVqlMLDwzVo0CCFhoZaenB79uypSZMm6b333lO3bt20YcMGLVq0SCtXmnNmBQAAADOzaw/w1KlTFRkZqVq1ailnzpyW28KFCy3rjB07Vi+99JJat26tGjVqyM/PT0uXLrUsd3Jy0ooVK+Tk5KQqVaro1VdfVadOnTRs2DDLOvnz59fKlSu1du1alS5dWl9++aW++eYbNWjQIE33FwAAAPb3TM0D/CxjHmD7YB5gAACQXM/lPMAAAABAaiMAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFTsHoA3b96spk2byt/fXw4ODlq2bJnV8i5dusjBwcHq1rBhQ6t1rl+/ro4dO8rT01Pe3t4KCQnRrVu3rNY5ePCggoOD5ebmpjx58mjUqFGpvWsAAAB4Btk9AN++fVulS5fW5MmTH7tOw4YNdfHiRctt/vz5Vss7duyow4cPa+3atVqxYoU2b96sHj16WJZHRUWpfv36CggI0J49ezR69GgNGTJE06dPT7X9AgAAwLPJ2d4FNGrUSI0aNXriOq6urvLz80ty2ZEjR7Rq1Srt2rVLFSpUkCRNnDhRjRs31hdffCF/f3/NnTtX0dHR+vbbb+Xi4qISJUpo//79GjNmjFVQBgAAQPpn9x7g5Ni4caN8fHxUpEgR9erVS9euXbMs2759u7y9vS3hV5Lq1q0rR0dH7dixw7JOjRo15OLiYlmnQYMGOnr0qG7cuJHkNu/fv6+oqCirGwAAAJ5/z3wAbtiwob777jutX79en3/+uTZt2qRGjRopLi5OkhQeHi4fHx+rxzg7Oytr1qwKDw+3rOPr62u1TsL9hHUeNWLECHl5eVluefLksfWuAQAAwA7sPgTiadq1a2f5OSgoSKVKlVJgYKA2btyoF198MdW2O3DgQPXv399yPyoqihAMAACQDjzzPcCPKlCggLJnz64TJ05Ikvz8/HT58mWrdWJjY3X9+nXLuGE/Pz9dunTJap2E+48bW+zq6ipPT0+rGwAAAJ5/z10APn/+vK5du6acOXNKkqpUqaKIiAjt2bPHss6GDRsUHx+vSpUqWdbZvHmzYmJiLOusXbtWRYoUUZYsWdJ2BwAAAGBXdg/At27d0v79+7V//35JUlhYmPbv36+zZ8/q1q1bGjBggP744w+dPn1a69evV/PmzVWwYEE1aNBAklSsWDE1bNhQr7/+unbu3KmtW7eqd+/eateunfz9/SVJHTp0kIuLi0JCQnT48GEtXLhQ48ePtxriAAAAAHOwewDevXu3ypYtq7Jly0qS+vfvr7Jly+rjjz+Wk5OTDh48qGbNmqlw4cIKCQlR+fLltWXLFrm6ulqeY+7cuSpatKhefPFFNW7cWNWrV7ea49fLy0tr1qxRWFiYypcvr3feeUcff/wxU6ABAACYkINhGIa9i3geREVFycvLS5GRkXYZD5zvg5Vpvs1nwemRTexdAgAAeE4kN6/ZvQcYAAAASEsEYAAAAJgKARgAAACmQgAGAACAqRCAAQAAYCoEYAAAAJgKARgAAACm4vxvHhQfH68TJ07o8uXLio+Pt1pWo0YNmxQGAAAApIYUB+A//vhDHTp00JkzZ/ToNTQcHBwUFxdns+IAAAAAW3vqEIg1a9YoIiLCcr9nz56qUKGCDh06pOvXr+vGjRuW2/Xr11OzVgAAAOA/e2oP8NWrV1WtWjWtXLlS+fLl0/Hjx7V48WIVLFgwLeoDAAAAbOqpAbhDhw7Kli2bmjVrpoMHD6pSpUo6ceIEARgAAADPpWSNAW7QoIHKlCkjSerTp4/eeecdhYeHKygoSBkyZLBat1SpUjYvEgAAALCVZJ8E5+vrK0lq3bq1JKlbt26WZQ4ODjIMg5PgAAAA8MxL8SwQYWFhqVEHAAAAkCZSHIADAgJSow4AAAAgTfyrC2HMmTNH06ZNU1hYmLZv366AgACNGzdO+fPnV/PmzW1dI2A6+T5Yae8S7OL0yCb2LgEAYAIpvhTy1KlT1b9/fzVu3FgRERGWMb/e3t4aN26cresDAAAAbCrFAXjixIn6+uuv9dFHH8nJycnSXqFCBf355582LQ4AAACwtRQH4LCwMJUtWzZRu6urq27fvm2TogAAAIDUkuIAnD9/fu3fvz9R+6pVq1SsWDFb1AQAAACkmhSfBNe/f3+Fhobq3r17MgxDO3fu1Pz58zVixAh98803qVEjAAAAYDMpDsDdu3eXu7u7Bg0apDt37qhDhw7y9/fX+PHj1a5du9SoEQAAALCZfzUNWseOHdWxY0fduXNHt27dko+Pj63rAgAAAFLFvwrACTJmzKiMGTPaqhYAAAAg1SUrAJcrV07r169XlixZVLZsWTk4ODx23b1799qsOAAAAMDWkhWAmzdvLldXV0lSixYtUrMeAAAAIFUlKwAPHjw4yZ8BAACA582/HgO8e/duHTlyRJJUvHhxlS9f3mZFAQAAAKklxQH4/Pnzat++vbZu3Spvb29JUkREhKpWraoFCxYod+7ctq4RAAAAsJkUXwmue/fuiomJ0ZEjR3T9+nVdv35dR44cUXx8vLp3754aNQIAAAA2k+Ie4E2bNmnbtm0qUqSIpa1IkSKaOHGigoODbVocAAAAYGsp7gHOkyePYmJiErXHxcXJ39/fJkUBAAAAqSXFAXj06NHq06ePdu/ebWnbvXu33nrrLX3xxRc2LQ4AAACwtRQPgejSpYvu3LmjSpUqydn5wcNjY2Pl7Oysbt26qVu3bpZ1r1+/brtKAQAAABtIcQAeN25cKpQBAAAApI0UB+DOnTunRh0AAABAmkjxGOCH3bt3T1FRUVY3STIMQ++9955NCgQAAABsKcUB+Pbt2+rdu7d8fHzk4eGhLFmyWN2WLFmiGzdu6Pvvv0+NegEAAID/JMUB+L333tOGDRs0depUubq66ptvvtHQoUPl7++v2bNna9u2bQoMDFTDhg1To14AAADgP0nxGOCff/5Z3333nWrVqqWuXbsqODhYBQsWVEBAgObNm6dffvlFX375ZWrUCgAAAPxnKe4Bvn79ugoUKCBJ8vT0tEx1Vr16dW3evNm21QEAAAA2luIAXKBAAYWFhUmSihYtqkWLFkl60DPs7e1t0+IAAAAAW0txAO7atasOHDggSfrggw80efJkubm5qV+/fhowYIDNCwQAAABsKcVjgPv162f5uW7duvr777+1Z88eFSxYUKVKlbJpcQAAAICtpbgH+LvvvtP9+/ct9wMCAtSqVSsVLVpU3333nU2LAwAAAGztXw2BiIyMTNR+8+ZNde3a1SZFAQAAAKklxQHYMAw5ODgkaj9//ry8vLxsUhQAAACQWpI9Brhs2bJycHCQg4ODXnzxRTk7/99D4+LiFBYWxsUvAAAA8MxLdgBu0aKFJGn//v1q0KCBMmXKZFnm4uKifPnyqXXr1jYvEAAAALClZAfgwYMHS5Ly5cundu3aydXVNdWKAgAAAFJLiscA16lTR1euXLHc37lzp95++21Nnz7dpoUBAAAAqSHFAbhDhw767bffJEnh4eGqW7eudu7cqY8++kjDhg2zeYEAAACALaU4AB86dEgVK1aUJC1atEhBQUHatm2b5s6dq1mzZtm6PgAAAMCmUhyAY2JiLON/161bp2bNmkmSihYtqosXL9q2OgAAAMDGUhyAS5QooWnTpmnLli1au3atZeqzCxcuKFu2bDYvEAAAALClFAfgzz//XF999ZVq1aql9u3bq3Tp0pKk5cuXW4ZGAAAAAM+qZE+DlqBWrVq6evWqoqKilCVLFkt7jx49lDFjRpsWBwBmkO+DlfYuwS5Oj2xi7xIAmFSKe4AHDx6s8+fPW4Vf6cH8wD4+PjYrDAAAAEgNKQ7AP/30kwIDA/Xiiy9q3rx5un//fmrUBQAAAKSKFAfg/fv3a9euXSpRooTeeust+fn5qVevXtq1a1dq1AcAAADYVIoDsCSVLVtWEyZM0IULFzRjxgydP39e1apVU6lSpTR+/HhFRkbauk4AAADAJv5VAE5gGIZiYmIUHR0twzCUJUsWTZo0SXny5NHChQttVSMAAABgM/8qAO/Zs0e9e/dWzpw51a9fP5UtW1ZHjhzRpk2bdPz4cQ0fPlx9+/a1da0AAADAf5biABwUFKTKlSsrLCxMM2bM0Llz5zRy5EgVLFjQsk779u115coVmxYKAAAA2EKK5wF+5ZVX1K1bN+XKleux62TPnl3x8fH/qTAAAAAgNaS4B7hjx45PDL8AAADAsyzFPcAFCxZU7ty5VbNmTdWqVUs1a9a0Gv4AAAAAPMtS3AN87tw5jRgxQu7u7ho1apQKFy6s3Llzq2PHjvrmm29So0YAAADAZlIcgHPlyqWOHTtq+vTpOnr0qI4ePaq6detq0aJFeuONN1KjRgAAAMBmUjwE4s6dO/r999+1ceNGbdy4Ufv27VPRokXVu3dv1apVKxVKBAAAAGwnxQHY29tbWbJkUceOHfXBBx8oODhYWbJkSY3aAAAAAJtLcQBu3Lixfv/9dy1YsEDh4eEKDw9XrVq1VLhw4dSoDwAAALCpFI8BXrZsma5evapVq1apSpUqWrNmjYKDgy1jgwEAAIBnWYp7gBMEBQUpNjZW0dHRunfvnlavXq2FCxdq7ty5tqwPAAAAsKkU9wCPGTNGzZo1U7Zs2VSpUiXNnz9fhQsX1pIlS7j8MQAAAJ55Ke4Bnj9/vmrWrKkePXooODhYXl5eqVEXAAAAkCpSHIB37dqVGnUAAAAAaSLFQyAAAACA5xkBGAAAAKZCAAYAAICpEIABAABgKgRgAAAAmMq/uhDG4sWLtWjRIp09e1bR0dFWy/bu3WuTwgAAAIDUkOIe4AkTJqhr167y9fXVvn37VLFiRWXLlk2nTp1So0aNUqNGAAAAwGZSHICnTJmi6dOna+LEiXJxcdF7772ntWvXqm/fvoqMjEyNGgEAAACbSXEAPnv2rKpWrSpJcnd3182bNyVJr732mubPn2/b6gAAAAAbS3EA9vPz0/Xr1yVJefPm1R9//CFJCgsLk2EYtq0OAAAAsLEUB+A6depo+fLlkqSuXbuqX79+qlevntq2bauWLVvavEAAAADAllI8C8T06dMVHx8vSQoNDVW2bNm0bds2NWvWTG+88YbNCwQAAABsKcU9wI6OjnJ2/r/c3K5dO02YMEF9+vSRi4tLigvYvHmzmjZtKn9/fzk4OGjZsmVWyw3D0Mcff6ycOXPK3d1ddevW1fHjx63WuX79ujp27ChPT095e3srJCREt27dslrn4MGDCg4Olpubm/LkyaNRo0aluFYAAAA8//7VhTBu3LihL774QiEhIQoJCdGXX35pGRecUrdv31bp0qU1efLkJJePGjVKEyZM0LRp07Rjxw55eHioQYMGunfvnmWdjh076vDhw1q7dq1WrFihzZs3q0ePHpblUVFRql+/vgICArRnzx6NHj1aQ4YM0fTp0/9VzQAAAHh+pXgIxObNm9WsWTN5enqqQoUKkh7MDTxs2DD9/PPPqlGjRoqer1GjRo+dP9gwDI0bN06DBg1S8+bNJUnfffedfH19tWzZMrVr105HjhzRqlWrtGvXLks9EydOVOPGjfXFF1/I399fc+fOVXR0tL799lu5uLioRIkS2r9/v8aMGWMVlB92//593b9/33I/KioqRfsFAACAZ1OKe4BDQ0P1yiuvKCwsTEuXLtXSpUt16tQptWvXTqGhoTYtLiwsTOHh4apbt66lzcvLS5UqVdL27dslSdu3b5e3t7cl/EpS3bp15ejoqB07dljWqVGjhtUQjQYNGujo0aO6ceNGktseMWKEvLy8LLc8efLYdN8AAABgHykOwCdOnNA777wjJycnS5uTk5P69++vEydO2LS48PBwSZKvr69Vu6+vr2VZeHi4fHx8rJY7Ozsra9asVusk9RwPb+NRAwcOVGRkpOV27ty5/75DAAAAsLsUD4EoV66cjhw5oiJFili1HzlyRKVLl7ZZYfbm6uoqV1dXe5cBAAAAG0tWAD548KDl5759++qtt97SiRMnVLlyZUnSH3/8ocmTJ2vkyJE2Lc7Pz0+SdOnSJeXMmdPSfunSJZUpU8ayzuXLl60eFxsbq+vXr1se7+fnp0uXLlmtk3A/YR0AAACYQ7ICcJkyZeTg4GB1pbf33nsv0XodOnRQ27ZtbVZc/vz55efnp/Xr11sCb1RUlHbs2KFevXpJkqpUqaKIiAjt2bNH5cuXlyRt2LBB8fHxqlSpkmWdjz76SDExMcqQIYMkae3atSpSpIiyZMlis3oBAADw7EtWAA4LC0u1Am7dumU1djgsLEz79+9X1qxZlTdvXr399tv69NNPVahQIeXPn1//+9//5O/vrxYtWkiSihUrpoYNG+r111/XtGnTFBMTo969e6tdu3by9/eX9CCYDx06VCEhIXr//fd16NAhjR8/XmPHjk21/QIAAMCzKVkBOCAgINUK2L17t2rXrm25379/f0lS586dNWvWLL333nu6ffu2evTooYiICFWvXl2rVq2Sm5ub5TFz585V79699eKLL8rR0VGtW7fWhAkTLMu9vLy0Zs0ahYaGqnz58sqePbs+/vjjx06BBgAAgPQrxSfBOTk5qUaNGlqyZImyZs1qab906ZL8/f0VFxeXouerVauW1dCKRzk4OGjYsGEaNmzYY9fJmjWr5s2b98TtlCpVSlu2bElRbQAAAEh/UjwNmmEYun//vipUqKDDhw8nWgYAAAA8y1IcgB0cHLRkyRI1bdpUVapU0U8//WS1DAAAAHiW/aseYCcnJ40fP15ffPGF2rZtq08//ZTeXwAAADwXUjwG+GE9evRQoUKF1KZNG23evNlWNQEAAACpJsU9wAEBAVaXQa5du7b++OMPLhUMAACA50KKe4CTmhO4YMGC2rdvX6KrrQEAAADPmhT3AO/atUs7duxI1H7gwAFduXLFJkUBAAAAqSXFATg0NDTJ4Q7//POPQkNDbVIUAAAAkFpSHID/+usvlStXLlF72bJl9ddff9mkKAAAACC1pDgAu7q6JjnW9+LFi3J2/k+TSgAAAACpLsUBuH79+ho4cKAiIyMtbREREfrwww9Vr149mxYHAAAA2FqKu2y/+OIL1ahRQwEBASpbtqwkaf/+/fL19dWcOXNsXiAAAABgSykOwLly5dLBgwc1d+5cHThwQO7u7uratavat2+vDBkypEaNAAAAgM38q0G7Hh4e6tGjh61rAQAAAFJdsgLw8uXL1ahRI2XIkEHLly9/4rrNmjWzSWEAAABAakhWAG7RooXCw8Pl4+OjFi1aPHY9BwcHxcXF2ao2AAAAwOaSFYDj4+OT/BkAAAB43qR4GrTHOX/+POOCAQAA8MyzWQC+du2aZsyYYaunAwAAAFKFzQIwAAAA8DwgAAMAAMBUCMAAAAAwlWRfCKNVq1ZPXB4REfFfawEAAABSXbIDsJeX11OXd+rU6T8XBAAAAKSmZAfgmTNnpmYdAAAAQJpgDDAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABM5ZkPwEOGDJGDg4PVrWjRopbl9+7dU2hoqLJly6ZMmTKpdevWunTpktVznD17Vk2aNFHGjBnl4+OjAQMGKDY2Nq13BQAAAM8AZ3sXkBwlSpTQunXrLPednf+v7H79+mnlypX64Ycf5OXlpd69e6tVq1baunWrJCkuLk5NmjSRn5+ftm3bposXL6pTp07KkCGDPvvsszTfFwAAANjXcxGAnZ2d5efnl6g9MjJSM2bM0Lx581SnTh1J0syZM1WsWDH98ccfqly5stasWaO//vpL69atk6+vr8qUKaNPPvlE77//voYMGSIXF5ckt3n//n3dv3/fcj8qKip1dg4AAABp6pkfAiFJx48fl7+/vwoUKKCOHTvq7NmzkqQ9e/YoJiZGdevWtaxbtGhR5c2bV9u3b5ckbd++XUFBQfL19bWs06BBA0VFRenw4cOP3eaIESPk5eVlueXJkyeV9g4AAABp6ZkPwJUqVdKsWbO0atUqTZ06VWFhYQoODtbNmzcVHh4uFxcXeXt7Wz3G19dX4eHhkqTw8HCr8JuwPGHZ4wwcOFCRkZGW27lz52y7YwAAALCLZ34IRKNGjSw/lypVSpUqVVJAQIAWLVokd3f3VNuuq6urXF1dU+35AQAAYB/PfA/wo7y9vVW4cGGdOHFCfn5+io6OVkREhNU6ly5dsowZ9vPzSzQrRML9pMYVAwAAIH177gLwrVu3dPLkSeXMmVPly5dXhgwZtH79esvyo0eP6uzZs6pSpYokqUqVKvrzzz91+fJlyzpr166Vp6enihcvnub1AwAAwL6e+SEQ7777rpo2baqAgABduHBBgwcPlpOTk9q3by8vLy+FhISof//+ypo1qzw9PdWnTx9VqVJFlStXliTVr19fxYsX12uvvaZRo0YpPDxcgwYNUmhoKEMcAAAATOiZD8Dnz59X+/btde3aNeXIkUPVq1fXH3/8oRw5ckiSxo4dK0dHR7Vu3Vr3799XgwYNNGXKFMvjnZyctGLFCvXq1UtVqlSRh4eHOnfurGHDhtlrlwAAJpbvg5X2LsEuTo9sYu8SAItnPgAvWLDgicvd3Nw0efJkTZ48+bHrBAQE6JdffrF1aQAAAHgOPXdjgAEAAID/ggAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFSc7V0AAABAepXvg5X2LsEuTo9sYu8SnogeYAAAAJgKARgAAACmQgAGAACAqRCAAQAAYCoEYAAAAJgKARgAAACmQgAGAACAqRCAAQAAYCoEYAAAAJgKARgAAACmQgAGAACAqRCAAQAAYCoEYAAAAJgKARgAAACmQgAGAACAqRCAAQAAYCoEYAAAAJgKARgAAACmQgAGAACAqRCAAQAAYCoEYAAAAJgKARgAAACmQgAGAACAqRCAAQAAYCoEYAAAAJgKARgAAACmQgAGAACAqRCAAQAAYCoEYAAAAJiKqQLw5MmTlS9fPrm5ualSpUrauXOnvUsCAABAGjNNAF64cKH69++vwYMHa+/evSpdurQaNGigy5cv27s0AAAApCHTBOAxY8bo9ddfV9euXVW8eHFNmzZNGTNm1Lfffmvv0gAAAJCGnO1dQFqIjo7Wnj17NHDgQEubo6Oj6tatq+3btyf5mPv37+v+/fuW+5GRkZKkqKio1C32MeLv37HLdu3NXr9ve+N4mwvH21w43ubC8bbPdg3DeOJ6pgjAV69eVVxcnHx9fa3afX199ffffyf5mBEjRmjo0KGJ2vPkyZMqNSJpXuPsXQHSEsfbXDje5sLxNhd7H++bN2/Ky8vrsctNEYD/jYEDB6p///6W+/Hx8bp+/bqyZcsmBwcHO1aWtqKiopQnTx6dO3dOnp6e9i4HqYzjbS4cb3PheJuLWY+3YRi6efOm/P39n7ieKQJw9uzZ5eTkpEuXLlm1X7p0SX5+fkk+xtXVVa6urlZt3t7eqVXiM8/T09NUbyCz43ibC8fbXDje5mLG4/2knt8EpjgJzsXFReXLl9f69estbfHx8Vq/fr2qVKlix8oAAACQ1kzRAyxJ/fv3V+fOnVWhQgVVrFhR48aN0+3bt9W1a1d7lwYAAIA0ZJoA3LZtW125ckUff/yxwsPDVaZMGa1atSrRiXGw5urqqsGDBycaDoL0ieNtLhxvc+F4mwvH+8kcjKfNEwEAAACkI6YYAwwAAAAkIAADAADAVAjAAAAAMBUCMAAAAEyFAAwAAABTMc00aABgRg9f0v1pxowZk4qVAMCzgwAMAOnYvn37rO7v3btXsbGxKlKkiCTp2LFjcnJyUvny5e1RHlLB8uXLk71us2bNUrES4NlFAIYkeonMbteuXfrtt990+fJlxcfHWy3jeD/ffvvtN8vPY8aMUebMmTV79mxlyZJFknTjxg117dpVwcHB9ioRNtaiRQur+w4ODnp4yn8HBwfLz3FxcWlVFlJZTEyM3N3dtX//fpUsWdLe5TzzCMCQlLiX6HEe/uBE+vDZZ59p0KBBKlKkiHx9fa2OMcc7ffnyyy+1Zs0aS/iVpCxZsujTTz9V/fr19c4779ixOtjKw3/Erlu3Tu+//74+++wzValSRZK0fft2DRo0SJ999pm9SkQqyJAhg/LmzcsfNcnEleAAk/P19dXnn3+uLl262LsUpLLMmTPr559/Vq1atazaf/vtNzVr1kw3b960T2FINSVLltS0adNUvXp1q/YtW7aoR48eOnLkiJ0qQ2qYMWOGli5dqjlz5ihr1qz2LueZRg8wYHKOjo6qVq2avctAGmjZsqW6du2qL7/8UhUrVpQk7dixQwMGDFCrVq3sXB1Sw8mTJ+Xt7Z2o3cvLS6dPn07zepC6Jk2apBMnTsjf318BAQHy8PCwWr537147VfbsoQcYSdq9e7cWLVqks2fPKjo62mrZ0qVL7VQVUsOoUaN04cIFjRs3zt6lIJXduXNH7777rr799lvFxMRIkpydnRUSEqLRo0cn+rLE869GjRpyc3PTnDlz5OvrK0m6dOmSOnXqpHv37mnTpk12rhC2NHTo0CcuHzx4cBpV8uwjACORBQsWqFOnTmrQoIHWrFmj+vXr69ixY7p06ZJatmypmTNn2rtE2FB8fLyaNGmiY8eOqXjx4sqQIYPVcv7gSX9u376tkydPSpICAwMJvunYiRMn1LJlSx07dkx58uSRJJ07d06FChXSsmXLVLBgQTtXCNgHQyCQyGeffaaxY8cqNDRUmTNn1vjx45U/f3698cYbypkzp73Lg4317dtXv/32m2rXrq1s2bJx4psJeHh4WMYHEn7Tt4IFC+rgwYNau3at/v77b0lSsWLFVLduXd7rMDV6gJGIh4eHDh8+rHz58ilbtmzauHGjgoKCdOTIEdWpU0cXL160d4mwocyZM2vBggVq0qSJvUtBKouPj9enn36qL7/8Urdu3ZL04Pi/8847+uijj+ToyMVBgedN1qxZdezYMWXPnl1ZsmR54h82169fT8PKnm30ACORLFmyWM4Gz5Urlw4dOqSgoCBFRETozp07dq4OtpY1a1YFBgbauwykgY8++kgzZszQyJEjLSc+/v777xoyZIju3bun4cOH27lCpIZNmzbpiy++sMz4ULx4cQ0YMIC5n9OJsWPHKnPmzJLEuRwpQA8wEunQoYMqVKig/v3765NPPtHEiRPVvHlzrV27VuXKlWNMaDozc+ZMrVq1SjNnzlTGjBntXQ5Skb+/v6ZNm5bo6l8//fST3nzzTf3zzz92qgyp5fvvv1fXrl3VqlUrqz96li1bplmzZqlDhw52rhCwDwIwErl+/bru3bsnf39/xcfHa9SoUdq2bZsKFSqkQYMGWU2ij+df2bJldfLkSRmGoXz58iU6CY5pc9IPNzc3HTx4UIULF7ZqP3r0qMqUKaO7d+/aqTKklmLFiqlHjx7q16+fVfuYMWP09ddfMw9wOnbv3r1Eszh5enraqZpnDwEYMDmmzTGPSpUqqVKlSpowYYJVe58+fbRr1y798ccfdqoMqcXV1VWHDx9ONNvDiRMnVLJkSd27d89OlSE13L59W++//74WLVqka9euJVrOVeL+D2OAkaSTJ09q5syZOnnypMaPHy8fHx/9+uuvyps3r0qUKGHv8mBDBFzzGDVqlJo0aaJ169ZZXRb33Llz+uWXX+xcHVJDnjx5tH79+kQBeN26dZZp0ZB+vPfee/rtt980depUvfbaa5o8ebL++ecfffXVVxo5cqS9y3um0AOMRDZt2qRGjRqpWrVq2rx5s44cOaICBQpo5MiR2r17txYvXmzvEgH8SxcuXNDkyZOtpsR688035e/vb+fKkBqmTp2qt99+W926dVPVqlUlSVu3btWsWbM0fvx4vfHGG3auELaUN29efffdd6pVq5Y8PT21d+9eFSxYUHPmzNH8+fP5Q/chBGAkUqVKFbVp00b9+/dX5syZdeDAARUoUEA7d+5Uq1atdP78eXuXCBtydHR84rQ5/MsMeL79+OOP+vLLLy3jfYsVK6YBAwaoefPmdq4MtpYpUyb99ddfyps3r3Lnzq2lS5eqYsWKCgsLU1BQkGX6QzAEAkn4888/NW/evETtPj4+unr1qh0qQmr68ccfre7HxMRo3759mj179lPHB+P5ExERoRkzZljCUIkSJdStWzd5eXnZuTKklpYtW6ply5b2LgNpoECBAgoLC1PevHlVtGhRLVq0SBUrVtTPP/8sb29ve5f3TCEAIxFvb29dvHhR+fPnt2rft2+fcuXKZaeqkFqS6gV6+eWXVaJECS1cuFAhISF2qAqpYffu3WrQoIHc3d1VsWJFSQ9mAxg+fLjWrFmjcuXK2blCpJY9e/ZY/dFTtmxZO1cEWzp16pTy5cunrl276sCBA6pZs6Y++OADNW3aVJMmTVJMTIzGjBlj7zKfKQyBQCLvvvuuduzYoR9++EGFCxfW3r17denSJXXq1EmdOnXipCmTOHXqlEqVKsW/zNKR4OBgFSxYUF9//bWcnR/0f8TGxqp79+46deqUNm/ebOcKYWuXL19Wu3bttHHjRksPYEREhGrXrq0FCxYoR44c9i0QNuHk5KSLFy/Kx8dHktS2bVtNmDBB9+7d0549e1SwYEGVKlXKzlU+WwjASCQ6OlqhoaGaNWuW4uLi5OzsrLi4OHXo0EGzZs2Sk5OTvUtEKrt7964GDhyoX3/9VUePHrV3ObARd3d37du3T0WLFrVq/+uvv1ShQgWu9JgOtW3bVqdOndJ3332nYsWKSXpwvDt37qyCBQtq/vz5dq4QtuDo6Kjw8HBLAH74/B0kjSEQSMTFxUVff/21/ve//+nQoUO6deuWypYtq0KFCtm7NKSCR68dbxiGbt68qYwZM+r777+3Y2WwNU9PT509ezZRAD537pzlUqpIX1atWqV169ZZwq/04FLIkydPVv369e1YGWBfBGA8Vt68eZU3b157l4FUNnbsWKsA7OjoqBw5cqhSpUpc9S+dadu2rUJCQvTFF19YTYk1YMAAtW/f3s7VITXEx8cnurqjJGXIkEHx8fF2qAipwcHBIdFsPk+a3QcMgcD/179//2Svy0B64PkUHR2tAQMGaNq0aYqNjZX0IAj16tVLI0eOlKurq50rhK01b95cERERmj9/vmWu53/++UcdO3ZUlixZEs0Cg+eTo6OjGjVqZHkP//zzz6pTp448PDys1lu6dKk9ynsmEYAhSapdu7bV/b179yo2NlZFihSRJB07dkxOTk4qX768NmzYYI8SYUMHDx5UyZIl5ejoqIMHDz5xXU6cSH/u3LmjkydPSpICAwOVMWNGO1eE1HLu3Dk1a9ZMhw8ftlz57ezZswoKCtLy5cuVO3duO1cIW+jatWuy1ps5c2YqV/L8IAAjkTFjxmjjxo2aPXu25V/gN27cUNeuXRUcHKx33nnHzhXiv3r4hImEC2Ek9VHg4ODAhTCA55xhGFq/fr3VhTDq1q1r56oA+yIAI5FcuXJpzZo1KlGihFX7oUOHVL9+fV24cMFOlcFWzpw5o7x588rBwUFnzpx54roBAQFpVBVSy8WLFzVp0iQNHz5cklS9enWrGR+cnJy0bNky5vlOR+7evav169frpZdekiQNHDhQ9+/ftyx3dnbWsGHD5ObmZq8SAbviJDgkEhUVpStXriRqv3Llim7evGmHimBrD4daAm76N2XKFN24ccNy/8CBA+rWrZuyZs0qSfr11181duxYffHFF/YqETY2e/ZsrVy50hKAJ02apBIlSsjd3V2S9Pfffytnzpzq16+fPcsE7IYeYCTSqVMnbdmyRV9++aXlalE7duzQgAEDFBwcrNmzZ9u5QtjahQsX9Pvvv+vy5cuJzgzv27evnaqCrZQtW1YTJkxQcHCwpMRzhK5evVr9+/fX4cOH7VkmbCg4OFjvvfeemjZtKinxMf/+++81efJkbd++3Z5lAnZDDzASmTZtmt5991116NBBMTExMgxDGTJkUEhIiEaPHm3v8mBjs2bN0htvvCEXFxdly5bNauocBwcHAnA6cPr0aatLm9erV8/q7PAiRYooLCzMHqUhlZw4cUJBQUGW+25ubnJ0dLTcr1ixokJDQ+1RGvBMoAcYj3X79m2rM8UfnU4F6UOePHnUs2dPDRw40OoLEulHpkyZtGXLFpUtWzbJ5fv27VNwcDCXvU5H3N3dtX//fstMPo/6+++/VaZMGd27dy+NKwOeDfQAw6JVq1bJWo95BNOXO3fuqF27doTfdKxIkSLatm3bYwPwli1bVLhw4TSuCqkpd+7cOnTo0GMD8MGDB5kCDabGNx4svLy8knVD+hISEqIffvjB3mUgFbVr104ff/xxknM+HzhwQMOGDeNKcOlM48aN9fHHHyfZw3v37l0NHTpUTZo0sUNlwLOBIRCAycXFxemll17S3bt3FRQUlOiyqVz57/kXExOjunXratu2bapXr56lV/Do0aNau3atqlSpovXr1yd5yVw8ny5duqQyZcrIxcVFvXv3tvTwHz16VJMmTVJsbKz27dsnX19fO1cK2AcBGDC5Tz/9VB9//LGKFCkiX1/fRCfBceW/9CE6OlpjxozRggULdOzYMUlSoUKF1L59e/Xr14/LIKdDYWFh6tWrl9auXWu50I2Dg4Pq1aunKVOmWGaEAMyIAAyYXJYsWTR27Fh16dLF3qUASAXXr1/XiRMnJEkFCxa0zP8MmBkBGDA5Pz8/bdmyRYUKFbJ3KQAApAlOggNM7q233tLEiRPtXQYAAGmGHmDA5Fq2bKkNGzYoW7ZsKlGiRKIToZj2DgCQ3jAPMGBy3t7eyZ4DGgCA9IAeYAAwid9++021a9e2dxkAYHeMAQag2NhYrVu3Tl999ZVu3rwpSbpw4QKXxk1nGjZsqMDAQH366ac6d+6cvcsBALshAAMmd+bMGQUFBal58+YKDQ3VlStXJEmff/653n33XTtXB1v6559/1Lt3by1evFgFChRQgwYNtGjRIkVHR9u7NABIUwRgwOTeeustVahQQTdu3JC7u7ulvWXLllq/fr0dK4OtZc+eXf369dP+/fu1Y8cOFS5cWG+++ab8/f3Vt29fHThwwN4lAkCaYAwwYHLZsmXTtm3bVKRIEWXOnFkHDhxQgQIFdPr0aRUvXlx37tyxd4lIJRcuXND06dM1cuRIOTs76969e6pSpYqmTZumEiVK2Ls8AEg19AADJhcfH6+4uLhE7efPn1fmzJntUBFSU0xMjBYvXqzGjRsrICBAq1ev1qRJk3Tp0iWdOHFCAQEBatOmjb3LBIBURQ8wYHJt27aVl5eXpk+frsyZM+vgwYPKkSOHmjdvrrx582rmzJn2LhE20qdPH82fP1+GYei1115T9+7dVbJkSat1wsPD5e/vr/j4eDtVCQCpjwAMmNy5c+fUsGFDGYah48ePq0KFCjp+/LiyZ8+uzZs3y8fHx94lwkZefPFFde/eXa1atZKrq2uS68TGxmrr1q2qWbNmGlcHAGmHAAxAsbGxWrhwoQ4cOKBbt26pXLly6tixo9VJcXi+xcTE6I033tD//vc/5c+f397lAIBdEYABE4uJiVHRokW1YsUKFStWzN7lIJV5eXlp//79BGAApsdJcICJZciQQffu3bN3GUgjLVq00LJly+xdBgDYnbO9CwBgX6Ghofr888/1zTffyNmZj4T0rFChQho2bJi2bt2q8uXLy8PDw2p537597VQZAKQthkAAJpdwwYtMmTIpKCgoUShaunSpnSqDrT1p6IODg4NOnTqVhtUAgP3Q3QOYnLe3t1q3bm3vMpAGwsLC7F0CADwTCMCAScXHx2v06NE6duyYoqOjVadOHQ0ZMoSZH0wgOjpaYWFhCgwMZNgLAFPiJDjApIYPH64PP/xQmTJlUq5cuTRhwgSFhobauyykojt37igkJEQZM2ZUiRIldPbsWUkPLpAxcuRIO1cHAGmHAAyY1HfffacpU6Zo9erVWrZsmX7++WfNnTuXK4ClYwMHDtSBAwe0ceNGubm5Wdrr1q2rhQsX2rEyAEhbnAQHmJSrq6tOnDihPHnyWNrc3Nx04sQJ5c6d246VIbUEBARo4cKFqly5sjJnzqwDBw6oQIECOnHihMqVK6eoqCh7lwgAaYIeYMCkYmNjrXoBpQfzAsfExNipIqS2K1euJHlp69u3b8vBwcEOFQGAfXD2A2BShmGoS5cucnV1tbTdu3dPPXv2tJoKjWnQ0o8KFSpo5cqV6tOnjyRZQu8333yjKlWq2LM0AEhTBGDApDp37pyo7dVXX7VDJUgrn332mRo1aqS//vpLsbGxGj9+vP766y9t27ZNmzZtsnd5AJBmGAMMAOncoUOHVLJkSUnSyZMnNXLkSB04cEC3bt1SuXLl9P777ysoKMjOVQJA2iEAA0A65+joqBdeeEHdu3dXu3btlDlzZnuXBAB2xUlwAJDObdq0SSVKlNA777yjnDlzqkuXLtqyZYu9ywIAu6EHGABM4vbt21q0aJFmzZqlLVu2qGDBggoJCVHnzp3l5+dn7/IAIM0QgAHAhE6cOKGZM2dqzpw5Cg8PV8OGDbV8+XJ7lwUAaYIADAAmdfv2bc2dO1cDBw5URESE4uLi7F0SAKQJpkEDAJPZvHmzvv32Wy1ZskSOjo565ZVXFBISYu+yACDN0AMMACZw4cIFzZo1S7NmzdKJEydUtWpVhYSE6JVXXrG68AkAmAE9wACQzjVq1Ejr1q1T9uzZ1alTJ3Xr1k1FihSxd1kAYDcEYABI5zJkyKDFixfrpZdekpOTk73LAQC7YwgEAAAATIULYQAAAMBUCMAAAAAwFQIwAAAATIUADAAAAFMhAAMA1KVLF7Vo0cJyv1atWnr77bct9+/cuaPWrVvL09NTDg4OioiISPMaAcBWCMAAkE5cuXJFvXr1Ut68eeXq6io/Pz81aNBAW7duTfFzLV26VJ988onl/uzZs7VlyxZt27ZNFy9elJeXly1LB4A0xTzAAJBOtG7dWtHR0Zo9e7YKFCigS5cuaf369bp27VqKnytr1qxW90+ePKlixYqpZMmStioXAOyGAAwA6UBERIS2bNmijRs3qmbNmpKkgIAAVaxYUZI0a9Ysde3aNdHjBg8erCFDhiRqr1WrlsqUKaNx48apVq1a2rRpkyTJwcFBNWvW1MaNG1NtXwAgtTEEAgDSgUyZMilTpkxatmyZ7t+/n2h527ZtdfHiRctt/vz5cnZ2VrVq1Z763EuXLtXrr7+uKlWq6OLFi1q6dGlq7AIApBkCMACkA87Ozpo1a5Zmz54tb29vVatWTR9++KEOHjwoSXJ3d5efn5/8/Px0+/ZthYaG6rPPPlO9evWe+txZs2ZVxowZ5eLiIj8/v0TDIwDgeUMABoB0onXr1rpw4YKWL1+uhg0bauPGjSpXrpxmzZplWScyMlIvvfSSmjRpogEDBtivWACwIwIwAKQjbm5uqlevnv73v/9p27Zt6tKliwYPHixJiouLU9u2beXp6anp06fbuVIAsB8CMACkY8WLF9ft27clSf369dOff/6pZcuWyc3Nzc6VAYD9MAsEAKQD165dU5s2bdStWzeVKlVKmTNn1u7duzVq1Cg1b95cM2fO1JQpU/Tjjz/KwcFB4eHhkv7v5DkAMBMCMACkA5kyZVKlSpU0duxYnTx5UjExMcqTJ49ef/11ffjhh+rVq5fi4uLUrFkzq8c9bho0AEjPHAzDMOxdBAAAAJBWGAMMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADCV/wdo6MkEcA9r5QAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"plt.figure(figsize=(8, 6))\n",
"diamonds_train['cut'].value_counts().plot(kind='bar')\n",
"plt.title('Rozkład częstości dla szlifów diamentów dla zbioru diamonds tranującego')\n",
"plt.xlabel('Szlif')\n",
"plt.ylabel('Liczba wystąpień')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 111,
"id": "ab567b6f",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsAAAAJdCAYAAAA818FyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABlyklEQVR4nO3dd3QU5f/28SuFVEhCSSGUAKFD6NJDkRIQ6SpNaUEFgygoKsqXZgFBKVJFFBAFQUBEVLoU6R1BBIKhCQk1CT1tnj94sj+WBEh0kwXm/Tpnz8nOzO5+Zmdn9sq999zjYBiGIQAAAMAkHO1dAAAAAJCdCMAAAAAwFQIwAAAATIUADAAAAFMhAAMAAMBUCMAAAAAwFQIwAAAATIUADAAAAFMhAAM2Nnv2bE2aNMneZZjC2rVr9cEHH+jatWv2LsXUvvrqK33++ef2LgMAMowA/Bhp0KCBypcv/8DlihQpou7du9vsdY8fPy4HBwfNmjXLZs/5qFq2bJn69OmjypUrZ/qx/2W7pLcNhg0bJgcHh3/1fFnJwcFBw4YNs9yfNWuWHBwcdPz4cavlxowZo2LFisnJyUmVKlVK8zzHjh1T27Zt5efnJ09Pz6wtOh0ZXY/H3ffff6/XXntNTzzxRLa/9rp16+Tg4KB169ZZpnXv3l1FihTJ1jocHBzUt2/fBy73KH1GHqVjiq3dvW/j8UQAzgKpB7nUm7OzswoUKKDu3bvrn3/+sXd5uMPmzZs1bNgwxcbG/ufn+ueffxQeHq45c+aoTp06/704E1u5cqXeeust1alTRzNnztRHH31kNf/WrVt69tln1bdvX7300kt2qvLxNnfuXI0fP/6+yxw9elS9e/fWggULVKVKlewpDHhE2PL75X4++ugjLVmyJEtf43FEAM5CI0aM0Jw5czRt2jQ1b95c33zzjerXr6+bN2/auzT8f5s3b9bw4cNtcoDat2+fJk+erPbt2/+rxx8+fFhffPHFf67jUfPCCy/oxo0bCgoKskxbu3atHB0d9eWXX6pr16566qmnrB7zxx9/qEePHvrwww+zu9x7Sm89HmUZCcD79u3TzJkz1bx58+wp6hH3qH9GBg8erBs3bti7jEeGLb9f7ocA/O8427uAx1nz5s1VrVo1SVKvXr2UL18+ffzxx1q6dKmee+45O1cHW7s7pGWWq6urjSp5tDg5OcnJyclq2rlz5+Tu7i4XF5d0H1OtWjXLvvWwSG89HnfPPPOMvUt4pNj6M3L9+nV5eHjY7PkexNnZWc7OxAY8HmgBzkahoaGSbvddvNPatWsVGhoqT09P+fj4qHXr1jp06JBlfmpfrHvd7mflypXy8PBQp06dlJSUZDUvMjJSkpSQkKAhQ4aoatWq8vb2lqenp0JDQ/Xbb7+leb7Y2Fh1795d3t7e8vHxUbdu3TL1321sbKz69++vIkWKyNXVVQULFlTXrl114cIFSbf7wd5rPe/s5/fPP/+oZ8+e8vf3l5ubm6pWrarly5eneb2JEyeqXLly8vDwUO7cuVWtWjXNnTtX0u3+bAMHDpQkFS1a1PI6qf3zkpKS9P777ys4OFiurq4qUqSI3n33Xd26dcvqNXbu3KmwsDDly5dP7u7uKlq0qHr27Gm1TEpKiiZMmKCQkBC5ubnJ19dXzZo1086dOy3LZLQP8H/ZBjNnztSTTz4pPz8/ubq6qmzZspo6dWqGHhsdHa0ePXqoYMGCcnV1Vf78+dW6dWvL+5XaPzC92/3W6+5+kQ4ODpo5c6auXbtmeXxqP8SMbJMBAwYob968MgzDMu3VV1+Vg4ODPvvsM8u0mJgYOTg4PHD9b926pf79+8vX11e5cuVSq1atdPr06QeuhyT9+OOPatGihQIDA+Xq6qrg4GC9//77Sk5Otnpsav/9/fv3q379+vLw8FDx4sW1cOFCSdL69etVo0YNubu7q1SpUlq9enWa179zn3B1dVW5cuX01VdfWS2T2md2wYIF+vDDD1WwYEG5ubmpUaNGluNBaj0///yzTpw4YdkGd/arPXfunMLDwy37X8WKFTV79myr16pSpYratWtnNS0kJEQODg7av3+/Zdr8+fPl4OBgdcxLz+nTp9WmTRt5enrKz89P/fv3T7Mv3ssnn3yi2rVrK2/evHJ3d1fVqlUt7+393N2d7c5bgwYN0iz/7bffqlSpUpZj0oYNG9J9vrv7AE+ZMkXlypWTq6urAgMDFRERkWafTv2M7Nq1S/Xq1ZOHh4feffddSffus2rrY0p6fYAzekwpUqSInn76aa1bt07VqlWTu7u7QkJCLMf1xYsXW46PVatW1Z49e9I8x4O+K++sMTIyUt27d5ePj4+8vb3Vo0cPXb9+3WrZjO7bV65c0euvv2753vLz81OTJk20e/fue76nD/p+kaRvvvlGVatWlbu7u/LkyaOOHTvq1KlTVs9z9OhRtW/fXgEBAXJzc1PBggXVsWNHxcXFSbq97a9du6bZs2ene7zds2ePmjdvLi8vL+XMmVONGjXS1q1bLfNjY2Pl5ORkdWy8cOGCHB0d0xxH+/Tpo4CAAKv6tm3bpmbNmsnb21seHh6qX7++Nm3alOb9SN3ubm5uCg4O1ueff57u5ymj37u2wL9y2Sj1g587d27LtNWrV6t58+YqVqyYhg0bphs3bmjixImqU6eOdu/erSJFisjX11dz5syxeq7ExET179//ni1k0u0Tsp555hl16NBBX331lVXLw6pVq/TDDz8oKipKKSkpmjFjhjp16qQXX3xRV65c0ZdffqmwsDBt377dcgKSYRhq3bq1fv/9d/Xu3VtlypTRDz/8oG7dumVo/a9evarQ0FAdOnRIPXv2VJUqVXThwgUtXbpUp0+fVr58+TR+/HhdvXrV6nHjxo3T3r17lTdvXkm3g0vNmjV16dIlRUREqFChQvr222/19NNPa+XKlXryySclSV988YX69eunZ555Rq+99ppu3ryp/fv3a9u2bercubPatWunI0eOaN68eRo3bpzy5csnSfL19ZV0u9V+9uzZeuaZZ/TGG29o27ZtGjlypA4dOqQffvhB0u0g0LRpU/n6+uqdd96Rj4+Pjh8/rsWLF1utQ3h4uGbNmqXmzZurV69eSkpK0saNG7V169ZMtWT+120wdepUlStXTq1atZKzs7N++uknvfLKK0pJSVFERMR9H9u+fXsdPHhQr776qooUKaJz585p1apVOnnypIoUKaJ27dqpePHiVo/ZtWuXxo8fLz8/vwyv45w5czR9+nRt375dM2bMkCTVrl1bUsa2SWhoqMaNG6eDBw9aTgrduHGjHB0dtXHjRvXr188yTZLq1at333p69eqlb775Rp07d1bt2rW1du1atWjRIkPrMmvWLOXMmVMDBgxQzpw5tXbtWg0ZMkTx8fEaM2aM1bKXL1/W008/rY4dO+rZZ5/V1KlT1bFjR3377bd6/fXX1bt3b3Xu3FljxozRM888o1OnTilXrlyS/m+fSD0Zy9fXV7/++qvCw8MVHx+v119/3eq1Ro0aJUdHR7355puKi4vT6NGj1aVLF23btk2S9N577ykuLk6nT5/WuHHjJEk5c+aUJN24cUMNGjRQZGSk+vbtq6JFi+r7779X9+7dFRsbq9dee82yHebNm2d5zUuXLungwYOW7VChQgXLdvD19VWZMmXu+T7euHFDjRo10smTJ9WvXz8FBgZqzpw5Wrt2bYa2w4QJE9SqVSt16dJFCQkJ+u677/Tss89q2bJl992W9erVS3PsPXHihAYPHpzmM71+/XrNnz9f/fr1k6urq6ZMmaJmzZpp+/bt9z05ediwYRo+fLgaN26sPn366PDhw5o6dap27NihTZs2KUeOHJZlL168qObNm6tjx456/vnn5e/vn6H1v5/sPKZERkaqc+fOevnll/X888/rk08+UcuWLTVt2jS9++67euWVVyRJI0eO1HPPPafDhw/L0fF2O11Gvivv9Nxzz6lo0aIaOXKkdu/erRkzZsjPz08ff/yxZZmM7tu9e/fWwoUL1bdvX5UtW1YXL17U77//rkOHDt2z7/uDvl8+/PBD/e9//9Nzzz2nXr166fz585o4caLq1aunPXv2yMfHRwkJCQoLC9OtW7f06quvKiAgQP/884+WLVum2NhYeXt7a86cOerVq5eqV69uOR8iODhYknTw4EGFhobKy8tLb731lnLkyKHPP/9cDRo0sPxT7ePjo/Lly2vDhg2WY+Pvv/8uBwcHXbp0SX/++afKlSsn6fa+mtqQJ93+h6R58+aqWrWqhg4dKkdHR8s/RBs3blT16tUl3Q7hzZo1U/78+TV8+HAlJydrxIgRlvfiThk5xtuMAZubOXOmIclYvXq1cf78eePUqVPGwoULDV9fX8PV1dU4deqUZdlKlSoZfn5+xsWLFy3T9u3bZzg6Ohpdu3a952u88sorhpOTk7F27VrLtPr16xvlypUzDMMwFi1aZOTIkcN48cUXjeTkZMsyly9fNvLly2cULlzY2Lt3r2EYhpGUlGTcunXL6vkvX75s+Pv7Gz179rRMW7JkiSHJGD16tGVaUlKSERoaakgyZs6ced/3ZciQIYYkY/HixWnmpaSkpPuYBQsWGJKMESNGWKaFh4cbkowNGzZYpl2/ft0oXbq0UalSJcu01q1bW96PexkzZowhyYiKirKavnfvXkOS0atXL6vpb775piHJ8r7/8MMPhiRjx44d93yNtWvXGpKMfv36pZl353oHBQUZ3bp1u2+9mdkGQ4cONe7exa9fv57mOcPCwoxixYrd93UvX75sSDLGjBlz3+XudP78eaNw4cJGSEiIcfXqVct0ScbQoUMt91P3lzu3Qbdu3QxPT0+r58voNjl37pwhyZgyZYphGIYRGxtrODo6Gs8++6zh7+9veVy/fv2MPHny3POzd+drvvLKK1bTO3funKH1SO/9fvnllw0PDw/j5s2blmn169c3JBlz5861TPvrr78MSYajo6OxdetWy/QVK1ak2dbh4eFG/vz5jQsXLli9VseOHQ1vb29LHb/99pshyShTpozVPj9hwgRDkvHHH39YprVo0cIICgpKU//48eMNScY333xjmZaQkGDUqlXLyJkzpxEfH28YhmF8//33hiTjzz//NAzDMJYuXWq4uroarVq1Mjp06GB5bIUKFYy2bdumeZ30XnPBggWWadeuXTOKFy9uSDJ+++03y/Ru3bqlqfvu7ZCQkGCUL1/eePLJJ+/7une7ceOGUbVqVSMwMNA4e/asZbokQ5Kxc+dOy7QTJ04Ybm5uVut292fk3LlzhouLi9G0aVOr4/SkSZMMScZXX31lmZb6GZk2bVqauu7+LKZ6mI4pQUFBhiRj8+bNlmmpn2V3d3fjxIkTlumff/55mu2a0e/K1Brv/O4yDMNo27atkTdvXsv9zOzb3t7eRkRERJr1fJB7fb8cP37ccHJyMj788EOr6X/88Yfh7Oxsmb5nzx5DkvH999/f93U8PT3T3c5t2rQxXFxcjGPHjlmmnTlzxsiVK5dRr149y7SIiAirY+OAAQOMevXqGX5+fsbUqVMNwzCMixcvGg4ODsaECRMMw7j93VWiRAkjLCzM6hh6/fp1o2jRokaTJk0s01q2bGl4eHgY//zzj2Xa0aNHDWdnZ6vPU0aP8bZCF4gs1LhxY/n6+qpQoUJ65pln5OnpqaVLl6pgwYKSpLNnz2rv3r3q3r278uTJY3lchQoV1KRJE/3yyy/pPu/XX3+tKVOmaPTo0WrYsGGa+fPmzVOHDh308ssv6/PPP7f8B3348GFVq1ZNFy5cUMOGDVWxYkVJt/ulpbYkp6Sk6NKlS0pKSlK1atWsfuL55Zdf5OzsrD59+limOTk56dVXX83Q+7Fo0SJVrFhRbdu2TTMvva4cf/75p3r27KnWrVtr8ODBkm63VixatEhPPvmk1X+i7u7uevHFF7V3716dOHFCkuTj46PTp09rx44dGarvTqnv/YABA6ymv/HGG5Kkn3/+2fIa0u3W9sTExHSfa9GiRXJwcNDQoUPTzMvskEL/dRu4u7tb/o6Li9OFCxdUv359/f3335af1O71OBcXF61bt06XL19+4OskJyerU6dOunLlin744QebDFOW0W3i6+ur0qVLW35+3rRpk5ycnDRw4EDFxMTo6NGjkm63ZtStW/e+2yD1NVNbRlLd3aJ6L3e+31euXNGFCxcUGhqq69ev66+//rJaNmfOnOrYsaPlfqlSpeTj46MyZcqoRo0alumpf//999+S/m+faNmypQzD0IULFyy3sLAwxcXFpfmptkePHla/HqXuS6nPeT+//PKLAgIC1KlTJ8u0HDlyqF+/frp69arWr19v9Zyp22Hjxo164okn1KRJE0vre2xsrA4cOGC1L9/rNfPnz2/V59jDwyPDI4DcuR0uX76suLg4hYaG3vcn7PS88sor+uOPP7Ro0aI0PwXXqlVLVatWtdwvXLiwWrdurRUrVqTp8pJq9erVSkhI0Ouvv245TkvSiy++KC8vL8tnOpWrq6t69OiRqZofJDuPKWXLllWtWrUs91M/y08++aQKFy6cZnrq5/HffFf27t3b6n5oaKguXryo+Ph4y3pLGdu3fXx8tG3bNp05c+Ye70LmLF68WCkpKXruuees9teAgACVKFHC0v3Q29tbkrRixYo03TceJDk5WStXrlSbNm1UrFgxy/T8+fOrc+fO+v333y3vRWhoqGJiYnT48GFJt/fVevXqKTQ01LKv/v777zIMw7Kv7t27V0ePHlXnzp118eJFyzpcu3ZNjRo10oYNG5SSkqLk5GStXr1abdq0UWBgoKWO4sWLpzl5NqPHeFshAGehyZMna9WqVVq4cKGeeuopXbhwwepEp9SgVqpUqTSPLVOmjOXDdKe9e/eqd+/e6tSpU5oPiSRFRUXp+eefV/v27TVx4kSrL3dPT0/17NnT6kCTavbs2apQoYLc3NyUN29e+fr66ueff7Y6gJ04cUL58+e3/BSaKr3603Ps2LEMjVMsSfHx8WrXrp0KFCigr7/+2rIe58+fV2xsrMqVK2d14Lhw4YLl58AjR45Ikt5++23lzJlT1atXV4kSJRQREZFu36T0nDhxQo6Ojml+0g8ICJCPj49l29WvX1/t27fX8OHDlS9fPrVu3VozZ8606q907NgxBQYGWh24/63/ug02bdqkxo0bW/rQ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saI6deokX19flShRIs16NmnSRP7+/ho1apRq1KihkJAQPf/88ypcuLCuXLmiY8eOacOGDdq3b58kqWnTpgoICFCdOnXk7++vQ4cOadKkSWrRooVl+KjUFsD33ntPHTt2VI4cOdSyZUtVrFhR3bp10/Tp0y0/ZW/fvl2zZ89WmzZtLCcfzp49W1OmTFHbtm0VHBysK1eu6IsvvpCXl5dlZ27YsKFeeOEFffbZZzp69KiaNWumlJQUbdy4UQ0bNlTfvn0z9P79123QtGlTubi4qGXLlnr55Zd19epVffHFF/Lz83tgS9GRI0fUqFEjPffccypbtqycnZ31ww8/KCYmxnLi1vDhw/Xnn39q8ODB+vHHH60eHxwcbHXyy7+R0W2SKjQ0VN99951CQkIs/f+qVKkiT09PHTlyRJ07d37ga1aqVEmdOnXSlClTFBcXp9q1a2vNmjXptmbcrXbt2sqdO7e6deumfv36ycHBQXPmzLF5NwPp9q8mv/32m2rUqKEXX3xRZcuW1aVLl7R7926tXr1aly5dyvRzVq1aVfPnz9eAAQP0xBNPKGfOnGrZsqVeeuklff755+revbt27dqlIkWKaOHChdq0aZPGjx9v2bek2338AgICdPjwYauTqurVq6e3335bkjIUgF988UVNmjRJXbt21a5du5Q/f37NmTMnQxeBaNGihcaOHatmzZqpc+fOOnfunCZPnqzixYtbjUecnmnTpmnt2rXq3bt3mlZNf39/NWnSxHK/fPnyCgsLsxoGTdJ9u1v5+vpq0KBBGj58uJo1a6ZWrVrp8OHDmjJlip544ol0j+3p6dWrl3r37q327durSZMm2rdvn1asWGEZeut+7HVMyayMfFdmRkb37StXrqhgwYJ65plnVLFiReXMmVOrV6/Wjh079Omnn973Ne71/RIcHKwPPvhAgwYN0vHjx9WmTRvlypVLUVFR+uGHH/TSSy/pzTff1Nq1a9W3b189++yzKlmypJKSkjRnzhzLP713vs7q1as1duxYS3eGGjVq6IMPPrDkgFdeeUXOzs76/PPPdevWLY0ePdqq1tT98PDhw1aXnq9Xr55+/fVXubq66oknnrBMd3R01IwZM9S8eXOVK1dOPXr0UIECBfTPP//ot99+k5eXl3766SdJt4f6W7lyperUqaM+ffooOTlZkyZNUvny5bV3717Lc2b2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OGjRokVq2bKlatWqpR9//NFqHgAAAPAw+1ctwE5OTpowYYI++eQTdejQQR988AGtvwAAAHgkZLoP8J1eeukllShRQs8++6w2bNhgq5oAAACALJPpFuCgoCCryyA3bNhQW7du5VLBAAAAeCRkugU4vTGBixcvrj179qS52hoAAADwsMl0C/COHTu0bdu2NNP37dun8+fP26QoAAAAIKtkOgBHRESk293hn3/+UUREhE2KAgAAALJKpgPwn3/+qSpVqqSZXrlyZf355582KQoAAADIKpkOwK6urun29T179qycnf/ToBIAAABAlst0AG7atKkGDRqkuLg4y7TY2Fi9++67atKkiU2LAwAAAGwt0022n3zyierVq6egoCBVrlxZkrR37175+/trzpw5Ni8QAAAAsKVMB+ACBQpo//79+vbbb7Vv3z65u7urR48e6tSpk3LkyJEVNQIAAAA286867Xp6euqll16ydS0AAABAlstQAF66dKmaN2+uHDlyaOnSpfddtlWrVjYpDAAAAMgKGQrAbdq0UXR0tPz8/NSmTZt7Lufg4KDk5GRb1QYAAADYXIYCcEpKSrp/AwAAAI+aTA+Ddi+nT5+mXzAAAAAeejYLwBcvXtSXX35pq6cDAAAAsoTNAjAAAADwKCAAAwAAwFQIwAAAADCVDF8Io127dvedHxsb+19rAQAAALJchgOwt7f3A+d37dr1PxcEAAAAZKUMB+CZM2dmZR0AAABAtqAPMAAAAEyFAAwAAABTIQADAADAVAjAAAAAMBUCMAAAAEyFAAwAAABTIQADAADAVAjAAAAAMBUCMAAAAEyFAAwAAABTIQADAADAVAjAAAAAMBUCMAAAAEyFAAwAAABTIQADAADAVAjAAAAAMBUCMAAAAEyFAAwAAABTIQADAADAVAjAAAAAMBUCMAAAAEyFAAwAAABTIQADAADAVAjAAAAAMBUCMAAAAEyFAAwAAABTIQADAADAVAjAAAAAMBUCMAAAAEyFAAwAAABTIQADAADAVAjAAAAAMBUCMAAAAEyFAAwAAABTIQADAADAVAjAAAAAMBUCMAAAAEyFAAwAAABTIQADAADAVAjAAAAAMBUCMAAAAEyFAAwAAABTIQADAADAVAjAAAAAMBUCMAAAAEyFAAwAAABTIQADAADAVAjAAAAAMBUCMAAAAEyFAAwAAABTIQAD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OnWqXnjhBU2ePFn//POPPv/8c40aNcre5T1UaAFGGuvXr1fz5s1Vp04dbdiwQYcOHVKxYsU0atQo7dy5UwsXLrR3iQD+pTNnzmjy5MlWQ2K98sorCgwMtHNlyApTp07V66+/rp49e6p27dqSpE2bNmnWrFmaMGGCXn75ZTtXCFsqXLiwvv76azVo0EBeXl7avXu3ihcvrjlz5mjevHn8o3sHAjDSqFWrlp599lkNGDBAuXLl0r59+1SsWDFt375d7dq10+nTp+1dImzI0dHxvsPm8JMZ8Gj74Ycf9Omnn1r6+5YpU0YDBw5U69at7VwZbC1nzpz6888/VbhwYRUsWFCLFy9W9erVFRUVpZCQEMvwh6ALBNLxxx9/aO7cuWmm+/n56cKFC3aoCFnphx9+sLqfmJioPXv2aPbs2Q/sH4xHT2xsrL788ktLGCpXrpx69uwpb29vO1eGrNK2bVu1bdvW3mUgGxQrVkxRUVEqXLiwSpcurQULFqh69er66aef5OPjY+/yHioEYKTh4+Ojs2fPqmjRolbT9+zZowIFCtipKmSV9FqBnnnmGZUrV07z589XeHi4HapCVti5c6fCwsLk7u6u6tWrS7o9GsCHH36olStXqkqVKnauEFll165dVv/0VK5c2c4VwZb+/vtvFSlSRD169NC+fftUv359vfPOO2rZsqUmTZqkxMREjR071t5lPlToAoE03nzzTW3btk3ff/+9SpYsqd27dysmJkZdu3ZV165dOWnKJP7++29VqFCBn8weI6GhoSpevLi++OILOTvfbv9ISkpSr1699Pfff2vDhg12rhC2du7cOXXs2FHr1q2ztADGxsaqYcOG+u677+Tr62vfAmETTk5OOnv2rPz8/CRJHTp00GeffaabN29q165dKl68uCpUqGDnKh8uBGCkkZCQoIiICM2aNUvJyclydnZWcnKyOnfurFmzZsnJycneJSKL3bhxQ4MGDdKvv/6qw4cP27sc2Ii7u7v27Nmj0qVLW03/888/Va1aNa70+Bjq0KGD/v77b3399dcqU6aMpNvbu1u3bipevLjmzZtn5wphC46OjoqOjrYE4DvP30H66AKBNFxcXPTFF1/of//7nw4cOKCrV6+qcuXKKlGihL1LQxa4+9rxhmHoypUr8vDw0DfffGPHymBrXl5eOnnyZJoAfOrUKculVPF4Wb58uVavXm0Jv9LtSyFPnjxZTZs2tWNlgH0RgHFPhQsXVuHChe1dBrLYuHHjrAKwo6OjfH19VaNGDa7695jp0KGDwsPD9cknn1gNiTVw4EB16tTJztUhK6SkpKS5uqMk5ciRQykpKXaoCFnBwcEhzWg+9xvdB3SBwP83YMCADC9LR3rg0ZSQkKCBAwdq2rRpSkpKknQ7CPXp00ejRo2Sq6urnSuErbVu3VqxsbGaN2+eZaznf/75R126dFHu3LnTjAKDR5Ojo6OaN29u2Yd/+uknPfnkk/L09LRabvHixfYo76FEAIYkqWHDhlb3d+/eraSkJJUqVUqSdOTIETk5Oalq1apau3atPUqEDe3fv1/ly5eXo6Oj9u/ff99lOXHi8XP9+nUdO3ZMkhQcHCwPDw87V4SscurUKbVq1UoHDx60XPnt5MmTCgkJ0dKlS1WwYEE7Vwhb6NGjR4aWmzlzZhZX8uggACONsWPHat26dZo9e7blJ/DLly+rR48eCg0N1RtvvGHnCvFf3XnCROqFMNI7FDg4OHAhDOARZxiG1qxZY3UhjMaNG9u5KsC+CMBIo0CBAlq5cqXKlStnNf3AgQNq2rSpzpw5Y6fKYCsnTpxQ4cKF5eDgoBMnTtx32aCgoGyqClnl7NmzmjRpkj788ENJUt26da1GfHByctKSJUsY5/sxcuPGDa1Zs0ZPP/20JGnQoEG6deuWZb6zs7NGjBghNzc3e5UI2BUnwSGN+Ph4nT9/Ps308+fP68qVK3aoCLZ2Z6gl4D7+pkyZosuXL1vu79u3Tz179lSePHkkSb/++qvGjRunTz75xF4lwsZmz56tn3/+2RKAJ02apHLlysnd3V2S9Ndffyl//vzq37+/PcsE7IYWYKTRtWtXbdy4UZ9++qnlalHbtm3TwIEDFRoaqtmzZ9u5QtjamTNn9Pvvv+vcuXNpzgzv16+fnaqCrVSuXFmfffaZQkNDJaUdI3TFihUaMGCADh48aM8yYUOhoaF666231LJlS0lpt/k333yjyZMna8uWLfYsE7AbWoCRxrRp0/Tmm2+qc+fOSkxMlGEYypEjh8LDwzVmzBh7lwcbmzVrll5++WW5uLgob968VkPnODg4EIAfA8ePH7e6tHmTJk2szg4vVaqUoqKi7FEaskhkZKRCQkIs993c3OTo6Gi5X716dUVERNijNOChQAsw7unatWtWZ4rfPZwKHg+FChVS7969NWjQIKsvSDw+cubMqY0bN6py5crpzt+zZ49CQ0O57PVjxN3dXXv37rWM5HO3v/76S5UqVdLNmzezuTLg4UALMCzatWuXoeUYR/Dxcv36dXXs2JHw+xgrVaqUNm/efM8AvHHjRpUsWTKbq0JWKliwoA4cOHDPALx//36GQIOp8Y0HC29v7wzd8HgJDw/X999/b+8ykIU6duyoIUOGpDvm8759+zRixAiuBPeYeeqppzRkyJB0W3hv3Lih4cOHq0WLFnaoDHg40AUCMLnk5GQ9/fTTunHjhkJCQtJcNpUr/z36EhMT1bhxY23evFlNmjSxtAoePnxYq1atUq1atbRmzZp0L5mLR1NMTIwqVaokFxcX9e3b19LCf/jwYU2aNElJSUnas2eP/P397VwpYB8EYMDkPvjgAw0ZMkSlSpWSv79/mpPguPLf4yEhIUFjx47Vd999pyNHjkiSSpQooU6dOql///5cBvkxFBUVpT59+mjVqlWWC904ODioSZMmmjJlimVECMCMCMCAyeXOnVvjxo1T9+7d7V0KgCxw6dIlRUZGSpKKFy9uGf8ZMDMCMGByAQEB2rhxo0qUKGHvUgAAyBacBAeY3GuvvaaJEyfauwwAALINLcCAybVt21Zr165V3rx5Va5cuTQnQjHsHQDgccM4wIDJ+fj4ZHgMaAAAHge0AAOASfz2229q2LChvcsAALujDzAAJSUlafXq1fr888915coVSdKZM2e4NO5jplmzZgoODtYHH3ygU6dO2bscALAbAjBgcidOnFBISIhat26tiIgInT9/XpL08ccf680337RzdbClf/75R3379tXChQtVrFgxhYWFacGCBUpISLB3aQCQrQjAgMm99tprqlatmi5fvix3d3fL9LZt22rNmjV2rAy2li9fPvXv31979+7Vtm3bVLJkSb3yyisKDAxUv379tG/fPnuXCADZgj7AgMnlzZtXmzdvVqlSpZQrVy7t27dPxYoV0/Hjx1W2bFldv37d3iUii5w5c0bTp0/XqFGj5OzsrJs3b6pWrVqaNm2aypUrZ+/yACDL0AIMmFxKSoqSk5PTTD99+rRy5cplh4qQlRITE7Vw4UI99dRTCgoK0ooVKzRp0iTFxMQoMjJSQUFBevbZZ+1dJgBkKVqAAZPr0KGDvL29NX36dOXKlUv79++Xr6+vWrdurcKFC2vmzJn2LhE28uqrr2revHkyDEMvvPCCevXqpfLly1stEx0drcDAQKWkpNipSgDIegRgwOROnTqlZs2ayTAMHT16VNWqVdPRo0eVL18+bdiwQX5+fvYuETbSqFEj9erVS+3atZOrq2u6yyQlJWnTpk2qX79+NlcHANmHAAxASUlJmj9/vvbt26erV6+qSpUq6tKli9VJcXi0JSYm6uWXX9b//vc/FS1a1N7lAIBdEYABE0tMTFTp0qW1bNkylSlTxt7lIIt5e3tr7969BGAApsdJcICJ5ciRQzdv3rR3Gcgmbdq00ZIlS+xdBgDYnbO9CwBgXxEREfr44481Y8YMOTtzSHiclShRQiNGjNCmTZtUtWpVeXp6Ws3v16+fnSoDgOxFFwjA5FIveJEzZ06FhISkCUWLFy+2U2Wwtft1fXBwcNDff/+djdUAgP3Q3AOYnI+Pj9q3b2/vMpANoqKi7F0CADwUCMCASaWkpGjMmDE6cuSIEhIS9OSTT2rYsGGM/GACCQkJioqKUnBwMN1eAJgSJ8EBJvXhhx/q3XffVc6cOVWgQAF99tlnioiIsHdZyELXr19XeHi4PDw8VK5cOZ08eVLS7QtkjBo1ys7VAUD2IQADJvX1119rypQpWrFihZYsWaKffvpJ3377LVcAe4wNGjRI+/bt07p16+Tm5maZ3rhxY82fP9+OlQFA9uIkOMCkXF1dFRkZqUKFClmmubm5KTIyUgULFrRjZcgqQUFBmj9/vmrWrKlcuXJp3759KlasmCIjI1WlShXFx8fbu0QAyBa0AAMmlZSUZNUKKN0eFzgxMdFOFSGrnT9/Pt1LW1+7dk0ODg52qAgA7IOzHwCTMgxD3bt3l6urq2XazZs31bt3b6uh0BgG7fFRrVo1/fzzz3r11VclyRJ6Z8yYoVq1atmzNADIVgRgwKS6deuWZtrzzz9vh0qQXT766CM1b95cf/75p5KSkjRhwgT9+eef2rx5s9avX2/v8gAg29AHGAAecwcOHFD58uUlSceOHdOoUaO0b98+Xb16VVWqVNHbb7+tkJAQO1cJANmHAAwAjzlHR0c98cQT6tWrlzp27KhcuXLZuyQAsCtOggOAx9z69etVrlw5vfHGG8qfP7+6d++ujRs32rssALAbWoABwCSuXbumBQsWaNasWdq4caOKFy+u8PBwdevWTQEBAfYuDwCyDQEYAEwoMjJSM2fO1Jw5cxQdHa1mzZpp6dKl9i4LALIFARgATOratWv69ttvNWjQIMXGxio5OdneJQFAtmAYNAAwmQ0bNuirr77SokWL5OjoqOeee07h4eH2LgsAsg0twABgAmfOnNGsWbM0a9YsRUZGqnbt2goPD9dzzz1ndeETADADWoAB4DHXvHlzrV69Wvny5VPXrl3Vs2dPlSpVyt5lAYDdEIAB4DGXI0cOLVy4UE8//bScnJzsXQ4A2B1dIAAAAGAqXAgDAAAApkIABgAAgKkQgAEAAGAqBGAAAACYCgEYAKDu3burTZs2lvsNGjTQ66+/brl//fp1tW/fXl5eXnJwcFBsbGy21wgAtkIABoDHxPnz59WnTx8VLlxYrq6uCggIUFhYmDZt2pTp51q8eLHef/99y/3Zs2dr48aN2rx5s86ePStvb29blg4A2YpxgAHgMdG+fXslJCRo9uzZKlasmGJiYrRmzRpdvHgx08+VJ08eq/vHjh1TmTJlVL58eVuVCwB2QwAGgMdAbGysNm7cqHXr1ql+/fqSpKCgIFWvXl2SNGvWLPXo0SPN44YOHaphw4almd6gQQNVqlRJ48ePV4MGDbR+/XpJkoODg+rXr69169Zl2boAQFajCwQAPAZy5sypnDlzasmSJbp161aa+R06dNDZs2ctt3nz5snZ2Vl16tR54HMvXrxYL774omrVqqWzZ89q8eLFWbEKAJBtCMAA8BhwdnbWrFmzNHv2bPn4+KhOnTp69913tX//fkmSu7u7AgICFBAQoGvXrikiIkIfffSRmjRp8sDnzpMnjzw8POTi4qKAgIA03SMA4FFDAAaAx0T79u115swZLV26VM2aNdO6detUpUoVzZo1y7JMXFycnn76abVo0UIDBw60X7EAYEcEYAB4jLi5ualJkyb63//+p82bN6t79+4aOnSoJCk5OVkdOnSQl5eXpk+fbudKAcB+CMAA8BgrW7asrl27Jknq37+//vjjDy1ZskRubm52rgwA7IdRIADgMXDx4kU9++yz6tmzpypUqKBcuXJp586dGj16tFq3bq2ZM2dqypQp+uGHH+Tg4KDo6GhJ/3fyHACYCQEYAB4DOXPmVI0aNTRu3DgdO3ZMiYmJKlSokF588UW9++676tOnj5KTk9WqVSurx91rGDQAeJw5GIZh2LsIAAAAILvQBxgAAACmQgAGAACAqRCAAQAAYCoEYAAAAJgKARgAAACmQgAGAACAqRCAAQAAYCoEYAAAAJgKARgAAACmQgAGAACAqRCAAQAAYCr/DxJKycrXyOKAAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"plt.figure(figsize=(8, 6))\n",
"diamonds_test['cut'].value_counts().plot(kind='bar')\n",
"plt.title('Rozkład częstości dla szlifów diamentów dla zbioru diamonds testowego')\n",
"plt.xlabel('Szlif')\n",
"plt.ylabel('Liczba wystąpień')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 112,
"id": "18e61963",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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ypUrev31183PLS8vLz399NPavXv3PX+ne/fulcVi0bJly8xlu3btksViSTIEqWnTpqpVq5Z5P6XnjeQk91r49ddf9fjjj8vFxUUBAQH3vHg2NZ8Pv/zyi+rVqyc3Nze5u7vr8ccfNz9bhw0bppw5c+r8+fNJHte7d295enrq5s2bkpKOOU7pOSrRtm3b1KRJE3l4eMjV1VX16tXTb7/9lqRd4uvuzt9Bcq/nlH7uPwh/QqZC4gkxb9685rI1a9aoadOmKlGihIYPH64bN25o4sSJqlOnjnbv3q1ixYqpYMGC+uabb2ye69atWxowYMB9/+pavny5nn32WbVv314zZ8606bEIDQ3VDz/8oOPHjyshIUFfffWVOnbsqJdeeklXrlzRjBkzFBwcrO3bt5sXQxmGoVatWunXX39Vnz59VLZsWf3www/q2rVrivb/6tWrCgoK0qFDh9SjRw9Vq1ZNFy5c0LJly3T69GkVKFBAEyZM0NWrV20eN378eIWFhSl//vySboea2rVr69KlSwoJCZGfn5/mzp2rZ555RqtXr9ZTTz0lSfryyy/Vv39/Pfvss3rttdd08+ZN7d27V9u2bVOnTp3Utm1b/fXXX5o/f77Gjx+vAgUKSJIKFiwo6XZv/5w5c/Tss8/qjTfe0LZt2zRq1CgdOnRIP/zwg6TbIaFx48YqWLCg3n77bXl6euqff/7RkiVLbPahZ8+emj17tpo2bapevXopLi5Omzdv1u+//56qHtD/egymTp2q8uXLq2XLlsqRI4d++uknvfLKK0pISFBISMh9H9uuXTsdOHBAr776qooVK6Zz584pNDRUJ0+eVLFixdS2bVuVLFnS5jG7du3ShAkT5OXlleJ9/OabbzR9+nRt375dX331lSTpiSeekJSyYxIUFKTx48frwIED5gWqmzdvloODgzZv3qz+/fubyySpbt26962nV69e+vbbb9WpUyc98cQTWrdunZo3b56ifZk9e7by5MmjgQMHKk+ePFq3bp3ee+89RUdHa+zYsTZtL1++rGeeeUYdOnTQc889p6lTp6pDhw6aO3euXn/9dfXp00edOnXS2LFj9eyzz+rUqVNyc3OT9P/vicQLwwoWLKhffvlFPXv2VHR0dJKhEaNHj5aDg4PefPNNRUVFacyYMercubO2bdsmSXr33XcVFRWl06dPa/z48ZKkPHny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",
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"plt.figure(figsize=(8, 6))\n",
"diamonds_dev['cut'].value_counts().plot(kind='bar')\n",
"plt.title('Rozkład częstości dla szlifów diamentów dla zbioru diamonds walidacyjnego')\n",
"plt.xlabel('Szlif')\n",
"plt.ylabel('Liczba wystąpień')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 119,
"id": "1bf608c2",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>carat</th>\n",
" </tr>\n",
" <tr>\n",
" <th>cut</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>fair</th>\n",
" <td>0.516404</td>\n",
" </tr>\n",
" <tr>\n",
" <th>good</th>\n",
" <td>0.454054</td>\n",
" </tr>\n",
" <tr>\n",
" <th>ideal</th>\n",
" <td>0.432876</td>\n",
" </tr>\n",
" <tr>\n",
" <th>premium</th>\n",
" <td>0.515262</td>\n",
" </tr>\n",
" <tr>\n",
" <th>very good</th>\n",
" <td>0.459435</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" carat\n",
"cut \n",
"fair 0.516404\n",
"good 0.454054\n",
"ideal 0.432876\n",
"premium 0.515262\n",
"very good 0.459435"
]
},
"execution_count": 119,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diamonds[[\"cut\",\"carat\"]].groupby(\"cut\").std()"
]
},
{
"cell_type": "code",
"execution_count": 118,
"id": "0d6e54d9",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: xlabel='cut'>"
]
},
"execution_count": 118,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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PKM9e/bovffe05133ml6PLcSGxurlJQUPffcc6ZHcWurVq3SsmXLHH4udOjQQSEhIXriiSeqfYywm8aJDh06pAceeEB79uxxOHbk6u4BjhlxnaZNm2rWrFmKiYlxWL5q1SrNnDmT64y42KFDh3T+/Hl16NBBFy5c0DPPPKMtW7aoZcuWSkpK4l1FFxo/frxWr16tjh07qkOHDmUOYOXMJtfw8fHR7t27yxzHtm/fPnXq1Em//PKLoclcgxhxogEDBsjDw0PLli1T06ZNtW3bNv3888965pln9PLLL7vFJX4rCx8fH3333Xdq0aKFw/Iff/xR7du318WLFw1NBph1zz33XPNrFouFM5tcpHv37urevXuZ2yY89dRT+uabb/T1118bmsw12E3jRBkZGfr000/VsGFDWa1WWa1W9erVS3PnztX48ePL3CQJztOiRQu98847Zd6KTklJUcuWLQ1N5d7OnDmjdevW6eDBg5o0aZLq16+vnTt3KigoSCEhIabHcxtcnLFymD9/vvr3769PPvlEkZGRkq78DDly5Ig2btxoeDrnI0acqKSkRH5+fpKkhg0b6vjx42rdurWaNGmiffv2GZ7OvcyaNUvR0dH64osv7MeMfPXVV0pLS9M777xjeDr3s3v3bkVFRcnf31/Z2dmKi4tT/fr19d577yknJ0erV682PSLgUnfddZf279+vxYsXKysrS5I0ZMgQPfHEE2rcuLHh6ZyPGHGi8PBw7dq1S02bNlX37t01f/58eXl5aenSpWrWrJnp8dzKX//6V23dulULFy7U+vXrJUlt27bVtm3bytyvBs4XHx+vRx55RPPnz7cHuyT169dPw4YNMziZ+7nnnnuue5o7u2lcp3HjxtX+QNVrIUZusd9egXXatGkqLCyUJM2ePVt/+ctf1Lt3bzVo0EApKSmGJ3U/ERER+r//+z/TY0DSN998o3/84x9lloeEhCg3N9fARO6rU6dODp8XFxcrMzNT3333nWJjY80M5abOnDmj5cuXa+/evZKkdu3aadSoUfL39zc8mfMRI7dY586ddeLECQUGBurxxx/XN998I+nKMQtZWVk6ffq06tWrxwW3DCgpKdH69esd/qIPHDhQHh4ehidzP97e3iooKCizfP/+/QoICDAwkftauHBhuctnzpxpv/gWnG/79u3q27evatasab9RXlJSkubM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j4iIqJZ3h62sEhMTFRsbq2PHjslms+m9997Tvn37tHr1an344Yemx3M6jhkBADc2YsQIvfHGG2WWXz1+Aa4xaNAgffDBB/rkk09Uq1YtJSYmau/evfrggw/05z//2fR4TsepvQDgxp566imtXr1aoaGhuvPOOyVJW7duVU5OjmJiYlSjRg37uklJSabGRDVHjACAG7vnnntuaD2LxaJPP/3UydO4rzFjxujhhx/W3XffbXoUI4gRAAAMGzRokD766CMFBATooYce0vDhw9WpUyfTY7kMMQIAQCXw73//W++++67WrFmjL7/8Um3atNHw4cM1bNgwhYWFmR7PqYgRAAAqmaNHj+rtt9/WihUr9OOPP1b7M5s4mwYAgEqkuLhY27dv19atW5Wdna2goCDTIzkdMQIAQCXw2WefKS4uTkFBQXrkkUdUp04dffjhhzp69Kjp0ZyO3TQAABgWEhKi06dP67777tPw4cM1YMAAeXt7mx7LZYgRAAAMS05O1t/+9jfVrVvX9ChGECMAAMAojhkBAABGESMAAMAoYgQAABhFjAAAAKOIEQAAYBQxAqDSWrlypdue6gi4E2IEAAAYRYwAcCqbzab58+erRYsW8vb21u233645c+YoPT1dFotFZ86csa+bmZkpi8Wi7Oxspaena+TIkTp79qwsFossFotmzpxp7PsA4DyepgcAUL0lJCQoOTlZCxcuVK9evXTixAllZWX97nY9evTQokWLlJiYqH379kmSateu7exxARhAjABwmnPnzumVV17Ra6+9ptjYWElS8+bN1atXL6Wnp193Wy8vL/n7+8tisSg4ONgF0wIwhd00AJxm7969unTpku69917TowCoxIgRAE5Ts2bNa37Nar3yz89vb49VXFzs9JkAVD7ECACnadmypWrWrKm0tLQyXwsICJAknThxwr4sMzPTYR0vLy+VlJQ4dUYA5nHMCACn8fHx0eTJk/Xss8/Ky8tLPXv2VH5+vr7//nvFxMQoNDRUM2fO1Jw5c7R//34tWLDAYfuwsDCdP39eaWlp6tixo3x9feXr62vouwHgLLwzAsCppk+frmeeeUaJiYlq27atoqOjdfLkSdWoUUNvv/22srKy1KFDB7300kt64YUXHLbt0aOHxo4dq+joaAUEBGj+/PmGvgsAzmQp/e0OWwAAABfjnREAAGAUMQIAAIwiRgAAgFHECAAAMIoYAQAARhEjAADAKGIEAAAYRYwAAACjiBEAAGAUMQIAAIwiRgAAgFH/D33cC1i4OxLUAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"diamonds[[\"cut\",\"carat\"]].groupby(\"cut\").mean().plot(kind=\"bar\")"
]
},
{
"cell_type": "code",
"execution_count": 124,
"id": "4598d9cf",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Unnamed: 0</th>\n",
" <th>carat</th>\n",
" <th>cut</th>\n",
" <th>color</th>\n",
" <th>clarity</th>\n",
" <th>depth</th>\n",
" <th>table</th>\n",
" <th>price</th>\n",
" <th>x</th>\n",
" <th>y</th>\n",
" <th>z</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0.006237</td>\n",
" <td>ideal</td>\n",
" <td>E</td>\n",
" <td>SI2</td>\n",
" <td>0.513889</td>\n",
" <td>0.230769</td>\n",
" <td>0.000000</td>\n",
" <td>0.367784</td>\n",
" <td>0.067572</td>\n",
" <td>0.076415</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>0.002079</td>\n",
" <td>premium</td>\n",
" <td>E</td>\n",
" <td>SI1</td>\n",
" <td>0.466667</td>\n",
" <td>0.346154</td>\n",
" <td>0.000000</td>\n",
" <td>0.362197</td>\n",
" <td>0.065195</td>\n",
" <td>0.072642</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>0.006237</td>\n",
" <td>good</td>\n",
" <td>E</td>\n",
" <td>VS1</td>\n",
" <td>0.386111</td>\n",
" <td>0.423077</td>\n",
" <td>0.000054</td>\n",
" <td>0.377095</td>\n",
" <td>0.069100</td>\n",
" <td>0.072642</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>0.018711</td>\n",
" <td>premium</td>\n",
" <td>I</td>\n",
" <td>VS2</td>\n",
" <td>0.538889</td>\n",
" <td>0.288462</td>\n",
" <td>0.000433</td>\n",
" <td>0.391061</td>\n",
" <td>0.071817</td>\n",
" <td>0.082704</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0.022869</td>\n",
" <td>good</td>\n",
" <td>J</td>\n",
" <td>SI2</td>\n",
" <td>0.563889</td>\n",
" <td>0.288462</td>\n",
" <td>0.000487</td>\n",
" <td>0.404097</td>\n",
" <td>0.073854</td>\n",
" <td>0.086478</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53935</th>\n",
" <td>53936</td>\n",
" <td>0.108108</td>\n",
" <td>ideal</td>\n",
" <td>D</td>\n",
" <td>SI1</td>\n",
" <td>0.494444</td>\n",
" <td>0.269231</td>\n",
" <td>0.131427</td>\n",
" <td>0.535382</td>\n",
" <td>0.097793</td>\n",
" <td>0.110063</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53936</th>\n",
" <td>53937</td>\n",
" <td>0.108108</td>\n",
" <td>good</td>\n",
" <td>D</td>\n",
" <td>SI1</td>\n",
" <td>0.558333</td>\n",
" <td>0.230769</td>\n",
" <td>0.131427</td>\n",
" <td>0.529795</td>\n",
" <td>0.097623</td>\n",
" <td>0.113522</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53937</th>\n",
" <td>53938</td>\n",
" <td>0.103950</td>\n",
" <td>very good</td>\n",
" <td>D</td>\n",
" <td>SI1</td>\n",
" <td>0.550000</td>\n",
" <td>0.326923</td>\n",
" <td>0.131427</td>\n",
" <td>0.527002</td>\n",
" <td>0.096435</td>\n",
" <td>0.111950</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53938</th>\n",
" <td>53939</td>\n",
" <td>0.137214</td>\n",
" <td>premium</td>\n",
" <td>H</td>\n",
" <td>SI2</td>\n",
" <td>0.500000</td>\n",
" <td>0.288462</td>\n",
" <td>0.131427</td>\n",
" <td>0.572626</td>\n",
" <td>0.103905</td>\n",
" <td>0.117610</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53939</th>\n",
" <td>53940</td>\n",
" <td>0.114345</td>\n",
" <td>ideal</td>\n",
" <td>D</td>\n",
" <td>SI2</td>\n",
" <td>0.533333</td>\n",
" <td>0.230769</td>\n",
" <td>0.131427</td>\n",
" <td>0.542831</td>\n",
" <td>0.099660</td>\n",
" <td>0.114465</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>53940 rows × 11 columns</p>\n",
"</div>"
],
"text/plain": [
" Unnamed: 0 carat cut color clarity depth table \\\n",
"0 1 0.006237 ideal E SI2 0.513889 0.230769 \n",
"1 2 0.002079 premium E SI1 0.466667 0.346154 \n",
"2 3 0.006237 good E VS1 0.386111 0.423077 \n",
"3 4 0.018711 premium I VS2 0.538889 0.288462 \n",
"4 5 0.022869 good J SI2 0.563889 0.288462 \n",
"... ... ... ... ... ... ... ... \n",
"53935 53936 0.108108 ideal D SI1 0.494444 0.269231 \n",
"53936 53937 0.108108 good D SI1 0.558333 0.230769 \n",
"53937 53938 0.103950 very good D SI1 0.550000 0.326923 \n",
"53938 53939 0.137214 premium H SI2 0.500000 0.288462 \n",
"53939 53940 0.114345 ideal D SI2 0.533333 0.230769 \n",
"\n",
" price x y z \n",
"0 0.000000 0.367784 0.067572 0.076415 \n",
"1 0.000000 0.362197 0.065195 0.072642 \n",
"2 0.000054 0.377095 0.069100 0.072642 \n",
"3 0.000433 0.391061 0.071817 0.082704 \n",
"4 0.000487 0.404097 0.073854 0.086478 \n",
"... ... ... ... ... \n",
"53935 0.131427 0.535382 0.097793 0.110063 \n",
"53936 0.131427 0.529795 0.097623 0.113522 \n",
"53937 0.131427 0.527002 0.096435 0.111950 \n",
"53938 0.131427 0.572626 0.103905 0.117610 \n",
"53939 0.131427 0.542831 0.099660 0.114465 \n",
"\n",
"[53940 rows x 11 columns]"
]
},
"execution_count": 124,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#normalizacja wartości typu float do zakrsu 0.0 - 1.0\n",
"#Powyżej wykonano jeszcze konwersję danych typu string na lowerCase\n",
"\n",
"from sklearn.preprocessing import MinMaxScaler\n",
"scaler = MinMaxScaler()\n",
"diamonds[['carat', 'depth', 'table', 'price', 'x', 'y', 'z']] = scaler.fit_transform(diamonds[['carat', 'depth', 'table', 'price', 'x', 'y', 'z']])\n",
"\n",
"#wyświetlenie zbioru\n",
"diamonds"
]
},
{
"cell_type": "code",
"execution_count": 96,
"id": "97350bed",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Unnamed: 0</th>\n",
" <th>carat</th>\n",
" <th>cut</th>\n",
" <th>color</th>\n",
" <th>clarity</th>\n",
" <th>depth</th>\n",
" <th>table</th>\n",
" <th>price</th>\n",
" <th>x</th>\n",
" <th>y</th>\n",
" <th>z</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0.23</td>\n",
" <td>Ideal</td>\n",
" <td>E</td>\n",
" <td>SI2</td>\n",
" <td>61.5</td>\n",
" <td>55.0</td>\n",
" <td>326</td>\n",
" <td>3.95</td>\n",
" <td>3.98</td>\n",
" <td>2.43</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>0.21</td>\n",
" <td>Premium</td>\n",
" <td>E</td>\n",
" <td>SI1</td>\n",
" <td>59.8</td>\n",
" <td>61.0</td>\n",
" <td>326</td>\n",
" <td>3.89</td>\n",
" <td>3.84</td>\n",
" <td>2.31</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>0.23</td>\n",
" <td>Good</td>\n",
" <td>E</td>\n",
" <td>VS1</td>\n",
" <td>56.9</td>\n",
" <td>65.0</td>\n",
" <td>327</td>\n",
" <td>4.05</td>\n",
" <td>4.07</td>\n",
" <td>2.31</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>0.29</td>\n",
" <td>Premium</td>\n",
" <td>I</td>\n",
" <td>VS2</td>\n",
" <td>62.4</td>\n",
" <td>58.0</td>\n",
" <td>334</td>\n",
" <td>4.20</td>\n",
" <td>4.23</td>\n",
" <td>2.63</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0.31</td>\n",
" <td>Good</td>\n",
" <td>J</td>\n",
" <td>SI2</td>\n",
" <td>63.3</td>\n",
" <td>58.0</td>\n",
" <td>335</td>\n",
" <td>4.34</td>\n",
" <td>4.35</td>\n",
" <td>2.75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53935</th>\n",
" <td>53936</td>\n",
" <td>0.72</td>\n",
" <td>Ideal</td>\n",
" <td>D</td>\n",
" <td>SI1</td>\n",
" <td>60.8</td>\n",
" <td>57.0</td>\n",
" <td>2757</td>\n",
" <td>5.75</td>\n",
" <td>5.76</td>\n",
" <td>3.50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53936</th>\n",
" <td>53937</td>\n",
" <td>0.72</td>\n",
" <td>Good</td>\n",
" <td>D</td>\n",
" <td>SI1</td>\n",
" <td>63.1</td>\n",
" <td>55.0</td>\n",
" <td>2757</td>\n",
" <td>5.69</td>\n",
" <td>5.75</td>\n",
" <td>3.61</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53937</th>\n",
" <td>53938</td>\n",
" <td>0.70</td>\n",
" <td>Very Good</td>\n",
" <td>D</td>\n",
" <td>SI1</td>\n",
" <td>62.8</td>\n",
" <td>60.0</td>\n",
" <td>2757</td>\n",
" <td>5.66</td>\n",
" <td>5.68</td>\n",
" <td>3.56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53938</th>\n",
" <td>53939</td>\n",
" <td>0.86</td>\n",
" <td>Premium</td>\n",
" <td>H</td>\n",
" <td>SI2</td>\n",
" <td>61.0</td>\n",
" <td>58.0</td>\n",
" <td>2757</td>\n",
" <td>6.15</td>\n",
" <td>6.12</td>\n",
" <td>3.74</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53939</th>\n",
" <td>53940</td>\n",
" <td>0.75</td>\n",
" <td>Ideal</td>\n",
" <td>D</td>\n",
" <td>SI2</td>\n",
" <td>62.2</td>\n",
" <td>55.0</td>\n",
" <td>2757</td>\n",
" <td>5.83</td>\n",
" <td>5.87</td>\n",
" <td>3.64</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>53940 rows × 11 columns</p>\n",
"</div>"
],
"text/plain": [
" Unnamed: 0 carat cut color clarity depth table price x \\\n",
"0 1 0.23 Ideal E SI2 61.5 55.0 326 3.95 \n",
"1 2 0.21 Premium E SI1 59.8 61.0 326 3.89 \n",
"2 3 0.23 Good E VS1 56.9 65.0 327 4.05 \n",
"3 4 0.29 Premium I VS2 62.4 58.0 334 4.20 \n",
"4 5 0.31 Good J SI2 63.3 58.0 335 4.34 \n",
"... ... ... ... ... ... ... ... ... ... \n",
"53935 53936 0.72 Ideal D SI1 60.8 57.0 2757 5.75 \n",
"53936 53937 0.72 Good D SI1 63.1 55.0 2757 5.69 \n",
"53937 53938 0.70 Very Good D SI1 62.8 60.0 2757 5.66 \n",
"53938 53939 0.86 Premium H SI2 61.0 58.0 2757 6.15 \n",
"53939 53940 0.75 Ideal D SI2 62.2 55.0 2757 5.83 \n",
"\n",
" y z \n",
"0 3.98 2.43 \n",
"1 3.84 2.31 \n",
"2 4.07 2.31 \n",
"3 4.23 2.63 \n",
"4 4.35 2.75 \n",
"... ... ... \n",
"53935 5.76 3.50 \n",
"53936 5.75 3.61 \n",
"53937 5.68 3.56 \n",
"53938 6.12 3.74 \n",
"53939 5.87 3.64 \n",
"\n",
"[53940 rows x 11 columns]"
]
},
"execution_count": 96,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Usuwanie artefaktów\n",
"diamonds = diamonds.dropna() ## usuwanie pustych wierszy, które posiadają przynajmniej jedno wystąpienie NULL or NaN\n",
"diamonds"
]
}
],
"metadata": {
"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.11.2"
}
},
"nbformat": 4,
"nbformat_minor": 5
}