{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "code", "execution_count": 4, "metadata": { "id": "mQSys62efhoG" }, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import seaborn as sb\n", "\n", "from imblearn.over_sampling import RandomOverSampler\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import LabelEncoder, MinMaxScaler\n", "from sklearn.feature_selection import SelectKBest, chi2\n", "from tqdm.notebook import tqdm\n", "from sklearn import metrics\n", "from sklearn.svm import SVC\n", "from xgboost import XGBClassifier\n", "from sklearn.linear_model import LogisticRegression\n", "\n", "import warnings\n", "warnings.filterwarnings('ignore')" ] }, { "cell_type": "code", "source": [ "df = pd.read_csv('/content/parkinson_disease.csv')" ], "metadata": { "id": "U4xaCAKSgxsP" }, "execution_count": 7, "outputs": [] }, { "cell_type": "code", "source": [ "pd.set_option('display.max_columns', 10)\n", "df.head(5)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 236 }, "id": "hBeAwdnzg3io", "outputId": "b88ac480-3e2c-40c6-de3e-5b62d276e766" }, "execution_count": 8, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " id gender PPE DFA RPDE ... tqwt_kurtosisValue_dec_33 \\\n", "0 0 1 0.85247 0.71826 0.57227 ... 4.4625 \n", "1 0 1 0.76686 0.69481 0.53966 ... 9.5082 \n", "2 0 1 0.85083 0.67604 0.58982 ... 4.8066 \n", "3 1 0 0.41121 0.79672 0.59257 ... 4.6857 \n", "4 1 0 0.32790 0.79782 0.53028 ... 11.6891 \n", "\n", " tqwt_kurtosisValue_dec_34 tqwt_kurtosisValue_dec_35 \\\n", "0 2.6202 3.0004 \n", "1 6.5245 6.3431 \n", "2 2.9199 3.1495 \n", "3 4.8460 6.2650 \n", "4 8.2103 5.0559 \n", "\n", " tqwt_kurtosisValue_dec_36 class \n", "0 18.9405 1 \n", "1 45.1780 1 \n", "2 4.7666 1 \n", "3 4.0603 1 \n", "4 6.1164 1 \n", "\n", "[5 rows x 755 columns]" ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idgenderPPEDFARPDE...tqwt_kurtosisValue_dec_33tqwt_kurtosisValue_dec_34tqwt_kurtosisValue_dec_35tqwt_kurtosisValue_dec_36class
0010.852470.718260.57227...4.46252.62023.000418.94051
1010.766860.694810.53966...9.50826.52456.343145.17801
2010.850830.676040.58982...4.80662.91993.14954.76661
3100.411210.796720.59257...4.68574.84606.26504.06031
4100.327900.797820.53028...11.68918.21035.05596.11641
\n", "

5 rows × 755 columns

