Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
2
2021-193 User-friendly enhanced machine learning-based railway management system
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
2021-193
2021-193 User-friendly enhanced machine learning-based railway management system
Commits
b55a9da2
Commit
b55a9da2
authored
Jul 04, 2021
by
Gunasekera P.N.G.-IT18148282
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Upload New File
parent
e6e972d9
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
1036 additions
and
0 deletions
+1036
-0
Untitled.ipynb
Untitled.ipynb
+1036
-0
No files found.
Untitled.ipynb
0 → 100644
View file @
b55a9da2
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "dbfb4db7",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from tqdm.notebook import tqdm\n",
"from collections import Counter\n",
"from sklearn import metrics\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.model_selection import train_test_split"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "7720bae4",
"metadata": {},
"outputs": [],
"source": [
"import warnings\n",
"warnings.filterwarnings('ignore')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "94cca285",
"metadata": {},
"outputs": [],
"source": [
"data = pd.read_csv(\"tourism_data.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "0f87ca58",
"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>age</th>\n",
" <th>gender</th>\n",
" <th>religion</th>\n",
" <th>occupation</th>\n",
" <th>category</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>47</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>14</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>25</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>5</td>\n",
" <td>14</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>45</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>5</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>38</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6180</th>\n",
" <td>32</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6181</th>\n",
" <td>56</td>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>2</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6182</th>\n",
" <td>38</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6183</th>\n",
" <td>16</td>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>10</td>\n",
" <td>11</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6184</th>\n",
" <td>33</td>\n",
" <td>2</td>\n",
" <td>3</td>\n",
" <td>2</td>\n",
" <td>8</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>6185 rows × 5 columns</p>\n",
"</div>"
],
"text/plain": [
" age gender religion occupation category\n",
"0 47 1 1 7 10\n",
"1 14 1 2 2 8\n",
"2 25 1 3 5 14\n",
"3 45 1 1 5 2\n",
"4 38 2 2 2 2\n",
"... ... ... ... ... ...\n",
"6180 32 2 1 7 1\n",
"6181 56 2 4 2 3\n",
"6182 38 2 2 10 2\n",
"6183 16 2 4 10 11\n",
"6184 33 2 3 2 8\n",
"\n",
"[6185 rows x 5 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "ffbea9de",
"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>age</th>\n",
" <th>gender</th>\n",
" <th>religion</th>\n",
" <th>occupation</th>\n",
" <th>category</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Empty DataFrame\n",
"Columns: [age, gender, religion, occupation, category]\n",
"Index: []"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data[pd.isnull(data).any(axis=1)]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "d64554fa",
"metadata": {},
"outputs": [],
"source": [
"Y = data.category.copy()\n",
"X = data.drop(['category'], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "8d35ebb9",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"8 1950\n",
"2 1520\n",
"3 1222\n",
"7 543\n",
"10 268\n",
"1 215\n",
"17 191\n",
"11 179\n",
"15 61\n",
"14 36\n",
"Name: category, dtype: int64"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data['category'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "07b6c39e",
"metadata": {},
"outputs": [],
"source": [
"def pearson(X,Y):\n",
" correlation_matrix = np.corrcoef(X,Y)\n",
" return correlation_matrix[0,1]"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "fb704672",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-0.015417157287237906\n",
"0.1256787471680016\n",
"0.2782683265891767\n",
"0.04253698580839882\n"
]
}
],
"source": [
"print(pearson(X.age, Y))\n",
"print(pearson(X.gender, Y))\n",
"print(pearson(X.religion, Y))\n",
"print(pearson(X.occupation, Y))"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "cfc4ab66",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-0.8607428249918162\n",
"0.23192576665366443\n",
"1.1703138513764377\n",
"0.5227656371411455\n"
]
}
],
"source": [
"print(np.cov(X.age, Y)[0,1])\n",
"print(np.cov(X.gender, Y)[0,1])\n",
"print(np.cov(X.religion, Y)[0,1])\n",
"print(np.cov(X.occupation, Y)[0,1])"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "f8f191a0",
"metadata": {},
"outputs": [],
"source": [
"finalFeaturedDataset = data[['age', 'gender','religion','occupation']]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "328a936d",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.preprocessing import MinMaxScaler\n",
"scaler = MinMaxScaler(feature_range=(0,1)) \n",
"\n",
"#assign scaler to column:\n",
"data = pd.DataFrame(scaler.fit_transform(finalFeaturedDataset), columns=finalFeaturedDataset.columns)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "f20e0cb9",
"metadata": {},
"outputs": [],
"source": [
"X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.20, random_state=123)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "44fb3d60",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"LogisticRegression()"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model = LogisticRegression()\n",
"model.fit(X_train, Y_train)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "49abddb8",
"metadata": {},
"outputs": [],
"source": [
"Y_pred = pd.Series(model.predict(X_test))"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "386de5bd",
"metadata": {},
"outputs": [],
"source": [
"Y_test = Y_test.reset_index(drop=True)\n",
"Z = pd.concat([Y_test, Y_pred], axis = 1)\n",
"Z.columns = ['True', 'Prediction']\n",
"\n",
"acc_log = metrics.accuracy_score(Y_test, Y_pred)\n",
"pre_log = metrics.precision_score(Y_test,Y_pred, average='macro')\n",
"recall_log = metrics.recall_score(Y_test,Y_pred, average='macro')\n",
"f1_log = metrics.f1_score(Y_test,Y_pred, average='macro')"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "4b6e1d29",
"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>True</th>\n",
" <th>Prediction</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>8</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>17</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>8</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>8</td>\n",
" <td>8</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" True Prediction\n",
"0 2 2\n",
"1 8 8\n",
"2 17 2\n",
"3 8 8\n",
"4 8 8"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Z.head()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "bda6a5e1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy: 0.5731608730800324\n",
"Precision: 0.2352443901583099\n",
"Recall: 0.24387526038887497\n",
"f1-score: 0.22617241797446583\n"
]
}
],
"source": [
"print(\"Accuracy:\", metrics.accuracy_score(Y_test, Y_pred))\n",
"print(\"Precision:\", metrics.precision_score(Y_test, Y_pred,average='macro'))\n",
"print(\"Recall:\", metrics.recall_score(Y_test, Y_pred,average='macro'))\n",
"print(\"f1-score:\", metrics.f1_score(Y_test,Y_pred, average='macro'))"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "be13a615",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 15.0, 'Predicted')"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAW4AAAEUCAYAAAALG9woAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA710lEQVR4nO2deZyV4/vH39eZaV+mpl1pNSEhfSWRpKIohLJkiW+JLyFly9Lmm73C1zrKLkRJyp4W9UORpJIiVEr7vs6cuX5/PM+MU2bOnGae58w8p+vt9bzmnGe5P/d9elznPtdz3/dHVBXDMAwjOISKugKGYRjGwWGB2zAMI2BY4DYMwwgYFrgNwzAChgVuwzCMgGGB2zAMI2BY4DYKjYiUEZEPRGSriLxTiHIuF5FPvaxbUSAiH4lIz6Kuh5G4WOA+hBCRHiLyrYjsEJE1boBp7UHR3YAaQBVV7V7QQlT1DVU9y4P67IeItBURFZEJB+w/3t0/PcZyhojI6/mdp6pnq+orBayuYeSLBe5DBBHpDzwOPIATZOsCzwDne1B8PWCpqmZ6UJZfrAdOEZEqEft6Aku9EhAH+3/K8B27yQ4BRCQFGAbcqKoTVHWnqmao6geqert7TikReVxEVrvb4yJSyj3WVkRWicgAEVnn9tavcY8NBQYBl7g9+V4H9kxFpL7bs012318tIstFZLuI/CYil0fsnxVx3SkiMtdNwcwVkVMijk0XkftFZLZbzqciUjXKx7APmAhc6l6fBFwMvHHAZ/WEiKwUkW0i8p2InObu7wTcHdHOHyLqMVxEZgO7gIbuvt7u8WdF5N2I8h8WkakiIrH++xnGgVjgPjRoBZQG3otyzj3AyUAz4HjgJODeiOM1gRSgNtALeFpEKqvqYJxe/NuqWl5Vx0SriIiUA54EzlbVCsApwPxczksFprjnVgFGAlMO6DH3AK4BqgMlgduiaQOvAle5rzsCi4DVB5wzF+czSAXGAu+ISGlV/fiAdh4fcc2VQB+gAvDHAeUNAI5zv5ROw/nseqqtNWEUAgvchwZVgA35pDIuB4ap6jpVXQ8MxQlI2WS4xzNU9UNgB3BkAeuTBTQVkTKqukZVF+VyTmdgmaq+pqqZqvomsAQ4N+Kcl1R1qaruBsbhBNw8UdX/A1JF5EicAP5qLue8rqobXc0RQCnyb+fLqrrIvSbjgPJ2AVfgfPG8DtykqqvyKc8womKB+9BgI1A1O1WRB4exf2/xD3dfThkHBP5dQPmDrYiq7gQuAa4H1ojIFBE5Kob6ZNepdsT7vwpQn9eAvsAZ5PILxE0H/eSmZ7bg/MqIloIBWBntoKrOAZYDgvMFYxiFwgL3ocFXwB6ga5RzVuM8ZMymLv9MI8TKTqBsxPuakQdV9RNVPROohdOLfiGG+mTX6c8C1imb14AbgA/d3nAObirjTpzcd2VVrQRsxQm4AHmlN6KmPUTkRpye+2rgjgLX3DBcLHAfAqjqVpwHiE+LSFcRKSsiJUTkbBF5xD3tTeBeEanmPuQbhPPTviDMB9qISF33wejA7AMiUkNEznNz3XtxUi7hXMr4EGjsDmFMFpFLgCbA5ALWCQBV/Q04HSenfyAVgEycESjJIjIIqBhxfC1Q/2BGjohIY+C/OOmSK4E7RKRZwWpvGA4WuA8RVHUk0B/ngeN6nJ/3fXFGWoATXL4FFgA/AvPcfQXR+gx42y3rO/YPtiGcB3argU04QfSGXMrYCHRxz92I01PtoqobClKnA8qepaq5/Zr4BPgIZ4jgHzi/UiLTINmTizaKyLz8dNzU1OvAw6r6g6ouwxmZ8lr2iB3DKAhiD7cNwzCChfW4DcMwAoYFbsMwjIBhgdswDCNgWOA2DMMIGBa4DcMwAoYFbsMXRCQsIvNFZKGIvCMiZfO/Ks+yXhaRbu7r0SLSJMq5bSMXozoIjd/zWaTKMIoNFrgNv9itqs1UtSnOynzXRx50V+c7aFS1t6oujnJKW5yFqwwjYbHAbcSDL4Ej3N7wNBEZC/woIkki8qi7ZOsCEbkOcta1fkpEFovIFJzV/3CPTReRE93XnURknoj84C6VWh/nC+JWt7d/mjsTdLyrMVdETnWvreIuBfu9iDzP39PaDaPYE23RIcMoNO7swbOBj91dJwFNVfU3EekDbFXVFu5MwtniWJedgLMi37E4pg+LgRcPKLcazhonbdyyUlV1k4g8B+xQ1cfc88YCo1R1lojUxZkdeTQwGJilqsNEpDPOsqyGEQgscBt+UUZE5ruvvwTG4KQw5rjrhQCchbNWdTf3fQqQBrQB3lTVMLBaRL7IpfyTgZnZZanqpjzq0QFoEuFbUFFEKrgaF7rXThGRzQVrpmHEHwvchl/sVtVmkTvc4LkzchfO+tSfHHDeOeSz4p57bSzrNYSAVu6a3QfWxdZ7MAKJ5biNouQT4D8iUgKclfTcVQNnApe6OfBaOGtnH8hXwOki0sC9NtXdvx1nlb9sPsVZTAv3vGbuy5k45hGIyNlAZa8aZRh+Y4HbKEpG4+Sv54nIQuB5nF+B7wHLcFYpfBaYceCFrktPH2CCOP6Pb7uHPgAuyH44CdwMnOg+/FzM36NbhuIsPTsPJ2Wzwqc2Gobn2OqAhmEYAcN63IZhGAHDArdhGEbAKMajSpbGJYezdd/yeMgAkFKyYdy0DOPQonGhJ1CVqXtZzDFn94o3i3TClvW4DcMwAkYx7nEbhmHEj4PwgC5yLHAbhmEAIQlOOAxOTQ3DMHzEetyGYRgBI2I9m2KPBW7DMAwgSGM1glPTfJg58zs6dryeM8/sQ3r6O56WvXdvBldfNoIeFz3MJV0fJP3pD3OOvf3GTLqdO5xLuj7IkyPf91QX/G1XUeiYVrC0ErFNeSESinkrahKixx0Ohxk27Dleeul+atSoQrdu/WnXriVHHFHXk/JLlkzmmTF9KVu2FJkZYa7t+QStWjdh794MZk77kbHj76RkyWQ2bdzuiV42frcr3jqmFSytRGxTNIpDQI4V32oqIkeJyJ0i8qSIPOG+PtoPrQULllGvXi0OP7wmJUuWoHPnNkyd+o1n5YsIZcuWAiAzM0xmZhgRGP/2LHr26kDJks73X2qVCtGKOWj8ble8dUwrWFqJ2KZohCQ55q2o8SVwi8idwFs4aybPAea6r98Ukbu81lu7diM1a/7t81qjRhXWrt3oqUY4nMXl3R6h4+n3cNLJR9L0uPqs+GM98+f9yjU9RnLd1U+yeOEfnmrGo13x1DGtYGklYpuiEaRUiV816AW0UNWHVPV1d3sIx7aqV14XiUgfEflWRL5NT387r9P+QW4rHHr9hDgpKcQb797B5M+HsnjhH/y6bDXhcJht23bz4hu3cvOA8xl428u51qWgxKNd8dQxrWBpJWKbohGkwO1Xnz8LOAw4sAtayz2WK6qaDqQ772Jfq6Rmzar89deGnPdr126kevXUKFcUnAoVy9K8xRF8NXsJ1WtU4owOxyEiHHNsPUIibNm8k8qp5T3Rile74vn5mVZwtBKxTdGQAPlF+/XV0Q+YKiIfiUi6u30MTAVu8Vrs2GPT+P331axc+Rf79mUwZcpM2rU7ybPyN2/awfZtuwDYs2cfc75eSr0G1Tm93bF8+80yAP74fR0ZGWEqVS7nma7f7Yq3jmkFSysR2xSNQ77Hraofi0hjnNRIbZz89ipgrmsA6ynJyUkMGnQ9vXsPJhzO4qKLOpCWVs+z8jes38rQe98gK5xFliodzjqB005vSkZGJvffN5ZLL3iQEiWSGTz8ck9/3vndrnjrmFawtBKxTdEIhYr+oWOsFGMHHFvW1TCMWCn8sq41mwyMOeb8tfjBIs2rBOcrxjAMw0eKQwokVixwG4ZhYIHbMAwjcEiAVgCxwG0YhkGwetzBqalhGIaPhEJJMW/REJHSIjJHRH4QkUUiMtTdnyoin4nIMvdv5YhrBorILyLys4h0zLeuhW6tYRhGAiCEYt7yYS/QTlWPB5oBnUTkZOAuYKqqpuHMabkLQESaAJcCxwCdgGdEJOq3wyGfKjk+vUzctBZd/1fctEqFUuKmtXrXirhp1S1/ZFx0sjQzLjoQLMusRMarVIk6Y6x3uG9LuJsC5wNt3f2vANOBO939b6nqXuA3EfkFZw7MV3lpWI/bMAyDg5s5Gbmukrv12b8sSRKR+cA64DNV/QaooaprANy/1d3TawMrIy5f5e7LE/uqNwzD4OBGley/rlKux8NAMxGpBLwnIk2jSudSRDR9C9yGYRiA+DDlXVW3iMh0nNz1WhGppaprRKQWTm8cnB724RGX1QFWRyvXUiWGYRg4y8jGuuVTTjW3p42IlAE6AEuASUBP97SeQLbX4STgUhEpJSINgDQcH4M8sR63YRgGnk7AqQW84o4MCQHjVHWyiHwFjBORXsAKoDuAqi4SkXHAYiATuDG/xfgscBuGYeDpqJIFwAm57N8ItM/jmuHA8Fg1EiZwz5z5HcOHv0BWVhbdu59Jnz7dC1VerfKlGNnhKKqVLUGWwpuL1vDSgj9JKZXMUx2bUKdiKVZt28uNnyxm295Mzm9cnetO+DtNdVTVcnR5+zsWb9h5ULp/rdnEoIEvsmHjVkIiXNi9DT2u7MBzT0/ivXe/pHJlx6Shb78Lad3m2EK18d57nmHG9Hmkpqbw/gcjANiyZQe39R/Fn3+up3btaowYdSspKYU3hriiy3DKlC1FKClEUlKIZ17vx6vPf8KH731Ditumf994Ni1be2tL6vV9kR/hcJju3W6nevVUnnv+Xt904tWueH5+8f63+gdxdtwpDAkRuP1wiM7MUv47+1cWrd9BuRJJfHBJc75cuZluR9fk/1Zt5tl5K/lP88O5ofnhPPTVb7y/dB3vL3WeNRxZpRwvnHPMQQdtgKTkELfe0Z2jm9Rj5849XN79fk5u1QSAy6/qwFXX5DupKma6dm1Ljx6dGHjX0zn7Rr8wkZatjuXaa7vywgsTGf3CRAbcdoUneo89/x9SDjCauKhHG7pf1daT8g+kKJzDX3t1Mg0b1mHHjl2+aZjLu08E6IlfgKqaN344RK/ftY9F650x9Dszwvy6aRc1y5fizAZVeHfJWgDeXbKWMxtW/ce156VVZ9Kydf/YHwvVqlXi6CbOAvLlypWmQcNarFu3pWCNyIcTWzQhpdL+velpX8yl6/mnA9D1/NP5YupcX7TjQbydw//6awMzZnxHt+4dfNMAc3n3jVAo9q2IiXsNROQar8v02yG6ToVSNKlWnvl/baNa2ZKs37UPcIJ71TIl/nF+l7RqTFpasMAdyeo/N/DzTytpelwDAN4eO42LLxjCkHtfZtvWg+/Nx8LGjVupVt1ZQqFa9cps2rTNk3JF4K4b07nh8lFMmfB1zv73x82mzyUjeGzo2zn2cF4Rb+fwBx94kdtu60nI58WKzOXdJ0IHsRUxRVGFoXkdKI4u72VLhHj27GMY9uWv7MjI33WtWY0K7M4Ms3RT4YLQrp17uK3fswy46xLKly9D90vaMunjB3hr/CCqVkth5KPvFKr8eDPqxb48O/ZWhv+vN5PGzWbBvF85t9spvPL+QJ5781ZSq1bk+VEfeKoZT+fwadPmklolhWOaNvKl/EjM5d0fVCTmrajxJcctIgvyOgTUyOu64ubynhwSnjv7GCYuXccny53y1+/al9Prrla2JBt2Z+x3zblp1Zm0dH2hdDMyMrmt37Oc07kl7c9sDkCVqhVzjl/Y7TRuueF/hdLIiypVUli/bjPVqldm/brNpKZWzP+iGKhazVk7pXJqBU49oyk/L1zJcc3/DnLnXNCS+/qN8UQrm3g6h38/bwnTvpjLzBnfsW9fBjt27OKO20fxyKO3eq5lLu8+UfTxOGb86nHXAK4Czs1l8/z3j18O0Q+3a8wvm3YxZv6qnH2f/7aRbkc53z3djqrBZ7/93RwBzjmiGh8UML8NTs9j2KBXaNCwFldcfVbO/vXrt+S8/uLz72mUFnUpgwJzRrsTmfj+DAAmvj+DM9q1KHSZu3fvZdfOPTmvv/t6KfWPqMnG9X+nYWZPW0j9RrUKrRVJPJ3D+w+4kukzRjP1i3RGjBhAy5bH+hK0wVzefSMksW9FjF+jSiYD5VV1/oEH3OmfnuKHQ/SJtSpy0VE1+WnDDj685F8APPL1bzw7bwVPd2zCxU1qsnr7Xm74eHHONS1rp/DXjr2s3LanwLrz5/3ClElfc0Tj2lx6oZNV6tvvQj7+cA5Ll6wEgcMOq8o9Qwo/0uO2AY8zd85itmzZTru213Nj34vp3bsr/fuPYsK7X1DrsKqMHNW/0DpbNu5gyG0vAxAOZ3FGpxNoccpRPHTfWH79eTUiQo3DKtPv7m6F1oqkODiH+4G5vPtEMUiBxMoh7/Je/6k18ZABYNH18bsxbFnXwmHLugaNwru8p3UYHXPMWfZ5b3N5NwzDKHIC1OO2wG0YhgGBejhpgdswDAOKxUPHWLHAbRiGAdbjNgzDCBqaVAymRMbIIR+4f+9bi7AWfPjewXDJtC1x0QF4t138TJB3ZAaoqxIjNtLjECRAt/Ehf3fGK2gbhlHMsVElhmEYAcMeThqGYQSM4MRtC9yGYRiApUoMwzACR5IFbsMwjGBhPW7DMIyAEZy4nTiBO54O0a+9OoV33pmKqtK9eweu6tm5UOWtevVltv24gOQKFWg8yFnKde3kSWya9SXJFRxPyBrnX0jFpseyb+MGlg4dRKkazprgZRs0pHaPKwvXIPz//HZu383Tw8exYvkaEKHvvZdQqlRJnnv4Xfbs3kv1WqncOvRyypYv7aluorqUm8u796iNKokv8XSIXrZ0Be+8M5W3xz1IiRLJ9Ll2OG1Ob079+gU3Aajc6hSqtD2DlS+/uN/+qu07UO3Mf7q6l6xajbR7BhdY70Di8fmNHjmRE1odyR0P9SQjI5N9ezIYctPz9Lz5XJo2b8Tnk75h4uvT6HH92Z5pJqpLubm8+4RHqRIRORx4FagJZAHpqvqEiAwBrgWyLbLuVtUP3WsGAr2AMHCzqn4STcO3OZ4icpSItBeR8gfs7+S1Vjwdon9d/ifHH59GmTKlSE5OokWLJkz9fE6hyiyX1pikcuU8quHB4/fnt2vHHhZ/v5wO57UEoESJZMpVKMOff6zjmBMaAtCsZWO+mvajZ5qQuC7l5vLuE3IQW3QygQGqejRwMnCjiDRxj41S1Wbulh20mwCXAscAnYBnRCQpmoAvgVtEbgbeB24CForI+RGHH/BaL54O0Wlph/Pt3J/Ysnk7u3fvZeaMeaxZsyH/CwvAxunTWPbfIax69WXCO/92dd+3cQPLhg9j+chH2blsaaF1/P781q7eSMXK5fjf/W/R/8oRPD38bfbs3kvdRjWZM3MRALOnLmDDui2eaULiupSby7tPJIVi36KgqmtUdZ77ejvwExDNa/B84C1V3auqvwG/AFF92/zqcV8L/EtVuwJtgftE5Bb3WJ7fV8XR5f1AGjWqQ+9rz6dXr/vpc+1wjjyqPsnJUb8cC0Rqm7Ycef8DHHH3IJJTUlgz3nF1T66YwlHDHybtnkHUuuhiVr40mvDu3YXS8vvzC4ezWP7zn3S68BRGvjaAUqVLMeGVL+h77yV89O5sBlw1ij279nj+OSaqS7m5vPuEdz3uv4sUqQ+cAGT/fOgrIgtE5EURqezuqw2sjLhsFdEDvW+BO0lVdwCo6u84wftsERlJlGararqqnqiqJ/bpc0nMYvF2iL6oW3vGT3iE114fRkpKeerV89bkFqBExYpIKISEQqS2Po1dv/8GQKhECZLLO9mnMvXqUbJqNfauW1soLb8/vyrVU6hSPYXGTR0PwVPaHcfyn/+kTv0aDPnfdYx49VZan9WcmnWqeKYJietSbi7vPnEQZsGRnUx363NgcW6aeDzQT1W3Ac8CjYBmwBpgRPapudQmqo2aX4H7LxFpllMDJ4h3AaoCx3otFm+H6I0btwKwevV6Pv/sG87pfKrnGhlbt+S83jb/e0of5nwBZ27fjmZlAbBv/Xr2rltHyarVCqXl9+dXuUpFqlavxJ9/rANgwbfLqNOgBls2bQcgKyuLd1/8jI4XtPJMExLXpdxc3n3iIAJ3ZCfT3dIjixKREjhB+w1VnQCgqmtVNayqWcAL/J0OWQUcHnF5HWB1tKr6NarkKpwEfQ6qmglcJSLPey0Wb4foW25+jC1btlMiOZl7B/UmJaV8/hdFYcWYdHYuXUrmjh38NPB2anQ5j51Ll7J71UpEoERqVWpf7ri671y2lLWT30dCSRAKUbvHFSQX8sFmPD6/a2+7gFGD3iAzM0yNw1K56b5Lmfbht3z07mwATj7jWNqf6+3/qInqUm4u7/6gHmVmxMnxjAF+UtWREftrqWq2O/kFwEL39SRgrJuROAxIA6KOeDjkXd7juaxrfNfjrhk3rcVbCv+ANFaaVGocNy0jSBTe5b3hdeNjjjnLn78o2rO61sCXwI84wwEB7gYuw0mTKPA7cF12IBeRe4B/43R4+6nqR9H0E2Ict2EYRqHxaAKOqs4i97z1h1GuGQ4Mj1XDArdhGAb4OKvFeyxwG4ZhgC0yZRiGEThsrRLDMIxgodbjDg4ZWTvzP8kjXjxtb9y0lHDctKqWzsr/JMMo7iRb4DYMwwgW1uM2DMMIGJbjNgzDCBjBidsWuA3DMMAccAzDMIKHBW7DMIyAkWSBO+74aTT615qN3DPwBTZu2IqI0O3itlx+5Vls3bKDOwY8y+o/N3BY7ao8OvIGKqYUbqW+vXsz6NPzcTL2ZZIZDtP+zBO4rm9nnv3fZGZ+sQAJCampFRg8/AqqVa/kSfv27t3HFZffw759GYTDYc7qeAo333yZJ2VHEg5nce1lT1C1egqPPPVvBt/+OivcpV53bN9D+QqleWlcf08142VAO3DgE0yfPpcqVVKYPPlpXzQiMbNgHwjQqJKEWB0wHA7TseP1+xmNjhx5e0xGo3vC+dsjrV+/hQ3rt3B0k/rs3LmbS7sN4fH/3cykibOomFKOXtd2YcwLk9m2bRe3Drg4z3L2Ze3IV0tV2b17H2XLliIzI0zvq0Yy4K5uNGhUk/LlywDw1uvT+e3XNQwcnHdwrVCiTr5akZq7du2hXLkyZGRkcnmPgdx9T2+aNTsypuvX71kW03lvvTqDnxevYueOvTzy1L/3O/bUYx9Qrnxprrn+zKhlVC99VExaULj74mCZO3chZcuW5s47R/keuOPVrnh+foXXKvzqgPWHfhJzzPl9cMcijfIBWlYlb/w2Gq1WrRJHN6kPQLlyZWjY8DDWrdvMtC++57yurQE4r2trpk2dV2gtEaFs2VIAZGaGycwMIyI5QRtg9+69nto6iQjlypX5h6aXrFu7ha++XEKXC1r+45iqMu3TH+hwdjNPNeNpQNuiRVNSUir4UvaBmFmwTxyEkUJR46fL+0ki0sJ93URE+ovIOX5oxdNo9M8/17Pkpz849rhGbNq4lWrVKgFOcN+0aZsnGuFwFj0uepCz2txFy1ZH0fS4+gA888QkOre/l4+nfMt1fTt7ovW3Zpiu5/fj1FN6csopx3P88d6ue/3kI5O44dbOhHK56X+Y9xuVq1Tg8HqFc/I5kGJhQOsDZhbsDyoS81bU+OXyPhh4EnhWRB4EngLKA3e5C4bndV2xNgvetXMPA255itsH9tivB+w1SUkhxo4fyJSp/2XRj3/wyzLHxeiGW85jytT/0qnziYwbO9NjzSQmvv8402eMZsGCZSxd+odnZc+esZjKqeU5sknu6ZvPP/qeDp2aeaaXTbEwoPUBMwv2iSSJfSti/OpxdwNOBdoANwJdVXUY0BHI0wW4OJsFZ2Rk0r/fU5zTpRUdzjwRgNQqKaxfvwVw8uCpqRU91axQsSz/apHGV7MW77e/U+cWfPH5fE+1sqlYsTwntWzKl19+71mZP87/ndnTF9P97AcYcufrzJv7C8MGjgWc1MzMqQtp1+l4z/SyKRYGtD5gZsE+YakSMl1TzF3Ar67DMaq6m7+tfDzDb6NRVWXIfS/SsGEtrrq6U87+tmc0Y9LEWQBMmjiLM9qdUGitzZu2s33bLgD27NnHnK9/pn6DGjmjLwBmTltA/QY1Cq2VzaZNW9m2bYeruZev/u8HGjas7Vn5199yDhM+u5d3PrqbIQ9fQfMWRzDowR4AfPfNMuo2qE71GpU808umWBjQ+oCZBftEgAK3X8MB94lIWTdw/yt7p4ik4EPg9tto9Pt5y5g86f9Ia1yHiy+4D4Cb+nXj39d24fZbn2bi+C+pWSuVx0bdWGitDeu3MeSe18gKZ5GlSoeOzTmt7bHc0e8F/vh9HSERah6WysBBlxZaK5v16zZz111PEA5noap06nQqZ5zRwrPyo/H5x/N9SZNAfA1o+/d/lDlzfmTz5m20aXM1N93Ug+7dz/JFy8yCfaLo43HM+DIcUERKqeo/1jAVkapALVX9Mf9S4mMWHMtwQK+IZTigVxzMcMDCEutwQC84mOGAxqFE4YcD1h05LeaYs6L/GUUa5n3pcecWtN39G4ANuR0zDMMoUgL04DphZk4ahmEUimIwWiRWLHAbhmEAoQBNR7TAbRiGQaAyJYkx5d0wDKOwiMS+RS9HDheRaSLyk4gsEpFb3P2pIvKZiCxz/1aOuGagiPwiIj+LSMf86mqB2zAMA2emZqxbPmQCA1T1aOBk4EYRaQLcBUxV1TRgqvse99ilwDFAJ+AZEUmKJmCpkjiSpRlx0xKi/rt7Sr3Gb8ZNa/eKoXHTMg4tvMpxq+oaYI37eruI/ATUBs4H2rqnvQJMB+5097/ljsb7TUR+AU4Cvsqzrt5U1TAMI9hI6CC2iHWV3K1PrmWK1AdOAL4BarhBPTu4V3dPqw2sjLhslbsvT6zHbRiGwcE9nFTVdCA9enlSHhgP9FPVbVFSLLkdiDoZyAK3YRgG3i5BIiIlcIL2G6o6wd29VkRqqeoaEakFZC9AtAo4POLyOsDqqHX1rqqGYRjBxcNRJQKMAX5S1ZERhyYBPd3XPYH3I/ZfKiKlRKQBkAbMiaZhPW7DMAw8Hcd9KnAl8KOIzHf33Q08BIwTkV7ACqA7gKouEpFxwGKcESk3qmo4moAFbsMwDCDk0ZR3VZ1F3msNts/jmuHA8Fg1EiZwJ5LL+/VXP8W+fZmEw2HanXk8fW48m6VL/uSh+99h394MkpJC3HFvN4451rtlL73+/EqVKsHn7wyiZMkSJCcn8d6H3/Dfke8yaEB3upx1IllZWazfuI0+A55jzdrN1K1TlflfjGDpr05qb873v3Dz3WOKXbsONa1EbFNeBGnmZEIE7nA4zLBhz+3nEN2uXUvP3KiTkpO47Y5L93N5P7nVMUyaOIuTTj46x+V9zOgpUV3eY6FkyWSeHnNDjst7n55P0qr10aQ//RG9r+/IKacdzeyZi3lq5Ac8+1JfT9rnx+e3d28GnS79Lzt37SU5OYkvxg/h02nzGfX8ZIaNeAeAG67pyMBbLswJ0Mv/WMvJZw/0pE3g/32R6FqJ2KZoBClwx+3hpIi86lfZh4LLu4iwc+ceAHbs2EPVaimF1srGr89v5y5ndd8SyUkkJyehqmzfsTvneNmypXP1GvSKRHUpN5d3f/Dq4WQ88KXHLSKTDtwFnCEilQBU9Twv9XJziF6wYKmXEjnEy+W95yUjWLViA90ubU3T4+px650XcMt1z/HkY5NQVV547WZPtMC/zy8UEv5vygM0ql+T51/9lLnzfwVgyO0Xc/lFbdi6fRedLrk/5/z6h1fjqw8fZPuO3Qx97G1mz/m5UPrxvC8SUSsR2xSNYuBIFjN+9bjrANuAkcAId9se8TpXzOXdISkpxOvv3s4Hnw9h0cIV/LpsDRPenk2/O7ryweeD6Xf7+Qwf9JZnen59fllZyslnD+SIljdy4vGNaNLYceUZ8ug40k7uy1sTZ3P91c56On+t20Ljk2+i1TkDufP+13j5yZuoUMjPOFFdys3l3R+C1OP2K3CfCHwH3ANsVdXpwG5VnaGqM/K6yFze96dCxTL8q0Ujvpq9hCmT5nJGh+MAaN+xGYsWrvBMx+/Pb+u2Xcz8+ifOaru/k/u4ibPperZjCLtvXyabtjjWbt//+BvL/1hLWsNahdJNVJdyc3n3h1CSxLwVNfkGbnG4QkQGue/rikhU+2VVzVLVUcA1wD0i8hQ+PghNLJf3HWzf5uSBHZf3pdRvUJ1q1Soy71sn1fDtN8s4vG61Qmtl48fnVzW1AikVywJQulQJ2rVuys+/rqZR/Zo553Q+8185o0iqplYg5P5WrV+3Okc0qMlvf6wtVB0S1aXcXN79IUg97liC6TM4zuztgGE4KY/xQL424Kq6CuguIp1xUie+kGgu78PuHZvj8t7+rGa0Pv0Yylcow8iH3iMczqJUqWQGDi7c6JVI/Pj8alavzAsj/0NSUohQSBg/+Ws+mvo9bz7Xj7RGh5GVpaz4cz03D3RGlLRueTT3DehOZmaYcDiLm+4ew+atO4tduw4lrURsUzSKQ0COlXxd3kVknqo2F5HvVfUEd98Pqnp81AsLTeK5vO8Jb46bVqWSR8RNq0zdwXHTsmVdjdwpvMv7yeNnxRxzvr6odbF3ec9wF/VWABGphtMDNwzDSBiCNKoklsD9JPAeUF1EhgPdgHt9rZVhGEacCcXPe6TQ5Bu4VfUNEfkOZ469AF1V9Sffa2YYhhFHgpTjzjdwi0hdYBfwQeQ+VfVuPJphGEYRE+9x44UhllTJFJz8tgClgQbAzzjGloZhGAlBgOJ2TKmSYyPfi0hz4DrfamQYhlEEJFTgPhBVnSci+Y7hDgprd2/I/ySPqFf+yLhpxZNEHKKXpZlx0wpJQizSGXgSKnCLSP+ItyGgObDetxoZhmEUAckBMnKM5au+QsTrTJyc93h/qmMYhlE0hCQuc/48IWrgdifelFfV2+NUH8MwjCIhISbgiEiyqma6DyMNwzASmgBlSqL2uOfg5LPnu8YI7wA5q/6o6gSf62YYhhE3EiZV4pIKbMRZHTB7PLcCFrgNw0gYEiJVgrM2SX9gIX8H7GyK3VeT3w7RV3YZTpmypQglhUhKCvH06/0YftdrrPzDGWCzc/tuylUow3Nv9s+npIPD3LyDo9W+XR/KlStDUlKIpKQk3h3/mG9adl94T3KCBO4koDz7B+xsilXgjpdD9KPP/4eUyuVy3t/z0JU5r58fOYly5Ut7qmdu3sHRyuaVV++ncmVvnZAOxO4LfxAPUyUi8iLQBVinqk3dfUOAa/l7OPXdqvqhe2wg0AsIAzer6ifRyo+Wj1+jqsNUdWgu27CDbERrEekvImcdzHWxUtQO0arKjM9/4IxOhXfAicTcvIOjFU/svvCHkMS+xcDLQKdc9o9S1Wbulh20mwCX4iwj0gl4xh3Rl3ddoxwr8A8HEZkT8fpa4Cmc8eCDReSugpabF7k5RK9d67FBgsDAG9O54fJRTJnw9X6Hfvx+OZVTK1DbQzsxiFO74qiTyFrgLFLUq9dQLrpwAOPe/tQ3Hbsv/CF0EFt+qOpMYFOM0ucDb6nqXlX9DfgFiOrbFi1V0j5G0dwoEfG6D3Cmqq4XkceAr4GHcrtIRPq45/P888OI1TA4Hg7Rj7/YlyrVUti8aTsDb0jn8PrVOK55IwCmfzyfMzo281QPzM07SFoAY8c+SPUaqWzcuIVe/x5Kg4a1adHC+7XY7L7wh4MZVRIZq1zSVTU9hkv7ishVwLfAAFXdDNTGiYvZrHL35V3XvA6oaqzfFrmWKyKVRaQKjj3aerfMnTizL/PSLLYu71WqpQBQObUCp5zRlJ8XrgQgnBlm1rQfOf2sZp7qgbl5B0kLoHoNp+wqVSrRoUNLflywzBcduy/8IVli3yJjlbvFErSfBRoBzYA1wAh3/0E/R/RrzHkK8B3Ot0qqiNQEEJG8HnYWCr8donfv3suunXtyXs/7ein1j3DcyufNWcbh9atTrUYlz/SyMTfv4Gjt2rWHnTt257yePXs+aY39ebBm94U/eJzj/gequlZVw6qaBbzA3+mQVcDhEafWAVZHK8uXZclUtX4eh7KAC7zW89shesvGHQy97WUAwuEszuh0Ai1OOQqA6Z/4kyYBc/MOktbGjVu4qe/DAGSGw3TpchqnnebPpGO7L/zB7wk4IlJLVde4by/AGWoNMAkYKyIjgcOANJwJkHmXlZ/Le9ERH5f3P3b8HA8ZIHGXdU1EbFnXoFF4l/fes6bHHHNGt24bVU9E3gTaAlWBtcBg930znDTI78B12YFcRO4B/o2TSu6nqh9FK9/uGMMwDLzNG6vqZbnsHhPl/OHA8FjLt8BtGIZB4q1VYhiGkfAkmpGCYRhGwhOguG2B2zAMAyxVEijqlT+Srft+K+pqGMUMzXuemA8c8v8bFgsSZVnXQwIL2oZhgKVKDMMwAof1uA3DMAJGUshy3IZhGIHCUiWGYRgBw0aVGIZhBAzLcRuGYQSMIAXuIKV1ojJz5nd07Hg9Z57Zh/T0dzwte+/eDK6+7DF6XPQQl3R9gPSnPwQg/ZkP6dz+Pi7v9jCXd3uY2TMXeaoL/rarKHQSWeu1V6dw3rn9ObfLrbz6yhRftey+8J4SojFvRU1C9Lj9doguWTKZZ8bcRNmypcjMCHNtz8dp1fpoAC67si1XXF0Yl7e8MTfv4GgtW7qCd96ZytvjHqREiWT6XDucNqc3p379Wp5r2X3hD4d8j1tEWopIRfd1GREZKiIfiMjDIpLitZ7fDtEiQtmypQDIzAyTmRmOix+euXkHR+vX5X9y/PFplClTiuTkJFq0aMLUz6OuhV9g7L7wB78dcDytq0/lvgjscl8/gWNl9rC77yWvxeLhEB0OZ3F5t4fpePrdnHTykTQ9rj4A77z5JT0ufIj773uDbVt3RS/kIDE37+BopaUdzrdzf2LL5u3s3r2XmTPmsWbNhvwvLAB2X/hDksS+FTV+Be6Qao6FyImq2k9VZ6nqUKBhXheJSB8R+VZEvk1PfztmsXg4RCclhXjj3TuZ/PkwFi/8g1+Xreaii1sz4cNBvP7uHVSplsITj73nqaa5eQdHq1GjOvS+9nx69bqfPtcO58ij6pOcnOSLlt0X/mA9blgoIte4r38QkRMBRKQxkJHXRcXZ5T2bChXL0rxFGl/N/okqVSuSlBQiFArR9aJWLFq4wlMtc/MOjhbARd3aM37CI7z2+jBSUspTr573+W2w+8IvQqIxb0WNX4G7N3C6iPwKNAG+EpHlOM7Gvb0W89shevOm7Wzf5qRB9uzZx5yvf6ZegxpsWL8155zpUxfQ6Ahv/0c1N+/gaAFs3OjcD6tXr+fzz77hnM6n+qJj94U/lJDYt6LGL5f3rcDVIlIBJzWSDKxS1bV+6PntEL1h/TaG3vs6WWElS5UOZzXjtNObMnjgqyxd8iciQq3aqQwcFPuvhFgwN+/gaAHccvNjbNmynRLJydw7qDcpKeV90bH7wh+KQwokVg55l/d4LuuaUrJB3LSMwhHWPXHTSpLScdNKXArv8p6+5JOYY06fozoWaZhPiHHchmEYhaU4jBaJFQvchmEYBCtVYoHbMAyDYLm8B6iqhmEY/pEkGvOWHyLyooisE5GFEftSReQzEVnm/q0ccWygiPwiIj+LSMf8yrfAbRiGgRMMY91i4GWg0wH77gKmqmoaMNV9j4g0AS4FjnGveUZEos7eOuRTJRVKHF7UVTCKITbS49DDyxy3qs4UkfoH7D4faOu+fgWYDtzp7n9LVfcCv4nIL8BJwFd51tW7qhqGYQSXg5nyHrk8h7v1iUGihqquAXD/Vnf31wZWRpy3yt2XJ4d8j9swDAOIKXedjaqmA+keSefW149aGQvchmEYxGVUyVoRqaWqa0SkFrDO3b8KiMzZ1gFWRyvIUiWGYRjEZXXASUBP93VP4P2I/ZeKSCkRaQCkAVEXc7cet2EYBt7OnBSRN3EeRFYVkVXAYOAhYJyI9AJWAN0BVHWRiIwDFgOZwI2qGo5WvgVuwzAM8HS5VlW9LI9DufocqupwYHis5SdMqiSeRqPt2/XhvHNv4YKut9Ltott81YpXuwYOfIJWra6gS5cbfdPIJlENaBNRKxHblBcej+P2leJQh0KTbTQ6evQQpkx5msmTZ/LLL96aGhzIK6/ez3sTR/Hu+Md804hnuy68sD2jRw/xpexI4tkm0wqGTry18sIccOJMcTAa9YN4tqtFi6akpFTwpexIEtWANhG1ErFN0SgR0pi3osYvl/ebRSRuUxLjbTQqIvTqNZSLLhzAuLc/9U2nOBioek2iGtAmolYitika1uOG+4FvRORLEblBRKrFclFxNguOZOzYB5kwYQTpL9zH2LEfMXfuIl90ioOBqtckqgFtImolYpuiYYEbluMMIr8f+BewWEQ+FpGerp1ZrgTBLBigeg2n7CpVKtGhQ0t+XLDMF53iYKDqNYlqQJuIWonYpmjYw0lQVc1S1U9VtRdwGPAMzspXy70Wi6fR6K5de9i5Y3fO69mz55PWuK4vWsXBQNVrEtWANhG1ErFN0RCJfStq/BrHvV/TVDUDZ3bQJBEp47VYPI1GN27cwk19HwYgMxymS5fTOO205r5oxbNd/fs/ypw5P7J58zbatLmam27qQffuZ3muk6gGtImolYhtikZxSIHEii9mwSLSWFWXFq6U+JgFZ2lmPGQACInNdzIMfyi8WfC8DVNijjnNq3ZOPLPgwgdtwzCM+CIezpz0G+sCGoZhkPvaqsUVC9yGYRgUj4eOsWKB2zAMA+txG4ZhBA4vl3X1GwvchmEYWKokUIR1b9y0bDigYRRfAhS3LXAbhmGABW7DMIzAEaSZkxa4DcMwsB63YRhG4PDSc9JvLHAbhmFgo0oMwzACR3FYZztWglTXqPjpEH3vPc/R5tQ+dD33b0f3xx59nXPP6c8F59/BzX1HsG3bTk81szE3b9MqSq1EbFNeBGk97oQI3H47RHftejrPpQ/cb1+rU47lvUmP8t77j1C/fk1Gp0/0TC8bc/M2raLUSsQ2RUMOYsu3LJHfReRHEZkvIt+6+1JF5DMRWeb+rVzQuvplFlxSRK4SkQ7u+x4i8pSI3CgiJbzW89sh+sQWR5NSqdx++0499XiSk5MAOO74NNau3eSZXjbm5m1aRamViG2Khg+ek2eoajNVPdF9fxcwVVXTgKnu+4LVtaAX5sNLQGfgFhF5DegOfAO0AEZ7LVbUDtHvTZhO69OaeV6uuXmbVlFqJWKbohEHs+DzgVfc168AXQtc1wJXITrHquolwAXAWUA3VX0NuAY4Ia+LguLyHsnzz71HUlISXc5t7XnZ5uZtWkWplYhtisbBpEoiY5W79TmgOAU+FZHvIo7VUNU1AO7f6gWtq1+jSkIiUhIoB5QFUoBNQCkgz1SJqqYD6c672K3Lisoh+v2JM5g5fR6jX7rXl5vM3LxNqyi1ErFN0TgYB5z9Y1WunKqqq0WkOvCZiCwpbP0i8avHPQZYAswH7gHeEZEXgLnAW16LFYVD9Kwv5zNm9CT+98ztlClTyhcNc/M2raLUSsQ2RcPLh5Oqutr9uw54DzgJWCsitQDcv+sKXFc/zIIBROQwcBogIpWADsAKVZ0TWwkHZxY8Y8a3PPDACzkO0f/5zyUxXZeRlf8wvtsHPMncOYvZsmU7VaqkcEPfbox+4X327cugUqUKgPOAcvCQ3lHLKREqF/V4bhS0XcVVx7SCpRWcNhXeLHjdnkkxx5zqpc/LU09EygEhVd3uvv4MGAa0Bzaq6kMicheQqqp3FKSuvgXuwhMfl/dYArdXFCRwG4YRC4UP3BsPInBXiR64G+L0ssFJR49V1eEiUgUYB9QFVgDdVbVAw9Fs5qRhGAbeTaxR1eXA8bns34jT6y40FrgNwzCAIK0PaIHbMAwDEAvchmEYwUIkOCuAWOA2DMMALFViGIYRMCRAa+4d8oF7e8bKuGmlljoqblpG4cjSzLhpheSQ/9+wWGCpEsMwjMBhqRLDMIxAYaNKDMMwAoYFbsMwjIAhklTUVYgZC9yGYRiA5bgNwzACRpBSJcEZ/5IPfjtEh8NZXHXxKAb0fRGA/42YzCXnPcIVF43gzn4vs33bbs81wdy8g6QFjunthRf05/rr/uurjt0XfhA6iK1oKfoaeEA8HKLHvfEl9Rv87TR0Uqs03pgwgNfHD6BuvWq8OuYLT/XA3LyDpJXNa69OpmHDOr5q2H3hD3IQ/xU1vgVuEWkkIreJyBMiMkJErheRFD+0/HaIXvfXFmbPXMJ5F7bM2dfylCNzXN6POa4u69Zu9UwvG3PzDo4WwF9/bWDGjO/o1r2Dbxpg94VfiEjMW1HjS+AWkZuB54DSOM7uZYDDga9EpK3Xen47RD/+yCT69u9MKA9758nvzaVV6yM908vG3LyDowXw4AMvctttPQn5PAPP7gt/EJJi3ooav+6wa4FOqvpfHMuyJqp6D9AJGJXXRcXR5X3WjMVUTi3PUU1y//n7cvpUkpJDdOzc3BO9SMzNOzha06bNJbVKCsc0beRL+ZHYfeEXXrpO+oufo0qSgTCOs3sFAFVdISKBcnlfMP93vpy+mP+btYR9ezPYuXMvQwaOZciDPZjy/rfMnrmY/71wnbm8H+Ja389bwrQv5jJzxnfs25fBjh27uOP2UTzy6K2ea9l94Q/FIQUSK371uEcDc0UkHfgKeApARKoBBfJYi4afDtE33HIOkz6/l/c+vpv7H7mCf510BEMe7MFXs5bw+kvTeOTJayhdpqQnWgdibt7B0eo/4EqmzxjN1C/SGTFiAC1bHutL0Aa7L/zjEO9xq+oTIvI5cDQwUlWXuPvXA2281ktOTmLQoOvp3XtwjkN0Wlo9r2X2Y8SDE8nYl8kt1zk/EI45rh533neRpxrxalc8P79E1Yondl/4Q5CWdT3kXd437V0SDxnAlnUNErasa9AovMt7Rtb8mGNOiVCzIu122x1jGIYBvo8G8hIL3IZhGECQ5iNa4DYMw8DWKjEMwwgg3o0qEZFOIvKziPwiInd5XVPrcRuGYeDdOG5xFvZ+GjgTWIUzNHqSqi72RAAL3IZhGABeTmU/CfhFVZcDiMhbwPnAoRC4Cza8R0T6uDMwYyK1VOOCyBy0TmEwrfhr5bEsjec6hcG0vCb2mCMifYA+EbvSI+pcG1gZcWwV0BIPScQcd5/8TwmUjmkFSysR25TIWgVCVdNV9cSILfKLJrcvAE/npSRi4DYMwyhKVuGshppNHWC1lwIWuA3DMLxlLpAmIg1EpCRwKTDJS4FinOMuMPHKjcUzB2dawdFKxDYlspbnqGqmiPQFPgGSgBdVdZGXGsV4rRLDMAwjNyxVYhiGETAscBuGYQSMhAncfk8xjdB5UUTWichCvzQitA4XkWki8pOILBKRW3zSKS0ic0TkB1dnqB86B2gmicj3IjLZZ53fReRHEZkvIt/6rFVJRN4VkSXuv1krn3SOdNuTvW0TkX4+ad3q3hMLReRNESnth46rdYurs8iv9iQMqhr4DecBwK9AQ6Ak8AOOz6UfWm2A5sDCOLSrFtDcfV0BWOpHu3DGnZZ3X5cAvgFO9rlt/YGxwGSfdX4Hqvr9b+VqvQL0dl+XBCrFQTMJ+Auo50PZtYHfgDLu+3HA1T61oymwECiLM2jicyAtHv9uQdwSpcedM8VUVfcB2VNMPUdVZ+KD/VoeWmtUdZ77ejvwE87/TF7rqKrucN+WcDffnlqLSB2gM47FXUIgIhVxvtTHAKjqPlXdEgfp9sCvqvqHT+UnA2VEJBknqHo6HjmCo4GvVXWXqmYCM4ALfNIKPIkSuHObYup5gCtKRKQ+cAJOb9iP8pNEZD6wDvhMVX3RcXkcuAPI8lEjGwU+FZHv3GnKftEQWA+85KaARotIOR/1srkUeNOPglX1T+AxYAWwBtiqqp/6oYXT224jIlVEpCxwDvtPYjEiSJTA7fsU06JERMoD44F+qrrNDw1VDatqM5xZXieJSFM/dESkC7BOVb/zo/xcOFVVmwNnAzeKiOeepy7JOCm0Z1X1BGAn4NuzFgB3csd5wDs+lV8Z55drA+AwoJyIXOGHlqr+BDwMfAZ8jJPujJ9/XMBIlMDt+xTTokJESuAE7TdUdYLfeu7P++lAJ58kTgXOE5HfcVJa7UTkdZ+0UNXV7t91wHs4aTU/WAWsivil8i5OIPeTs4F5qrrWp/I7AL+p6npVzQAmAKf4pIWqjlHV5qraBicducwvraCTKIHb9ymmRYE4CwSPAX5S1ZE+6lQTkUru6zI4/8P64qKsqgNVtY6q1sf5d/pCVX3pxYlIORGpkP0aOAvnJ7nnqOpfwEoROdLd1R4Pl/HMg8vwKU3isgI4WUTKuvdie5znLL4gItXdv3WBC/G3bYEmIaa8axymmGYjIm8CbYGqIrIKGKyqY/zQwumdXgn86OafAe5W1Q891qkFvOIuAB8Cxqmqr8P04kQN4D13gfxkYKyqfuyj3k3AG27nYTlwjV9Cbh74TOA6vzRU9RsReReYh5O2+B5/p6OPF5EqQAZwo6pu9lEr0NiUd8MwjICRKKkSwzCMQwYL3IZhGAHDArdhGEbAsMBtGIYRMCxwG4ZhBAwL3IZhGAHDArdhGEbA+H+99Pv1G+hy3QAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"cnf_matrix = metrics.confusion_matrix(Y_test, Y_pred)\n",
"\n",
"labels = [0, 1]\n",
"fig, ax = plt.subplots()\n",
"tick_marks = np.arange(len(labels))\n",
"plt.xticks(tick_marks, labels)\n",
"plt.yticks(tick_marks, labels)\n",
"\n",
"# create heatmap\n",
"sns.heatmap(pd.DataFrame(cnf_matrix), annot = True, cmap = \"YlGnBu\", fmt=\"g\")\n",
"ax.xaxis.set_label_position(\"top\")\n",
"plt.title('Confusion Matrix', Y =1.25)\n",
"plt.ylabel(\"True\")\n",
"plt.xlabel(\"Predicted\")"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "ed01fa6f",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.neighbors import KNeighborsClassifier"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "822fb9b1",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "4a6fcf761de440d78979252c1f9a7a72",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/10 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#X_train, X_test, Y_train, Y_test\n",
"\n",
"knn = KNeighborsClassifier(n_neighbors = 2)\n",
"for i in tqdm(range(10)):\n",
" knn.fit(X_train, Y_train) \n",
"Y_pred = knn.predict(X_test)\n",
"\n",
"\n",
"acc_knn = metrics.accuracy_score(Y_test, Y_pred)\n",
"pre_knn = metrics.precision_score(Y_test,Y_pred, average='macro')\n",
"recall_knn = metrics.recall_score(Y_test,Y_pred, average='macro')\n",
"f1_knn = metrics.f1_score(Y_test,Y_pred, average='macro')"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "daf393ac",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy: 0.936944219886823\n",
"Precision: 0.8534802072990271\n",
"Recall: 0.7931385150746588\n",
"f1-score: 0.806970013298535\n"
]
}
],
"source": [
"print(\"Accuracy:\", metrics.accuracy_score(Y_test, Y_pred))\n",
"print(\"Precision:\", metrics.precision_score(Y_test, Y_pred,average='macro'))\n",
"print(\"Recall:\", metrics.recall_score(Y_test, Y_pred,average='macro'))\n",
"print(\"f1-score:\", metrics.f1_score(Y_test,Y_pred, average='macro'))"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "ff0c54e2",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.svm import SVC, LinearSVC"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "a34c2ba3",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "653323ebdc8e4ac2b2992dfd5d4ce751",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/10 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#X_train, X_test, Y_train, Y_test,Y_pred\n",
"\n",
"linear_svc = LinearSVC()\n",
"for i in tqdm(range(10)):\n",
" linear_svc.fit(X_train, Y_train)\n",
"\n",
"Y_pred = linear_svc.predict(X_test)\n",
"\n",
"acc_linear_svc = metrics.accuracy_score(Y_test, Y_pred)\n",
"pre_linear_svc = metrics.precision_score(Y_test,Y_pred, average='macro')\n",
"recall_linear_svc = metrics.recall_score(Y_test,Y_pred, average='macro')\n",
"f1_linear_svc = metrics.f1_score(Y_test,Y_pred, average='macro')"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "e932ec49",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy: 0.2813257881972514\n",
"Precision: 0.30509964042074134\n",
"Recall: 0.20745529380352226\n",
"f1-score: 0.19044744068158276\n"
]
}
],
"source": [
"print(\"Accuracy:\", metrics.accuracy_score(Y_test, Y_pred))\n",
"print(\"Precision:\", metrics.precision_score(Y_test, Y_pred,average='macro'))\n",
"print(\"Recall:\", metrics.recall_score(Y_test, Y_pred,average='macro'))\n",
"print(\"f1-score:\", metrics.f1_score(Y_test,Y_pred, average='macro'))"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "e233f35f",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.ensemble import RandomForestClassifier"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "763970fd",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "0f39b7bdd5f44969970ff5707ab5be78",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/10 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"rf = RandomForestClassifier(n_estimators=100, criterion='entropy', max_depth=3)\n",
"for i in tqdm(range(10)):\n",
" rf.fit(X_train,Y_train)\n",
"Y_pred = rf.predict(X_test)\n",
"\n",
"acc_rf = metrics.accuracy_score(Y_test, Y_pred)\n",
"pre_rf = metrics.precision_score(Y_test,Y_pred, average='macro')\n",
"recall_rf = metrics.recall_score(Y_test,Y_pred, average='macro')\n",
"f1_rf = metrics.f1_score(Y_test,Y_pred, average='macro')"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "9c4914e1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy: 0.7954729183508489\n",
"Precision: 0.6222367026251793\n",
"Recall: 0.5203828612617796\n",
"f1-score: 0.5273813692882126\n"
]
}
],
"source": [
"print(\"Accuracy:\", metrics.accuracy_score(Y_test, Y_pred))\n",
"print(\"Precision:\", metrics.precision_score(Y_test, Y_pred,average='macro'))\n",
"print(\"Recall:\", metrics.recall_score(Y_test, Y_pred,average='macro'))\n",
"print(\"f1-score:\", metrics.f1_score(Y_test,Y_pred, average='macro'))"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "7a7fbf14",
"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>Model</th>\n",
" <th>Precission</th>\n",
" <th>Recall</th>\n",
" <th>F1-Score</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Accuracy</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0.936944</th>\n",
" <td>KNN</td>\n",
" <td>0.853480</td>\n",
" <td>0.793139</td>\n",
" <td>0.806970</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0.795473</th>\n",
" <td>Random Forest</td>\n",
" <td>0.622237</td>\n",
" <td>0.520383</td>\n",
" <td>0.527381</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0.573161</th>\n",
" <td>Logistic Regression</td>\n",
" <td>0.235244</td>\n",
" <td>0.243875</td>\n",
" <td>0.226172</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0.281326</th>\n",
" <td>Support Vector Machines</td>\n",
" <td>0.305100</td>\n",
" <td>0.207455</td>\n",
" <td>0.190447</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Model Precission Recall F1-Score\n",
"Accuracy \n",
"0.936944 KNN 0.853480 0.793139 0.806970\n",
"0.795473 Random Forest 0.622237 0.520383 0.527381\n",
"0.573161 Logistic Regression 0.235244 0.243875 0.226172\n",
"0.281326 Support Vector Machines 0.305100 0.207455 0.190447"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"results = pd.DataFrame({\n",
" 'Model': ['Support Vector Machines', 'KNN', 'Logistic Regression', \n",
" 'Random Forest'],\n",
" 'Accuracy': [acc_linear_svc, acc_knn, acc_log, \n",
" acc_rf],\n",
" 'Precission': [pre_linear_svc, pre_knn, pre_log, \n",
" pre_rf],\n",
" 'Recall': [recall_linear_svc, recall_knn, recall_log, \n",
" recall_rf],\n",
" 'F1-Score': [f1_linear_svc, f1_knn, f1_log, \n",
" f1_rf]})\n",
"\n",
"result_df = results.sort_values(by='Accuracy', ascending=False)\n",
"result_df = result_df.set_index('Accuracy')\n",
"result_df"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "1ba7e790",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"results= pd.DataFrame({'Model': ['S V M', 'KNN', 'Logistic R','Random Forest'], 'Score': [acc_linear_svc, acc_knn, acc_log, \n",
" acc_rf ]})\n",
"\n",
"ax = results.plot.bar(x='Model', y='Score', rot=90)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "d8c1c659",
"metadata": {},
"outputs": [],
"source": [
"#Save the Decision Tree strained modelusing pickle\n",
"import pickle\n",
"with open('ab_classifier_knn', 'wb') as picklefile:\n",
" pickle.dump(knn,picklefile)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "442070c2",
"metadata": {},
"outputs": [],
"source": [
"with open('ab_classifier_knn', 'rb') as training_model:\n",
" model6 = pickle.load(training_model)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "e84a9645",
"metadata": {},
"outputs": [],
"source": [
"def start():\n",
" my_predictors = []\n",
" parameters=['age', 'gender','religion','occupation']\n",
" \n",
" print('Input Passenger Information:')\n",
" age = input(\"Traveller age: \") \n",
" my_predictors.append(age)\n",
" gender = input(\"Traveller Gender: \")\n",
" my_predictors.append(gender)\n",
" religion = input(\"Traveller Religion: \") \n",
" my_predictors.append(religion)\n",
" occupation = input(\"Traveller Occupation: \") \n",
" my_predictors.append(occupation)\n",
" \n",
" \n",
" my_data = dict(zip(parameters, my_predictors))\n",
" my_df = pd.DataFrame(my_data, index=[0])\n",
" scaler = MinMaxScaler(feature_range=(1,6))\n",
" \n",
" # assign scaler to column:\n",
" my_df_scaled = pd.DataFrame(scaler.fit_transform(my_df), columns=my_df.columns)\n",
" my_y_pred = model6.predict(my_df)\n",
" print('\\n')\n",
" print('Result:')\n",
" print(my_y_pred)"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "4db7031f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Input Passenger Information:\n",
"Traveller age: 47\n",
"Traveller Gender: 1\n",
"Traveller Religion: 1\n",
"Traveller Occupation: 7\n",
"\n",
"\n",
"Result:\n",
"[10]\n"
]
}
],
"source": [
"start()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "cdfb1e55",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.8.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment