{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":30894,"databundleVersionId":3147400,"sourceType":"competition"},{"sourceId":3047114,"sourceType":"datasetVersion","datasetId":1865956},{"sourceId":3129043,"sourceType":"datasetVersion","datasetId":1907088}],"dockerImageVersionId":30157,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"#### This Notebook is focused at minutely understanding the price-action of BTC, ETH and BNB | We only consider 3 months worth of data (datapoint recorded every 1 minute)","metadata":{}},{"cell_type":"code","source":"import math\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom IPython.display import display\nimport pandas as pd","metadata":{"execution":{"iopub.status.busy":"2024-10-11T19:36:23.181964Z","iopub.execute_input":"2024-10-11T19:36:23.182321Z","iopub.status.idle":"2024-10-11T19:36:23.188146Z","shell.execute_reply.started":"2024-10-11T19:36:23.182287Z","shell.execute_reply":"2024-10-11T19:36:23.187028Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\ntimestamp - A timestamp for the minute covered by the row.\nAsset_ID - An ID code for the cryptoasset.\nCount - The number of trades that took place this minute.\nOpen - The USD price at the beginning of the minute.\nHigh - The highest USD price during the minute.\nLow - The lowest USD price during the minute.\nClose - The USD price at the end of the minute.\nVolume - The number of cryptoasset units traded during the minute.\nVWAP - The volume weighted average price for the minute.\nTarget - Residual log-return over 15 minute time-data. See the 'Prediction and Evaluation' section of this notebook for details of how the target is calculated.\n'''\nprint('Done!')","metadata":{"execution":{"iopub.status.busy":"2024-10-11T19:36:26.743261Z","iopub.execute_input":"2024-10-11T19:36:26.743637Z","iopub.status.idle":"2024-10-11T19:36:26.751453Z","shell.execute_reply.started":"2024-10-11T19:36:26.743600Z","shell.execute_reply":"2024-10-11T19:36:26.750134Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\n\nBasically the training_dataset contains ~3.8 years of data points for each asset\nDuring Forecasting I have taken only 1 year worth of recent data (only for BTC)\n\n'''\n\n\ndf_asset_details = pd.read_csv('../input/g-research-crypto-forecasting/asset_details.csv')\nprint('df_asset_details: ',df_asset_details.shape)\n# df_sup_train = pd.read_csv('../input/g-research-crypto-forecasting/supplemental_train.csv').iloc[-5000000:]\n# print('sup_train: ',df_sup_train.shape)\ndf_train = pd.read_csv('../input/g-research-crypto-forecasting/train.csv').iloc[:350000] #~3 months worth of data-points\nprint('train_shape: ', df_train.shape)","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","execution":{"iopub.status.busy":"2024-10-11T19:36:30.372142Z","iopub.execute_input":"2024-10-11T19:36:30.372533Z","iopub.status.idle":"2024-10-11T19:37:50.325527Z","shell.execute_reply.started":"2024-10-11T19:36:30.372493Z","shell.execute_reply":"2024-10-11T19:37:50.324551Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"display(df_asset_details)\n\ntarget_coins = ['Bitcoin', 'Ethereum', 'Binance Coin']\n\ndf_asset_dict = {k : v for k, v in zip(df_asset_details['Asset_Name'].values, df_asset_details['Asset_ID'].values)}\ndf_btc = df_train[df_train['Asset_ID'] == df_asset_dict[target_coins[0]]]\ndf_eth = df_train[df_train['Asset_ID'] == df_asset_dict[target_coins[1]]]\ndf_bnb = df_train[df_train['Asset_ID'] == df_asset_dict[target_coins[-1]]]\n\nprint('BTC-Len: ', len(df_btc), 'ETH-Len: ', len(df_eth), 'BNB-Len: ', len(df_bnb))\n\nprint()\ndisplay(df_btc)","metadata":{"execution":{"iopub.status.busy":"2024-10-11T19:38:01.402339Z","iopub.execute_input":"2024-10-11T19:38:01.404425Z","iopub.status.idle":"2024-10-11T19:38:01.517498Z","shell.execute_reply.started":"2024-10-11T19:38:01.404327Z","shell.execute_reply":"2024-10-11T19:38:01.516451Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Visualizaton -- (1st Jan 2018 - 31st Jan 2018)","metadata":{}},{"cell_type":"code","source":"import matplotlib.pyplot as plt\n\nfig, axs = plt.subplots(1, 3, figsize = (15, 4))\n\naxs[0].plot(df_btc.Close, ',r')\naxs[0].set_title(target_coins[0])\naxs[1].plot(df_eth.Close, ',b')\naxs[1].set_title(target_coins[1])\naxs[2].plot(df_bnb.Close, ',g')\naxs[2].set_title(target_coins[2])\n\nplt.tight_layout(pad = 2)\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-11T19:38:03.911952Z","iopub.execute_input":"2024-10-11T19:38:03.914827Z","iopub.status.idle":"2024-10-11T19:38:05.804034Z","shell.execute_reply.started":"2024-10-11T19:38:03.914669Z","shell.execute_reply":"2024-10-11T19:38:05.800308Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fig, axs = plt.subplots(1, 1, figsize = (15, 4))\n\naxs.plot(df_btc.Close, ',r', label = 'Close')\naxs.plot(df_btc.High, ',b', alpha = 0.1, label = 'High')\naxs.plot(df_btc.Low, ',y', alpha = 0.1, label = 'Low')\n\naxs.set_title(target_coins[0] + ' (H/C/L) | 1min-stick ')\n\nplt.legend()\nplt.show()\n\nfig, axs = plt.subplots(1, 1, figsize = (15, 4))\n\naxs.plot(df_eth.Close, ',r', label = 'Close')\naxs.plot(df_eth.High, ',b', alpha = 0.1, label = 'High')\naxs.plot(df_eth.Low, ',y', alpha = 0.1, label = 'Low')\n\naxs.set_title(target_coins[1] + ' (H/C/L) | 1min-stick ')\n\nplt.legend()\nplt.show()\n\nfig, axs = plt.subplots(1, 1, figsize = (15, 4))\n\naxs.plot(df_bnb.Close, ',r', label = 'Close')\naxs.plot(df_bnb.High, ',b', alpha = 0.1, label = 'High')\naxs.plot(df_bnb.Low, ',y', alpha = 0.1, label = 'Low')\n\naxs.set_title(target_coins[-1] + ' (H/C/L) | 1min-stick ')\n\nplt.legend()\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-11T19:40:05.572508Z","iopub.execute_input":"2024-10-11T19:40:05.573687Z","iopub.status.idle":"2024-10-11T19:40:06.553902Z","shell.execute_reply.started":"2024-10-11T19:40:05.573638Z","shell.execute_reply":"2024-10-11T19:40:06.552702Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import seaborn as sns\n\n#unit-stick = 1 min | 1 hr = 60 stick / datapoints ==> 1 month\nsample_rate = 60\ndf_btc_1hr = df_btc.iloc[::sample_rate]\n\nmean_value = df_btc_1hr.Close.describe().T['mean']\nstd = df_btc_1hr.Close.describe().T['std']\n\nprint('Mean: ', mean_value)\nprint('Median: ', df_btc_1hr.Close.describe().T['50%'])\nprint('Std: ', std)\n\n'---------------------------------------------------------------------'\n\nfig, axs = plt.subplots(1, 2, figsize = (15, 4))\n\nsns.histplot(y=df_btc_1hr.Close, bins=100, kde=True, color='red', ax = axs[0])\n\naxs[0].axhline(df_btc_1hr.Close.describe().T['mean'], color='red', linestyle='--', label=f'Mean')\naxs[0].axhline(mean_value + std, color='green', linestyle='--')\naxs[0].axhline(mean_value - std, color='green', linestyle='--')\n\naxs[1].plot(df_btc_1hr.Close, 'r')\naxs[1].set_title('BTC (Close)')\n\nplt.show()\n\nprint()\n\n'----------------------------------------------------------------------'\n\nsample_rate = 60\ndf_eth_1hr = df_eth.iloc[::sample_rate]\n\nmean_value = df_eth_1hr.Close.describe().T['mean']\nstd = df_eth_1hr.Close.describe().T['std']\n\nprint('Mean: ', mean_value)\nprint('Median: ', df_eth_1hr.Close.describe().T['50%'])\nprint('Std: ', std)\n\nfig, axs = plt.subplots(1, 2, figsize = (15, 4))\n\nsns.histplot(y=df_eth_1hr.Close, bins=100, kde=True, color='blue', ax = axs[0])\n\naxs[0].axhline(df_eth_1hr.Close.describe().T['mean'], color='red', linestyle='--', label=f'Mean')\naxs[0].axhline(mean_value + std, color='green', linestyle='--')\naxs[0].axhline(mean_value - std, color='green', linestyle='--')\n\naxs[1].plot(df_eth_1hr.Close, 'b')\naxs[1].set_title('ETH (Close)')\n\nplt.show()\n\n\n'----------------------------------------------------------------------'\n\nsample_rate = 60\ndf_bnb_1hr = df_bnb.iloc[::sample_rate]\n\nmean_value = df_bnb_1hr.Close.describe().T['mean']\nstd = df_bnb_1hr.Close.describe().T['std']\n\nprint('Mean: ', mean_value)\nprint('Median: ', df_bnb_1hr.Close.describe().T['50%'])\nprint('Std: ', std)\n\nfig, axs = plt.subplots(1, 2, figsize = (15, 4))\n\nsns.histplot(y=df_bnb_1hr.Close, bins=100, kde=True, color='green', ax = axs[0])\n\naxs[0].axhline(df_bnb_1hr.Close.describe().T['mean'], color='red', linestyle='--', label=f'Mean')\naxs[0].axhline(mean_value + std, color='green', linestyle='--')\naxs[0].axhline(mean_value - std, color='green', linestyle='--')\n\naxs[1].plot(df_bnb_1hr.Close, 'g')\naxs[1].set_title('BNB (Close)')\n\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-11T19:40:30.837686Z","iopub.execute_input":"2024-10-11T19:40:30.838645Z","iopub.status.idle":"2024-10-11T19:40:34.041485Z","shell.execute_reply.started":"2024-10-11T19:40:30.838593Z","shell.execute_reply":"2024-10-11T19:40:34.040444Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### The return-distribution (in 1hr candlestick) approximates/follows a gaussian-distribution - wihch indicates not much (drastic) price variations/movements in lower time-frames (1min - 1hr) which is obvious","metadata":{}},{"cell_type":"code","source":"fig, axs = plt.subplots(1, 2, figsize = (12, 4))\n\n\ndf_btc_1hr.Close.pct_change().plot(ax = axs[0], color = 'red', label = 'BTC')\ndf_eth_1hr.Close.pct_change().plot(ax = axs[0], color = 'blue', label = 'ETH')\ndf_bnb_1hr.Close.pct_change().plot(ax = axs[0], color = 'green', label = 'BNB')\n\n\n## Mean 1hr average percentage change\nmean_return = df_btc_1hr.Close.pct_change().describe()['mean']\nstd_return = df_btc_1hr.Close.pct_change().describe()['std']\nsum_percent = df_btc_1hr.Close.pct_change().sum()\n\nprint('BTC')\nprint(f'Mean (1hr perc-change): {(mean_return * 100):.5f}%, Std (1hr perc-change): {(std_return * 100):.5f}%, Total-prec-change: {(sum_percent * 100):.5f}%')\nprint()\n\nmean_return = df_eth_1hr.Close.pct_change().describe()['mean']\nstd_return = df_eth_1hr.Close.pct_change().describe()['std']\nsum_percent = df_eth_1hr.Close.pct_change().sum()\n\nprint('ETH')\nprint(f'Mean (1hr perc-change): {(mean_return * 100):.5f}%, Std (1hr perc-change): {(std_return * 100):.5f}%, Total-prec-change: {(sum_percent * 100):.5f}%')\nprint()\n\nmean_return = df_bnb_1hr.Close.pct_change().describe()['mean']\nstd_return = df_bnb_1hr.Close.pct_change().describe()['std']\nsum_percent = df_bnb_1hr.Close.pct_change().sum()\n\nprint('BNB')\nprint(f'Mean (1hr perc-change): {(mean_return * 100):.5f}%, Std (1hr perc-change): {(std_return * 100):.5f}%, Total-prec-change: {(sum_percent * 100):.5f}%')\nprint()\n\n\nsns.histplot(df_btc_1hr.Close.pct_change(), bins=150, kde=True, color='red', ax = axs[1], label = 'BTC')\nsns.histplot(df_eth_1hr.Close.pct_change(), bins=150, kde=True, color='blue', ax = axs[1], label = 'ETH')\nsns.histplot(df_bnb_1hr.Close.pct_change(), bins=150, kde=True, color='green', ax = axs[1], label = 'BNB')\n\nplt.legend()\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-11T19:41:17.739798Z","iopub.execute_input":"2024-10-11T19:41:17.740243Z","iopub.status.idle":"2024-10-11T19:41:19.731914Z","shell.execute_reply.started":"2024-10-11T19:41:17.740199Z","shell.execute_reply":"2024-10-11T19:41:19.730851Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Understanding Moving-Averages (Short-term (MA-20), Long-term (MA-120))","metadata":{}},{"cell_type":"code","source":"ma_20 = 20\nma_120 = 120\n\nfig, axs = plt.subplots(1, 3, figsize=(18, 5))\n\nepsilon = 10  # Approximation error of $10\n\n# Calculate moving averages\nbtc_ma_120_close = df_btc_1hr.Close.rolling(window=ma_120).mean().dropna()\nbtc_ma_20_close = df_btc_1hr.Close.rolling(window=ma_20).mean().dropna()\n\n# Align the lengths of moving averages\nbtc_ma_20_close = btc_ma_20_close[ma_120 - ma_20:]\n\n# Find intersections where the difference between ma_20 and ma_120 is within epsilon\nbtc_1hr_int = np.abs(btc_ma_20_close.values - btc_ma_120_close.values) < epsilon\nintersection_close = btc_ma_120_close[btc_1hr_int]\nbtc_ma_120_time = btc_ma_120_close.index[btc_1hr_int]\n\n# Plot BTC\ndf_btc_1hr.Close.plot(color='red', label='BTC-price-action', ax=axs[0])\nbtc_ma_20_close.plot(color='#664b01', label='MA-20', ax=axs[0])\nbtc_ma_120_close.plot(color='#bfad06', label='MA-120', ax=axs[0])\n\n# Plot intersection points\naxs[0].plot(btc_ma_120_time, intersection_close, color='black', label='Intersections', marker = '*')\naxs[0].set_title('BTC')\naxs[0].legend()\n\n# Calculate moving averages\neth_ma_120_close = df_eth_1hr.Close.rolling(window=ma_120).mean().dropna()\neth_ma_20_close = df_eth_1hr.Close.rolling(window=ma_20).mean().dropna()\n\n# Align the lengths of moving averages\neth_ma_20_close = eth_ma_20_close[ma_120 - ma_20:]\n\n# Find intersections where the difference between ma_20 and ma_120 is within epsilon\neth_1hr_int = np.abs(eth_ma_20_close.values - eth_ma_120_close.values) < epsilon\nintersection_close = eth_ma_120_close[eth_1hr_int]\neth_ma_120_time = eth_ma_120_close.index[eth_1hr_int]\n\n# Plot ETH\ndf_eth_1hr.Close.plot(color='blue', label='ETH-price-action', ax=axs[1])\ndf_eth_1hr.Close.rolling(window=ma_20).mean().dropna().plot(color='#664b01', label='MA-20', ax=axs[1])\ndf_eth_1hr.Close.rolling(window=ma_120).mean().dropna().plot(color='#bfad06', label='MA-120', ax=axs[1])\n\naxs[1].plot(eth_ma_120_time, intersection_close, color='black', label='Intersections', marker = '*')\naxs[1].set_title('ETH')\naxs[1].legend()\n\n\nepsilon = 0.1\n\n# Calculate moving averages\nbnb_ma_120_close = df_bnb_1hr.Close.rolling(window=ma_120).mean().dropna()\nbnb_ma_20_close = df_bnb_1hr.Close.rolling(window=ma_20).mean().dropna()\n\n# Align the lengths of moving averages\nbnb_ma_20_close = bnb_ma_20_close[ma_120 - ma_20:]\n\n# Find intersections where the difference between ma_20 and ma_120 is within epsilon\nbnb_1hr_int = np.abs(bnb_ma_20_close.values - bnb_ma_120_close.values) < epsilon\nintersection_close = bnb_ma_120_close[bnb_1hr_int]\nbnb_ma_120_time = bnb_ma_120_close.index[bnb_1hr_int]\n\n# Plot BNB\ndf_bnb_1hr.Close.plot(color='green', label='BNB-price-action', ax=axs[2])\ndf_bnb_1hr.Close.rolling(window=ma_20).mean().dropna().plot(color='#664b01', label='MA-20', ax=axs[2])\ndf_bnb_1hr.Close.rolling(window=ma_120).mean().dropna().plot(color='#bfad06', label='MA-120', ax=axs[2])\n\naxs[2].plot(bnb_ma_120_time, intersection_close, color='black', label='Intersections', marker = '*')\naxs[2].set_title('BNB')\naxs[2].legend()\n\nplt.tight_layout(pad=2)\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2024-10-11T19:41:29.451986Z","iopub.execute_input":"2024-10-11T19:41:29.452351Z","iopub.status.idle":"2024-10-11T19:41:30.373791Z","shell.execute_reply.started":"2024-10-11T19:41:29.452312Z","shell.execute_reply":"2024-10-11T19:41:30.372580Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Volatality Assesment - MA-20 of Percentage change of the assets (BTC, ETH, BNB) ","metadata":{}},{"cell_type":"code","source":"fig, axs = plt.subplots(1, 2, figsize = (14, 5))\n\n### std-dev of returns - 30 data-point (period) (30 minutes) rolling volatilty\ndf_btc_1hr.Close.pct_change().rolling(window=25).std().plot(label = 'BTC-Close', color = 'red', ax = axs[0])\ndf_eth_1hr.Close.pct_change().rolling(window=25).std().plot(label = 'ETH-Close', color = 'blue', ax = axs[0])\ndf_bnb_1hr.Close.pct_change().rolling(window=25).std().plot(label = 'BNB-Close', color = 'green', ax = axs[0])\naxs[0].set_title(' -- Percentage-Change (MA-20) --')\naxs[0].legend()\n\ndf_btc_1hr.Close.pct_change().rolling(window=75).std().plot(label = 'BTC-Close', color = 'red', ax = axs[1])\ndf_eth_1hr.Close.pct_change().rolling(window=75).std().plot(label = 'ETH-Close', color = 'blue', ax = axs[1])\ndf_bnb_1hr.Close.pct_change().rolling(window=75).std().plot(label = 'BNB-Close', color = 'green', ax = axs[1])\naxs[1].set_title(' -- Percentage-Change (MA-75) --')\n\naxs[1].legend()\nplt.show()\n\nfig, axs = plt.subplots(1, 1, figsize = (14, 5))\n\naxs.plot(df_btc_1hr.timestamp, df_btc_1hr.Volume)\naxs.set_title('Volume')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-11T20:26:54.130981Z","iopub.execute_input":"2024-10-11T20:26:54.131397Z","iopub.status.idle":"2024-10-11T20:26:54.893983Z","shell.execute_reply.started":"2024-10-11T20:26:54.131331Z","shell.execute_reply":"2024-10-11T20:26:54.892821Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Volume, Volatility & VWAP Correlation -> Understanding (unit-stick)","metadata":{}},{"cell_type":"code","source":"df_btc_vol_vm = pd.DataFrame({'pct' : df_btc_1hr.Close.pct_change(), 'vol' : df_btc_1hr.Volume, 'vwap' : df_btc_1hr.VWAP}).dropna()\ncorr_matrix = df_btc_vol_vm.corr()\n\nsns.heatmap(corr_matrix, annot=True, cmap='coolwarm', linewidths=0.5)\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-11T20:36:32.535056Z","iopub.execute_input":"2024-10-11T20:36:32.535463Z","iopub.status.idle":"2024-10-11T20:36:32.832738Z","shell.execute_reply.started":"2024-10-11T20:36:32.535421Z","shell.execute_reply":"2024-10-11T20:36:32.831584Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### The Correlation between BTC - ETH - BNB & Volume Relation Understanding","metadata":{}},{"cell_type":"code","source":"df_btc_1hr.index, df_eth_1hr.index, df_bnb_1hr.index = np.arange(0, len(df_btc_1hr)), np.arange(0, len(df_eth_1hr)), np.arange(0, len(df_bnb_1hr)) ","metadata":{"execution":{"iopub.status.busy":"2024-10-11T20:45:50.407256Z","iopub.execute_input":"2024-10-11T20:45:50.408304Z","iopub.status.idle":"2024-10-11T20:45:50.414977Z","shell.execute_reply.started":"2024-10-11T20:45:50.408247Z","shell.execute_reply":"2024-10-11T20:45:50.413793Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('Lengths: ', len(df_btc_1hr.Close), len(df_eth_1hr.Close), len(df_bnb_1hr.Close))\n\ndf_1hr = pd.DataFrame({'btc_close': df_btc_1hr.Close, 'eth_close' : df_eth_1hr.Close, 'bnb_close': df_bnb_1hr.Close}).dropna()\ndisplay(df_1hr)\n\ncorr_matrix = df_1hr.corr()\n\nprint(corr_matrix)\n\nsns.heatmap(corr_matrix, annot=True, cmap='coolwarm', linewidths=0.5)\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-11T20:46:01.615961Z","iopub.execute_input":"2024-10-11T20:46:01.616279Z","iopub.status.idle":"2024-10-11T20:46:01.864084Z","shell.execute_reply.started":"2024-10-11T20:46:01.616239Z","shell.execute_reply":"2024-10-11T20:46:01.862664Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"!Use the Analysis techniques shown in the time-series course + statsmodels","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import time\nfor i in range(50):\n    print('Time: ', i)\n    time.sleep(30*60)","metadata":{"execution":{"iopub.status.busy":"2022-02-02T11:25:33.50067Z","iopub.status.idle":"2022-02-02T11:25:33.501584Z","shell.execute_reply":"2022-02-02T11:25:33.501307Z","shell.execute_reply.started":"2022-02-02T11:25:33.501279Z"}},"execution_count":null,"outputs":[]}]}