\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "\n", "
\n", "
\n" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "dataframe", "variable_name": "df" } }, "metadata": {}, "execution_count": 8 } ] }, { "cell_type": "code", "source": [ "df.shape" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "7zlWkzd8g4gY", "outputId": "a25c4022-f3d5-4497-9ef2-5c8e625f7f5f" }, "execution_count": 9, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "(756, 755)" ] }, "metadata": {}, "execution_count": 9 } ] }, { "cell_type": "code", "source": [ "df.info()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Kb1NtiPONQDR", "outputId": "2ad3f8b6-8f9a-49b9-e2e3-f045c685f3c7" }, "execution_count": 10, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", "RangeIndex: 756 entries, 0 to 755\n", "Columns: 755 entries, id to class\n", "dtypes: float64(749), int64(6)\n", "memory usage: 4.4 MB\n" ] } ] }, { "cell_type": "code", "source": [ "df.describe().T" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 424 }, "id": "_cLS3vt6g5Yu", "outputId": "023640cc-3999-49ad-8d85-a306f698f515" }, "execution_count": 11, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " count mean std min 25% \\\n", "id 756.0 125.500000 72.793721 0.000000 62.750000 \n", "gender 756.0 0.515873 0.500079 0.000000 0.000000 \n", "PPE 756.0 0.746284 0.169294 0.041551 0.762833 \n", "DFA 756.0 0.700414 0.069718 0.543500 0.647053 \n", "RPDE 756.0 0.489058 0.137442 0.154300 0.386537 \n", "... ... ... ... ... ... \n", "tqwt_kurtosisValue_dec_33 756.0 12.375335 16.341665 1.628700 3.114375 \n", "tqwt_kurtosisValue_dec_34 756.0 14.799230 15.722502 1.861700 3.665925 \n", "tqwt_kurtosisValue_dec_35 756.0 14.751559 14.432979 1.955900 3.741275 \n", "tqwt_kurtosisValue_dec_36 756.0 31.481110 34.230991 2.364000 3.948750 \n", "class 756.0 0.746032 0.435568 0.000000 0.000000 \n", "\n", " 50% 75% max \n", "id 125.500000 188.250000 251.00000 \n", "gender 1.000000 1.000000 1.00000 \n", "PPE 0.809655 0.834315 0.90766 \n", "DFA 0.700525 0.754985 0.85264 \n", "RPDE 0.484355 0.586515 0.87123 \n", "... ... ... ... \n", "tqwt_kurtosisValue_dec_33 4.741450 12.201325 73.53220 \n", "tqwt_kurtosisValue_dec_34 6.725700 21.922050 62.00730 \n", "tqwt_kurtosisValue_dec_35 7.334250 22.495175 57.54430 \n", "tqwt_kurtosisValue_dec_36 10.637250 61.125325 156.42370 \n", "class 1.000000 1.000000 1.00000 \n", "\n", "[755 rows x 8 columns]" ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
countmeanstdmin25%50%75%max
id756.0125.50000072.7937210.00000062.750000125.500000188.250000251.00000
gender756.00.5158730.5000790.0000000.0000001.0000001.0000001.00000
PPE756.00.7462840.1692940.0415510.7628330.8096550.8343150.90766
DFA756.00.7004140.0697180.5435000.6470530.7005250.7549850.85264
RPDE756.00.4890580.1374420.1543000.3865370.4843550.5865150.87123
...........................
tqwt_kurtosisValue_dec_33756.012.37533516.3416651.6287003.1143754.74145012.20132573.53220
tqwt_kurtosisValue_dec_34756.014.79923015.7225021.8617003.6659256.72570021.92205062.00730
tqwt_kurtosisValue_dec_35756.014.75155914.4329791.9559003.7412757.33425022.49517557.54430
tqwt_kurtosisValue_dec_36756.031.48111034.2309912.3640003.94875010.63725061.125325156.42370
class756.00.7460320.4355680.0000000.0000001.0000001.0000001.00000
\n", "

755 rows × 8 columns

