{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 6. Exercise solution 6B" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# Import libraries \n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import glob\n", "import re\n", "\n", "# Set style for matplotlib plots\n", "plt.style.use('classic') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Inputs" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index([' Structural element', ' Node', 'Local number',\n", " ' X [m]', ' Y [m]',\n", " ' N [kN/m]', ' N_min [kN/m]',\n", " ' N_max [kN/m]', ' Q [kN/m]',\n", " ' Q_min [kN/m]', ' Q_max [kN/m]',\n", " ' M [kN m/m]', ' M_min [kN m/m]',\n", " ' M_max [kN m/m]', 'stage_name'],\n", " dtype='object')" ] }, "metadata": {}, "output_type": "display_data" }, { "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", "
Structural elementNodeLocal numberx [m]y [m]N [kN/m]N_min [kN/m]N_max [kN/m]Q [kN/m]Q_min [kN/m]Q_max [kN/m]M [kN m/m]M_min [kN m/m]M_max [kN m/m]stage_name
0Plate\\_1\\_14811-7,50000000000000E+0002,85000000000000E+000-7,03181073064590E-001-7,03181073064590E-0013,89246800031684E-0021,02160886389150E-001-9,36710463384537E-0021,52428398804864E-001-7,71605002114484E-015-6,28715829398274E-0141,06704575730809E-013Sheet Pile & Bored Pile Installation [Phase_2]
1Element 1-1 (Plate)4802-7,50000000000000E+0002,51250000000000E+000-2,10622366791634E+000-2,10622366791634E+0005,86208363179141E-0051,34321760204781E+000-1,63046119352223E-0041,69367103826703E+0002,68011318691106E-001-5,55946578064962E-0063,13423271299049E-001Sheet Pile & Bored Pile Installation [Phase_2]
2(ERSS)4793-7,50000000000000E+0002,17500000000000E+000-3,76943393583941E+000-3,76943393583941E+0003,29549126897870E-0051,98840581894081E+000-2,20847139338000E-0042,47531139895095E+0008,34746953403614E-001-7,07522542344873E-0051,03419525045104E+000Sheet Pile & Bored Pile Installation [Phase_2]
34784-7,50000000000000E+0001,83750000000000E+000-5,66766686622757E+000-5,66766686622757E+0001,74607721085982E-0052,29535600547745E+000-1,37686048637471E-0042,57518838288977E+0001,57246412781783E+000-1,38816031015934E-0041,90081049994095E+000Sheet Pile & Bored Pile Installation [Phase_2]
44825-7,50000000000000E+0001,50000000000000E+000-7,77577744847458E+000-7,77577744847458E+0001,52355267939873E-0052,52169863006703E+000-9,15371077159161E-0052,52169863006703E+0002,37997413435782E+000-1,71294619587021E-0042,68589307815659E+000Sheet Pile & Bored Pile Installation [Phase_2]
\n", "
" ], "text/plain": [ " Structural element Node Local number x [m] \\\n", "0 Plate\\_1\\_1 481 1 -7,50000000000000E+000 \n", "1 Element 1-1 (Plate) 480 2 -7,50000000000000E+000 \n", "2 (ERSS) 479 3 -7,50000000000000E+000 \n", "3 478 4 -7,50000000000000E+000 \n", "4 482 5 -7,50000000000000E+000 \n", "\n", " y [m] N [kN/m] N_min [kN/m] \\\n", "0 2,85000000000000E+000 -7,03181073064590E-001 -7,03181073064590E-001 \n", "1 2,51250000000000E+000 -2,10622366791634E+000 -2,10622366791634E+000 \n", "2 2,17500000000000E+000 -3,76943393583941E+000 -3,76943393583941E+000 \n", "3 1,83750000000000E+000 -5,66766686622757E+000 -5,66766686622757E+000 \n", "4 1,50000000000000E+000 -7,77577744847458E+000 -7,77577744847458E+000 \n", "\n", " N_max [kN/m] Q [kN/m] Q_min [kN/m] \\\n", "0 3,89246800031684E-002 1,02160886389150E-001 -9,36710463384537E-002 \n", "1 5,86208363179141E-005 1,34321760204781E+000 -1,63046119352223E-004 \n", "2 3,29549126897870E-005 1,98840581894081E+000 -2,20847139338000E-004 \n", "3 1,74607721085982E-005 2,29535600547745E+000 -1,37686048637471E-004 \n", "4 1,52355267939873E-005 2,52169863006703E+000 -9,15371077159161E-005 \n", "\n", " Q_max [kN/m] M [kN m/m] M_min [kN m/m] \\\n", "0 1,52428398804864E-001 -7,71605002114484E-015 -6,28715829398274E-014 \n", "1 1,69367103826703E+000 2,68011318691106E-001 -5,55946578064962E-006 \n", "2 2,47531139895095E+000 8,34746953403614E-001 -7,07522542344873E-005 \n", "3 2,57518838288977E+000 1,57246412781783E+000 -1,38816031015934E-004 \n", "4 2,52169863006703E+000 2,37997413435782E+000 -1,71294619587021E-004 \n", "\n", " M_max [kN m/m] stage_name \n", "0 1,06704575730809E-013 Sheet Pile & Bored Pile Installation [Phase_2] \n", "1 3,13423271299049E-001 Sheet Pile & Bored Pile Installation [Phase_2] \n", "2 1,03419525045104E+000 Sheet Pile & Bored Pile Installation [Phase_2] \n", "3 1,90081049994095E+000 Sheet Pile & Bored Pile Installation [Phase_2] \n", "4 2,68589307815659E+000 Sheet Pile & Bored Pile Installation [Phase_2] " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "2570" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Find all file names of the files to be imported\n", "filenames = glob.glob('Exercise 6B Data/Input Data/*.txt')\n", "\n", "# Create an empty dataframe\n", "df_plate_bendingmoment = pd.DataFrame()\n", "\n", "# Loop through all filenames and append the data to the dataframe\n", "for file in filenames:\n", " # Get the name of the stage from the filename\n", " stage_name = re.search('Plate_ (.*?) \\(', file).group(1)\n", " \n", " # Import txt file to a temporary dataframe\n", " tmp = pd.read_csv(file, sep = '\\t')\n", " \n", " # Create a new column in the temporary dataframe to store the stage name\n", " tmp['stage_name'] = stage_name\n", " \n", " # Append the temporary dataframe to the dataframe\n", " df_plate_bendingmoment = df_plate_bendingmoment.append(tmp, ignore_index=True)\n", "\n", "# Inspect the column names and rename them if necessary\n", "display(df_plate_bendingmoment.columns)\n", "df_plate_bendingmoment.columns = ['Structural element', 'Node', 'Local number', 'x [m]', 'y [m]', 'N [kN/m]', 'N_min [kN/m]', \n", " 'N_max [kN/m]', 'Q [kN/m]', 'Q_min [kN/m]', 'Q_max [kN/m]', 'M [kN m/m]', 'M_min [kN m/m]', 'M_max [kN m/m]', 'stage_name']\n", " \n", "# Inspect the dataframes and check for the number of rows in the dataframe (there are supposed to be 2570 rows)\n", "display(df_plate_bendingmoment.head())\n", "display(len(df_plate_bendingmoment))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Cleaning \n", "\n", "Upon further inspection, there are 2 issues with the data and we need to clean the data first:\n", "\n", "* The data in structural element column is not consistent and not fully populated with its respective structural element name,\n", "* Comma is used as decimals of the numbers and the type is string but not float." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# Before we go to the data cleaning, lets remove irrelevant columns from the dataframe. \n", "# Since we are only interested in the bending moment, let's just keep the column structural element, stage_name, x [m], y [m] and M [kN/m]\n", "df_plate_bendingmoment = df_plate_bendingmoment[['Structural element', 'stage_name', 'x [m]', 'y [m]', 'M [kN m/m]']]" ] }, { "cell_type": "code", "execution_count": 4, "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", "
Structural elementstage_namex [m]y [m]M [kN m/m]
0Plate\\_1\\_1Sheet Pile & Bored Pile Installation [Phase_2]-7,50000000000000E+0002,85000000000000E+000-7,71605002114484E-015
1Element 1-1 (Plate)Sheet Pile & Bored Pile Installation [Phase_2]-7,50000000000000E+0002,51250000000000E+0002,68011318691106E-001
2(ERSS)Sheet Pile & Bored Pile Installation [Phase_2]-7,50000000000000E+0002,17500000000000E+0008,34746953403614E-001
3Sheet Pile & Bored Pile Installation [Phase_2]-7,50000000000000E+0001,83750000000000E+0001,57246412781783E+000
4Sheet Pile & Bored Pile Installation [Phase_2]-7,50000000000000E+0001,50000000000000E+0002,37997413435782E+000
..................
2565Plate\\_2\\_16Cast Base Slab [Phase_10]7,50000000000000E+000-1,70000000000000E+001-4,00645821169241E+000
2566Element 51-104 (Plate)Cast Base Slab [Phase_10]7,50000000000000E+000-1,71250000000000E+001-3,13059021727124E+000
2567(ERSS)Cast Base Slab [Phase_10]7,50000000000000E+000-1,72500000000000E+001-2,06910301377388E+000
2568Cast Base Slab [Phase_10]7,50000000000000E+000-1,73750000000000E+001-9,75845611525455E-001
2569Cast Base Slab [Phase_10]7,50000000000000E+000-1,75000000000000E+001-3,26128013483640E-014
\n", "

2570 rows × 5 columns

\n", "
" ], "text/plain": [ " Structural element stage_name \\\n", "0 Plate\\_1\\_1 Sheet Pile & Bored Pile Installation [Phase_2] \n", "1 Element 1-1 (Plate) Sheet Pile & Bored Pile Installation [Phase_2] \n", "2 (ERSS) Sheet Pile & Bored Pile Installation [Phase_2] \n", "3 Sheet Pile & Bored Pile Installation [Phase_2] \n", "4 Sheet Pile & Bored Pile Installation [Phase_2] \n", "... ... ... \n", "2565 Plate\\_2\\_16 Cast Base Slab [Phase_10] \n", "2566 Element 51-104 (Plate) Cast Base Slab [Phase_10] \n", "2567 (ERSS) Cast Base Slab [Phase_10] \n", "2568 Cast Base Slab [Phase_10] \n", "2569 Cast Base Slab [Phase_10] \n", "\n", " x [m] y [m] M [kN m/m] \n", "0 -7,50000000000000E+000 2,85000000000000E+000 -7,71605002114484E-015 \n", "1 -7,50000000000000E+000 2,51250000000000E+000 2,68011318691106E-001 \n", "2 -7,50000000000000E+000 2,17500000000000E+000 8,34746953403614E-001 \n", "3 -7,50000000000000E+000 1,83750000000000E+000 1,57246412781783E+000 \n", "4 -7,50000000000000E+000 1,50000000000000E+000 2,37997413435782E+000 \n", "... ... ... ... \n", "2565 7,50000000000000E+000 -1,70000000000000E+001 -4,00645821169241E+000 \n", "2566 7,50000000000000E+000 -1,71250000000000E+001 -3,13059021727124E+000 \n", "2567 7,50000000000000E+000 -1,72500000000000E+001 -2,06910301377388E+000 \n", "2568 7,50000000000000E+000 -1,73750000000000E+001 -9,75845611525455E-001 \n", "2569 7,50000000000000E+000 -1,75000000000000E+001 -3,26128013483640E-014 \n", "\n", "[2570 rows x 5 columns]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# You should get something similar to below\n", "display(df_plate_bendingmoment)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Issue 1: Inconsistent data in the column Structural element\n", "As seen in the figure below, the data in the column structural element is not fully populated and each row has different value for the same plate element (e.g. row 0 to 4 belong to Plate\\_1\\_1). The goal here is to populate the columns with the respective plates (e.g. row to 0 to 4 would contain Plate\\_1\\_1)\n", "\n", "Before: \n", "\n", "\n", "\n", "After:\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 5, "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", "
Structural elementstage_namex [m]y [m]M [kN m/m]
0Plate\\_1\\_1Sheet Pile & Bored Pile Installation [Phase_2]-7,50000000000000E+0002,85000000000000E+000-7,71605002114484E-015
1Plate\\_1\\_1Sheet Pile & Bored Pile Installation [Phase_2]-7,50000000000000E+0002,51250000000000E+0002,68011318691106E-001
2Plate\\_1\\_1Sheet Pile & Bored Pile Installation [Phase_2]-7,50000000000000E+0002,17500000000000E+0008,34746953403614E-001
3Plate\\_1\\_1Sheet Pile & Bored Pile Installation [Phase_2]-7,50000000000000E+0001,83750000000000E+0001,57246412781783E+000
4Plate\\_1\\_1Sheet Pile & Bored Pile Installation [Phase_2]-7,50000000000000E+0001,50000000000000E+0002,37997413435782E+000
..................
2565Plate\\_2\\_16Cast Base Slab [Phase_10]7,50000000000000E+000-1,70000000000000E+001-4,00645821169241E+000
2566Plate\\_2\\_16Cast Base Slab [Phase_10]7,50000000000000E+000-1,71250000000000E+001-3,13059021727124E+000
2567Plate\\_2\\_16Cast Base Slab [Phase_10]7,50000000000000E+000-1,72500000000000E+001-2,06910301377388E+000
2568Plate\\_2\\_16Cast Base Slab [Phase_10]7,50000000000000E+000-1,73750000000000E+001-9,75845611525455E-001
2569Plate\\_2\\_16Cast Base Slab [Phase_10]7,50000000000000E+000-1,75000000000000E+001-3,26128013483640E-014
\n", "

2570 rows × 5 columns

\n", "
" ], "text/plain": [ " Structural element stage_name \\\n", "0 Plate\\_1\\_1 Sheet Pile & Bored Pile Installation [Phase_2] \n", "1 Plate\\_1\\_1 Sheet Pile & Bored Pile Installation [Phase_2] \n", "2 Plate\\_1\\_1 Sheet Pile & Bored Pile Installation [Phase_2] \n", "3 Plate\\_1\\_1 Sheet Pile & Bored Pile Installation [Phase_2] \n", "4 Plate\\_1\\_1 Sheet Pile & Bored Pile Installation [Phase_2] \n", "... ... ... \n", "2565 Plate\\_2\\_16 Cast Base Slab [Phase_10] \n", "2566 Plate\\_2\\_16 Cast Base Slab [Phase_10] \n", "2567 Plate\\_2\\_16 Cast Base Slab [Phase_10] \n", "2568 Plate\\_2\\_16 Cast Base Slab [Phase_10] \n", "2569 Plate\\_2\\_16 Cast Base Slab [Phase_10] \n", "\n", " x [m] y [m] M [kN m/m] \n", "0 -7,50000000000000E+000 2,85000000000000E+000 -7,71605002114484E-015 \n", "1 -7,50000000000000E+000 2,51250000000000E+000 2,68011318691106E-001 \n", "2 -7,50000000000000E+000 2,17500000000000E+000 8,34746953403614E-001 \n", "3 -7,50000000000000E+000 1,83750000000000E+000 1,57246412781783E+000 \n", "4 -7,50000000000000E+000 1,50000000000000E+000 2,37997413435782E+000 \n", "... ... ... ... \n", "2565 7,50000000000000E+000 -1,70000000000000E+001 -4,00645821169241E+000 \n", "2566 7,50000000000000E+000 -1,71250000000000E+001 -3,13059021727124E+000 \n", "2567 7,50000000000000E+000 -1,72500000000000E+001 -2,06910301377388E+000 \n", "2568 7,50000000000000E+000 -1,73750000000000E+001 -9,75845611525455E-001 \n", "2569 7,50000000000000E+000 -1,75000000000000E+001 -3,26128013483640E-014 \n", "\n", "[2570 rows x 5 columns]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# From the figures above, we know that the data in the rows of multiplication of five consist of the plate name and numbers\n", "# we can then assign the plate number from each of the row of multiplication of five to the next 4 rows \n", "# (e.g. row 1-4 have the plate name and number of row 0, row 6-9 have the plate name and number of row 5, etc.)\n", "\n", "# Create a temporary list to store the structural element column from the dataframe\n", "structural_element_list = list(df_plate_bendingmoment['Structural element'])\n", "\n", "# Loop through each element in the list\n", "for x,i in enumerate(structural_element_list):\n", " if (x % 5 == 0):\n", " # store the plate name and number in a temporary variable\n", " tmp = i\n", " else:\n", " # assign the plate name and number to the other rows\n", " structural_element_list[x] = tmp\n", " \n", "# Assign the list back to the column in the original dataframe\n", "df_plate_bendingmoment['Structural element'] = structural_element_list\n", "display(df_plate_bendingmoment)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Issue 2: Incorrect decimal format and type\n", "Comma is used in the decimals and it should be converted to dot in Python. Further, the numbers are now of string type and they should be converted to float type." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# Loop through each of the x[m], y[m] & M[kN m/m] columns\n", "for column in ['x [m]', 'y [m]', 'M [kN m/m]']:\n", " # Create a temporary list to store the data from each column\n", " temp_list = df_plate_bendingmoment[column]\n", " \n", " # Replace comma with dot for each element in the list\n", " temp_list = [x.replace(',','.') for x in temp_list]\n", " \n", " # Convert to float for each element in the list\n", " temp_list = [float(x) for x in temp_list]\n", " \n", " # Assign the list back to the column in the original dataframe\n", " df_plate_bendingmoment[column] = temp_list" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Visualization" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Loop through each unique stage\n", "for stage in df_plate_bendingmoment['stage_name'].unique():\n", " #Loop through each plate member ['Plate\\\\\\_1', 'Plate\\\\\\_2']\n", " for plate in ['Plate\\\\\\_1', 'Plate\\\\\\_2']:\n", " df_filtered = df_plate_bendingmoment[(df_plate_bendingmoment['stage_name'] == stage) & (df_plate_bendingmoment['Structural element'].str.contains(plate))].reset_index(drop=True)\n", " \n", " # Create a figure\n", " plt.figure(figsize=(4, 8))\n", "\n", " \n", " # Plot the results\n", " plt.plot(df_filtered['M [kN m/m]'], df_filtered['y [m]'])\n", "\n", " # Plot the grids\n", " plt.grid(which='major')\n", "\n", " # Set titles, x- and y-labels\n", " plt.title('Bending Moment for plate '+plate[-1]+' in stage: \\n'+ stage + '\\n', fontsize=12)\n", " plt.xlabel('Bending Moment M [kN m/m]', fontsize=10)\n", " plt.ylabel('y-coordinates', fontsize=10)\n", " \n", " # Rotate figures in x-axis\n", " plt.xticks(rotation=45)\n", " \n", " plt.savefig('Plate'+ plate[-1] + ' ' + stage + '.png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# End of exercises\n", "\n", "*The cell below is for setting the style of this document. It's not part of the exercises.*" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import HTML\n", "HTML(''.format(open('../css/cowi.css').read()))" ] } ], "metadata": { "hide_input": false, "kernelspec": { "display_name": "Python 3", "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.7.6" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": false, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Table of Contents", "toc_cell": false, "toc_position": { "height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "223.652px" }, "toc_section_display": true, "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 2 }