{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "from matplotlib.pyplot import savefig\n", "\n", "sns.set(style=\"white\")" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Useful function\n", "\n", "def get_highest_values(arr, n):\n", " return np.array(arr).argsort()[-n:][::-1]\n", "\n", "def get_lowest_values(arr, n):\n", " return np.array(arr).argsort()[::-1][-n:][::-1]" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "data_file = \"data/temp.train\"\n", "interval = 16\n", "\n", "!python generate/generate_data_model_random.py --output data/temp --interval \"0, 16\" --kind svdne --metric sub_blocks_area --scenes \"A, D, G, H\" --nb_zones 16 --random 1 --percent 1.0 --step 10 --each 1 --renderer maxwell --custom temp_min_max_values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Correlation analysis between SVD features" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "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", "
12345678910111213141516
00.3247940.3128660.3228480.2997670.2933630.2979600.3562650.3528350.3421210.3460010.3295090.3953990.3296500.3301980.3731160.376142
10.4052030.3987250.3827010.3717530.3598090.3785210.4335810.4300250.4228380.4126200.3978970.4506240.3998710.4017000.4418000.445671
20.3238620.3114520.3216880.2991410.2924550.2970240.3546460.3517110.3423750.3448220.3290670.3951950.3291920.3294810.3726370.375534
30.3240960.3120370.3226570.2994630.2926990.2975770.3558000.3523040.3426090.3455760.3287810.3950060.3293730.3299390.3728290.376044
40.3319640.3173760.3284950.3063940.3002710.3053220.3612290.3595500.3486610.3502820.3334340.3989750.3341800.3347810.3775150.381927
\n", "
" ], "text/plain": [ " 1 2 3 4 5 6 7 \\\n", "0 0.324794 0.312866 0.322848 0.299767 0.293363 0.297960 0.356265 \n", "1 0.405203 0.398725 0.382701 0.371753 0.359809 0.378521 0.433581 \n", "2 0.323862 0.311452 0.321688 0.299141 0.292455 0.297024 0.354646 \n", "3 0.324096 0.312037 0.322657 0.299463 0.292699 0.297577 0.355800 \n", "4 0.331964 0.317376 0.328495 0.306394 0.300271 0.305322 0.361229 \n", "\n", " 8 9 10 11 12 13 14 \\\n", "0 0.352835 0.342121 0.346001 0.329509 0.395399 0.329650 0.330198 \n", "1 0.430025 0.422838 0.412620 0.397897 0.450624 0.399871 0.401700 \n", "2 0.351711 0.342375 0.344822 0.329067 0.395195 0.329192 0.329481 \n", "3 0.352304 0.342609 0.345576 0.328781 0.395006 0.329373 0.329939 \n", "4 0.359550 0.348661 0.350282 0.333434 0.398975 0.334180 0.334781 \n", "\n", " 15 16 \n", "0 0.373116 0.376142 \n", "1 0.441800 0.445671 \n", "2 0.372637 0.375534 \n", "3 0.372829 0.376044 \n", "4 0.377515 0.381927 " ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv(data_file, sep=';', header=None)\n", "df = df.drop(df.columns[[0]], axis=1)\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "# Compute the correlation matrix\n", "corr = df[1:interval].corr()" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "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RwAAAABIzBl8AAAAAFSTt+iWosEHAAAAAIlp8AEAAABQTd6iW4qnBAAAAACJCfgAAAAAIDFbdAEAAACopMJLNkrR4AMAAACAxDT4AAAAAKimQoOvDA0+AAAAAEhMgw8AAACAatLgK0WDDwAAAAAS0+ADAAAAoJKKmm5aGZ4SAAAAACSmwQcAAABANVW0wbdy5cqYNWtWrFu3LoYNGxZz586NAw44YKvvrF69OmbPnh2rVq2KTZs2xUUXXRRTpkzZ4VpExOLFi+OWW26Jer0eRVHEHXfcEfvss8925xHwAQAAAEA/dHd3x9SpU2PKlCnx3e9+N2bPnh133nnnVt+54YYbYty4cXHLLbfE2rVr48wzz4xPfepT0dnZ2XDt5z//ecyfPz8WLVoUw4cPj/Xr18fgwYMbzlPNGBQAAAAAiqJpV29vb6xatWqbq7e3d6uR3njjjVi2bFl0dXVFRERXV1csW7Ys1q5du9X3li9fHscee2xERHR0dMTYsWPjgQce2OHat7/97bjgggti+PDhERExdOjQ+NCHPtTwMWnwAQAAALDLW7RoUcyfP3+bz6dPnx4zZszY8ntPT0+MGDEi2traIiKira0t9t133+jp6YmOjo4t3zv00ENj8eLFMX78+Fi1alU8/vjjMXr06B2urVixIkaPHh3nnntu/OpXv4pJkybFV77ylSiKYruzC/gAAAAAqKba9kOtD9p5550XZ5xxxjaft7e379TfmzVrVlx//fUxZcqUGDlyZBx99NFbQsFGa319ffFP//RPcccdd8S7774bX/rSl2LkyJFx+umnb/deAj4AAAAAdnnt7e2lwrzOzs547bXXoq+vL9ra2qKvry9ef/316Ozs3Op7HR0dceONN275fdq0aXHQQQftcG3kyJExefLkGDx4cAwePDhOOOGEeOqppxoGfM7gAwAAAKCSiqLWtKusvffeOw455JC4//77IyLi/vvvj0MOOWSr7bkREW+++WZs2rQpIiIee+yxePbZZ7ec29doraurK5YuXRr1ej02btwYP/rRj2Ls2LENZ9LgAwAAAIB+uPrqq2PWrFmxYMGCaG9vj7lz50bEb5t4M2fOjPHjx8dTTz0V1113XdRqtdhrr71i4cKFMWTIkIiIhmuf+cxn4umnn45TTjklarVaHHPMMfHZz3624TwCPgAAAADohzFjxsS99967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5cvj2GOPjYiIjo6OGDt2bDzwwAM7XIuIuPXWW+P444+PAw44oNRMAj4AAAAAdnm9vb2xatWqba7e3t6tvtfT0xMjRoyItra2iIhoa2uLfffdd6sGXkTEoYceGosXL456vR4vvfRSPP744/HKK6/scG358uWxdOnSOP/880vPPuh9/L8BAAAAYMD082i892XRokUxf/78bT6fPn16zJgxo99/b9b/b+/ug7uq73yBfwJoCw4BoiXE4LNXxac6o7de19bcpYLtNCFou6uX0eterbS1YAtVgxILPqDgusVHSmtLx+6K2/VhrVB7t+3SzlS3tU5r67XYtUFUjDwIJgrUByTn/uE1lSX5cXBJzvnevF4zzCQ5kd+b3wR7fPd9zpk1K66//vpobm6O/fffP0455ZTuUrC3Y9u2bYurrroqbrjhhu7vzUPBBwAAAMCAd/7558eZZ56509erq6t3+Lyuri7Wr18f27dvj8GDB8f27dtjw4YNUVdXt8P31dTUxE033dT9+UUXXRSHH354xWMvv/xyvPDCCzF16tSIeGdVmGVZbNmyJa699tpesyv4AAAAACil3X267X9GdXX1TmVeT/bdd98YN25cLF++PJqbm2P58uUxbty4qKmp2eH7Ojo6Yvjw4TFkyJD4xS9+Ec8880zceuutFY8NHTo0Hnvsse7f47bbbos//elP0dLSUjGTgg8AAAAAdsPcuXNj1qxZsWjRoqiuro4FCxZExDtLvEsuuSSOO+64ePLJJ2PevHkxaNCgGDVqVCxevDiGDh0aEVHx2Puh4AMAAACglHbn6bb96bDDDot77713p6/feeed3R83NDREQ0NDj/98pWPvlffef1VZf24dAQAAACCnx1at6bfXOvmwA/rttfa0fl3wbbjptv58uVIbfen02Lx5c9ExSmP48OHxwgXTio5RGgcuud3Px3sMHz48Xn1gWdExSmPEWU3x5h9XFR2jND7wXw6Lt1/eWHSM0hjyof1iTcdrRccojQNGVce2F9uLjlEae42tLzoCAMBusUvLZ1DRAQAAAACA9889+AAAAAAoJQO+fCz4AAAAACBhFnwAAAAAlFJZn6JbNhZ8AAAAAJAwBR8AAAAAJMwlugAAAACUUuYS3Vws+AAAAAAgYRZ8AAAAAJSSh2zkY8EHAAAAAAmz4AMAAACglCz48rHgAwAAAICEWfAB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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Generate a mask for the upper triangle\n", "mask = np.zeros_like(corr, dtype=np.bool)\n", "mask[np.triu_indices_from(mask)] = True\n", "\n", "# Set up the matplotlib figure\n", "f, ax = plt.subplots(figsize=(30, 20))\n", "\n", "# Generate a custom diverging colormap\n", "cmap = sns.diverging_palette(220, 10, as_cmap=True)\n", "\n", "# Draw the heatmap with the mask and correct aspect ratio\n", "sns.heatmap(corr, mask=mask, cmap=cmap,\n", " square=True, linewidths=.5, cbar_kws={\"shrink\": .5})\n", "savefig('corr_no_label.png')" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "features_corr = []\n", "\n", "for id_row, row in enumerate(corr):\n", " correlation_score = 0\n", " for id_col, val in enumerate(corr[row]):\n", " if id_col != id_row:\n", " correlation_score += abs(val)\n", "\n", " features_corr.append(correlation_score)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([101, 100, 102, 99, 103, 104, 98, 105, 97, 96, 95, 106, 94,\n", " 107, 93, 108, 92, 109, 91, 110])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "get_highest_values(features_corr, 20)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([199, 1, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 198,\n", " 11, 12, 197, 196, 195, 13, 193])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "get_lowest_values(features_corr, 20)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Correlation analysis between SVD features and labels" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "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", "
012345678910111213141516
000.3247940.3128660.3228480.2997670.2933630.2979600.3562650.3528350.3421210.3460010.3295090.3953990.3296500.3301980.3731160.376142
110.4052030.3987250.3827010.3717530.3598090.3785210.4335810.4300250.4228380.4126200.3978970.4506240.3998710.4017000.4418000.445671
200.3238620.3114520.3216880.2991410.2924550.2970240.3546460.3517110.3423750.3448220.3290670.3951950.3291920.3294810.3726370.375534
300.3240960.3120370.3226570.2994630.2926990.2975770.3558000.3523040.3426090.3455760.3287810.3950060.3293730.3299390.3728290.376044
400.3319640.3173760.3284950.3063940.3002710.3053220.3612290.3595500.3486610.3502820.3334340.3989750.3341800.3347810.3775150.381927
\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 7 \\\n", "0 0 0.324794 0.312866 0.322848 0.299767 0.293363 0.297960 0.356265 \n", "1 1 0.405203 0.398725 0.382701 0.371753 0.359809 0.378521 0.433581 \n", "2 0 0.323862 0.311452 0.321688 0.299141 0.292455 0.297024 0.354646 \n", "3 0 0.324096 0.312037 0.322657 0.299463 0.292699 0.297577 0.355800 \n", "4 0 0.331964 0.317376 0.328495 0.306394 0.300271 0.305322 0.361229 \n", "\n", " 8 9 10 11 12 13 14 \\\n", "0 0.352835 0.342121 0.346001 0.329509 0.395399 0.329650 0.330198 \n", "1 0.430025 0.422838 0.412620 0.397897 0.450624 0.399871 0.401700 \n", "2 0.351711 0.342375 0.344822 0.329067 0.395195 0.329192 0.329481 \n", "3 0.352304 0.342609 0.345576 0.328781 0.395006 0.329373 0.329939 \n", "4 0.359550 0.348661 0.350282 0.333434 0.398975 0.334180 0.334781 \n", "\n", " 15 16 \n", "0 0.373116 0.376142 \n", "1 0.441800 0.445671 \n", "2 0.372637 0.375534 \n", "3 0.372829 0.376044 \n", "4 0.377515 0.381927 " ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv(data_file, sep=';', header=None)\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "# Compute the correlation matrix\n", "corr = df.corr()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "image/png": "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AAAAAGSgUQcAAABASvaoAwAAAAAOaN26dXHppZfGuHHj4tJLL41nn332gN/97W9/G2eccUbMnz//be8rqAMAAAAgpWazWdrPoejs7IwpU6bEQw89FFOmTIlZs2a95fd6enqis7MzRo8efVD3tfQVAAAAgNrr7u6O7u7u/a63t7dHe3v73r9ffPHFWL16ddx1110RETFhwoSYO3dubN68OQYMGLDPv/3e974X5513XuzcuTN27tz5tjMI6gAAAABIaU+Je9QtWrQoFixYsN/1adOmxfTp0/f+3dXVFYMHD462traIiGhra4tBgwZFV1fXPkHd008/HStWrIi77747Fi5ceFAzCOoAAAAAqL0rrrgiJk+evN/1N7bpDtbu3bvjpptuim9961t7A72DIagDAAAAIKUyG3VvXuJ6IB0dHbFx48bo6emJtra26OnpiU2bNkVHR8fe7zz//POxfv36uOqqqyLi9WW1zWYztm/fHnPnzj3gvQV1AAAAAHCQBg4cGCNHjowlS5bEpEmTYsmSJTFy5Mh9lr0OGTIkHnvssb1/f/e7342dO3fGdddd1/LeTn0FAAAAgEMwe/bsWLx4cYwbNy4WL14cc+bMiYiIqVOnxqpVq/7k+2rUAQAAAJBSs8Slr4di+PDhcd999+13/Y477njL77/xMIpWNOoAAAAAIAGNOgAAAABSKvMwiQwOKqjbsmVLdHV1RVtbW5xwwgnx3ve+t7fnAgAAAIBaaRnUPffcc9HZ2RkrVqyIoiiivb09XnnllbjssstixowZ0bdv37LmBAAAAKBmalaoa71H3fXXXx8TJ06Mxx57LG688ca4/PLLY9myZbFt27b41re+VdaMAAAAAHDYaxnUbd26NSZOnBhHH310fPazn43ly5fHwIEDY+7cubFy5cqyZgQAAACghprNZmk/GbQM6vr06RPr16+PiIinnnpq71LXRqMRffo4hwIAAAAA3ikt07Yvf/nLcckll8Sxxx4bzz//fNx8880REfHCCy/EWWedVcqAAAAAANSTU1/f4LzzzouHH344fve738VJJ50U73//+yMi4phjjol58+aVMiAAAAAA1MHbrl9tb2+PD3/4w2XMAgAAAAB7Zdk7riwt96gDAAAAAMrhRAgAAAAAUqpZoU6jDgAAAAAy0KgDAAAAIKW6nfqqUQcA/6+9e4/SqrzvBf7j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0Urx/ve/P66++ur42te+FmeccUZs2LAh6urqukorqBJrQGvAKrIGtAZk57XLF3VDhgyJtWvXxtatWyPizT+069atq/R4cBXNnDkznn322bjmmmsqc9nT9owePTruv//+aG9vTx2lFA8++GAsX748TjnllBg+fHisWbMmPv3pT8eiRYtSRyvNW3/X7b777jF27Nh4+OGHEycqz5AhQ6Jv375dl70dffTRMXDgwFixYkXiZOVau3ZtPPjgg9Ha2po6SqmWLl0a69ati2OPPTYiIo499tjYc889Y/ny5YmTlecv/uIv4pZbbonbb789xo0bF6+88kocdNBBqWOVxhqQCGvAt1gDWgNaA1ZvDcjOa5f/12rvvfeOYcOGxYIFCyIiYsGCBTFs2DCXPFTI17/+9XjyySfj+uuvj9133z11nFJt2bIlVq9e3fX9woULo3///jFgwICEqcozfvz4WLRoUSxcuDAWLlwY++23X3znO9+Jk046KXW0Uvzud7/ruj9XURRx1113xbBhwxKnKs+gQYPihBNOiMWLF0fEm7s/btiwIT7wgQ8kTlauH/zgB9HY2BgDBw5MHaVU++23X6xZsyaefvrpiIhYvnx5bNiwoVJF1QsvvBARb1729/Wvfz0+9alPRb9+/RKnKo81INaA1oDWgNaAEdVdA7Lz6lUURZE6RE9bvnx5XHTRRbFp06aoq6uLmTNnxqGHHpo6VimuvPLKuPvuu2P9+vUxcODAGDBgQPzwhz9MHas0v/nNb6KlpSUOPvjg2GOPPSIi4oADDojrr78+cbJyrF+/Ps4777x4+eWXo3fv3tG/f/9oa2ur1H2q3m748OFx4403xuGHH546SilWrlwZEydOjK1bt0ZnZ2ccdthhMWXKlBg8eHDqaKVZuXJlXHzxxdHR0RF9+/aNL3zhC9HY2Jg6VqlGjBgRl1xySZx88smpo5TuzjvvjJtuuqnrRtJ///d/H6eeemriVOW55JJL4uGHH47XX389TjzxxLj44ovjfe97X+pYPaK79U5V1oDdnX9V1oHbO89rrrmmMmvA7Z3/zTffXJk14Lv5Pd+V14DbO/8bb7yxMmvA7n7+1oDszCpR1AEAAABA7nb5S18BAAAAYGegqAMAAACADCjqAAAAACADijoAAAAAyICiDgAAAAAyoKgDAAAAgAwo6gAAAAAgA4o6AAAAAMjA/we60EyH4dQe0wAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Generate a mask for the upper triangle\n", "mask = np.zeros_like(corr, dtype=np.bool)\n", "mask[np.triu_indices_from(mask)] = True\n", "\n", "# Set up the matplotlib figure\n", "f, ax = plt.subplots(figsize=(30, 20))\n", "\n", "# Generate a custom diverging colormap\n", "cmap = sns.diverging_palette(220, 10, as_cmap=True)\n", "\n", "# Draw the heatmap with the mask and correct aspect ratio\n", "sns.heatmap(corr, mask=mask, cmap=cmap,\n", " square=True, linewidths=.5, cbar_kws={\"shrink\": .5})\n", "savefig('corr_with_label.png')" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "features_corr = []\n", "\n", "for id_row, row in enumerate(corr):\n", " for id_col, val in enumerate(corr[row]):\n", " if id_col == 0 and id_row != 0:\n", " features_corr.append(abs(val))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([192, 191, 194, 193, 187, 190, 189, 188, 186, 195, 185, 184, 183,\n", " 182, 181, 196, 180, 179, 178, 177])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "get_highest_values(features_corr, 20)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([10, 11, 9, 12, 8, 0, 7, 13, 14, 15, 6, 1, 16, 17, 18, 19, 5,\n", " 20, 21, 22])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "get_lowest_values(features_corr, 20)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "thesis-venv", "language": "python", "name": "thesis-venv" }, "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.6.0" } }, "nbformat": 4, "nbformat_minor": 2 }