\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "\n", "
\n", "
\n" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "dataframe", "summary": "{\n \"name\": \"df\",\n \"rows\": 755,\n \"fields\": [\n {\n \"column\": \"count\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.0,\n \"min\": 756.0,\n \"max\": 756.0,\n \"num_unique_values\": 1,\n \"samples\": [\n 756.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mean\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 374622395.71923405,\n \"min\": -9029632763.215609,\n \"max\": 12099556.09835979,\n \"num_unique_values\": 755,\n \"samples\": [\n -4143374.954075397\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"std\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 236810548.13221908,\n \"min\": 5.7338262951403425e-21,\n \"max\": 5703424049.268989,\n \"num_unique_values\": 755,\n \"samples\": [\n 487675.08280652296\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"min\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 2578254179.0303726,\n \"min\": -62062235037.0,\n \"max\": 2213588.67,\n \"num_unique_values\": 743,\n \"samples\": [\n -0.3828\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"25%\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 473008476.38622814,\n \"min\": -11400959583.75,\n \"max\": 7183016.246,\n \"num_unique_values\": 753,\n \"samples\": [\n -0.9168375\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"50%\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 325558429.5620674,\n \"min\": -7849142473.5,\n \"max\": 10662958.870000001,\n \"num_unique_values\": 735,\n \"samples\": [\n 0.0016652\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"75%\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 212971693.58083302,\n \"min\": -5136087772.75,\n \"max\": 15134891.325000001,\n \"num_unique_values\": 752,\n \"samples\": [\n 0.07430725\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"max\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 58324013.06010493,\n \"min\": -1399384344.0,\n \"max\": 74325483.41,\n \"num_unique_values\": 752,\n \"samples\": [\n 0.50277\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" } }, "metadata": {}, "execution_count": 11 } ] }, { "cell_type": "code", "source": [ "df.isnull().sum().sum()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "kFp2K49WQ8v7", "outputId": "d754220c-dbb2-436f-f09f-a00aa174cfe0" }, "execution_count": 12, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "np.int64(0)" ] }, "metadata": {}, "execution_count": 12 } ] }, { "cell_type": "code", "source": [ "df = df.groupby('id').mean().reset_index()\n", "df.drop('id', axis=1, inplace=True)" ], "metadata": { "id": "9kTA7himg6la" }, "execution_count": 13, "outputs": [] }, { "cell_type": "code", "source": [ "columns = list(df.columns)\n", "for col in columns:\n", "\tif col == 'class':\n", "\t\tcontinue\n", "\n", "\tfiltered_columns = [col]\n", "\tfor col1 in df.columns:\n", "\t\tif((col == col1) | (col == 'class')):\n", "\t\t\tcontinue\n", "\n", "\t\tval = df[col].corr(df[col1])\n", "\n", "\t\tif val > 0.7:\n", "\t\t\t# If the correlation between the two\n", "\t\t\t# features is more than 0.7 remove\n", "\t\t\tcolumns.remove(col1)\n", "\t\t\tcontinue\n", "\t\telse:\n", "\t\t\tfiltered_columns.append(col1)\n", "\n", "\t# After each iteration filter out the columns\n", "\tdf = df[filtered_columns]\n", "df.shape" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "vmb-STOFg7gT", "outputId": "de9f86d0-dbe0-45d8-aada-f9c15ca19445" }, "execution_count": 15, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "(252, 287)" ] }, "metadata": {}, "execution_count": 15 } ] }, { "cell_type": "code", "source": [ "X = df.drop('class', axis=1)\n", "X_norm = MinMaxScaler().fit_transform(X)\n", "selector = SelectKBest(chi2, k=30)\n", "selector.fit(X_norm, df['class'])\n", "filtered_columns = selector.get_support()\n", "filtered_data = X.loc[:, filtered_columns]\n", "filtered_data['class'] = df['class']\n", "df = filtered_data\n", "df.shape" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "4vjTyVNJg8uy", "outputId": "62831fea-e502-4381-ce3a-f6ae0e9cbc9d" }, "execution_count": 16, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "(252, 31)" ] }, "metadata": {}, "execution_count": 16 } ] }, { "cell_type": "code", "source": [ "x = df['class'].value_counts()\n", "plt.pie(x.values,\n", "\t\tlabels = x.index,\n", "\t\tautopct='%1.1f%%')\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 406 }, "id": "twB_CTOsg911", "outputId": "d171a2b8-4f27-478f-d029-600097380eb7" }, "execution_count": 17, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "features = df.drop('class', axis=1)\n", "target = df['class']\n", "\n", "\n", "X_train, X_val, y_train, y_val = train_test_split(features, target,\n", " test_size=0.2,\n", " random_state=10)\n", "\n", "ros = RandomOverSampler(sampling_strategy=1.0, random_state=0)\n", "X_resampled, y_resampled = ros.fit_resample(X_train, y_train)\n", "\n", "X_resampled.shape, y_resampled.value_counts()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "DoTwF-YLg-_B", "outputId": "466f48c6-0556-4e97-dba9-38972ad2389a" }, "execution_count": 18, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "((302, 30),\n", " class\n", " 1.0 151\n", " 0.0 151\n", " Name: count, dtype: int64)" ] }, "metadata": {}, "execution_count": 18 } ] }, { "cell_type": "code", "source": [ "from sklearn.metrics import roc_auc_score as ras\n", "\n", "# Models list\n", "models = [LogisticRegression(class_weight='balanced'), XGBClassifier(), SVC(kernel='rbf', probability=True)]\n", "\n", "# Model training and evaluation\n", "for model in models:\n", " model.fit(X_resampled, y_resampled)\n", "\n", " print(f'{model} : ')\n", "\n", " train_preds = model.predict(X_resampled)\n", " print('Training Accuracy : ', ras(y_resampled, train_preds))\n", "\n", " val_preds = model.predict(X_val)\n", " print('Validation Accuracy : ', ras(y_val, val_preds))\n", " print()\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "gzWQHuWVhBQ5", "outputId": "75598672-9c9f-4c31-9029-019fb3f43361" }, "execution_count": 19, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "LogisticRegression(class_weight='balanced') : \n", "Training Accuracy : 0.7814569536423841\n", "Validation Accuracy : 0.8301158301158301\n", "\n", "XGBClassifier(base_score=None, booster=None, callbacks=None,\n", " colsample_bylevel=None, colsample_bynode=None,\n", " colsample_bytree=None, device=None, early_stopping_rounds=None,\n", " enable_categorical=False, eval_metric=None, feature_types=None,\n", " gamma=None, grow_policy=None, importance_type=None,\n", " interaction_constraints=None, learning_rate=None, max_bin=None,\n", " max_cat_threshold=None, max_cat_to_onehot=None,\n", " max_delta_step=None, max_depth=None, max_leaves=None,\n", " min_child_weight=None, missing=nan, monotone_constraints=None,\n", " multi_strategy=None, n_estimators=None, n_jobs=None,\n", " num_parallel_tree=None, random_state=None, ...) : \n", "Training Accuracy : 1.0\n", "Validation Accuracy : 0.6467181467181468\n", "\n", "SVC(probability=True) : \n", "Training Accuracy : 0.6258278145695364\n", "Validation Accuracy : 0.6457528957528957\n", "\n" ] } ] }, { "cell_type": "code", "source": [ "from sklearn.metrics import ConfusionMatrixDisplay\n", "ConfusionMatrixDisplay.from_estimator(models[0], X_val, y_val)\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 455 }, "id": "b7pACb6fFoFs", "outputId": "3cca6a84-372b-4151-939c-9038b31fb693" }, "execution_count": 23, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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eFmFkr/D4fB2HAAA+Cc/bd1bYWnOv6ioSOHh4Z6KBQAAvxKobX+3V/uXlZVp1qxZatSokSIjI/X1119LkqZOnapFixZ5PEAAAHzG8MDmh9xO/rNnz9aSJUv0/PPPKzQ01Lm/Xbt2WrhwoUeDAwAAnud28l+6dKn+/Oc/a9CgQapWrZpzf4cOHbR//36PBgcAgG/ZPLD5H7fn/I8ePaqEhISL9jscDpWWlnokKAAA/EKAXufvduXftm1bbdmy5aL97777rn7xi194JCgAAOA9blf+zzzzjFJSUnT06FE5HA69//77ysrK0tKlS7VmzRpvxAgAgG9Q+Zfr27evVq9erY8++ki1atXSM888o3379mn16tW68847vREjAAC+ceGpflY2P1SpB/vcdttt2rBhg06cOKFz585p69at6tmzp6djAwAgqKSmpuqmm25SVFSUGjRooH79+ikrK8vlmKKiIo0aNUr16tVTZGSkBgwYoLy8PLfOU+mn+u3cuVNvvfWW3nrrLe3atauyHwMAgN+68EhfK5s7MjIyNGrUKO3YsUMbNmxQaWmpevbsqcLCQucx48eP1+rVq/XOO+8oIyNDx44dU//+/d06j9tz/keOHNHAgQP1j3/8Q7Vr15YknT59Wr/61a+0fPlyNW7c2N2PBADAP1XxnP+6detcXi9ZskQNGjTQrl271KVLF505c0aLFi1Senq6br/9dknS4sWL1aZNG+3YsUM333xzhc7jduU/fPhwlZaWat++fTp16pROnTqlffv2yeFwaPjw4e5+HAAAAS8/P99lKy4urtC4M2fOSJLq1q0rSdq1a5dKS0vVo0cP5zGtW7dWkyZNtH379grH43byz8jIUFpamlq1auXc16pVK7388svavHmzux8HAID/8tCCv/j4eEVHRzu31NTUK57a4XBo3LhxuuWWW9SuXTtJUm5urkJDQ52d9wtiYmKUm5tb4a/ldts/Pj7+kjfzKSsrU1xcnLsfBwCA37IZ5ZuV8ZKUk5Mju93u3B8WFnbFsaNGjdLevXu1devWygdgwu3K/4UXXtCYMWO0c+dO576dO3dq7Nix+uMf/+jR4AAA8CkPPdjHbre7bFdK/qNHj9aaNWv0ySefuKyli42NVUlJiU6fPu1yfF5enmJjYyv8tSpU+depU0c224/XKhYWFqpz586qXr18+Pnz51W9enU9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Nfr2229VUFCgqKgoTZw4UePHj9ebb76p7OxsffbZZ3r55Zedi+hGjBihr776Sk888YSysrKUnp6uJUuWuPV9W7RoocOHD2v58uXKzs7WvHnzLrl4MTw8XCkpKfr888+1ZcsWPf7447r//vsVGxsrSZoxY4ZSU1M1b948/ec//9EXX3yhxYsX609/+pNb8QCoHJI/YEHNmjW1efNmNWnSRP3791ebNm00bNgwFRUVOTsBv/3tb/W///u/SklJUVJSkqKionTvvfde9nPT0tL061//Wo899phat26tRx99VIWFhZKkRo0aacaMGZo8ebJiYmI0evRoSdKsWbM0depUpaamqk2bNurVq5fWrl2rZs2aSSqfh3/vvfe0atUqdejQQQsWLNBzzz3n1ve95557NH78eI0ePVodO3bUtm3bNHXq1IuOS0hIUP/+/XXXXXepZ8+eSkxMdLmUb/jw4Vq4cKEWL16s9u3bq2vXrlqyZIkzVgDeZTPMVh0BAICAROUPAECQIfkDABBkSP4AAAQZkj8AAEGG5A8AQJAh+QMAEGRI/gAABBmSPwAAQYbkDwBAkCH5AwAQZEj+AAAEGZI/AABB5v8D+mzTdYDs2RQAAAAASUVORK5CYII=\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [], "metadata": { "id": "w1uFjdFVG8-N" }, "execution_count": null, "outputs": [] } ] }