diff --git a/4-Classification/2-Classifiers-1/solution/notebook.ipynb b/4-Classification/2-Classifiers-1/solution/notebook.ipynb
index aeba09710..1540ae943 100644
--- a/4-Classification/2-Classifiers-1/solution/notebook.ipynb
+++ b/4-Classification/2-Classifiers-1/solution/notebook.ipynb
@@ -1,29 +1,15 @@
{
"cells": [
{
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Build Classification Model"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 25,
- "metadata": {},
- "outputs": [],
"source": [
- "from sklearn.linear_model import LogisticRegression\n",
- "from sklearn.model_selection import train_test_split, cross_val_score\n",
- "from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve\n",
- "from sklearn.svm import SVC\n",
- "import pandas as pd\n",
- "import numpy as np"
- ]
+ "# Build Classification Models"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
},
{
"cell_type": "code",
- "execution_count": 26,
+ "execution_count": 12,
"metadata": {},
"outputs": [
{
@@ -56,17 +42,31 @@
"text/html": "
\n\n
\n \n \n | \n Unnamed: 0 | \n cuisine | \n almond | \n angelica | \n anise | \n anise_seed | \n apple | \n apple_brandy | \n apricot | \n armagnac | \n ... | \n whiskey | \n white_bread | \n white_wine | \n whole_grain_wheat_flour | \n wine | \n wood | \n yam | \n yeast | \n yogurt | \n zucchini | \n
\n \n \n \n | 0 | \n 0 | \n indian | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n ... | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n
\n \n | 1 | \n 1 | \n indian | \n 1 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n ... | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n
\n \n | 2 | \n 2 | \n indian | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n ... | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n
\n \n | 3 | \n 3 | \n indian | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n ... | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n
\n \n | 4 | \n 4 | \n indian | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n ... | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 1 | \n 0 | \n
\n \n
\n
5 rows × 382 columns
\n
"
},
"metadata": {},
- "execution_count": 26
+ "execution_count": 12
}
],
"source": [
+ "import pandas as pd\n",
"recipes_df = pd.read_csv(\"../../data/cleaned_cuisine.csv\")\n",
"recipes_df.head()"
]
},
{
"cell_type": "code",
- "execution_count": 27,
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.linear_model import LogisticRegression\n",
+ "from sklearn.model_selection import train_test_split, cross_val_score\n",
+ "from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve\n",
+ "from sklearn.svm import SVC\n",
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
"metadata": {},
"outputs": [
{
@@ -82,7 +82,7 @@
]
},
"metadata": {},
- "execution_count": 27
+ "execution_count": 14
}
],
"source": [
@@ -92,7 +92,7 @@
},
{
"cell_type": "code",
- "execution_count": 28,
+ "execution_count": 15,
"metadata": {},
"outputs": [
{
@@ -125,7 +125,7 @@
"text/html": "\n\n
\n \n \n | \n almond | \n angelica | \n anise | \n anise_seed | \n apple | \n apple_brandy | \n apricot | \n armagnac | \n artemisia | \n artichoke | \n ... | \n whiskey | \n white_bread | \n white_wine | \n whole_grain_wheat_flour | \n wine | \n wood | \n yam | \n yeast | \n yogurt | \n zucchini | \n
\n \n \n \n | 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n ... | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n
\n \n | 1 | \n 1 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n ... | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n
\n \n | 2 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n ... | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n
\n \n | 3 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n ... | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n
\n \n | 4 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n ... | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 1 | \n 0 | \n
\n \n
\n
5 rows × 380 columns
\n
"
},
"metadata": {},
- "execution_count": 28
+ "execution_count": 15
}
],
"source": [
@@ -135,7 +135,7 @@
},
{
"cell_type": "code",
- "execution_count": 29,
+ "execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
@@ -144,14 +144,14 @@
},
{
"cell_type": "code",
- "execution_count": 30,
+ "execution_count": 17,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
- "Accuracy is 0.810675562969141\n"
+ "Accuracy is 0.8023352793994996\n"
]
}
],
@@ -165,26 +165,26 @@
},
{
"cell_type": "code",
- "execution_count": 31,
+ "execution_count": 23,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
- "ingredients: Index(['bean', 'coriander', 'cumin', 'fenugreek', 'pepper', 'turmeric',\n 'vegetable_oil'],\n dtype='object')\ncusine: thai\n"
+ "ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object')\ncuisine: indian\n"
]
}
],
"source": [
"# test an item\n",
- "print(f'ingredients: {X_test.iloc[20][X_test.iloc[20]!=0].keys()}')\n",
- "print(f'cuisine: {y_test.iloc[20]}')"
+ "print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}')\n",
+ "print(f'cuisine: {y_test.iloc[50]}')"
]
},
{
"cell_type": "code",
- "execution_count": 32,
+ "execution_count": 24,
"metadata": {},
"outputs": [
{
@@ -192,42 +192,42 @@
"data": {
"text/plain": [
" 0\n",
- "indian 0.530435\n",
- "thai 0.344293\n",
- "japanese 0.108792\n",
- "chinese 0.015001\n",
- "korean 0.001480"
+ "indian 0.715851\n",
+ "chinese 0.229475\n",
+ "japanese 0.029763\n",
+ "korean 0.017277\n",
+ "thai 0.007634"
],
- "text/html": "\n\n
\n \n \n | \n 0 | \n
\n \n \n \n | indian | \n 0.530435 | \n
\n \n | thai | \n 0.344293 | \n
\n \n | japanese | \n 0.108792 | \n
\n \n | chinese | \n 0.015001 | \n
\n \n | korean | \n 0.001480 | \n
\n \n
\n
"
+ "text/html": "\n\n
\n \n \n | \n 0 | \n
\n \n \n \n | indian | \n 0.715851 | \n
\n \n | chinese | \n 0.229475 | \n
\n \n | japanese | \n 0.029763 | \n
\n \n | korean | \n 0.017277 | \n
\n \n | thai | \n 0.007634 | \n
\n \n
\n
"
},
"metadata": {},
- "execution_count": 32
+ "execution_count": 24
}
],
"source": [
- "#rehsape to 2d array and transpose\r\n",
- "test= X_test.iloc[20].values.reshape(-1, 1).T\r\n",
- "# predict with score\r\n",
- "proba = model.predict_proba(test)\r\n",
- "classes = model.classes_\r\n",
- "# create df with classes and scores\r\n",
- "resultdf = pd.DataFrame(data=proba, columns=classes)\r\n",
- "\r\n",
- "# create df to show results\r\n",
- "topPrediction = resultdf.T.sort_values(by=[0], ascending = [False])\r\n",
+ "#rehsape to 2d array and transpose\n",
+ "test= X_test.iloc[50].values.reshape(-1, 1).T\n",
+ "# predict with score\n",
+ "proba = model.predict_proba(test)\n",
+ "classes = model.classes_\n",
+ "# create df with classes and scores\n",
+ "resultdf = pd.DataFrame(data=proba, columns=classes)\n",
+ "\n",
+ "# create df to show results\n",
+ "topPrediction = resultdf.T.sort_values(by=[0], ascending = [False])\n",
"topPrediction.head()"
]
},
{
"cell_type": "code",
- "execution_count": 33,
+ "execution_count": 20,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
- " precision recall f1-score support\n\n chinese 0.75 0.67 0.70 231\n indian 0.91 0.90 0.90 255\n japanese 0.77 0.82 0.79 260\n korean 0.83 0.83 0.83 220\n thai 0.79 0.83 0.81 233\n\n accuracy 0.81 1199\n macro avg 0.81 0.81 0.81 1199\nweighted avg 0.81 0.81 0.81 1199\n\n"
+ " precision recall f1-score support\n\n chinese 0.73 0.71 0.72 229\n indian 0.91 0.93 0.92 254\n japanese 0.70 0.75 0.72 220\n korean 0.86 0.76 0.81 242\n thai 0.79 0.85 0.82 254\n\n accuracy 0.80 1199\n macro avg 0.80 0.80 0.80 1199\nweighted avg 0.80 0.80 0.80 1199\n\n"
]
}
],
@@ -245,7 +245,7 @@
},
{
"cell_type": "code",
- "execution_count": 34,
+ "execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
@@ -272,17 +272,17 @@
},
{
"cell_type": "code",
- "execution_count": 35,
+ "execution_count": 22,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
- "Accuracy (train) for L1 logistic: 79.4% \n",
- "Accuracy (train) for L2 logistic (Multinomial): 79.2% \n",
- "Accuracy (train) for L2 logistic (OvR): 80.2% \n",
- "Accuracy (train) for Linear SVC: 79.1% \n"
+ "Accuracy (train) for L1 logistic: 79.5% \n",
+ "Accuracy (train) for L2 logistic (Multinomial): 80.1% \n",
+ "Accuracy (train) for L2 logistic (OvR): 80.7% \n",
+ "Accuracy (train) for Linear SVC: 78.5% \n"
]
}
],
diff --git a/4-Classification/3-Classifiers-2/solution/notebook.ipynb b/4-Classification/3-Classifiers-2/solution/notebook.ipynb
index e69de29bb..4cd141959 100644
--- a/4-Classification/3-Classifiers-2/solution/notebook.ipynb
+++ b/4-Classification/3-Classifiers-2/solution/notebook.ipynb
@@ -0,0 +1,242 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Build Classification Model"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ " Unnamed: 0 cuisine almond angelica anise anise_seed apple \\\n",
+ "0 0 indian 0 0 0 0 0 \n",
+ "1 1 indian 1 0 0 0 0 \n",
+ "2 2 indian 0 0 0 0 0 \n",
+ "3 3 indian 0 0 0 0 0 \n",
+ "4 4 indian 0 0 0 0 0 \n",
+ "\n",
+ " apple_brandy apricot armagnac ... whiskey white_bread white_wine \\\n",
+ "0 0 0 0 ... 0 0 0 \n",
+ "1 0 0 0 ... 0 0 0 \n",
+ "2 0 0 0 ... 0 0 0 \n",
+ "3 0 0 0 ... 0 0 0 \n",
+ "4 0 0 0 ... 0 0 0 \n",
+ "\n",
+ " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n",
+ "0 0 0 0 0 0 0 0 \n",
+ "1 0 0 0 0 0 0 0 \n",
+ "2 0 0 0 0 0 0 0 \n",
+ "3 0 0 0 0 0 0 0 \n",
+ "4 0 0 0 0 0 1 0 \n",
+ "\n",
+ "[5 rows x 382 columns]"
+ ],
+ "text/html": "\n\n
\n \n \n | \n Unnamed: 0 | \n cuisine | \n almond | \n angelica | \n anise | \n anise_seed | \n apple | \n apple_brandy | \n apricot | \n armagnac | \n ... | \n whiskey | \n white_bread | \n white_wine | \n whole_grain_wheat_flour | \n wine | \n wood | \n yam | \n yeast | \n yogurt | \n zucchini | \n
\n \n \n \n | 0 | \n 0 | \n indian | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n ... | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n
\n \n | 1 | \n 1 | \n indian | \n 1 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n ... | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n
\n \n | 2 | \n 2 | \n indian | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n ... | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n
\n \n | 3 | \n 3 | \n indian | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n ... | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n
\n \n | 4 | \n 4 | \n indian | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n ... | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 1 | \n 0 | \n
\n \n
\n
5 rows × 382 columns
\n
"
+ },
+ "metadata": {},
+ "execution_count": 1
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "recipes_df = pd.read_csv(\"../../data/cleaned_cuisine.csv\")\n",
+ "recipes_df.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.linear_model import LogisticRegression\n",
+ "from sklearn.model_selection import train_test_split, cross_val_score\n",
+ "from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve\n",
+ "from sklearn.svm import SVC\n",
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "0 indian\n",
+ "1 indian\n",
+ "2 indian\n",
+ "3 indian\n",
+ "4 indian\n",
+ "Name: cuisine, dtype: object"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 3
+ }
+ ],
+ "source": [
+ "recipes_label_df = recipes_df['cuisine']\n",
+ "recipes_label_df.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ " almond angelica anise anise_seed apple apple_brandy apricot \\\n",
+ "0 0 0 0 0 0 0 0 \n",
+ "1 1 0 0 0 0 0 0 \n",
+ "2 0 0 0 0 0 0 0 \n",
+ "3 0 0 0 0 0 0 0 \n",
+ "4 0 0 0 0 0 0 0 \n",
+ "\n",
+ " armagnac artemisia artichoke ... whiskey white_bread white_wine \\\n",
+ "0 0 0 0 ... 0 0 0 \n",
+ "1 0 0 0 ... 0 0 0 \n",
+ "2 0 0 0 ... 0 0 0 \n",
+ "3 0 0 0 ... 0 0 0 \n",
+ "4 0 0 0 ... 0 0 0 \n",
+ "\n",
+ " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n",
+ "0 0 0 0 0 0 0 0 \n",
+ "1 0 0 0 0 0 0 0 \n",
+ "2 0 0 0 0 0 0 0 \n",
+ "3 0 0 0 0 0 0 0 \n",
+ "4 0 0 0 0 0 1 0 \n",
+ "\n",
+ "[5 rows x 380 columns]"
+ ],
+ "text/html": "\n\n
\n \n \n | \n almond | \n angelica | \n anise | \n anise_seed | \n apple | \n apple_brandy | \n apricot | \n armagnac | \n artemisia | \n artichoke | \n ... | \n whiskey | \n white_bread | \n white_wine | \n whole_grain_wheat_flour | \n wine | \n wood | \n yam | \n yeast | \n yogurt | \n zucchini | \n
\n \n \n \n | 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n ... | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n
\n \n | 1 | \n 1 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n ... | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n
\n \n | 2 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n ... | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n
\n \n | 3 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n ... | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n
\n \n | 4 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n ... | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 1 | \n 0 | \n
\n \n
\n
5 rows × 380 columns
\n
"
+ },
+ "metadata": {},
+ "execution_count": 4
+ }
+ ],
+ "source": [
+ "recipes_feature_df = recipes_df.drop(['Unnamed: 0', 'cuisine'], axis=1)\n",
+ "recipes_feature_df.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "X_train, X_test, y_train, y_test = train_test_split(recipes_feature_df, recipes_label_df, test_size=0.3)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Try different classifiers"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\r\n",
+ "C = 10\r\n",
+ "# Create different classifiers.\r\n",
+ "classifiers = {\r\n",
+ " 'L1 logistic': LogisticRegression(C=C, penalty='l1',\r\n",
+ " solver='saga',\r\n",
+ " multi_class='multinomial',\r\n",
+ " max_iter=10000),\r\n",
+ " 'L2 logistic (Multinomial)': LogisticRegression(C=C, penalty='l2',\r\n",
+ " solver='saga',\r\n",
+ " multi_class='multinomial',\r\n",
+ " max_iter=10000),\r\n",
+ " 'L2 logistic (OvR)': LogisticRegression(C=C, penalty='l2',\r\n",
+ " solver='saga',\r\n",
+ " multi_class='ovr',\r\n",
+ " max_iter=10000),\r\n",
+ " 'Linear SVC': SVC(kernel='linear', C=C, probability=True,\r\n",
+ " random_state=0)\r\n",
+ "}\r\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Accuracy (train) for L1 logistic: 79.8% \n",
+ "Accuracy (train) for L2 logistic (Multinomial): 80.2% \n",
+ "Accuracy (train) for L2 logistic (OvR): 81.3% \n",
+ "Accuracy (train) for Linear SVC: 79.6% \n"
+ ]
+ }
+ ],
+ "source": [
+ "n_classifiers = len(classifiers)\r\n",
+ "\r\n",
+ "for index, (name, classifier) in enumerate(classifiers.items()):\r\n",
+ " classifier.fit(X_train, np.ravel(y_train))\r\n",
+ "\r\n",
+ " y_pred = classifier.predict(X_test)\r\n",
+ " accuracy = accuracy_score(y_test, y_pred)\r\n",
+ " print(\"Accuracy (train) for %s: %0.1f%% \" % (name, accuracy * 100))\r\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "dd61f40108e2a19f4ef0d3ebbc6b6eea57ab3c4bc13b15fe6f390d3d86442534"
+ },
+ "kernelspec": {
+ "name": "python37364bit8d3b438fb5fc4430a93ac2cb74d693a7",
+ "display_name": "Python 3.7.0 64-bit ('3.7')"
+ },
+ "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.7.0"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file