diff --git a/.github/workflows/majid_main.yml b/.github/workflows/majid_main.yml
new file mode 100644
index 0000000..9732799
--- /dev/null
+++ b/.github/workflows/majid_main.yml
@@ -0,0 +1,26 @@
+name: Assignment1
+
+on:
+ push:
+ branches:
+ - Majid-dev
+
+permissions:
+ contents: read
+
+jobs:
+ run_tests:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+
+ - name: Install Python
+ uses: actions/setup-python@v2
+
+ - name: Install black
+ run: pip install black
+
+ - name: Run black
+ run: python -m black --include "\\.py" ./
+
diff --git a/machine_learning/KNNs.ipynb b/machine_learning/KNNs.ipynb
new file mode 100644
index 0000000..2e92140
--- /dev/null
+++ b/machine_learning/KNNs.ipynb
@@ -0,0 +1,969 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Using KNN Algorithm to predict if a person will have diabetes or not"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### importing libraries"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "from sklearn.model_selection import train_test_split\n",
+ "from sklearn.preprocessing import StandardScaler\n",
+ "from sklearn.neighbors import KNeighborsClassifier\n",
+ "from sklearn.metrics import confusion_matrix\n",
+ "from sklearn.metrics import f1_score\n",
+ "from sklearn.metrics import accuracy_score\n",
+ "import seaborn as sns\n",
+ "import matplotlib.pyplot as plt\n",
+ "%matplotlib inline\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### loading the dataset"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "data = pd.read_csv('diabetes.csv')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Pregnancies | \n",
+ " Glucose | \n",
+ " BloodPressure | \n",
+ " SkinThickness | \n",
+ " Insulin | \n",
+ " BMI | \n",
+ " DiabetesPedigreeFunction | \n",
+ " Age | \n",
+ " Outcome | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 6 | \n",
+ " 148 | \n",
+ " 72 | \n",
+ " 35 | \n",
+ " 0 | \n",
+ " 33.6 | \n",
+ " 0.627 | \n",
+ " 50 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 85 | \n",
+ " 66 | \n",
+ " 29 | \n",
+ " 0 | \n",
+ " 26.6 | \n",
+ " 0.351 | \n",
+ " 31 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 8 | \n",
+ " 183 | \n",
+ " 64 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 23.3 | \n",
+ " 0.672 | \n",
+ " 32 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 1 | \n",
+ " 89 | \n",
+ " 66 | \n",
+ " 23 | \n",
+ " 94 | \n",
+ " 28.1 | \n",
+ " 0.167 | \n",
+ " 21 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 0 | \n",
+ " 137 | \n",
+ " 40 | \n",
+ " 35 | \n",
+ " 168 | \n",
+ " 43.1 | \n",
+ " 2.288 | \n",
+ " 33 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
+ "0 6 148 72 35 0 33.6 \n",
+ "1 1 85 66 29 0 26.6 \n",
+ "2 8 183 64 0 0 23.3 \n",
+ "3 1 89 66 23 94 28.1 \n",
+ "4 0 137 40 35 168 43.1 \n",
+ "\n",
+ " DiabetesPedigreeFunction Age Outcome \n",
+ "0 0.627 50 1 \n",
+ "1 0.351 31 0 \n",
+ "2 0.672 32 1 \n",
+ "3 0.167 21 0 \n",
+ "4 2.288 33 1 "
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "data.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Pregnancies | \n",
+ " Glucose | \n",
+ " BloodPressure | \n",
+ " SkinThickness | \n",
+ " Insulin | \n",
+ " BMI | \n",
+ " DiabetesPedigreeFunction | \n",
+ " Age | \n",
+ " Outcome | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 6 | \n",
+ " 148 | \n",
+ " 72 | \n",
+ " 35 | \n",
+ " 0 | \n",
+ " 33.6 | \n",
+ " 0.627 | \n",
+ " 50 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 85 | \n",
+ " 66 | \n",
+ " 29 | \n",
+ " 0 | \n",
+ " 26.6 | \n",
+ " 0.351 | \n",
+ " 31 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 8 | \n",
+ " 183 | \n",
+ " 64 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 23.3 | \n",
+ " 0.672 | \n",
+ " 32 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 1 | \n",
+ " 89 | \n",
+ " 66 | \n",
+ " 23 | \n",
+ " 94 | \n",
+ " 28.1 | \n",
+ " 0.167 | \n",
+ " 21 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 0 | \n",
+ " 137 | \n",
+ " 40 | \n",
+ " 35 | \n",
+ " 168 | \n",
+ " 43.1 | \n",
+ " 2.288 | \n",
+ " 33 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " 5 | \n",
+ " 116 | \n",
+ " 74 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 25.6 | \n",
+ " 0.201 | \n",
+ " 30 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
+ "0 6 148 72 35 0 33.6 \n",
+ "1 1 85 66 29 0 26.6 \n",
+ "2 8 183 64 0 0 23.3 \n",
+ "3 1 89 66 23 94 28.1 \n",
+ "4 0 137 40 35 168 43.1 \n",
+ "5 5 116 74 0 0 25.6 \n",
+ "\n",
+ " DiabetesPedigreeFunction Age Outcome \n",
+ "0 0.627 50 1 \n",
+ "1 0.351 31 0 \n",
+ "2 0.672 32 1 \n",
+ "3 0.167 21 0 \n",
+ "4 2.288 33 1 \n",
+ "5 0.201 30 0 "
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "data[0:6]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Replace columns like [Gluscose,BloodPressure,SkinThickness,BMI,Insulin] with Zero as values with mean of respective column"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "zero_not_accepted = ['Glucose','BloodPressure','SkinThickness','BMI','Insulin']\n",
+ "\n",
+ "for col in zero_not_accepted:\n",
+ " data[col]= data[col].replace(0,np.NaN)\n",
+ " mean = int(data[col].mean(skipna=True))\n",
+ " data[col] = data[col].replace(np.NaN,mean)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### extracting independent variables"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "X = data.iloc[:,0:8]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### extracting dependent variable"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "y = data.iloc[:,8]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Explorning data to know relation before processing"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "sns.heatmap(data.corr())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### splitting dataset into training and testing set"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=0)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Pregnancies | \n",
+ " Glucose | \n",
+ " BloodPressure | \n",
+ " SkinThickness | \n",
+ " Insulin | \n",
+ " BMI | \n",
+ " DiabetesPedigreeFunction | \n",
+ " Age | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 603 | \n",
+ " 7 | \n",
+ " 150.0 | \n",
+ " 78.0 | \n",
+ " 29.0 | \n",
+ " 126.0 | \n",
+ " 35.2 | \n",
+ " 0.692 | \n",
+ " 54 | \n",
+ "
\n",
+ " \n",
+ " 118 | \n",
+ " 4 | \n",
+ " 97.0 | \n",
+ " 60.0 | \n",
+ " 23.0 | \n",
+ " 155.0 | \n",
+ " 28.2 | \n",
+ " 0.443 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ " 247 | \n",
+ " 0 | \n",
+ " 165.0 | \n",
+ " 90.0 | \n",
+ " 33.0 | \n",
+ " 680.0 | \n",
+ " 52.3 | \n",
+ " 0.427 | \n",
+ " 23 | \n",
+ "
\n",
+ " \n",
+ " 157 | \n",
+ " 1 | \n",
+ " 109.0 | \n",
+ " 56.0 | \n",
+ " 21.0 | \n",
+ " 135.0 | \n",
+ " 25.2 | \n",
+ " 0.833 | \n",
+ " 23 | \n",
+ "
\n",
+ " \n",
+ " 468 | \n",
+ " 8 | \n",
+ " 120.0 | \n",
+ " 72.0 | \n",
+ " 29.0 | \n",
+ " 155.0 | \n",
+ " 30.0 | \n",
+ " 0.183 | \n",
+ " 38 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 763 | \n",
+ " 10 | \n",
+ " 101.0 | \n",
+ " 76.0 | \n",
+ " 48.0 | \n",
+ " 180.0 | \n",
+ " 32.9 | \n",
+ " 0.171 | \n",
+ " 63 | \n",
+ "
\n",
+ " \n",
+ " 192 | \n",
+ " 7 | \n",
+ " 159.0 | \n",
+ " 66.0 | \n",
+ " 29.0 | \n",
+ " 155.0 | \n",
+ " 30.4 | \n",
+ " 0.383 | \n",
+ " 36 | \n",
+ "
\n",
+ " \n",
+ " 629 | \n",
+ " 4 | \n",
+ " 94.0 | \n",
+ " 65.0 | \n",
+ " 22.0 | \n",
+ " 155.0 | \n",
+ " 24.7 | \n",
+ " 0.148 | \n",
+ " 21 | \n",
+ "
\n",
+ " \n",
+ " 559 | \n",
+ " 11 | \n",
+ " 85.0 | \n",
+ " 74.0 | \n",
+ " 29.0 | \n",
+ " 155.0 | \n",
+ " 30.1 | \n",
+ " 0.300 | \n",
+ " 35 | \n",
+ "
\n",
+ " \n",
+ " 684 | \n",
+ " 5 | \n",
+ " 136.0 | \n",
+ " 82.0 | \n",
+ " 29.0 | \n",
+ " 155.0 | \n",
+ " 32.0 | \n",
+ " 0.640 | \n",
+ " 69 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
614 rows × 8 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
+ "603 7 150.0 78.0 29.0 126.0 35.2 \n",
+ "118 4 97.0 60.0 23.0 155.0 28.2 \n",
+ "247 0 165.0 90.0 33.0 680.0 52.3 \n",
+ "157 1 109.0 56.0 21.0 135.0 25.2 \n",
+ "468 8 120.0 72.0 29.0 155.0 30.0 \n",
+ ".. ... ... ... ... ... ... \n",
+ "763 10 101.0 76.0 48.0 180.0 32.9 \n",
+ "192 7 159.0 66.0 29.0 155.0 30.4 \n",
+ "629 4 94.0 65.0 22.0 155.0 24.7 \n",
+ "559 11 85.0 74.0 29.0 155.0 30.1 \n",
+ "684 5 136.0 82.0 29.0 155.0 32.0 \n",
+ "\n",
+ " DiabetesPedigreeFunction Age \n",
+ "603 0.692 54 \n",
+ "118 0.443 22 \n",
+ "247 0.427 23 \n",
+ "157 0.833 23 \n",
+ "468 0.183 38 \n",
+ ".. ... ... \n",
+ "763 0.171 63 \n",
+ "192 0.383 36 \n",
+ "629 0.148 21 \n",
+ "559 0.300 35 \n",
+ "684 0.640 69 \n",
+ "\n",
+ "[614 rows x 8 columns]"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "X_train"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Pregnancies | \n",
+ " Glucose | \n",
+ " BloodPressure | \n",
+ " SkinThickness | \n",
+ " Insulin | \n",
+ " BMI | \n",
+ " DiabetesPedigreeFunction | \n",
+ " Age | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 661 | \n",
+ " 1 | \n",
+ " 199.0 | \n",
+ " 76.0 | \n",
+ " 43.0 | \n",
+ " 155.0 | \n",
+ " 42.9 | \n",
+ " 1.394 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ " 122 | \n",
+ " 2 | \n",
+ " 107.0 | \n",
+ " 74.0 | \n",
+ " 30.0 | \n",
+ " 100.0 | \n",
+ " 33.6 | \n",
+ " 0.404 | \n",
+ " 23 | \n",
+ "
\n",
+ " \n",
+ " 113 | \n",
+ " 4 | \n",
+ " 76.0 | \n",
+ " 62.0 | \n",
+ " 29.0 | \n",
+ " 155.0 | \n",
+ " 34.0 | \n",
+ " 0.391 | \n",
+ " 25 | \n",
+ "
\n",
+ " \n",
+ " 14 | \n",
+ " 5 | \n",
+ " 166.0 | \n",
+ " 72.0 | \n",
+ " 19.0 | \n",
+ " 175.0 | \n",
+ " 25.8 | \n",
+ " 0.587 | \n",
+ " 51 | \n",
+ "
\n",
+ " \n",
+ " 529 | \n",
+ " 0 | \n",
+ " 111.0 | \n",
+ " 65.0 | \n",
+ " 29.0 | \n",
+ " 155.0 | \n",
+ " 24.6 | \n",
+ " 0.660 | \n",
+ " 31 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 476 | \n",
+ " 2 | \n",
+ " 105.0 | \n",
+ " 80.0 | \n",
+ " 45.0 | \n",
+ " 191.0 | \n",
+ " 33.7 | \n",
+ " 0.711 | \n",
+ " 29 | \n",
+ "
\n",
+ " \n",
+ " 482 | \n",
+ " 4 | \n",
+ " 85.0 | \n",
+ " 58.0 | \n",
+ " 22.0 | \n",
+ " 49.0 | \n",
+ " 27.8 | \n",
+ " 0.306 | \n",
+ " 28 | \n",
+ "
\n",
+ " \n",
+ " 230 | \n",
+ " 4 | \n",
+ " 142.0 | \n",
+ " 86.0 | \n",
+ " 29.0 | \n",
+ " 155.0 | \n",
+ " 44.0 | \n",
+ " 0.645 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ " 527 | \n",
+ " 3 | \n",
+ " 116.0 | \n",
+ " 74.0 | \n",
+ " 15.0 | \n",
+ " 105.0 | \n",
+ " 26.3 | \n",
+ " 0.107 | \n",
+ " 24 | \n",
+ "
\n",
+ " \n",
+ " 380 | \n",
+ " 1 | \n",
+ " 107.0 | \n",
+ " 72.0 | \n",
+ " 30.0 | \n",
+ " 82.0 | \n",
+ " 30.8 | \n",
+ " 0.821 | \n",
+ " 24 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
154 rows × 8 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
+ "661 1 199.0 76.0 43.0 155.0 42.9 \n",
+ "122 2 107.0 74.0 30.0 100.0 33.6 \n",
+ "113 4 76.0 62.0 29.0 155.0 34.0 \n",
+ "14 5 166.0 72.0 19.0 175.0 25.8 \n",
+ "529 0 111.0 65.0 29.0 155.0 24.6 \n",
+ ".. ... ... ... ... ... ... \n",
+ "476 2 105.0 80.0 45.0 191.0 33.7 \n",
+ "482 4 85.0 58.0 22.0 49.0 27.8 \n",
+ "230 4 142.0 86.0 29.0 155.0 44.0 \n",
+ "527 3 116.0 74.0 15.0 105.0 26.3 \n",
+ "380 1 107.0 72.0 30.0 82.0 30.8 \n",
+ "\n",
+ " DiabetesPedigreeFunction Age \n",
+ "661 1.394 22 \n",
+ "122 0.404 23 \n",
+ "113 0.391 25 \n",
+ "14 0.587 51 \n",
+ "529 0.660 31 \n",
+ ".. ... ... \n",
+ "476 0.711 29 \n",
+ "482 0.306 28 \n",
+ "230 0.645 22 \n",
+ "527 0.107 24 \n",
+ "380 0.821 24 \n",
+ "\n",
+ "[154 rows x 8 columns]"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "X_test"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import math\n",
+ "def Euclidian_Distance(test,train):\n",
+ " distance=0\n",
+ " for x in range(len(test)):\n",
+ " distance += pow((test[x] - train[x]), 2)\n",
+ " return math.sqrt(distance)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def KNNClassifier(K):\n",
+ " labels=[]\n",
+ " num_test = X_test.shape[0]\n",
+ " num_train = X_train.shape[0]\n",
+ " for i in range(num_test):\n",
+ " distance=[] \n",
+ " index=[]\n",
+ " for j in range(num_train):\n",
+ " distance.append(Euclidian_Distance(X_test.iloc[i],X_train.iloc[j]))\n",
+ " index.append(j)\n",
+ " #dis_list = zip(distances, y_train)\n",
+ " #sorted_list = sorted(dis_list)\n",
+ " df1=pd.DataFrame({'Dis':distance,'ind':index})\n",
+ " df1=df1.sort_values('Dis')\n",
+ " zero_count = 0\n",
+ " one_count = 0\n",
+ " for i in df1['ind'].head(K):\n",
+ " if y_train.iloc[i] == 1:\n",
+ " one_count += 1\n",
+ " else:\n",
+ " zero_count += 1\n",
+ " if one_count >= zero_count:\n",
+ " labels.append(1)\n",
+ " else:\n",
+ " labels.append(0)\n",
+ " return labels"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "labels=KNNClassifier(3)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "154"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "y_test = np.array(y_test)\n",
+ "labels=np.array(labels)\n",
+ "labels.shape[0]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "72.72727272727273 %\n"
+ ]
+ }
+ ],
+ "source": [
+ "y_test = list(y_test)\n",
+ "tcount = 0\n",
+ "for i in range(len(labels)):\n",
+ " if labels[i] == y_test[i]:\n",
+ " tcount += 1\n",
+ "print((tcount / len(y_test))*100,\"%\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "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.9.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/machine_learning/KNNs.py b/machine_learning/KNNs.py
new file mode 100644
index 0000000..512c1b2
--- /dev/null
+++ b/machine_learning/KNNs.py
@@ -0,0 +1,178 @@
+#!/usr/bin/env python
+# coding: utf-8
+
+# # Using KNN Algorithm to predict if a person will have diabetes or not
+
+# ### importing libraries
+
+# In[1]:
+
+
+import numpy as np
+import pandas as pd
+from sklearn.model_selection import train_test_split
+from sklearn.preprocessing import StandardScaler
+from sklearn.neighbors import KNeighborsClassifier
+from sklearn.metrics import confusion_matrix
+from sklearn.metrics import f1_score
+from sklearn.metrics import accuracy_score
+import seaborn as sns
+import matplotlib.pyplot as plt
+get_ipython().run_line_magic('matplotlib', 'inline')
+
+
+# ### loading the dataset
+
+# In[2]:
+
+
+data = pd.read_csv('diabetes.csv')
+
+
+# In[3]:
+
+
+data.head()
+
+
+# In[4]:
+
+
+data[0:6]
+
+
+# #### Replace columns like [Gluscose,BloodPressure,SkinThickness,BMI,Insulin] with Zero as values with mean of respective column
+
+# In[5]:
+
+
+zero_not_accepted = ['Glucose','BloodPressure','SkinThickness','BMI','Insulin']
+
+for col in zero_not_accepted:
+ data[col]= data[col].replace(0,np.NaN)
+ mean = int(data[col].mean(skipna=True))
+ data[col] = data[col].replace(np.NaN,mean)
+
+
+# ### extracting independent variables
+
+# In[6]:
+
+
+X = data.iloc[:,0:8]
+
+
+# ### extracting dependent variable
+
+# In[7]:
+
+
+y = data.iloc[:,8]
+
+
+# ### Explorning data to know relation before processing
+
+# In[8]:
+
+
+sns.heatmap(data.corr())
+
+
+# ### splitting dataset into training and testing set
+
+# In[9]:
+
+
+X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=0)
+
+
+# In[10]:
+
+
+X_train
+
+
+# In[11]:
+
+
+X_test
+
+
+# In[12]:
+
+
+import math
+def Euclidian_Distance(test,train):
+ distance=0
+ for x in range(len(test)):
+ distance += pow((test[x] - train[x]), 2)
+ return math.sqrt(distance)
+
+
+# In[13]:
+
+
+def KNNClassifier(K):
+ labels=[]
+ num_test = X_test.shape[0]
+ num_train = X_train.shape[0]
+ for i in range(num_test):
+ distance=[]
+ index=[]
+ for j in range(num_train):
+ distance.append(Euclidian_Distance(X_test.iloc[i],X_train.iloc[j]))
+ index.append(j)
+ #dis_list = zip(distances, y_train)
+ #sorted_list = sorted(dis_list)
+ df1=pd.DataFrame({'Dis':distance,'ind':index})
+ df1=df1.sort_values('Dis')
+ zero_count = 0
+ one_count = 0
+ for i in df1['ind'].head(K):
+ if y_train.iloc[i] == 1:
+ one_count += 1
+ else:
+ zero_count += 1
+ if one_count >= zero_count:
+ labels.append(1)
+ else:
+ labels.append(0)
+ return labels
+
+
+# In[14]:
+
+
+labels=KNNClassifier(3)
+
+
+# In[ ]:
+
+
+
+
+
+# In[16]:
+
+
+y_test = np.array(y_test)
+labels=np.array(labels)
+labels.shape[0]
+
+
+# In[18]:
+
+
+y_test = list(y_test)
+tcount = 0
+for i in range(len(labels)):
+ if labels[i] == y_test[i]:
+ tcount += 1
+print((tcount / len(y_test))*100,"%")
+
+
+# In[ ]:
+
+
+
+
diff --git a/machine_learning/diabetes.csv b/machine_learning/diabetes.csv
new file mode 100644
index 0000000..dcaf5fe
--- /dev/null
+++ b/machine_learning/diabetes.csv
@@ -0,0 +1,769 @@
+Pregnancies,Glucose,BloodPressure,SkinThickness,Insulin,BMI,DiabetesPedigreeFunction,Age,Outcome
+6,148,72,35,0,33.6,0.627,50,1
+1,85,66,29,0,26.6,0.351,31,0
+8,183,64,0,0,23.3,0.672,32,1
+1,89,66,23,94,28.1,0.167,21,0
+0,137,40,35,168,43.1,2.288,33,1
+5,116,74,0,0,25.6,0.201,30,0
+3,78,50,32,88,31,0.248,26,1
+10,115,0,0,0,35.3,0.134,29,0
+2,197,70,45,543,30.5,0.158,53,1
+8,125,96,0,0,0,0.232,54,1
+4,110,92,0,0,37.6,0.191,30,0
+10,168,74,0,0,38,0.537,34,1
+10,139,80,0,0,27.1,1.441,57,0
+1,189,60,23,846,30.1,0.398,59,1
+5,166,72,19,175,25.8,0.587,51,1
+7,100,0,0,0,30,0.484,32,1
+0,118,84,47,230,45.8,0.551,31,1
+7,107,74,0,0,29.6,0.254,31,1
+1,103,30,38,83,43.3,0.183,33,0
+1,115,70,30,96,34.6,0.529,32,1
+3,126,88,41,235,39.3,0.704,27,0
+8,99,84,0,0,35.4,0.388,50,0
+7,196,90,0,0,39.8,0.451,41,1
+9,119,80,35,0,29,0.263,29,1
+11,143,94,33,146,36.6,0.254,51,1
+10,125,70,26,115,31.1,0.205,41,1
+7,147,76,0,0,39.4,0.257,43,1
+1,97,66,15,140,23.2,0.487,22,0
+13,145,82,19,110,22.2,0.245,57,0
+5,117,92,0,0,34.1,0.337,38,0
+5,109,75,26,0,36,0.546,60,0
+3,158,76,36,245,31.6,0.851,28,1
+3,88,58,11,54,24.8,0.267,22,0
+6,92,92,0,0,19.9,0.188,28,0
+10,122,78,31,0,27.6,0.512,45,0
+4,103,60,33,192,24,0.966,33,0
+11,138,76,0,0,33.2,0.42,35,0
+9,102,76,37,0,32.9,0.665,46,1
+2,90,68,42,0,38.2,0.503,27,1
+4,111,72,47,207,37.1,1.39,56,1
+3,180,64,25,70,34,0.271,26,0
+7,133,84,0,0,40.2,0.696,37,0
+7,106,92,18,0,22.7,0.235,48,0
+9,171,110,24,240,45.4,0.721,54,1
+7,159,64,0,0,27.4,0.294,40,0
+0,180,66,39,0,42,1.893,25,1
+1,146,56,0,0,29.7,0.564,29,0
+2,71,70,27,0,28,0.586,22,0
+7,103,66,32,0,39.1,0.344,31,1
+7,105,0,0,0,0,0.305,24,0
+1,103,80,11,82,19.4,0.491,22,0
+1,101,50,15,36,24.2,0.526,26,0
+5,88,66,21,23,24.4,0.342,30,0
+8,176,90,34,300,33.7,0.467,58,1
+7,150,66,42,342,34.7,0.718,42,0
+1,73,50,10,0,23,0.248,21,0
+7,187,68,39,304,37.7,0.254,41,1
+0,100,88,60,110,46.8,0.962,31,0
+0,146,82,0,0,40.5,1.781,44,0
+0,105,64,41,142,41.5,0.173,22,0
+2,84,0,0,0,0,0.304,21,0
+8,133,72,0,0,32.9,0.27,39,1
+5,44,62,0,0,25,0.587,36,0
+2,141,58,34,128,25.4,0.699,24,0
+7,114,66,0,0,32.8,0.258,42,1
+5,99,74,27,0,29,0.203,32,0
+0,109,88,30,0,32.5,0.855,38,1
+2,109,92,0,0,42.7,0.845,54,0
+1,95,66,13,38,19.6,0.334,25,0
+4,146,85,27,100,28.9,0.189,27,0
+2,100,66,20,90,32.9,0.867,28,1
+5,139,64,35,140,28.6,0.411,26,0
+13,126,90,0,0,43.4,0.583,42,1
+4,129,86,20,270,35.1,0.231,23,0
+1,79,75,30,0,32,0.396,22,0
+1,0,48,20,0,24.7,0.14,22,0
+7,62,78,0,0,32.6,0.391,41,0
+5,95,72,33,0,37.7,0.37,27,0
+0,131,0,0,0,43.2,0.27,26,1
+2,112,66,22,0,25,0.307,24,0
+3,113,44,13,0,22.4,0.14,22,0
+2,74,0,0,0,0,0.102,22,0
+7,83,78,26,71,29.3,0.767,36,0
+0,101,65,28,0,24.6,0.237,22,0
+5,137,108,0,0,48.8,0.227,37,1
+2,110,74,29,125,32.4,0.698,27,0
+13,106,72,54,0,36.6,0.178,45,0
+2,100,68,25,71,38.5,0.324,26,0
+15,136,70,32,110,37.1,0.153,43,1
+1,107,68,19,0,26.5,0.165,24,0
+1,80,55,0,0,19.1,0.258,21,0
+4,123,80,15,176,32,0.443,34,0
+7,81,78,40,48,46.7,0.261,42,0
+4,134,72,0,0,23.8,0.277,60,1
+2,142,82,18,64,24.7,0.761,21,0
+6,144,72,27,228,33.9,0.255,40,0
+2,92,62,28,0,31.6,0.13,24,0
+1,71,48,18,76,20.4,0.323,22,0
+6,93,50,30,64,28.7,0.356,23,0
+1,122,90,51,220,49.7,0.325,31,1
+1,163,72,0,0,39,1.222,33,1
+1,151,60,0,0,26.1,0.179,22,0
+0,125,96,0,0,22.5,0.262,21,0
+1,81,72,18,40,26.6,0.283,24,0
+2,85,65,0,0,39.6,0.93,27,0
+1,126,56,29,152,28.7,0.801,21,0
+1,96,122,0,0,22.4,0.207,27,0
+4,144,58,28,140,29.5,0.287,37,0
+3,83,58,31,18,34.3,0.336,25,0
+0,95,85,25,36,37.4,0.247,24,1
+3,171,72,33,135,33.3,0.199,24,1
+8,155,62,26,495,34,0.543,46,1
+1,89,76,34,37,31.2,0.192,23,0
+4,76,62,0,0,34,0.391,25,0
+7,160,54,32,175,30.5,0.588,39,1
+4,146,92,0,0,31.2,0.539,61,1
+5,124,74,0,0,34,0.22,38,1
+5,78,48,0,0,33.7,0.654,25,0
+4,97,60,23,0,28.2,0.443,22,0
+4,99,76,15,51,23.2,0.223,21,0
+0,162,76,56,100,53.2,0.759,25,1
+6,111,64,39,0,34.2,0.26,24,0
+2,107,74,30,100,33.6,0.404,23,0
+5,132,80,0,0,26.8,0.186,69,0
+0,113,76,0,0,33.3,0.278,23,1
+1,88,30,42,99,55,0.496,26,1
+3,120,70,30,135,42.9,0.452,30,0
+1,118,58,36,94,33.3,0.261,23,0
+1,117,88,24,145,34.5,0.403,40,1
+0,105,84,0,0,27.9,0.741,62,1
+4,173,70,14,168,29.7,0.361,33,1
+9,122,56,0,0,33.3,1.114,33,1
+3,170,64,37,225,34.5,0.356,30,1
+8,84,74,31,0,38.3,0.457,39,0
+2,96,68,13,49,21.1,0.647,26,0
+2,125,60,20,140,33.8,0.088,31,0
+0,100,70,26,50,30.8,0.597,21,0
+0,93,60,25,92,28.7,0.532,22,0
+0,129,80,0,0,31.2,0.703,29,0
+5,105,72,29,325,36.9,0.159,28,0
+3,128,78,0,0,21.1,0.268,55,0
+5,106,82,30,0,39.5,0.286,38,0
+2,108,52,26,63,32.5,0.318,22,0
+10,108,66,0,0,32.4,0.272,42,1
+4,154,62,31,284,32.8,0.237,23,0
+0,102,75,23,0,0,0.572,21,0
+9,57,80,37,0,32.8,0.096,41,0
+2,106,64,35,119,30.5,1.4,34,0
+5,147,78,0,0,33.7,0.218,65,0
+2,90,70,17,0,27.3,0.085,22,0
+1,136,74,50,204,37.4,0.399,24,0
+4,114,65,0,0,21.9,0.432,37,0
+9,156,86,28,155,34.3,1.189,42,1
+1,153,82,42,485,40.6,0.687,23,0
+8,188,78,0,0,47.9,0.137,43,1
+7,152,88,44,0,50,0.337,36,1
+2,99,52,15,94,24.6,0.637,21,0
+1,109,56,21,135,25.2,0.833,23,0
+2,88,74,19,53,29,0.229,22,0
+17,163,72,41,114,40.9,0.817,47,1
+4,151,90,38,0,29.7,0.294,36,0
+7,102,74,40,105,37.2,0.204,45,0
+0,114,80,34,285,44.2,0.167,27,0
+2,100,64,23,0,29.7,0.368,21,0
+0,131,88,0,0,31.6,0.743,32,1
+6,104,74,18,156,29.9,0.722,41,1
+3,148,66,25,0,32.5,0.256,22,0
+4,120,68,0,0,29.6,0.709,34,0
+4,110,66,0,0,31.9,0.471,29,0
+3,111,90,12,78,28.4,0.495,29,0
+6,102,82,0,0,30.8,0.18,36,1
+6,134,70,23,130,35.4,0.542,29,1
+2,87,0,23,0,28.9,0.773,25,0
+1,79,60,42,48,43.5,0.678,23,0
+2,75,64,24,55,29.7,0.37,33,0
+8,179,72,42,130,32.7,0.719,36,1
+6,85,78,0,0,31.2,0.382,42,0
+0,129,110,46,130,67.1,0.319,26,1
+5,143,78,0,0,45,0.19,47,0
+5,130,82,0,0,39.1,0.956,37,1
+6,87,80,0,0,23.2,0.084,32,0
+0,119,64,18,92,34.9,0.725,23,0
+1,0,74,20,23,27.7,0.299,21,0
+5,73,60,0,0,26.8,0.268,27,0
+4,141,74,0,0,27.6,0.244,40,0
+7,194,68,28,0,35.9,0.745,41,1
+8,181,68,36,495,30.1,0.615,60,1
+1,128,98,41,58,32,1.321,33,1
+8,109,76,39,114,27.9,0.64,31,1
+5,139,80,35,160,31.6,0.361,25,1
+3,111,62,0,0,22.6,0.142,21,0
+9,123,70,44,94,33.1,0.374,40,0
+7,159,66,0,0,30.4,0.383,36,1
+11,135,0,0,0,52.3,0.578,40,1
+8,85,55,20,0,24.4,0.136,42,0
+5,158,84,41,210,39.4,0.395,29,1
+1,105,58,0,0,24.3,0.187,21,0
+3,107,62,13,48,22.9,0.678,23,1
+4,109,64,44,99,34.8,0.905,26,1
+4,148,60,27,318,30.9,0.15,29,1
+0,113,80,16,0,31,0.874,21,0
+1,138,82,0,0,40.1,0.236,28,0
+0,108,68,20,0,27.3,0.787,32,0
+2,99,70,16,44,20.4,0.235,27,0
+6,103,72,32,190,37.7,0.324,55,0
+5,111,72,28,0,23.9,0.407,27,0
+8,196,76,29,280,37.5,0.605,57,1
+5,162,104,0,0,37.7,0.151,52,1
+1,96,64,27,87,33.2,0.289,21,0
+7,184,84,33,0,35.5,0.355,41,1
+2,81,60,22,0,27.7,0.29,25,0
+0,147,85,54,0,42.8,0.375,24,0
+7,179,95,31,0,34.2,0.164,60,0
+0,140,65,26,130,42.6,0.431,24,1
+9,112,82,32,175,34.2,0.26,36,1
+12,151,70,40,271,41.8,0.742,38,1
+5,109,62,41,129,35.8,0.514,25,1
+6,125,68,30,120,30,0.464,32,0
+5,85,74,22,0,29,1.224,32,1
+5,112,66,0,0,37.8,0.261,41,1
+0,177,60,29,478,34.6,1.072,21,1
+2,158,90,0,0,31.6,0.805,66,1
+7,119,0,0,0,25.2,0.209,37,0
+7,142,60,33,190,28.8,0.687,61,0
+1,100,66,15,56,23.6,0.666,26,0
+1,87,78,27,32,34.6,0.101,22,0
+0,101,76,0,0,35.7,0.198,26,0
+3,162,52,38,0,37.2,0.652,24,1
+4,197,70,39,744,36.7,2.329,31,0
+0,117,80,31,53,45.2,0.089,24,0
+4,142,86,0,0,44,0.645,22,1
+6,134,80,37,370,46.2,0.238,46,1
+1,79,80,25,37,25.4,0.583,22,0
+4,122,68,0,0,35,0.394,29,0
+3,74,68,28,45,29.7,0.293,23,0
+4,171,72,0,0,43.6,0.479,26,1
+7,181,84,21,192,35.9,0.586,51,1
+0,179,90,27,0,44.1,0.686,23,1
+9,164,84,21,0,30.8,0.831,32,1
+0,104,76,0,0,18.4,0.582,27,0
+1,91,64,24,0,29.2,0.192,21,0
+4,91,70,32,88,33.1,0.446,22,0
+3,139,54,0,0,25.6,0.402,22,1
+6,119,50,22,176,27.1,1.318,33,1
+2,146,76,35,194,38.2,0.329,29,0
+9,184,85,15,0,30,1.213,49,1
+10,122,68,0,0,31.2,0.258,41,0
+0,165,90,33,680,52.3,0.427,23,0
+9,124,70,33,402,35.4,0.282,34,0
+1,111,86,19,0,30.1,0.143,23,0
+9,106,52,0,0,31.2,0.38,42,0
+2,129,84,0,0,28,0.284,27,0
+2,90,80,14,55,24.4,0.249,24,0
+0,86,68,32,0,35.8,0.238,25,0
+12,92,62,7,258,27.6,0.926,44,1
+1,113,64,35,0,33.6,0.543,21,1
+3,111,56,39,0,30.1,0.557,30,0
+2,114,68,22,0,28.7,0.092,25,0
+1,193,50,16,375,25.9,0.655,24,0
+11,155,76,28,150,33.3,1.353,51,1
+3,191,68,15,130,30.9,0.299,34,0
+3,141,0,0,0,30,0.761,27,1
+4,95,70,32,0,32.1,0.612,24,0
+3,142,80,15,0,32.4,0.2,63,0
+4,123,62,0,0,32,0.226,35,1
+5,96,74,18,67,33.6,0.997,43,0
+0,138,0,0,0,36.3,0.933,25,1
+2,128,64,42,0,40,1.101,24,0
+0,102,52,0,0,25.1,0.078,21,0
+2,146,0,0,0,27.5,0.24,28,1
+10,101,86,37,0,45.6,1.136,38,1
+2,108,62,32,56,25.2,0.128,21,0
+3,122,78,0,0,23,0.254,40,0
+1,71,78,50,45,33.2,0.422,21,0
+13,106,70,0,0,34.2,0.251,52,0
+2,100,70,52,57,40.5,0.677,25,0
+7,106,60,24,0,26.5,0.296,29,1
+0,104,64,23,116,27.8,0.454,23,0
+5,114,74,0,0,24.9,0.744,57,0
+2,108,62,10,278,25.3,0.881,22,0
+0,146,70,0,0,37.9,0.334,28,1
+10,129,76,28,122,35.9,0.28,39,0
+7,133,88,15,155,32.4,0.262,37,0
+7,161,86,0,0,30.4,0.165,47,1
+2,108,80,0,0,27,0.259,52,1
+7,136,74,26,135,26,0.647,51,0
+5,155,84,44,545,38.7,0.619,34,0
+1,119,86,39,220,45.6,0.808,29,1
+4,96,56,17,49,20.8,0.34,26,0
+5,108,72,43,75,36.1,0.263,33,0
+0,78,88,29,40,36.9,0.434,21,0
+0,107,62,30,74,36.6,0.757,25,1
+2,128,78,37,182,43.3,1.224,31,1
+1,128,48,45,194,40.5,0.613,24,1
+0,161,50,0,0,21.9,0.254,65,0
+6,151,62,31,120,35.5,0.692,28,0
+2,146,70,38,360,28,0.337,29,1
+0,126,84,29,215,30.7,0.52,24,0
+14,100,78,25,184,36.6,0.412,46,1
+8,112,72,0,0,23.6,0.84,58,0
+0,167,0,0,0,32.3,0.839,30,1
+2,144,58,33,135,31.6,0.422,25,1
+5,77,82,41,42,35.8,0.156,35,0
+5,115,98,0,0,52.9,0.209,28,1
+3,150,76,0,0,21,0.207,37,0
+2,120,76,37,105,39.7,0.215,29,0
+10,161,68,23,132,25.5,0.326,47,1
+0,137,68,14,148,24.8,0.143,21,0
+0,128,68,19,180,30.5,1.391,25,1
+2,124,68,28,205,32.9,0.875,30,1
+6,80,66,30,0,26.2,0.313,41,0
+0,106,70,37,148,39.4,0.605,22,0
+2,155,74,17,96,26.6,0.433,27,1
+3,113,50,10,85,29.5,0.626,25,0
+7,109,80,31,0,35.9,1.127,43,1
+2,112,68,22,94,34.1,0.315,26,0
+3,99,80,11,64,19.3,0.284,30,0
+3,182,74,0,0,30.5,0.345,29,1
+3,115,66,39,140,38.1,0.15,28,0
+6,194,78,0,0,23.5,0.129,59,1
+4,129,60,12,231,27.5,0.527,31,0
+3,112,74,30,0,31.6,0.197,25,1
+0,124,70,20,0,27.4,0.254,36,1
+13,152,90,33,29,26.8,0.731,43,1
+2,112,75,32,0,35.7,0.148,21,0
+1,157,72,21,168,25.6,0.123,24,0
+1,122,64,32,156,35.1,0.692,30,1
+10,179,70,0,0,35.1,0.2,37,0
+2,102,86,36,120,45.5,0.127,23,1
+6,105,70,32,68,30.8,0.122,37,0
+8,118,72,19,0,23.1,1.476,46,0
+2,87,58,16,52,32.7,0.166,25,0
+1,180,0,0,0,43.3,0.282,41,1
+12,106,80,0,0,23.6,0.137,44,0
+1,95,60,18,58,23.9,0.26,22,0
+0,165,76,43,255,47.9,0.259,26,0
+0,117,0,0,0,33.8,0.932,44,0
+5,115,76,0,0,31.2,0.343,44,1
+9,152,78,34,171,34.2,0.893,33,1
+7,178,84,0,0,39.9,0.331,41,1
+1,130,70,13,105,25.9,0.472,22,0
+1,95,74,21,73,25.9,0.673,36,0
+1,0,68,35,0,32,0.389,22,0
+5,122,86,0,0,34.7,0.29,33,0
+8,95,72,0,0,36.8,0.485,57,0
+8,126,88,36,108,38.5,0.349,49,0
+1,139,46,19,83,28.7,0.654,22,0
+3,116,0,0,0,23.5,0.187,23,0
+3,99,62,19,74,21.8,0.279,26,0
+5,0,80,32,0,41,0.346,37,1
+4,92,80,0,0,42.2,0.237,29,0
+4,137,84,0,0,31.2,0.252,30,0
+3,61,82,28,0,34.4,0.243,46,0
+1,90,62,12,43,27.2,0.58,24,0
+3,90,78,0,0,42.7,0.559,21,0
+9,165,88,0,0,30.4,0.302,49,1
+1,125,50,40,167,33.3,0.962,28,1
+13,129,0,30,0,39.9,0.569,44,1
+12,88,74,40,54,35.3,0.378,48,0
+1,196,76,36,249,36.5,0.875,29,1
+5,189,64,33,325,31.2,0.583,29,1
+5,158,70,0,0,29.8,0.207,63,0
+5,103,108,37,0,39.2,0.305,65,0
+4,146,78,0,0,38.5,0.52,67,1
+4,147,74,25,293,34.9,0.385,30,0
+5,99,54,28,83,34,0.499,30,0
+6,124,72,0,0,27.6,0.368,29,1
+0,101,64,17,0,21,0.252,21,0
+3,81,86,16,66,27.5,0.306,22,0
+1,133,102,28,140,32.8,0.234,45,1
+3,173,82,48,465,38.4,2.137,25,1
+0,118,64,23,89,0,1.731,21,0
+0,84,64,22,66,35.8,0.545,21,0
+2,105,58,40,94,34.9,0.225,25,0
+2,122,52,43,158,36.2,0.816,28,0
+12,140,82,43,325,39.2,0.528,58,1
+0,98,82,15,84,25.2,0.299,22,0
+1,87,60,37,75,37.2,0.509,22,0
+4,156,75,0,0,48.3,0.238,32,1
+0,93,100,39,72,43.4,1.021,35,0
+1,107,72,30,82,30.8,0.821,24,0
+0,105,68,22,0,20,0.236,22,0
+1,109,60,8,182,25.4,0.947,21,0
+1,90,62,18,59,25.1,1.268,25,0
+1,125,70,24,110,24.3,0.221,25,0
+1,119,54,13,50,22.3,0.205,24,0
+5,116,74,29,0,32.3,0.66,35,1
+8,105,100,36,0,43.3,0.239,45,1
+5,144,82,26,285,32,0.452,58,1
+3,100,68,23,81,31.6,0.949,28,0
+1,100,66,29,196,32,0.444,42,0
+5,166,76,0,0,45.7,0.34,27,1
+1,131,64,14,415,23.7,0.389,21,0
+4,116,72,12,87,22.1,0.463,37,0
+4,158,78,0,0,32.9,0.803,31,1
+2,127,58,24,275,27.7,1.6,25,0
+3,96,56,34,115,24.7,0.944,39,0
+0,131,66,40,0,34.3,0.196,22,1
+3,82,70,0,0,21.1,0.389,25,0
+3,193,70,31,0,34.9,0.241,25,1
+4,95,64,0,0,32,0.161,31,1
+6,137,61,0,0,24.2,0.151,55,0
+5,136,84,41,88,35,0.286,35,1
+9,72,78,25,0,31.6,0.28,38,0
+5,168,64,0,0,32.9,0.135,41,1
+2,123,48,32,165,42.1,0.52,26,0
+4,115,72,0,0,28.9,0.376,46,1
+0,101,62,0,0,21.9,0.336,25,0
+8,197,74,0,0,25.9,1.191,39,1
+1,172,68,49,579,42.4,0.702,28,1
+6,102,90,39,0,35.7,0.674,28,0
+1,112,72,30,176,34.4,0.528,25,0
+1,143,84,23,310,42.4,1.076,22,0
+1,143,74,22,61,26.2,0.256,21,0
+0,138,60,35,167,34.6,0.534,21,1
+3,173,84,33,474,35.7,0.258,22,1
+1,97,68,21,0,27.2,1.095,22,0
+4,144,82,32,0,38.5,0.554,37,1
+1,83,68,0,0,18.2,0.624,27,0
+3,129,64,29,115,26.4,0.219,28,1
+1,119,88,41,170,45.3,0.507,26,0
+2,94,68,18,76,26,0.561,21,0
+0,102,64,46,78,40.6,0.496,21,0
+2,115,64,22,0,30.8,0.421,21,0
+8,151,78,32,210,42.9,0.516,36,1
+4,184,78,39,277,37,0.264,31,1
+0,94,0,0,0,0,0.256,25,0
+1,181,64,30,180,34.1,0.328,38,1
+0,135,94,46,145,40.6,0.284,26,0
+1,95,82,25,180,35,0.233,43,1
+2,99,0,0,0,22.2,0.108,23,0
+3,89,74,16,85,30.4,0.551,38,0
+1,80,74,11,60,30,0.527,22,0
+2,139,75,0,0,25.6,0.167,29,0
+1,90,68,8,0,24.5,1.138,36,0
+0,141,0,0,0,42.4,0.205,29,1
+12,140,85,33,0,37.4,0.244,41,0
+5,147,75,0,0,29.9,0.434,28,0
+1,97,70,15,0,18.2,0.147,21,0
+6,107,88,0,0,36.8,0.727,31,0
+0,189,104,25,0,34.3,0.435,41,1
+2,83,66,23,50,32.2,0.497,22,0
+4,117,64,27,120,33.2,0.23,24,0
+8,108,70,0,0,30.5,0.955,33,1
+4,117,62,12,0,29.7,0.38,30,1
+0,180,78,63,14,59.4,2.42,25,1
+1,100,72,12,70,25.3,0.658,28,0
+0,95,80,45,92,36.5,0.33,26,0
+0,104,64,37,64,33.6,0.51,22,1
+0,120,74,18,63,30.5,0.285,26,0
+1,82,64,13,95,21.2,0.415,23,0
+2,134,70,0,0,28.9,0.542,23,1
+0,91,68,32,210,39.9,0.381,25,0
+2,119,0,0,0,19.6,0.832,72,0
+2,100,54,28,105,37.8,0.498,24,0
+14,175,62,30,0,33.6,0.212,38,1
+1,135,54,0,0,26.7,0.687,62,0
+5,86,68,28,71,30.2,0.364,24,0
+10,148,84,48,237,37.6,1.001,51,1
+9,134,74,33,60,25.9,0.46,81,0
+9,120,72,22,56,20.8,0.733,48,0
+1,71,62,0,0,21.8,0.416,26,0
+8,74,70,40,49,35.3,0.705,39,0
+5,88,78,30,0,27.6,0.258,37,0
+10,115,98,0,0,24,1.022,34,0
+0,124,56,13,105,21.8,0.452,21,0
+0,74,52,10,36,27.8,0.269,22,0
+0,97,64,36,100,36.8,0.6,25,0
+8,120,0,0,0,30,0.183,38,1
+6,154,78,41,140,46.1,0.571,27,0
+1,144,82,40,0,41.3,0.607,28,0
+0,137,70,38,0,33.2,0.17,22,0
+0,119,66,27,0,38.8,0.259,22,0
+7,136,90,0,0,29.9,0.21,50,0
+4,114,64,0,0,28.9,0.126,24,0
+0,137,84,27,0,27.3,0.231,59,0
+2,105,80,45,191,33.7,0.711,29,1
+7,114,76,17,110,23.8,0.466,31,0
+8,126,74,38,75,25.9,0.162,39,0
+4,132,86,31,0,28,0.419,63,0
+3,158,70,30,328,35.5,0.344,35,1
+0,123,88,37,0,35.2,0.197,29,0
+4,85,58,22,49,27.8,0.306,28,0
+0,84,82,31,125,38.2,0.233,23,0
+0,145,0,0,0,44.2,0.63,31,1
+0,135,68,42,250,42.3,0.365,24,1
+1,139,62,41,480,40.7,0.536,21,0
+0,173,78,32,265,46.5,1.159,58,0
+4,99,72,17,0,25.6,0.294,28,0
+8,194,80,0,0,26.1,0.551,67,0
+2,83,65,28,66,36.8,0.629,24,0
+2,89,90,30,0,33.5,0.292,42,0
+4,99,68,38,0,32.8,0.145,33,0
+4,125,70,18,122,28.9,1.144,45,1
+3,80,0,0,0,0,0.174,22,0
+6,166,74,0,0,26.6,0.304,66,0
+5,110,68,0,0,26,0.292,30,0
+2,81,72,15,76,30.1,0.547,25,0
+7,195,70,33,145,25.1,0.163,55,1
+6,154,74,32,193,29.3,0.839,39,0
+2,117,90,19,71,25.2,0.313,21,0
+3,84,72,32,0,37.2,0.267,28,0
+6,0,68,41,0,39,0.727,41,1
+7,94,64,25,79,33.3,0.738,41,0
+3,96,78,39,0,37.3,0.238,40,0
+10,75,82,0,0,33.3,0.263,38,0
+0,180,90,26,90,36.5,0.314,35,1
+1,130,60,23,170,28.6,0.692,21,0
+2,84,50,23,76,30.4,0.968,21,0
+8,120,78,0,0,25,0.409,64,0
+12,84,72,31,0,29.7,0.297,46,1
+0,139,62,17,210,22.1,0.207,21,0
+9,91,68,0,0,24.2,0.2,58,0
+2,91,62,0,0,27.3,0.525,22,0
+3,99,54,19,86,25.6,0.154,24,0
+3,163,70,18,105,31.6,0.268,28,1
+9,145,88,34,165,30.3,0.771,53,1
+7,125,86,0,0,37.6,0.304,51,0
+13,76,60,0,0,32.8,0.18,41,0
+6,129,90,7,326,19.6,0.582,60,0
+2,68,70,32,66,25,0.187,25,0
+3,124,80,33,130,33.2,0.305,26,0
+6,114,0,0,0,0,0.189,26,0
+9,130,70,0,0,34.2,0.652,45,1
+3,125,58,0,0,31.6,0.151,24,0
+3,87,60,18,0,21.8,0.444,21,0
+1,97,64,19,82,18.2,0.299,21,0
+3,116,74,15,105,26.3,0.107,24,0
+0,117,66,31,188,30.8,0.493,22,0
+0,111,65,0,0,24.6,0.66,31,0
+2,122,60,18,106,29.8,0.717,22,0
+0,107,76,0,0,45.3,0.686,24,0
+1,86,66,52,65,41.3,0.917,29,0
+6,91,0,0,0,29.8,0.501,31,0
+1,77,56,30,56,33.3,1.251,24,0
+4,132,0,0,0,32.9,0.302,23,1
+0,105,90,0,0,29.6,0.197,46,0
+0,57,60,0,0,21.7,0.735,67,0
+0,127,80,37,210,36.3,0.804,23,0
+3,129,92,49,155,36.4,0.968,32,1
+8,100,74,40,215,39.4,0.661,43,1
+3,128,72,25,190,32.4,0.549,27,1
+10,90,85,32,0,34.9,0.825,56,1
+4,84,90,23,56,39.5,0.159,25,0
+1,88,78,29,76,32,0.365,29,0
+8,186,90,35,225,34.5,0.423,37,1
+5,187,76,27,207,43.6,1.034,53,1
+4,131,68,21,166,33.1,0.16,28,0
+1,164,82,43,67,32.8,0.341,50,0
+4,189,110,31,0,28.5,0.68,37,0
+1,116,70,28,0,27.4,0.204,21,0
+3,84,68,30,106,31.9,0.591,25,0
+6,114,88,0,0,27.8,0.247,66,0
+1,88,62,24,44,29.9,0.422,23,0
+1,84,64,23,115,36.9,0.471,28,0
+7,124,70,33,215,25.5,0.161,37,0
+1,97,70,40,0,38.1,0.218,30,0
+8,110,76,0,0,27.8,0.237,58,0
+11,103,68,40,0,46.2,0.126,42,0
+11,85,74,0,0,30.1,0.3,35,0
+6,125,76,0,0,33.8,0.121,54,1
+0,198,66,32,274,41.3,0.502,28,1
+1,87,68,34,77,37.6,0.401,24,0
+6,99,60,19,54,26.9,0.497,32,0
+0,91,80,0,0,32.4,0.601,27,0
+2,95,54,14,88,26.1,0.748,22,0
+1,99,72,30,18,38.6,0.412,21,0
+6,92,62,32,126,32,0.085,46,0
+4,154,72,29,126,31.3,0.338,37,0
+0,121,66,30,165,34.3,0.203,33,1
+3,78,70,0,0,32.5,0.27,39,0
+2,130,96,0,0,22.6,0.268,21,0
+3,111,58,31,44,29.5,0.43,22,0
+2,98,60,17,120,34.7,0.198,22,0
+1,143,86,30,330,30.1,0.892,23,0
+1,119,44,47,63,35.5,0.28,25,0
+6,108,44,20,130,24,0.813,35,0
+2,118,80,0,0,42.9,0.693,21,1
+10,133,68,0,0,27,0.245,36,0
+2,197,70,99,0,34.7,0.575,62,1
+0,151,90,46,0,42.1,0.371,21,1
+6,109,60,27,0,25,0.206,27,0
+12,121,78,17,0,26.5,0.259,62,0
+8,100,76,0,0,38.7,0.19,42,0
+8,124,76,24,600,28.7,0.687,52,1
+1,93,56,11,0,22.5,0.417,22,0
+8,143,66,0,0,34.9,0.129,41,1
+6,103,66,0,0,24.3,0.249,29,0
+3,176,86,27,156,33.3,1.154,52,1
+0,73,0,0,0,21.1,0.342,25,0
+11,111,84,40,0,46.8,0.925,45,1
+2,112,78,50,140,39.4,0.175,24,0
+3,132,80,0,0,34.4,0.402,44,1
+2,82,52,22,115,28.5,1.699,25,0
+6,123,72,45,230,33.6,0.733,34,0
+0,188,82,14,185,32,0.682,22,1
+0,67,76,0,0,45.3,0.194,46,0
+1,89,24,19,25,27.8,0.559,21,0
+1,173,74,0,0,36.8,0.088,38,1
+1,109,38,18,120,23.1,0.407,26,0
+1,108,88,19,0,27.1,0.4,24,0
+6,96,0,0,0,23.7,0.19,28,0
+1,124,74,36,0,27.8,0.1,30,0
+7,150,78,29,126,35.2,0.692,54,1
+4,183,0,0,0,28.4,0.212,36,1
+1,124,60,32,0,35.8,0.514,21,0
+1,181,78,42,293,40,1.258,22,1
+1,92,62,25,41,19.5,0.482,25,0
+0,152,82,39,272,41.5,0.27,27,0
+1,111,62,13,182,24,0.138,23,0
+3,106,54,21,158,30.9,0.292,24,0
+3,174,58,22,194,32.9,0.593,36,1
+7,168,88,42,321,38.2,0.787,40,1
+6,105,80,28,0,32.5,0.878,26,0
+11,138,74,26,144,36.1,0.557,50,1
+3,106,72,0,0,25.8,0.207,27,0
+6,117,96,0,0,28.7,0.157,30,0
+2,68,62,13,15,20.1,0.257,23,0
+9,112,82,24,0,28.2,1.282,50,1
+0,119,0,0,0,32.4,0.141,24,1
+2,112,86,42,160,38.4,0.246,28,0
+2,92,76,20,0,24.2,1.698,28,0
+6,183,94,0,0,40.8,1.461,45,0
+0,94,70,27,115,43.5,0.347,21,0
+2,108,64,0,0,30.8,0.158,21,0
+4,90,88,47,54,37.7,0.362,29,0
+0,125,68,0,0,24.7,0.206,21,0
+0,132,78,0,0,32.4,0.393,21,0
+5,128,80,0,0,34.6,0.144,45,0
+4,94,65,22,0,24.7,0.148,21,0
+7,114,64,0,0,27.4,0.732,34,1
+0,102,78,40,90,34.5,0.238,24,0
+2,111,60,0,0,26.2,0.343,23,0
+1,128,82,17,183,27.5,0.115,22,0
+10,92,62,0,0,25.9,0.167,31,0
+13,104,72,0,0,31.2,0.465,38,1
+5,104,74,0,0,28.8,0.153,48,0
+2,94,76,18,66,31.6,0.649,23,0
+7,97,76,32,91,40.9,0.871,32,1
+1,100,74,12,46,19.5,0.149,28,0
+0,102,86,17,105,29.3,0.695,27,0
+4,128,70,0,0,34.3,0.303,24,0
+6,147,80,0,0,29.5,0.178,50,1
+4,90,0,0,0,28,0.61,31,0
+3,103,72,30,152,27.6,0.73,27,0
+2,157,74,35,440,39.4,0.134,30,0
+1,167,74,17,144,23.4,0.447,33,1
+0,179,50,36,159,37.8,0.455,22,1
+11,136,84,35,130,28.3,0.26,42,1
+0,107,60,25,0,26.4,0.133,23,0
+1,91,54,25,100,25.2,0.234,23,0
+1,117,60,23,106,33.8,0.466,27,0
+5,123,74,40,77,34.1,0.269,28,0
+2,120,54,0,0,26.8,0.455,27,0
+1,106,70,28,135,34.2,0.142,22,0
+2,155,52,27,540,38.7,0.24,25,1
+2,101,58,35,90,21.8,0.155,22,0
+1,120,80,48,200,38.9,1.162,41,0
+11,127,106,0,0,39,0.19,51,0
+3,80,82,31,70,34.2,1.292,27,1
+10,162,84,0,0,27.7,0.182,54,0
+1,199,76,43,0,42.9,1.394,22,1
+8,167,106,46,231,37.6,0.165,43,1
+9,145,80,46,130,37.9,0.637,40,1
+6,115,60,39,0,33.7,0.245,40,1
+1,112,80,45,132,34.8,0.217,24,0
+4,145,82,18,0,32.5,0.235,70,1
+10,111,70,27,0,27.5,0.141,40,1
+6,98,58,33,190,34,0.43,43,0
+9,154,78,30,100,30.9,0.164,45,0
+6,165,68,26,168,33.6,0.631,49,0
+1,99,58,10,0,25.4,0.551,21,0
+10,68,106,23,49,35.5,0.285,47,0
+3,123,100,35,240,57.3,0.88,22,0
+8,91,82,0,0,35.6,0.587,68,0
+6,195,70,0,0,30.9,0.328,31,1
+9,156,86,0,0,24.8,0.23,53,1
+0,93,60,0,0,35.3,0.263,25,0
+3,121,52,0,0,36,0.127,25,1
+2,101,58,17,265,24.2,0.614,23,0
+2,56,56,28,45,24.2,0.332,22,0
+0,162,76,36,0,49.6,0.364,26,1
+0,95,64,39,105,44.6,0.366,22,0
+4,125,80,0,0,32.3,0.536,27,1
+5,136,82,0,0,0,0.64,69,0
+2,129,74,26,205,33.2,0.591,25,0
+3,130,64,0,0,23.1,0.314,22,0
+1,107,50,19,0,28.3,0.181,29,0
+1,140,74,26,180,24.1,0.828,23,0
+1,144,82,46,180,46.1,0.335,46,1
+8,107,80,0,0,24.6,0.856,34,0
+13,158,114,0,0,42.3,0.257,44,1
+2,121,70,32,95,39.1,0.886,23,0
+7,129,68,49,125,38.5,0.439,43,1
+2,90,60,0,0,23.5,0.191,25,0
+7,142,90,24,480,30.4,0.128,43,1
+3,169,74,19,125,29.9,0.268,31,1
+0,99,0,0,0,25,0.253,22,0
+4,127,88,11,155,34.5,0.598,28,0
+4,118,70,0,0,44.5,0.904,26,0
+2,122,76,27,200,35.9,0.483,26,0
+6,125,78,31,0,27.6,0.565,49,1
+1,168,88,29,0,35,0.905,52,1
+2,129,0,0,0,38.5,0.304,41,0
+4,110,76,20,100,28.4,0.118,27,0
+6,80,80,36,0,39.8,0.177,28,0
+10,115,0,0,0,0,0.261,30,1
+2,127,46,21,335,34.4,0.176,22,0
+9,164,78,0,0,32.8,0.148,45,1
+2,93,64,32,160,38,0.674,23,1
+3,158,64,13,387,31.2,0.295,24,0
+5,126,78,27,22,29.6,0.439,40,0
+10,129,62,36,0,41.2,0.441,38,1
+0,134,58,20,291,26.4,0.352,21,0
+3,102,74,0,0,29.5,0.121,32,0
+7,187,50,33,392,33.9,0.826,34,1
+3,173,78,39,185,33.8,0.97,31,1
+10,94,72,18,0,23.1,0.595,56,0
+1,108,60,46,178,35.5,0.415,24,0
+5,97,76,27,0,35.6,0.378,52,1
+4,83,86,19,0,29.3,0.317,34,0
+1,114,66,36,200,38.1,0.289,21,0
+1,149,68,29,127,29.3,0.349,42,1
+5,117,86,30,105,39.1,0.251,42,0
+1,111,94,0,0,32.8,0.265,45,0
+4,112,78,40,0,39.4,0.236,38,0
+1,116,78,29,180,36.1,0.496,25,0
+0,141,84,26,0,32.4,0.433,22,0
+2,175,88,0,0,22.9,0.326,22,0
+2,92,52,0,0,30.1,0.141,22,0
+3,130,78,23,79,28.4,0.323,34,1
+8,120,86,0,0,28.4,0.259,22,1
+2,174,88,37,120,44.5,0.646,24,1
+2,106,56,27,165,29,0.426,22,0
+2,105,75,0,0,23.3,0.56,53,0
+4,95,60,32,0,35.4,0.284,28,0
+0,126,86,27,120,27.4,0.515,21,0
+8,65,72,23,0,32,0.6,42,0
+2,99,60,17,160,36.6,0.453,21,0
+1,102,74,0,0,39.5,0.293,42,1
+11,120,80,37,150,42.3,0.785,48,1
+3,102,44,20,94,30.8,0.4,26,0
+1,109,58,18,116,28.5,0.219,22,0
+9,140,94,0,0,32.7,0.734,45,1
+13,153,88,37,140,40.6,1.174,39,0
+12,100,84,33,105,30,0.488,46,0
+1,147,94,41,0,49.3,0.358,27,1
+1,81,74,41,57,46.3,1.096,32,0
+3,187,70,22,200,36.4,0.408,36,1
+6,162,62,0,0,24.3,0.178,50,1
+4,136,70,0,0,31.2,1.182,22,1
+1,121,78,39,74,39,0.261,28,0
+3,108,62,24,0,26,0.223,25,0
+0,181,88,44,510,43.3,0.222,26,1
+8,154,78,32,0,32.4,0.443,45,1
+1,128,88,39,110,36.5,1.057,37,1
+7,137,90,41,0,32,0.391,39,0
+0,123,72,0,0,36.3,0.258,52,1
+1,106,76,0,0,37.5,0.197,26,0
+6,190,92,0,0,35.5,0.278,66,1
+2,88,58,26,16,28.4,0.766,22,0
+9,170,74,31,0,44,0.403,43,1
+9,89,62,0,0,22.5,0.142,33,0
+10,101,76,48,180,32.9,0.171,63,0
+2,122,70,27,0,36.8,0.34,27,0
+5,121,72,23,112,26.2,0.245,30,0
+1,126,60,0,0,30.1,0.349,47,1
+1,93,70,31,0,30.4,0.315,23,0