From 790f48401d6fcce79b6c170f26bdfce730904641 Mon Sep 17 00:00:00 2001
From: Akchemp <75210406+Akchemp@users.noreply.github.com>
Date: Tue, 5 Jul 2022 16:15:13 -0700
Subject: [PATCH] HW_2_Matplotlib
---
...205 \320\262 Matplotlib\342\200\235.ipynb" | 6615 +++++++++++++++++
1 file changed, 6615 insertions(+)
create mode 100644 "Home_work_2 \320\242\320\265\320\274\320\260 \342\200\234\320\222\320\270\320\267\321\203\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217 \320\264\320\260\320\275\320\275\321\213\321\205 \320\262 Matplotlib\342\200\235.ipynb"
diff --git "a/Home_work_2 \320\242\320\265\320\274\320\260 \342\200\234\320\222\320\270\320\267\321\203\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217 \320\264\320\260\320\275\320\275\321\213\321\205 \320\262 Matplotlib\342\200\235.ipynb" "b/Home_work_2 \320\242\320\265\320\274\320\260 \342\200\234\320\222\320\270\320\267\321\203\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217 \320\264\320\260\320\275\320\275\321\213\321\205 \320\262 Matplotlib\342\200\235.ipynb"
new file mode 100644
index 0000000..0c914d8
--- /dev/null
+++ "b/Home_work_2 \320\242\320\265\320\274\320\260 \342\200\234\320\222\320\270\320\267\321\203\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217 \320\264\320\260\320\275\320\275\321\213\321\205 \320\262 Matplotlib\342\200\235.ipynb"
@@ -0,0 +1,6615 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "d9ae86aa",
+ "metadata": {},
+ "source": [
+ "##### Задание 1\n",
+ "Загрузите модуль pyplot библиотеки matplotlib с псевдонимом plt, а также библиотеку numpy с псевдонимом np.\n",
+ "Примените магическую функцию %matplotlib inline для отображения графиков в Jupyter Notebook и настройки конфигурации ноутбука со значением 'svg' для более четкого отображения графиков.\n",
+ "Создайте список под названием x с числами 1, 2, 3, 4, 5, 6, 7 и список y с числами 3.5, 3.8, 4.2, 4.5, 5, 5.5, 7.\n",
+ "С помощью функции plot постройте график, соединяющий линиями точки с горизонтальными координатами из списка x и вертикальными - из списка y.\n",
+ "Затем в следующей ячейке постройте диаграмму рассеяния (другие названия - диаграмма разброса, scatter plot).\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 66,
+ "id": "ff3d5cb8",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "\n",
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "%matplotlib inline\n",
+ "%config InlineBackend.figure_format = 'svg'"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "1b810afb",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "x = [1, 2, 3, 4, 5, 6, 7]\n",
+ "y = [3.5, 3.8, 4.2, 4.5, 5, 5.5, 7]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "9e9101aa",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.title('График x, y', fontsize=16, fontweight='bold', color='DarkRed')\n",
+ "\n",
+ "title_dict = {'fontsize' : 20, 'fontweight': 'bold', 'color': '#808080', 'family': 'serif'}\n",
+ "label_dict = {'fontsize': '14', 'color': '#808080', 'family': 'serif'}\n",
+ "\n",
+ "plt.plot(x, y)\n",
+ "plt.title('График x, y', fontdict=title_dict)\n",
+ "\n",
+ "plt.xlabel('Переменная х', fontdict=label_dict)\n",
+ "plt.ylabel('Переменная y)', fontdict=label_dict)\n",
+ "\n",
+ "plt.grid()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "3dc40ade",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.grid()\n",
+ "plt.scatter(x, y)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "80f93f8c",
+ "metadata": {},
+ "source": [
+ "###### Задание 2\n",
+ "С помощью функции linspace из библиотеки Numpy создайте массив t из 51 числа от 0 до 10 включительно.\n",
+ "Создайте массив Numpy под названием f, содержащий косинусы элементов массива t.\n",
+ "Постройте линейную диаграмму, используя массив t для координат по горизонтали,а массив f - для координат по вертикали. Линия графика должна быть зеленого цвета.\n",
+ "Выведите название диаграммы - 'График f(t)'. Также добавьте названия для горизонтальной оси - 'Значения t' и для вертикальной - 'Значения f'.\n",
+ "Ограничьте график по оси x значениями 0.5 и 9.5, а по оси y - значениями -2.5 и 2.5.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "760a30f1",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. , 1.2, 1.4, 1.6, 1.8, 2. ,\n",
+ " 2.2, 2.4, 2.6, 2.8, 3. , 3.2, 3.4, 3.6, 3.8, 4. , 4.2,\n",
+ " 4.4, 4.6, 4.8, 5. , 5.2, 5.4, 5.6, 5.8, 6. , 6.2, 6.4,\n",
+ " 6.6, 6.8, 7. , 7.2, 7.4, 7.6, 7.8, 8. , 8.2, 8.4, 8.6,\n",
+ " 8.8, 9. , 9.2, 9.4, 9.6, 9.8, 10. ])"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "t = np.linspace(0, 10, 51)\n",
+ "t"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "5c1b7221",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ 1. , 0.98006658, 0.92106099, 0.82533561, 0.69670671,\n",
+ " 0.54030231, 0.36235775, 0.16996714, -0.02919952, -0.22720209,\n",
+ " -0.41614684, -0.58850112, -0.73739372, -0.85688875, -0.94222234,\n",
+ " -0.9899925 , -0.99829478, -0.96679819, -0.89675842, -0.79096771,\n",
+ " -0.65364362, -0.49026082, -0.30733287, -0.11215253, 0.08749898,\n",
+ " 0.28366219, 0.46851667, 0.63469288, 0.77556588, 0.88551952,\n",
+ " 0.96017029, 0.9965421 , 0.99318492, 0.95023259, 0.86939749,\n",
+ " 0.75390225, 0.60835131, 0.43854733, 0.25125984, 0.05395542,\n",
+ " -0.14550003, -0.33915486, -0.51928865, -0.67872005, -0.81109301,\n",
+ " -0.91113026, -0.97484362, -0.99969304, -0.98468786, -0.93042627,\n",
+ " -0.83907153])"
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "f = np.cos(t)\n",
+ "f"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 45,
+ "id": "48d21275",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.plot(t, f, color='green')\n",
+ "\n",
+ "plt.title('График f(t)', color='navy')\n",
+ "\n",
+ "plt.xlabel('Значения t')\n",
+ "plt.ylabel('Значения f')\n",
+ "\n",
+ "plt.axis([0.5, 9.5, -2.5, 2.5])\n",
+ "plt.grid()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "245a19b0",
+ "metadata": {},
+ "source": [
+ "#### *Задание 3\n",
+ "С помощью функции linspace библиотеки Numpy создайте массив x из 51 числа от -3 до 3 включительно.\n",
+ "Создайте массивы y1, y2, y3, y4 по следующим формулам:\n",
+ "y1 = x**2\n",
+ "y2 = 2 * x + 0.5\n",
+ "y3 = -3 * x - 1.5\n",
+ "y4 = sin(x)\n",
+ "Используя функцию subplots модуля matplotlib.pyplot, создайте объект matplotlib.figure.Figure с названием fig и массив объектов Axes под названием ax,причем так, чтобы у вас было 4 отдельных графика в сетке, состоящей из двух строк и двух столбцов. В каждом графике массив x используется для координат по горизонтали.В левом верхнем графике для координат по вертикали используйте y1,в правом верхнем - y2, в левом нижнем - y3, в правом нижнем - y4.Дайте название графикам: 'График y1', 'График y2' и т.д.\n",
+ "Для графика в левом верхнем углу установите границы по оси x от -5 до 5.\n",
+ "Установите размеры фигуры 8 дюймов по горизонтали и 6 дюймов по вертикали.\n",
+ "Вертикальные и горизонтальные зазоры между графиками должны составлять 0.3.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 71,
+ "id": "07e25964",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([-3. , -2.88, -2.76, -2.64, -2.52, -2.4 , -2.28, -2.16, -2.04,\n",
+ " -1.92, -1.8 , -1.68, -1.56, -1.44, -1.32, -1.2 , -1.08, -0.96,\n",
+ " -0.84, -0.72, -0.6 , -0.48, -0.36, -0.24, -0.12, 0. , 0.12,\n",
+ " 0.24, 0.36, 0.48, 0.6 , 0.72, 0.84, 0.96, 1.08, 1.2 ,\n",
+ " 1.32, 1.44, 1.56, 1.68, 1.8 , 1.92, 2.04, 2.16, 2.28,\n",
+ " 2.4 , 2.52, 2.64, 2.76, 2.88, 3. ])"
+ ]
+ },
+ "execution_count": 71,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "x = np.linspace(-3, 3, 51)\n",
+ "x"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 72,
+ "id": "da9254ca",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([9. , 8.2944, 7.6176, 6.9696, 6.3504, 5.76 , 5.1984, 4.6656,\n",
+ " 4.1616, 3.6864, 3.24 , 2.8224, 2.4336, 2.0736, 1.7424, 1.44 ,\n",
+ " 1.1664, 0.9216, 0.7056, 0.5184, 0.36 , 0.2304, 0.1296, 0.0576,\n",
+ " 0.0144, 0. , 0.0144, 0.0576, 0.1296, 0.2304, 0.36 , 0.5184,\n",
+ " 0.7056, 0.9216, 1.1664, 1.44 , 1.7424, 2.0736, 2.4336, 2.8224,\n",
+ " 3.24 , 3.6864, 4.1616, 4.6656, 5.1984, 5.76 , 6.3504, 6.9696,\n",
+ " 7.6176, 8.2944, 9. ])"
+ ]
+ },
+ "execution_count": 72,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "y1 = x**2\n",
+ "y1"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 73,
+ "id": "5306337b",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([-5.5 , -5.26, -5.02, -4.78, -4.54, -4.3 , -4.06, -3.82, -3.58,\n",
+ " -3.34, -3.1 , -2.86, -2.62, -2.38, -2.14, -1.9 , -1.66, -1.42,\n",
+ " -1.18, -0.94, -0.7 , -0.46, -0.22, 0.02, 0.26, 0.5 , 0.74,\n",
+ " 0.98, 1.22, 1.46, 1.7 , 1.94, 2.18, 2.42, 2.66, 2.9 ,\n",
+ " 3.14, 3.38, 3.62, 3.86, 4.1 , 4.34, 4.58, 4.82, 5.06,\n",
+ " 5.3 , 5.54, 5.78, 6.02, 6.26, 6.5 ])"
+ ]
+ },
+ "execution_count": 73,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "y2 = 2*x+0.5\n",
+ "y2"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 74,
+ "id": "d621b40f",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ 7.5 , 7.14, 6.78, 6.42, 6.06, 5.7 , 5.34, 4.98,\n",
+ " 4.62, 4.26, 3.9 , 3.54, 3.18, 2.82, 2.46, 2.1 ,\n",
+ " 1.74, 1.38, 1.02, 0.66, 0.3 , -0.06, -0.42, -0.78,\n",
+ " -1.14, -1.5 , -1.86, -2.22, -2.58, -2.94, -3.3 , -3.66,\n",
+ " -4.02, -4.38, -4.74, -5.1 , -5.46, -5.82, -6.18, -6.54,\n",
+ " -6.9 , -7.26, -7.62, -7.98, -8.34, -8.7 , -9.06, -9.42,\n",
+ " -9.78, -10.14, -10.5 ])"
+ ]
+ },
+ "execution_count": 74,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "y3 = -3*x-1.5\n",
+ "y3"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 75,
+ "id": "87dbd0a7",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([-0.14112001, -0.25861935, -0.37239904, -0.48082261, -0.58233065,\n",
+ " -0.67546318, -0.75888071, -0.83138346, -0.89192865, -0.93964547,\n",
+ " -0.97384763, -0.9940432 , -0.99994172, -0.99145835, -0.9687151 ,\n",
+ " -0.93203909, -0.88195781, -0.81919157, -0.74464312, -0.65938467,\n",
+ " -0.56464247, -0.46177918, -0.35227423, -0.23770263, -0.11971221,\n",
+ " 0. , 0.11971221, 0.23770263, 0.35227423, 0.46177918,\n",
+ " 0.56464247, 0.65938467, 0.74464312, 0.81919157, 0.88195781,\n",
+ " 0.93203909, 0.9687151 , 0.99145835, 0.99994172, 0.9940432 ,\n",
+ " 0.97384763, 0.93964547, 0.89192865, 0.83138346, 0.75888071,\n",
+ " 0.67546318, 0.58233065, 0.48082261, 0.37239904, 0.25861935,\n",
+ " 0.14112001])"
+ ]
+ },
+ "execution_count": 75,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "y4 = np.sin(x)\n",
+ "y4"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 83,
+ "id": "bf902ce9",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "fig, ax = plt.subplots(nrows=2, ncols=2)\n",
+ "ax1, ax2, ax3, ax4 = ax.flatten()\n",
+ "\n",
+ "ax1.plot(x, y1)\n",
+ "ax2.plot(x, y2)\n",
+ "ax3.plot(x, y3)\n",
+ "ax4.plot(x, y4)\n",
+ "\n",
+ "ax1.set_title('График $y_1$')\n",
+ "ax2.set_title('График $y_2$')\n",
+ "ax3.set_title('График $y_3$')\n",
+ "ax4.set_title('График $y_4$')\n",
+ "ax1.set_xlim([-5, 5])\n",
+ "fig.set_size_inches(8, 6)\n",
+ "plt.subplots_adjust(wspace=0.3, hspace=0.3)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b60154f4",
+ "metadata": {},
+ "source": [
+ "###### *Задание 4\n",
+ "В этом задании мы будем работать с датасетом, в котором приведены данные по мошенничеству с кредитными данными: Credit Card Fraud Detection (информация об авторах: Andrea Dal Pozzolo, Olivier Caelen, Reid A. Johnson and Gianluca Bontempi. Calibrating Probability with Undersampling for Unbalanced Classification. In Symposium on Computational Intelligence and Data Mining (CIDM), IEEE, 2015).\n",
+ "Ознакомьтесь с описанием и скачайте датасет creditcard.csv с сайта Kaggle.com по ссылке:\n",
+ "Credit Card Fraud Detection\n",
+ "Данный датасет является примером несбалансированных данных, так как мошеннические операции с картами встречаются реже обычных.\n",
+ "Импортируйте библиотеку Pandas, а также используйте для графиков стиль “fivethirtyeight”.\n",
+ "Посчитайте с помощью метода value_counts количество наблюдений для каждого значения целевой переменной Class и примените к полученным данным метод plot, чтобы построить столбчатую диаграмму. Затем постройте такую же диаграмму, используя логарифмический масштаб.\n",
+ "На следующем графике постройте две гистограммы по значениям признака V1 - одну для мошеннических транзакций (Class равен 1) и другую - для обычных (Class равен 0). Подберите значение аргумента density так, чтобы по вертикали графика было расположено не число наблюдений, а плотность распределения. Число бинов должно равняться 20 для обеих гистограмм, а коэффициент alpha сделайте равным 0.5, чтобы гистограммы были полупрозрачными и не загораживали друг друга. Создайте легенду с двумя значениями: “Class 0” и “Class 1”. Гистограмма обычных транзакций должна быть серого цвета, а мошеннических - красного. Горизонтальной оси дайте название “V1”.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 85,
+ "id": "0ff6d4e0",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import pandas as pd\n",
+ "plt.style.use('fivethirtyeight')\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 86,
+ "id": "47c96d3d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "creditcard = pd.read_csv('creditcard.csv')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 88,
+ "id": "765e00f3",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0 284315\n",
+ "1 492\n",
+ "Name: Class, dtype: int64\n"
+ ]
+ }
+ ],
+ "source": [
+ "class_list = creditcard['Class'].value_counts()\n",
+ "print(class_list)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 89,
+ "id": "7901f0e5",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "class_list.plot(kind='barh')\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 90,
+ "id": "37205729",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "class_list.plot(kind='barh')\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 91,
+ "id": "c8a1c022",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "class_list.plot(kind='barh', logx=True)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 93,
+ "id": "122f7790",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "class0 = creditcard.loc[creditcard['Class'] == 0, ['V1']]\n",
+ "\n",
+ "class1 = creditcard.loc[creditcard['Class'] == 1, ['V1']]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 94,
+ "id": "6da3414d",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.hist(class0['V1'], bins=20, density=True, alpha=0.5, label='Class 0', color='grey')\n",
+ "plt.hist(class1['V1'], bins=20, density=True, alpha=0.5, label='Class 1', color='red')\n",
+ "plt.legend()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "77d3a790",
+ "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": 5
+}