Skip to content

Instantly share code, notes, and snippets.

@lewiuberg
Last active September 4, 2020 07:52
Show Gist options
  • Save lewiuberg/e7f8ad2a436bb47560319097f101407a to your computer and use it in GitHub Desktop.
Save lewiuberg/e7f8ad2a436bb47560319097f101407a to your computer and use it in GitHub Desktop.
nuc_machine_learning/Session 4/tutorial_4.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "# Activity sheet 4\n# Classification - KNN\n\n**Objective**\nThe aim of this activity sheet is to load a customer dataset, 4it the data, and use KNN to predict a data point.\n\n**Dataset description**\nA telecommunication company has categorised its customers into four groups depending upon their service usage. The prime business interest is to customise the product offers for its valuable customers. This is a classification problem where using the historical dataset a classifier is supposed to be designed, which can be used to predict the class of an unknown case. The target field is ‘custcat’. You are required to use the KNN classification for this very dataset."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import sys\nimport numpy as np\nimport pandas as pd\nimport seaborn as sns\nimport matplotlib.pyplot as plt\nfrom matplotlib.ticker import FuncFormatter\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.metrics import accuracy_score, confusion_matrix, classification_report, plot_confusion_matrix\n\n# %matplotlib notebook\n%matplotlib inline\n\nsns.set(style=\"whitegrid\")",
"execution_count": 1,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "def unpack_list(lst): # Oxford comma\n if not isinstance(lst, str):\n lst = [str(item) for item in lst]\n if len(lst) == 0:\n return\n if len(lst) == 1:\n return \", \".join(lst)\n if len(lst) == 2:\n return \", and \".join(lst) \n else:\n first_part = lst[:-1]\n last_part = lst[-1]\n return \", \".join(first_part) + \", and \" + last_part",
"execution_count": 2,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "def word_search(df, *words):\n words = [word for word in words]\n sum_words: int = 0\n found_words: str = []\n list_of_words: list = []\n\n if not words:\n return\n\n for word in words:\n col_count = 0\n sum_word = 0\n for column in df:\n if df[column].dtype == object or df[column].dtype == str:\n col_count += 1\n sum_word += df[column].str.contains(f\"^{word}$\").sum()\n if df[column].str.contains(f\"^{word}$\").any():\n if word not in found_words:\n found_words.append(word)\n sum_words += sum_word\n if len(found_words) == 0:\n found_words = words\n print(\"Columns of dtype str or object:\", col_count)\n print(f\"Instances of {unpack_list(found_words)} in the dataframe: {sum_words}\")",
"execution_count": 3,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df = pd.read_csv(\"teleCust1000t.csv\")",
"execution_count": 4,
"outputs": []
},
{
"metadata": {
"scrolled": true,
"trusted": true
},
"cell_type": "code",
"source": "df.head()",
"execution_count": 5,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 5,
"data": {
"text/plain": " region tenure age marital address income ed employ retire gender \\\n0 2 13 44 1 9 64.0 4 5 0.0 0 \n1 3 11 33 1 7 136.0 5 5 0.0 0 \n2 3 68 52 1 24 116.0 1 29 0.0 1 \n3 2 33 33 0 12 33.0 2 0 0.0 1 \n4 2 23 30 1 9 30.0 1 2 0.0 0 \n\n reside custcat \n0 2 1 \n1 6 4 \n2 2 3 \n3 1 1 \n4 4 3 ",
"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>region</th>\n <th>tenure</th>\n <th>age</th>\n <th>marital</th>\n <th>address</th>\n <th>income</th>\n <th>ed</th>\n <th>employ</th>\n <th>retire</th>\n <th>gender</th>\n <th>reside</th>\n <th>custcat</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>2</td>\n <td>13</td>\n <td>44</td>\n <td>1</td>\n <td>9</td>\n <td>64.0</td>\n <td>4</td>\n <td>5</td>\n <td>0.0</td>\n <td>0</td>\n <td>2</td>\n <td>1</td>\n </tr>\n <tr>\n <th>1</th>\n <td>3</td>\n <td>11</td>\n <td>33</td>\n <td>1</td>\n <td>7</td>\n <td>136.0</td>\n <td>5</td>\n <td>5</td>\n <td>0.0</td>\n <td>0</td>\n <td>6</td>\n <td>4</td>\n </tr>\n <tr>\n <th>2</th>\n <td>3</td>\n <td>68</td>\n <td>52</td>\n <td>1</td>\n <td>24</td>\n <td>116.0</td>\n <td>1</td>\n <td>29</td>\n <td>0.0</td>\n <td>1</td>\n <td>2</td>\n <td>3</td>\n </tr>\n <tr>\n <th>3</th>\n <td>2</td>\n <td>33</td>\n <td>33</td>\n <td>0</td>\n <td>12</td>\n <td>33.0</td>\n <td>2</td>\n <td>0</td>\n <td>0.0</td>\n <td>1</td>\n <td>1</td>\n <td>1</td>\n </tr>\n <tr>\n <th>4</th>\n <td>2</td>\n <td>23</td>\n <td>30</td>\n <td>1</td>\n <td>9</td>\n <td>30.0</td>\n <td>1</td>\n <td>2</td>\n <td>0.0</td>\n <td>0</td>\n <td>4</td>\n <td>3</td>\n </tr>\n </tbody>\n</table>\n</div>"
},
"metadata": {}
}
]
},
{
"metadata": {
"scrolled": true,
"trusted": true
},
"cell_type": "code",
"source": "df.info()",
"execution_count": 6,
"outputs": [
{
"output_type": "stream",
"text": "<class 'pandas.core.frame.DataFrame'>\nRangeIndex: 1000 entries, 0 to 999\nData columns (total 12 columns):\n # Column Non-Null Count Dtype \n--- ------ -------------- ----- \n 0 region 1000 non-null int64 \n 1 tenure 1000 non-null int64 \n 2 age 1000 non-null int64 \n 3 marital 1000 non-null int64 \n 4 address 1000 non-null int64 \n 5 income 1000 non-null float64\n 6 ed 1000 non-null int64 \n 7 employ 1000 non-null int64 \n 8 retire 1000 non-null float64\n 9 gender 1000 non-null int64 \n 10 reside 1000 non-null int64 \n 11 custcat 1000 non-null int64 \ndtypes: float64(2), int64(10)\nmemory usage: 93.9 KB\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "print(f\"Columns with missing data: {df.isnull().any().sum()}\")\nprint(f\"Instances of missing data: {df.isnull().sum().sum()}\")",
"execution_count": 7,
"outputs": [
{
"output_type": "stream",
"text": "Columns with missing data: 0\nInstances of missing data: 0\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "word_search(df, \"None\", \"none\", \"0\")",
"execution_count": 8,
"outputs": [
{
"output_type": "stream",
"text": "Columns of dtype str or object: 0\nInstances of None, none, and 0 in the dataframe: 0\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Basic data preprocessing\n1. See how many instances of each class is in the given dataset using visualisation techniques."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df[\"custcat\"] = df[\"custcat\"].astype(\"category\")",
"execution_count": 9,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df.custcat.value_counts()",
"execution_count": 10,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 10,
"data": {
"text/plain": "3 281\n1 266\n4 236\n2 217\nName: custcat, dtype: int64"
},
"metadata": {}
}
]
},
{
"metadata": {
"scrolled": false,
"trusted": true
},
"cell_type": "code",
"source": "sns.catplot(data=df, kind=\"count\", x=\"custcat\");",
"execution_count": 11,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 360x360 with 1 Axes>",
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAWoAAAFcCAYAAADh+/RTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAXl0lEQVR4nO3df0xV9/3H8dctv1bafeO23EuMMy6zdtqR2oZEZT9gzQTUy40/ICvOyey0pfPXV9JYFXFuNipzJGTGdjX7OpvZrhWdEkso6uxm4sDZsgSCs9Yp4BQCgtUWlQvi+f5hdlfrj3KZl/u+8Hz8xT33nHvffIJPDwfuxeU4jiMAgFkPhHsAAMC9EWoAMI5QA4BxhBoAjCPUAGBcxIfacRz5/X7xyysABquID3V3d7fq6+vV3d0d7lEAICQiPtQAMNgRagAwjlADgHGEGgCMI9QAYByhBgDjCDUAGEeoAcA4Qg0AxhFqADCOUAOAcYQaAIwj1ABgHKEG7oPu6z3hHmHADcXPOVyiwz0AMBjERsdo3vb/DfcYA+q1Z34d7hGGDM6oAcA4Qg0AxhFqADCOUAOAcYQaAIwj1ABgHKEGAOMINQAYR6gBwDhCDQDGEWoAMI5QA4BxhBoAjBsSoe7u6Q33CANuKH7OwGA1JN7mNDYmSj988Y1wjzGg/rBpTrhHAHCfDIkzagCIZIQaAIwj1ABgHKEGAOMINQAYR6gBwDhCDQDGEWoAMI5QA4BxhBoAjCPUAGBcSN/rY8uWLXrnnXckSampqXrxxRe1atUq1dTU6MEHH5QkLV68WGlpaaqqqtLGjRvl9/s1depU5efnh3I0AIgYIQt1VVWVjhw5or1798rlcmnBggU6ePCg6uvr9frrr8vj8QT27erqUkFBgXbs2KHhw4crLy9Phw8fVmpqaqjGA4CIEbJLH263WytXrlRsbKxiYmI0evRoNTc3q7m5WWvWrJHP59PmzZt148YN1dXVadSoURo5cqSio6Pl8/lUWVkZqtEAIKKE7Ix6zJgxgY8bGxtVUVGhP/zhDzp27JjWrVun+Ph45eXlaffu3YqPj5fb7Q7s7/F41NraGqrRACCihPz9qE+dOqW8vDytWLFCX//61/Xyyy8H7ps7d67Kyso0ZcqU245zuVxBPU99ff1d70tKSgrqsQaLmpqacI8wZPA1hv/Wvb6GQhrqmpoaLV26VAUFBfJ6vTp58qQaGxuVkZEhSXIcR9HR0UpISFB7e3vguLa2tluuYfdFYmKi4uLi7uv8kW6oxgMDh6+xgRGya9QtLS1atGiRiouL5fV6Jd0M84YNG3T58mX19PRo586dSktL0/jx49XQ0KCmpib19vaqvLxcKSkpoRoNACJKyM6ot23bJr/fr6KiosC2nJwcPffcc5o9e7auX7+u9PR0ZWZmSpKKioq0ZMkS+f1+paam3vFyCAAMRSELdWFhoQoLC+9435w5t/89v+TkZO3bty9U4wBAxOKViQBgHKEGAOMINQAYR6gBwDhCDQDGEWoAMI5QA4BxhBoAjCPUAGAcoQYw4Hq7e8I9Qlj09/MO+ducAsBnRcXGqCL3mXCPMeCm/X57v47jjBoAjCPUAGAcoQYA4wg1ABhHqAHAOEINAMYRagAwjlADgHGEGgCMI9QAYByhBgDjCDUAGEeoAcA4Qg0AxhFqADCOUAOAcYQaAIwj1LjNjetD888kDdXPG/bxp7hwmweiY1SzaUG4xxhwSS/+X7hHAO6IM2oAMI5QA4BxhBoAjCPUAGAcoQYA4wg1ABhHqAHAOEINAMYRagAwjlADgHGEGgCMI9QAYFxIQ71lyxZ5vV55vV5t2rRJklRVVSWfz6f09HSVlJQE9j1x4oSysrKUkZGh1atX6/r166EcDQAiRshCXVVVpSNHjmjv3r0qKyvT8ePHVV5eroKCAr3yyiuqqKhQfX29Dh8+LElavny51qxZo/3798txHJWWloZqNACIKCELtdvt1sqVKxUbG6uYmBiNHj1ajY2NGjVqlEaOHKno6Gj5fD5VVlbq/Pnz6urq0hNPPCFJmjVrliorK0M1GgBElJCFesyYMYHwNjY2qqKiQi6XS263O7CPx+NRa2ur2trabtnudrvV2toaqtEAIKKE/A8HnDp1Snl5eVqxYoWio6PV0NBwy/0ul0uO49x2nMvlCup56uvr73pfUlJSUI81WNTU1PTruKG6XhJrFizWK3h3W7N7rUlIQ11TU6OlS5eqoKBAXq9Xx44dU3t7e+D+trY2eTweJSQk3LL9woUL8ng8QT1XYmKi4uLi7tvsg8FQ/sfQX6xZcFiv4PVnzUJ26aOlpUWLFi1ScXGxvF6vJGn8+PFqaGhQU1OTent7VV5erpSUFI0YMUJxcXGB/2nKysqUkpISqtEAIKKE7Ix627Zt8vv9KioqCmzLyclRUVGRlixZIr/fr9TUVE2ZMkWSVFxcrMLCQl25ckWPPfaYcnNzQzUaAESUkIW6sLBQhYWFd7xv3759t20bO3asdu/eHapxACBi8cpEADCOUAOAcYQaAIwj1ABgHKEGAOMINQAYR6gBwDhCDQDGEWoAMI5QA4BxhBoAjCPUAGAcoQYA4wg1ABhHqAHAOEINAMYRagAwjlADgHGEGgCMI9QAYByhBgDjCDUAGEeoAcA4Qg0AxhFqADCOUAOAcYQaAIwj1ABgHKEGAOMINQAYR6gBwDhCDQDGEWoAMI5QA4BxhBoAjOtTqFtbW2/b9s9//vO+DwMAuN09Q33p0iVdunRJzz77rC5fvhy43d7eroULFw7UjAAwpEXf684XXnhBf/3rXyVJEydO/M9B0dGaPHlyaCcDAEj6nFBv27ZNkrRq1Spt3LhxQAYCANzqnqH+t40bN+r8+fO6fPmyHMcJbP/mN78ZssEAADf1KdTFxcXasWOHvvKVrwS2uVwuHTp0KGSDAQBu6lOoKyoqdODAASUkJIR6HgDAZ/Tp1/OGDx/e70h3dnYqMzNT586dk3Tzend6erqmT5+u6dOn6+DBg5Kkqqoq+Xw+paenq6SkpF/PBQCDUZ/OqJOTk7Vp0yZ9//vf1xe+8IXA9s+7Rl1bW6vCwkI1NjYGttXX1+v111+Xx+MJbOvq6lJBQYF27Nih4cOHKy8vT4cPH1ZqamqQnw4ADD59CvWePXskSZWVlYFtfblGXVpaqrVr1+rFF1+UJF29elXNzc1as2aNmpublZaWpsWLF6uurk6jRo3SyJEjJUk+n0+VlZWEGgDUx1C/++67/Xrw9evX33K7o6NDkyZN0rp16xQfH6+8vDzt3r1b8fHxcrvdgf08Hs8dXw15L/X19Xe9LykpKbjBB4mampp+HTdU10tizYLFegXvbmt2rzXpU6i3b99+x+3PPPNMXw4PGDlypF5++eXA7blz56qsrExTpky5bV+XyxXUYycmJiouLi6oYwa7ofyPob9Ys+CwXsHrz5r1KdQffvhh4OPu7m7V1NTc8krFvjp58qQaGxuVkZEhSXIcR9HR0UpISFB7e3tgv7a2tluuYQPAUNbnF7x82sWLFwPXnYPhOI42bNigSZMmKT4+Xjt37tTMmTM1fvx4NTQ0qKmpSV/96ldVXl6urKysoB8fAAajPoX6s7785S/r/PnzQR83duxYPffcc5o9e7auX7+u9PR0ZWZmSpKKioq0ZMkS+f1+paam3vFyCAAMRUFfo3YcR/X19be8SvHzfPqHkXPmzNGcOXNu2yc5OVn79u3r82MCwFAR9DVq6eYLYPpz6QMAELygrlGfP39e169f16hRo0I6FADgP/oU6qamJi1cuFBtbW26ceOGvvSlL2nr1q0aPXp0qOcDgCGvT+/1sW7dOi1YsEDvvfeeampq9NOf/lS/+MUvQj0bAEB9DHVHR4dmzpwZuJ2VlaWPPvooZEMBAP6jT6Hu7e3VpUuXArcvXrwYqnkAAJ/Rp2vUP/rRj/T0009r6tSpkqR33nlHP/7xj0M6GADgpj6dUf/7Xex6enp05swZtba2Ki0tLaSDAQBu6tMZ9cqVKzVnzhzl5ubK7/frzTffVEFBgX7729+Gej4AGPL6dEb90UcfKTc3V5IUFxenefPm6cKFCyEdDABwU59/mPjp94dub2+/5a+RAwBCp0+XPubNm6cZM2bou9/9rlwul6qqqngJOQAMkD6FOjs7W4mJiTp69KiioqI0f/58Pfroo6GeDQCgIN7mdOzYsRo7dmwoZwEA3EGfrlEDAMKHUAOAcYQaAIwj1ABgHKEGAOMINQAYR6gBwDhCDQDGEWoAMI5QA4BxhBoAjCPUAGAcoQYA4wg1ABhHqAHAOEINAMYRagAwjlADgHGEGgCMI9QAYByhBgDjCDUAGEeoAcA4Qg0AxhFqADCOUAOAcYQaAIwj1ABgXEhD3dnZqczMTJ07d06SVFVVJZ/Pp/T0dJWUlAT2O3HihLKyspSRkaHVq1fr+vXroRwLACJKyEJdW1ur2bNnq7GxUZLU1dWlgoICvfLKK6qoqFB9fb0OHz4sSVq+fLnWrFmj/fv3y3EclZaWhmosAIg4IQt1aWmp1q5dK4/HI0mqq6vTqFGjNHLkSEVHR8vn86myslLnz59XV1eXnnjiCUnSrFmzVFlZGaqxACDiRIfqgdevX3/L7ba2Nrnd7sBtj8ej1tbW27a73W61trYG/Xz19fV3vS8pKSnoxxsMampq+nXcUF0viTULFusVvLut2b3WJGSh/izHcW7b5nK57ro9WImJiYqLi+vXbIPVUP7H0F+sWXBYr+D1Z80G7Lc+EhIS1N7eHrjd1tYmj8dz2/YLFy4ELpcAAAYw1OPHj1dDQ4OamprU29ur8vJypaSkaMSIEYqLiwt8O1BWVqaUlJSBGgsAzBuwSx9xcXEqKirSkiVL5Pf7lZqaqilTpkiSiouLVVhYqCtXruixxx5Tbm7uQI0FAOaFPNTvvvtu4OPk5GTt27fvtn3Gjh2r3bt3h3oUAIhIvDIRAIwj1ABgHKEGAOMINQAYR6gBwDhCDQDGEWoAMI5QA4BxhBoAjCPUAGAcoQYA4wg1ABhHqAHAOEINAMYRagAwjlADgHGEGgCMI9QAYByhBgDjCDUAGEeoAcA4Qg0AxhFqADCOUAOAcYQaAIwj1ABgHKEGAOMINQAYR6gBwDhCDQDGEWoAMI5QA4BxhBoAjCPUAGAcoQYA4wg1ABhHqAHAOEINAMYRagAwjlADgHGEGgCMI9QAYFx0OJ40NzdXHR0dio6++fTr1q3T2bNn9Zvf/EY9PT2aN2+e5syZE47RAMCcAQ+14zg6c+aM/vKXvwRC3draqvz8fO3Zs0exsbHKycnRxIkT9cgjjwz0eABgzoCH+syZM3K5XHr22WfV0dGhH/zgB3rooYc0adIkDRs2TJKUkZGhyspKLV68eKDHAwBzBjzUH3/8sZKTk/Xzn/9cXV1dys3N1dSpU+V2uwP7eDwe1dXVBfW49fX1d70vKSmp3/NGspqamn4dN1TXS2LNgsV6Be9ua3avNRnwUD/55JN68sknJUnx8fHKzs7Wxo0b9fzzz9+yn8vlCupxExMTFRcXd9/mHAyG8j+G/mLNgsN6Ba8/azbgv/Xx/vvvq7q6OnDbcRyNGDFC7e3tgW1tbW3yeDwDPRoAmDTgof7kk0+0adMm+f1+dXZ2au/evfrVr36l6upqXbx4UdeuXdOBAweUkpIy0KMBgEkDfunjqaeeUm1trWbMmKEbN27ohz/8oZKSkpSfn6/c3Fz19PQoOztbjz/++ECPBgAmheX3qJctW6Zly5bdss3n88nn84VjHAAwjVcmAoBxhBoAjCPUAGAcoQYA4wg1ABhHqAHAOEINAMYRagAwjlADgHGEGgCMI9QAYByhBgDjCDUAGEeoAcA4Qg0AxhFqADCOUAOAcYQaAIwj1ABgHKEGAOMINQAYR6gBwDhCDQDGEWoAMI5QA4BxhBoAjCPUAGAcoQYA4wg1ABhHqAHAOEINAMYRagAwjlADgHGEGgCMI9QAYByhBgDjCDUAGEeoAcA4Qg0AxhFqADCOUAOAcYQaAIwzFeq3335b06ZNU1pamt54441wjwMAJkSHe4B/a21tVUlJifbs2aPY2Fjl5ORo4sSJeuSRR8I9GgCElZlQV1VVadKkSRo2bJgkKSMjQ5WVlVq8ePE9j3McR5LU3d19z/3+Jz7mvswZKfx+/3/3AF/44v0ZJIL8t2v2xZiH7tMkkeG/Xa8HvsjX2GfFxsbK5XLdtt3l/Lt0YbZ161ZdvXpV+fn5kqRdu3aprq5OL7300j2P++STT/Thhx8OxIgAEFKJiYmKi4u7bbuZM+o7/X9xp/9ZPuuhhx7So48+qpiYmD7tDwBWxcbG3nG7mVAnJCTo/fffD9xua2uTx+P53OMeeOABfXEIfgsFYOgw81sf3/rWt1RdXa2LFy/q2rVrOnDggFJSUsI9FgCEnakz6vz8fOXm5qqnp0fZ2dl6/PHHwz0WAISdmR8mAgDuzMylDwDAnRFqADCOUAOAcYQaAIwj1CHS2dmpzMxMnTt3LtyjRIQtW7bI6/XK6/Vq06ZN4R4nIvz617/WtGnT5PV6tX379nCPEzF++ctfauXKleEeIyiEOgRqa2s1e/ZsNTY2hnuUiFBVVaUjR45o7969Kisr0/Hjx3Xw4MFwj2XasWPHdPToUe3bt09//OMftWPHDp05cybcY5lXXV2tvXv3hnuMoBHqECgtLdXatWv79MpKSG63WytXrlRsbKxiYmI0evRoNTc3h3ss0yZMmKDf//73io6OVkdHh3p7exUfHx/usUy7dOmSSkpK9Pzzz4d7lKCZecHLYLJ+/fpwjxBRxowZE/i4sbFRFRUVeuutt8I4UWSIiYnR5s2b9bvf/U5TpkxRQkJCuEcy7Wc/+5ny8/PV0tIS7lGCxhk1zDh16pR+8pOfaMWKFfra174W7nEiwtKlS1VdXa2WlhaVlpaGexyzdu3apeHDhys5OTnco/QLZ9QwoaamRkuXLlVBQYG8Xm+4xzHv9OnT6u7u1rhx4/Tggw8qPT1dJ0+eDPdYZlVUVOjChQuaPn26Ll++rKtXr2rDhg0qKCgI92h9QqgRdi0tLVq0aJFKSkoi9oxnoJ07d06bN2/Wm2++KUk6dOiQsrKywjyVXZ/+rZg9e/bo2LFjERNpiVDDgG3btsnv96uoqCiwLScnR7Nnzw7jVLalpqaqtrZWM2bMUFRUlNLT0/lOZBDjTZkAwDh+mAgAxhFqADCOUAOAcYQaAIwj1ABgHKEG+uBf//qXlixZErbjMbQRaqAPmpub1dDQELbjMbQRagx6u3fvltfrlc/nU25ursrKypSZmRm4/29/+1vg9unTp5WTk6NZs2Zp5syZeuONN9Tb26vCwkKdPXtW8+fPlyT9+c9/1vTp0+Xz+fT000/rgw8+kCS9+uqrys7Ols/n0+TJk3Xw4ME7Hg8ExQEGsRMnTjgTJ050mpubHcdxnO3btzsZGRmO1+sN7HP06NHA7VWrVjlbt251HMdx2tranGXLljm9vb237HPhwgUnKSnJ+cc//uE4juPs37/fmT9/vnPu3Dln7ty5zrVr1xzHcZzy8nInMzPztucAgsVLyDGoVVdX6zvf+Y6GDx8uSZo3b57GjRunl1566Y77p6WlacWKFaqrq1NycrIKCwv1wAO3fuP597//XWPGjNG4ceMkSenp6UpPT5d086+HvP3222pqalJtba2uXLkSws8OQwWXPjCoRUVFyeVyBW53dXXJ5XLJ+dQ7J/T09AQ+fuqpp7R//35NnTpVJ06ckM/n09mzZ+/5mI7j6IMPPtDx48eVk5Ojzs5Offvb39aCBQtC+JlhKCHUGNQmTpyo6upqtbW1SZLeeustvfrqq2publZHR4ccx9Gf/vSnwP4vvPCCKioq5PV6tXbtWj388MNqaWlRVFRUIOjjx4/X6dOnderUKUk337lu+fLleu+995SYmKhnnnlGEyZM0KFDh9Tb2ytJtxwPBItLHxjUvvGNb2j58uWBs1u3262NGzfqtddeU1ZWltxut773ve8F9l+4cKFWr16tnTt3KioqSpMnT9aECRP08ccfKyoqStnZ2dq1a5eKi4u1YsUK9fb26uGHH1ZJSYmGDRumAwcOaNq0aYqJiVFycrIuX76szs5OjRkz5pbjP31GDnwe3j0PAIzj0gcAGEeoAcA4Qg0AxhFqADCOUAOAcYQaAIwj1ABgHKEGAOP+H/ciyYCNIGJLAAAAAElFTkSuQmCC\n"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "2. Convert Pandas DataFrame to NumPy array"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "X = df.drop(\"custcat\", axis=1).to_numpy()\nprint(X[0:5])",
"execution_count": 12,
"outputs": [
{
"output_type": "stream",
"text": "[[ 2. 13. 44. 1. 9. 64. 4. 5. 0. 0. 2.]\n [ 3. 11. 33. 1. 7. 136. 5. 5. 0. 0. 6.]\n [ 3. 68. 52. 1. 24. 116. 1. 29. 0. 1. 2.]\n [ 2. 33. 33. 0. 12. 33. 2. 0. 0. 1. 1.]\n [ 2. 23. 30. 1. 9. 30. 1. 2. 0. 0. 4.]]\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "3. Define the attribute set and the target value ‘custcat’"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "y = df.custcat.values\ny.value_counts()",
"execution_count": 13,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 13,
"data": {
"text/plain": "1 266\n2 217\n3 281\n4 236\ndtype: int64"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "4. Perform z-score standardisation for feature scaling using preprocessing.StandardScaler() from sklearn"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "scaler = StandardScaler()\nscaler",
"execution_count": 14,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 14,
"data": {
"text/plain": "StandardScaler()"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "scaler.fit(X)",
"execution_count": 15,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 15,
"data": {
"text/plain": "StandardScaler()"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "scaler.mean_",
"execution_count": 16,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 16,
"data": {
"text/plain": "array([2.0220e+00, 3.5526e+01, 4.1684e+01, 4.9500e-01, 1.1551e+01,\n 7.7535e+01, 2.6710e+00, 1.0987e+01, 4.7000e-02, 5.1700e-01,\n 2.3310e+00])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "scaler.transform(X)",
"execution_count": 17,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 17,
"data": {
"text/plain": "array([[-0.02696767, -1.055125 , 0.18450456, ..., -0.22207644,\n -1.03459817, -0.23065004],\n [ 1.19883553, -1.14880563, -0.69181243, ..., -0.22207644,\n -1.03459817, 2.55666158],\n [ 1.19883553, 1.52109247, 0.82182601, ..., -0.22207644,\n 0.96655883, -0.23065004],\n ...,\n [ 1.19883553, 1.47425216, 1.37948227, ..., -0.22207644,\n 0.96655883, -0.92747794],\n [ 1.19883553, 1.61477311, 0.58283046, ..., -0.22207644,\n 0.96655883, -0.92747794],\n [ 1.19883553, 0.67796676, -0.45281689, ..., -0.22207644,\n 0.96655883, 0.46617787]])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# All in one go.\nX_scale = scaler.fit_transform(X)\nX_scale ",
"execution_count": 18,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 18,
"data": {
"text/plain": "array([[-0.02696767, -1.055125 , 0.18450456, ..., -0.22207644,\n -1.03459817, -0.23065004],\n [ 1.19883553, -1.14880563, -0.69181243, ..., -0.22207644,\n -1.03459817, 2.55666158],\n [ 1.19883553, 1.52109247, 0.82182601, ..., -0.22207644,\n 0.96655883, -0.23065004],\n ...,\n [ 1.19883553, 1.47425216, 1.37948227, ..., -0.22207644,\n 0.96655883, -0.92747794],\n [ 1.19883553, 1.61477311, 0.58283046, ..., -0.22207644,\n 0.96655883, -0.92747794],\n [ 1.19883553, 0.67796676, -0.45281689, ..., -0.22207644,\n 0.96655883, 0.46617787]])"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "5. Using scikit-learn perform training and test data split (80% - 20%)"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "X_train, X_test, y_train, y_test = train_test_split(\n X_scale, y, test_size=0.2, random_state=4)",
"execution_count": 19,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Kick start KNN\n1. Develop a classifier with K = 3 using KNeighborsClassifier() from sklearn.neighbors"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "k = 3",
"execution_count": 20,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "neigh = KNeighborsClassifier(n_neighbors=k)",
"execution_count": 21,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "neigh",
"execution_count": 22,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 22,
"data": {
"text/plain": "KNeighborsClassifier(n_neighbors=3)"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "neigh.get_params()",
"execution_count": 23,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 23,
"data": {
"text/plain": "{'algorithm': 'auto',\n 'leaf_size': 30,\n 'metric': 'minkowski',\n 'metric_params': None,\n 'n_jobs': None,\n 'n_neighbors': 3,\n 'p': 2,\n 'weights': 'uniform'}"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "neigh.fit(X_train, y_train)",
"execution_count": 24,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 24,
"data": {
"text/plain": "KNeighborsClassifier(n_neighbors=3)"
},
"metadata": {}
}
]
},
{
"metadata": {
"scrolled": true,
"trusted": true
},
"cell_type": "code",
"source": "print(f\"Customer class labels: {unpack_list(neigh.classes_)}\")",
"execution_count": 25,
"outputs": [
{
"output_type": "stream",
"text": "Customer class labels: 1, 2, 3, and 4\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "2. Check the accuracy of your classifier on the test dataset, using metrics.accuracy_score() from sklearn."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "print(\"Train set Accuracy: \", neigh.score(X_train, y_train))",
"execution_count": 26,
"outputs": [
{
"output_type": "stream",
"text": "Train set Accuracy: 0.56875\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# Alternative\nprint(\"The fraction of correctly classified samples on the train set:\", accuracy_score(y_train, neigh.predict(X_train), normalize=True))\nprint(\"The number of correctly classified samples on the train set:\", accuracy_score(y_train, neigh.predict(X_train), normalize=False))",
"execution_count": 27,
"outputs": [
{
"output_type": "stream",
"text": "The fraction of correctly classified samples on the train set: 0.56875\nThe number of correctly classified samples on the train set: 455\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "y_pred = neigh.predict(X_test)",
"execution_count": 28,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "y_pred[0]",
"execution_count": 29,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 29,
"data": {
"text/plain": "1"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "y_pred[0:5]",
"execution_count": 30,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 30,
"data": {
"text/plain": "array([1, 3, 1, 4, 4])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "print(\"Train set Accuracy: \", neigh.score(X_test, y_test))",
"execution_count": 31,
"outputs": [
{
"output_type": "stream",
"text": "Train set Accuracy: 0.315\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# Alternative\nprint(\"The fraction of correctly classified samples on the test set:\", accuracy_score(y_test, y_pred, normalize=True, sample_weight=None))\nprint(\"The number of correctly classified samples on the test set:\", accuracy_score(y_test, y_pred, normalize=False, sample_weight=None))",
"execution_count": 32,
"outputs": [
{
"output_type": "stream",
"text": "The fraction of correctly classified samples on the test set: 0.315\nThe number of correctly classified samples on the test set: 63\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "**Confusion Matrix**"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "![alt text](https://2.bp.blogspot.com/-EvSXDotTOwc/XMfeOGZ-CVI/AAAAAAAAEiE/oePFfvhfOQM11dgRn9FkPxlegCXbgOF4QCLcBGAs/s1600/confusionMatrxiUpdated.jpg)"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "print(cm :=confusion_matrix(y_test, y_pred))\nprint()\nTP = np.diag(cm)\nprint(\"TP: \", TP)\nFN = cm.sum(axis=1) - np.diag(cm)\nprint(\"FN: \", FN)\nFP = cm.sum(axis=0) - np.diag(cm)\nprint(\"FP: \", FP)\nTN = cm.sum() - (FP + FN + TP)\nprint(\"TN: \", TN)\n\nprint()\n# Sensitivity, hit rate, recall, or true positive rate\nTPR = TP/(TP+FN)\nprint(\"TPR: \", TPR)\n# Specificity or true negative rate\nTNR = TN/(TN+FP) \nprint(\"TNR: \", TNR)\n# Precision or positive predictive value\nPPV = TP/(TP+FP)\nprint(\"PPV: \", PPV)\n# Negative predictive value\nNPV = TN/(TN+FN)\nprint(\"NPV: \", NPV)\n# Fall out or false positive rate\nFPR = FP/(FP+TN)\nprint(\"FPR: \", FPR)\n# False negative rate\nFNR = FN/(TP+FN)\nprint(\"FNR: \", FNR)\n# False discovery rate\nFDR = FP/(TP+FP)\nprint(\"FDR: \", FDR)\n# Overall accuracy\nACC = (TP+TN)/(TP+FP+FN+TN)\nprint(\"ACC: \", ACC)",
"execution_count": 33,
"outputs": [
{
"output_type": "stream",
"text": "[[30 5 12 4]\n [ 9 14 9 12]\n [25 12 11 6]\n [21 14 8 8]]\n\nTP: [30 14 11 8]\nFN: [21 30 43 43]\nFP: [55 31 29 22]\nTN: [ 94 125 117 127]\n\nTPR: [0.58823529 0.31818182 0.2037037 0.15686275]\nTNR: [0.63087248 0.80128205 0.80136986 0.85234899]\nPPV: [0.35294118 0.31111111 0.275 0.26666667]\nNPV: [0.8173913 0.80645161 0.73125 0.74705882]\nFPR: [0.36912752 0.19871795 0.19863014 0.14765101]\nFNR: [0.41176471 0.68181818 0.7962963 0.84313725]\nFDR: [0.64705882 0.68888889 0.725 0.73333333]\nACC: [0.62 0.695 0.64 0.675]\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "TP.sum()",
"execution_count": 34,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 34,
"data": {
"text/plain": "63"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "np.diag(cm)",
"execution_count": 35,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 35,
"data": {
"text/plain": "array([30, 14, 11, 8])"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "plot_confusion_matrix(neigh, X_test, y_test);",
"execution_count": 36,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 2 Axes>",
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Which is the optimal value of K?\nDevelop a loop wherein you can evaluate the accuracy of your KNN classifier starting from K = 1 until K = 10. You are required to calculate the model accuracy at every step as before."
},
{
"metadata": {},
"cell_type": "markdown",
"source": "**Its been a while since I have used dict, so I try it out here, just to keep things fresh.**"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "k_n: int = 10\nscore: dict = {}\nerror_rate: list = []\nfor n in range(1, k_n+1):\n neigh = KNeighborsClassifier(n_neighbors=n).fit(X_train, y_train)\n y_pred = neigh.predict(X_test)\n # score.update({n : accuracy_score(y_test, y_pred, normalize=True)})\n score.update({n : np.mean(y_pred == y_test)})\n error_rate.append(np.mean(y_pred != y_test)) # aka the inverse",
"execution_count": 37,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "error_rate",
"execution_count": 38,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 38,
"data": {
"text/plain": "[0.7, 0.71, 0.685, 0.68, 0.685, 0.69, 0.665, 0.675, 0.66, 0.67]"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "score",
"execution_count": 39,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 39,
"data": {
"text/plain": "{1: 0.3,\n 2: 0.29,\n 3: 0.315,\n 4: 0.32,\n 5: 0.315,\n 6: 0.31,\n 7: 0.335,\n 8: 0.325,\n 9: 0.34,\n 10: 0.33}"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "for i in score.items():\n print(i)",
"execution_count": 40,
"outputs": [
{
"output_type": "stream",
"text": "(1, 0.3)\n(2, 0.29)\n(3, 0.315)\n(4, 0.32)\n(5, 0.315)\n(6, 0.31)\n(7, 0.335)\n(8, 0.325)\n(9, 0.34)\n(10, 0.33)\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "for i in score:\n print(i, \":\", score[i])",
"execution_count": 41,
"outputs": [
{
"output_type": "stream",
"text": "1 : 0.3\n2 : 0.29\n3 : 0.315\n4 : 0.32\n5 : 0.315\n6 : 0.31\n7 : 0.335\n8 : 0.325\n9 : 0.34\n10 : 0.33\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "score = pd.DataFrame.from_dict(score, orient=\"index\")",
"execution_count": 42,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "score.rename(columns = {0:\"Score\"}, inplace = True)",
"execution_count": 43,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "score",
"execution_count": 44,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 44,
"data": {
"text/plain": " Score\n1 0.300\n2 0.290\n3 0.315\n4 0.320\n5 0.315\n6 0.310\n7 0.335\n8 0.325\n9 0.340\n10 0.330",
"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>Score</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>1</th>\n <td>0.300</td>\n </tr>\n <tr>\n <th>2</th>\n <td>0.290</td>\n </tr>\n <tr>\n <th>3</th>\n <td>0.315</td>\n </tr>\n <tr>\n <th>4</th>\n <td>0.320</td>\n </tr>\n <tr>\n <th>5</th>\n <td>0.315</td>\n </tr>\n <tr>\n <th>6</th>\n <td>0.310</td>\n </tr>\n <tr>\n <th>7</th>\n <td>0.335</td>\n </tr>\n <tr>\n <th>8</th>\n <td>0.325</td>\n </tr>\n <tr>\n <th>9</th>\n <td>0.340</td>\n </tr>\n <tr>\n <th>10</th>\n <td>0.330</td>\n </tr>\n </tbody>\n</table>\n</div>"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Visualisation of model accuracy\nPlot the model accuracy for the different values of K. Purpose of this task is to visualise the comparison among the various neighbours, as performed in the above task."
},
{
"metadata": {},
"cell_type": "markdown",
"source": "How great they want you to believe knn is:"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "ax = score.plot(kind=\"line\", figsize=(10,6), xticks=range(1,score.index.max()+1));",
"execution_count": 45,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 720x432 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "How good it actually is:"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "ax = score.plot(kind=\"line\", figsize=(10,6), xticks=range(1,score.index.max()+1))\nplt.yticks(np.arange(0, 1.1, .1));",
"execution_count": 46,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 720x432 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"metadata": {
"scrolled": false,
"trusted": true
},
"cell_type": "code",
"source": "plt.figure(figsize=(10, 6))\nplt.plot(range(len(error_rate)), error_rate, color=\"b\", linestyle=\"dashed\", marker=\"o\", markerfacecolor=\"red\", markersize=10)\nplt.xticks(np.arange(0,10,1));",
"execution_count": 47,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 720x432 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
}
],
"metadata": {
"_draft": {
"nbviewer_url": "https://gist.github.com/e7f8ad2a436bb47560319097f101407a"
},
"gist": {
"id": "e7f8ad2a436bb47560319097f101407a",
"data": {
"description": "nuc_machine_learning/Session 4/tutorial_4.ipynb",
"public": true
}
},
"hide_input": false,
"kernelspec": {
"name": "venv",
"display_name": "venv",
"language": "python"
},
"language_info": {
"name": "python",
"version": "3.8.3",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"latex_envs": {
"eqNumInitial": 1,
"eqLabelWithNumbers": true,
"current_citInitial": 1,
"cite_by": "apalike",
"bibliofile": "biblio.bib",
"LaTeX_envs_menu_present": true,
"labels_anchors": false,
"latex_user_defs": false,
"user_envs_cfg": false,
"report_style_numbering": false,
"autoclose": false,
"autocomplete": true,
"hotkeys": {
"equation": "Ctrl-E",
"itemize": "Ctrl-I"
}
},
"toc": {
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": true,
"base_numbering": 1,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
},
"varInspector": {
"window_display": false,
"cols": {
"lenName": 16,
"lenType": 16,
"lenVar": 40
},
"kernels_config": {
"python": {
"library": "var_list.py",
"delete_cmd_prefix": "del ",
"delete_cmd_postfix": "",
"varRefreshCmd": "print(var_dic_list())"
},
"r": {
"library": "var_list.r",
"delete_cmd_prefix": "rm(",
"delete_cmd_postfix": ") ",
"varRefreshCmd": "cat(var_dic_list()) "
}
},
"types_to_exclude": [
"module",
"function",
"builtin_function_or_method",
"instance",
"_Feature"
]
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment