diff --git "a/test.ipynb" "b/test.ipynb"
deleted file mode 100644--- "a/test.ipynb"
+++ /dev/null
@@ -1,4935 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "[*********************100%***********************] 40 of 40 completed\n"
- ]
- }
- ],
- "source": [
- "import yfinance as yf\n",
- "import pandas as pd\n",
- "\n",
- "# List of 40 example tickers\n",
- "tickers = [\n",
- " \"AAPL\", \"MSFT\", \"GOOGL\", \"AMZN\", \"META\", \"TSLA\", \"NVDA\", \"JPM\", \"JNJ\", \"V\",\n",
- " \"UNH\", \"HD\", \"PG\", \"MA\", \"BAC\", \"PFE\", \"KO\", \"DIS\", \"PEP\", \"INTC\",\n",
- " \"NFLX\", \"CSCO\", \"CMCSA\", \"ABT\", \"XOM\", \"T\", \"CVX\", \"MCD\", \"NKE\", \"ADBE\",\n",
- " \"WMT\", \"CRM\", \"ORCL\", \"IBM\", \"QCOM\", \"LLY\", \"MRK\", \"BA\", \"TMO\", \"COST\"\n",
- "]\n",
- "\n",
- "# Download 15-minute interval data for the last 60 days (max allowed)\n",
- "data = yf.download(tickers, period=\"60d\", interval=\"5m\", auto_adjust=False)[\"Adj Close\"]\n",
- "\n",
- "# Transpose to have each row as one company’s 15-minute interval time series\n",
- "df = pd.DataFrame(data.transpose())\n",
- "\n",
- "\n",
- "# At this point, `df` has:\n",
- "# • Index: the 10 tickers\n",
- "# • Columns: one column per trading day in the last month\n",
- "# • Values: adjusted close price for that ticker on that date\n",
- "df.to_csv(\"stocks_data.csv\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "
\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 2025-04-29 18:35:00+00:00 | \n",
- " 2025-04-29 18:40:00+00:00 | \n",
- " 2025-04-29 18:45:00+00:00 | \n",
- " 2025-04-29 18:50:00+00:00 | \n",
- " 2025-04-29 18:55:00+00:00 | \n",
- " 2025-04-29 19:00:00+00:00 | \n",
- " 2025-04-29 19:05:00+00:00 | \n",
- " 2025-04-29 19:10:00+00:00 | \n",
- " 2025-04-29 19:15:00+00:00 | \n",
- " 2025-04-29 19:20:00+00:00 | \n",
- " ... | \n",
- " 2025-06-05 19:25:00+00:00 | \n",
- " 2025-06-05 19:30:00+00:00 | \n",
- " 2025-06-05 19:35:00+00:00 | \n",
- " 2025-06-05 19:40:00+00:00 | \n",
- " 2025-06-05 19:45:00+00:00 | \n",
- " 2025-06-05 19:50:00+00:00 | \n",
- " 2025-06-05 19:55:00+00:00 | \n",
- " 2025-06-06 13:30:00+00:00 | \n",
- " 2025-06-06 13:35:00+00:00 | \n",
- " 2025-06-06 13:40:00+00:00 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 211.920105 | \n",
- " 211.804993 | \n",
- " 211.550003 | \n",
- " 211.460007 | \n",
- " 211.300003 | \n",
- " 211.241302 | \n",
- " 211.495605 | \n",
- " 211.509995 | \n",
- " 211.199997 | \n",
- " 211.410004 | \n",
- " ... | \n",
- " 200.729996 | \n",
- " 200.880005 | \n",
- " 201.210007 | \n",
- " 200.800003 | \n",
- " 200.914993 | \n",
- " 200.380005 | \n",
- " 200.550003 | \n",
- " 205.021698 | \n",
- " 204.977707 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 131.119995 | \n",
- " 131.139999 | \n",
- " 130.985001 | \n",
- " 130.970001 | \n",
- " 130.939896 | \n",
- " 130.925003 | \n",
- " 131.035004 | \n",
- " 131.110001 | \n",
- " 131.095001 | \n",
- " 131.119995 | \n",
- " ... | \n",
- " 133.899994 | \n",
- " 133.899994 | \n",
- " 133.985001 | \n",
- " 134.039993 | \n",
- " 134.104996 | \n",
- " 133.740005 | \n",
- " 133.919998 | \n",
- " 134.529999 | \n",
- " 134.389999 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 371.709991 | \n",
- " 371.940002 | \n",
- " 371.690002 | \n",
- " 371.600006 | \n",
- " 371.179993 | \n",
- " 371.304993 | \n",
- " 371.470001 | \n",
- " 371.480011 | \n",
- " 371.500000 | \n",
- " 371.700012 | \n",
- " ... | \n",
- " 415.299988 | \n",
- " 416.000000 | \n",
- " 416.904999 | \n",
- " 416.554993 | \n",
- " 416.359985 | \n",
- " 414.904999 | \n",
- " 415.200012 | \n",
- " 417.290009 | \n",
- " 417.079987 | \n",
- " 417.500000 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 187.830002 | \n",
- " 187.729996 | \n",
- " 187.600006 | \n",
- " 187.520004 | \n",
- " 187.464996 | \n",
- " 187.520004 | \n",
- " 187.679199 | \n",
- " 187.565002 | \n",
- " 187.429993 | \n",
- " 187.625000 | \n",
- " ... | \n",
- " 208.494995 | \n",
- " 208.506195 | \n",
- " 209.110001 | \n",
- " 208.910004 | \n",
- " 208.964996 | \n",
- " 208.100006 | \n",
- " 207.850006 | \n",
- " 210.779999 | \n",
- " 211.850800 | \n",
- " 212.429993 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 182.020004 | \n",
- " 182.229996 | \n",
- " 182.009995 | \n",
- " 181.970001 | \n",
- " 181.880005 | \n",
- " 181.797501 | \n",
- " 182.050003 | \n",
- " 182.139999 | \n",
- " 182.320007 | \n",
- " 182.235001 | \n",
- " ... | \n",
- " 208.860001 | \n",
- " 209.088303 | \n",
- " 209.705002 | \n",
- " 209.425003 | \n",
- " 209.669998 | \n",
- " 208.934998 | \n",
- " 209.179993 | \n",
- " 209.990005 | \n",
- " 210.395004 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 40.014999 | \n",
- " 40.000000 | \n",
- " 39.994999 | \n",
- " 39.990002 | \n",
- " 39.965302 | \n",
- " 39.974998 | \n",
- " 39.994999 | \n",
- " 40.023399 | \n",
- " 40.035000 | \n",
- " 40.040001 | \n",
- " ... | \n",
- " 44.285000 | \n",
- " 44.355000 | \n",
- " 44.435001 | \n",
- " 44.384998 | \n",
- " 44.415001 | \n",
- " 44.365002 | \n",
- " 44.369999 | \n",
- " 44.904999 | \n",
- " 44.935001 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 33.965000 | \n",
- " 33.924999 | \n",
- " 33.930199 | \n",
- " 33.934200 | \n",
- " 33.924999 | \n",
- " 33.919998 | \n",
- " 33.924999 | \n",
- " 33.919998 | \n",
- " 33.963600 | \n",
- " 33.994999 | \n",
- " ... | \n",
- " 34.188999 | \n",
- " 34.224998 | \n",
- " 34.285000 | \n",
- " 34.275002 | \n",
- " 34.305000 | \n",
- " 34.174999 | \n",
- " 34.240002 | \n",
- " 34.689999 | \n",
- " 34.654999 | \n",
- " 34.654999 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 990.640015 | \n",
- " 989.539978 | \n",
- " 989.715027 | \n",
- " 989.380005 | \n",
- " 988.895386 | \n",
- " 990.369995 | \n",
- " 989.239990 | \n",
- " 988.799988 | \n",
- " 988.580017 | \n",
- " 989.422485 | \n",
- " ... | \n",
- " 1010.789978 | \n",
- " 1010.659973 | \n",
- " 1012.719971 | \n",
- " 1010.710022 | \n",
- " 1012.559998 | \n",
- " 1009.440002 | \n",
- " 1010.530029 | \n",
- " 1012.315002 | \n",
- " 1011.419983 | \n",
- " 1014.000000 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 267.640015 | \n",
- " 267.369202 | \n",
- " 267.394989 | \n",
- " 267.630005 | \n",
- " 267.575012 | \n",
- " 267.779999 | \n",
- " 267.929993 | \n",
- " 267.959991 | \n",
- " 267.730988 | \n",
- " 268.179993 | \n",
- " ... | \n",
- " 266.265015 | \n",
- " 266.744995 | \n",
- " 267.019989 | \n",
- " 267.070007 | \n",
- " 267.174988 | \n",
- " 266.440002 | \n",
- " 267.100006 | \n",
- " 268.722504 | \n",
- " 268.924988 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 57.415001 | \n",
- " 57.395000 | \n",
- " 57.375000 | \n",
- " 57.384998 | \n",
- " 57.389900 | \n",
- " 57.395000 | \n",
- " 57.334999 | \n",
- " 57.334999 | \n",
- " 57.305000 | \n",
- " 57.395000 | \n",
- " ... | \n",
- " 64.610001 | \n",
- " 64.625000 | \n",
- " 64.724998 | \n",
- " 64.724998 | \n",
- " 64.790001 | \n",
- " 64.550003 | \n",
- " 64.650002 | \n",
- " 65.589996 | \n",
- " 65.389999 | \n",
- " 65.443298 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 139.585007 | \n",
- " 139.554993 | \n",
- " 139.449997 | \n",
- " 139.485001 | \n",
- " 139.378998 | \n",
- " 139.419998 | \n",
- " 139.580002 | \n",
- " 139.630005 | \n",
- " 139.649994 | \n",
- " 139.625000 | \n",
- " ... | \n",
- " 136.964996 | \n",
- " 136.990005 | \n",
- " 137.164993 | \n",
- " 137.240005 | \n",
- " 137.210007 | \n",
- " 136.850006 | \n",
- " 136.945007 | \n",
- " 139.449997 | \n",
- " 139.634995 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 91.550003 | \n",
- " 91.514999 | \n",
- " 91.470001 | \n",
- " 91.449997 | \n",
- " 91.379997 | \n",
- " 91.375000 | \n",
- " 91.410004 | \n",
- " 91.440002 | \n",
- " 91.400002 | \n",
- " 91.455002 | \n",
- " ... | \n",
- " 112.285004 | \n",
- " 112.440002 | \n",
- " 112.684998 | \n",
- " 112.680000 | \n",
- " 112.775002 | \n",
- " 112.360001 | \n",
- " 112.514999 | \n",
- " 114.129997 | \n",
- " 113.919998 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 160.529907 | \n",
- " 160.429993 | \n",
- " 160.365005 | \n",
- " 160.315002 | \n",
- " 160.059998 | \n",
- " 160.050003 | \n",
- " 160.330002 | \n",
- " 160.419998 | \n",
- " 160.379898 | \n",
- " 160.360001 | \n",
- " ... | \n",
- " 168.210007 | \n",
- " 168.255005 | \n",
- " 168.869995 | \n",
- " 168.654999 | \n",
- " 168.690002 | \n",
- " 168.169998 | \n",
- " 168.220001 | \n",
- " 171.669998 | \n",
- " 171.525497 | \n",
- " 171.580002 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 359.584991 | \n",
- " 359.635010 | \n",
- " 359.195007 | \n",
- " 359.209991 | \n",
- " 359.730011 | \n",
- " 359.890015 | \n",
- " 359.825012 | \n",
- " 359.730011 | \n",
- " 359.609985 | \n",
- " 359.959991 | \n",
- " ... | \n",
- " 368.829987 | \n",
- " 369.135010 | \n",
- " 369.855011 | \n",
- " 369.660004 | \n",
- " 369.700012 | \n",
- " 368.570007 | \n",
- " 369.350006 | \n",
- " 371.404999 | \n",
- " 370.375000 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 239.585007 | \n",
- " 239.581894 | \n",
- " 239.580002 | \n",
- " 239.619995 | \n",
- " 239.504700 | \n",
- " 239.490005 | \n",
- " 239.479996 | \n",
- " 239.649994 | \n",
- " 239.580002 | \n",
- " 239.794998 | \n",
- " ... | \n",
- " 265.850006 | \n",
- " 266.309998 | \n",
- " 266.920013 | \n",
- " 266.899994 | \n",
- " 267.209991 | \n",
- " 266.540009 | \n",
- " 266.820007 | \n",
- " 268.142487 | \n",
- " 268.236511 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 20.590000 | \n",
- " 20.594999 | \n",
- " 20.565001 | \n",
- " 20.555000 | \n",
- " 20.520000 | \n",
- " 20.470200 | \n",
- " 20.504999 | \n",
- " 20.513700 | \n",
- " 20.475000 | \n",
- " 20.469999 | \n",
- " ... | \n",
- " 19.955000 | \n",
- " 20.029699 | \n",
- " 20.098801 | \n",
- " 20.055000 | \n",
- " 20.084999 | \n",
- " 19.990000 | \n",
- " 19.990000 | \n",
- " 20.360001 | \n",
- " 20.405500 | \n",
- " 20.410000 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 156.490005 | \n",
- " 156.434998 | \n",
- " 156.350006 | \n",
- " 156.320007 | \n",
- " 156.065002 | \n",
- " 156.125000 | \n",
- " 156.066193 | \n",
- " 156.160004 | \n",
- " 156.110001 | \n",
- " 156.125000 | \n",
- " ... | \n",
- " 153.845001 | \n",
- " 153.710007 | \n",
- " 153.800003 | \n",
- " 153.934998 | \n",
- " 153.979996 | \n",
- " 153.470001 | \n",
- " 153.639999 | \n",
- " 155.089996 | \n",
- " 154.930496 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 245.190002 | \n",
- " 244.845001 | \n",
- " 244.634995 | \n",
- " 244.537796 | \n",
- " 244.238403 | \n",
- " 244.404495 | \n",
- " 244.669998 | \n",
- " 244.679993 | \n",
- " 244.619995 | \n",
- " 244.910004 | \n",
- " ... | \n",
- " 261.047485 | \n",
- " 261.350006 | \n",
- " 261.890015 | \n",
- " 261.739990 | \n",
- " 262.024994 | \n",
- " 261.559998 | \n",
- " 261.970001 | \n",
- " 265.095001 | \n",
- " 264.950012 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 72.394997 | \n",
- " 72.400002 | \n",
- " 72.360001 | \n",
- " 72.404999 | \n",
- " 72.389999 | \n",
- " 72.400002 | \n",
- " 72.434998 | \n",
- " 72.480003 | \n",
- " 72.457298 | \n",
- " 72.455002 | \n",
- " ... | \n",
- " 71.004997 | \n",
- " 70.934998 | \n",
- " 71.004997 | \n",
- " 71.025002 | \n",
- " 71.025002 | \n",
- " 70.849998 | \n",
- " 70.940002 | \n",
- " 71.279999 | \n",
- " 71.270203 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 891.500000 | \n",
- " 891.059998 | \n",
- " 890.415894 | \n",
- " 890.369995 | \n",
- " 889.929993 | \n",
- " 889.916077 | \n",
- " 889.750000 | \n",
- " 890.099976 | \n",
- " 889.000000 | \n",
- " 889.659973 | \n",
- " ... | \n",
- " 761.500000 | \n",
- " 762.429993 | \n",
- " 764.650024 | \n",
- " 765.104980 | \n",
- " 765.890015 | \n",
- " 764.120789 | \n",
- " 765.969971 | \n",
- " 768.690002 | \n",
- " 768.664978 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 538.905029 | \n",
- " 538.835022 | \n",
- " 538.525024 | \n",
- " 538.315125 | \n",
- " 538.380005 | \n",
- " 538.842590 | \n",
- " 538.760010 | \n",
- " 539.049988 | \n",
- " 539.195007 | \n",
- " 539.688782 | \n",
- " ... | \n",
- " 583.924988 | \n",
- " 584.419983 | \n",
- " 585.380005 | \n",
- " 585.200012 | \n",
- " 585.320007 | \n",
- " 584.062927 | \n",
- " 585.440002 | \n",
- " 588.650024 | \n",
- " 588.349976 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 315.899994 | \n",
- " 315.950012 | \n",
- " 315.465912 | \n",
- " 315.510010 | \n",
- " 315.390015 | \n",
- " 315.730103 | \n",
- " 315.637512 | \n",
- " 315.470001 | \n",
- " 315.299988 | \n",
- " 315.454987 | \n",
- " ... | \n",
- " 308.454987 | \n",
- " 308.720001 | \n",
- " 309.390015 | \n",
- " 309.579987 | \n",
- " 309.609009 | \n",
- " 308.665009 | \n",
- " 308.970001 | \n",
- " 308.325012 | \n",
- " 308.649994 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 22 | \n",
- " 556.359924 | \n",
- " 555.941223 | \n",
- " 555.840027 | \n",
- " 555.900024 | \n",
- " 555.025024 | \n",
- " 554.700012 | \n",
- " 554.479980 | \n",
- " 555.000000 | \n",
- " 554.193176 | \n",
- " 555.000000 | \n",
- " ... | \n",
- " 684.989990 | \n",
- " 686.200012 | \n",
- " 687.695007 | \n",
- " 685.770020 | \n",
- " 686.349976 | \n",
- " 685.010010 | \n",
- " 684.419983 | \n",
- " 697.229980 | \n",
- " 700.359985 | \n",
- " 701.509583 | \n",
- "
\n",
- " \n",
- " 23 | \n",
- " 84.830101 | \n",
- " 84.820000 | \n",
- " 84.781998 | \n",
- " 84.739998 | \n",
- " 84.599998 | \n",
- " 84.705002 | \n",
- " 84.730003 | \n",
- " 84.834999 | \n",
- " 84.805000 | \n",
- " 84.919998 | \n",
- " ... | \n",
- " 77.550003 | \n",
- " 77.580002 | \n",
- " 77.745003 | \n",
- " 77.830002 | \n",
- " 77.885002 | \n",
- " 77.639999 | \n",
- " 77.650002 | \n",
- " 78.959999 | \n",
- " 78.860001 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 24 | \n",
- " 394.160004 | \n",
- " 393.859497 | \n",
- " 393.750000 | \n",
- " 393.809998 | \n",
- " 393.484985 | \n",
- " 393.850006 | \n",
- " 393.787415 | \n",
- " 393.935913 | \n",
- " 393.769989 | \n",
- " 394.010010 | \n",
- " ... | \n",
- " 467.429993 | \n",
- " 467.859985 | \n",
- " 468.959991 | \n",
- " 468.410004 | \n",
- " 468.565002 | \n",
- " 467.350006 | \n",
- " 467.609985 | \n",
- " 469.520294 | \n",
- " 470.404999 | \n",
- " 471.000000 | \n",
- "
\n",
- " \n",
- " 25 | \n",
- " 1121.935059 | \n",
- " 1121.750854 | \n",
- " 1120.964966 | \n",
- " 1121.196411 | \n",
- " 1119.510010 | \n",
- " 1119.930054 | \n",
- " 1121.368896 | \n",
- " 1120.930054 | \n",
- " 1120.799927 | \n",
- " 1122.050049 | \n",
- " ... | \n",
- " 1248.354980 | \n",
- " 1251.709961 | \n",
- " 1254.925049 | \n",
- " 1253.310059 | \n",
- " 1253.590088 | \n",
- " 1250.574951 | \n",
- " 1250.829956 | \n",
- " 1248.181885 | \n",
- " 1247.890015 | \n",
- " 1250.069946 | \n",
- "
\n",
- " \n",
- " 26 | \n",
- " 57.290001 | \n",
- " 57.409901 | \n",
- " 57.450001 | \n",
- " 57.494999 | \n",
- " 57.500000 | \n",
- " 57.480000 | \n",
- " 57.505001 | \n",
- " 57.560001 | \n",
- " 57.564999 | \n",
- " 57.619999 | \n",
- " ... | \n",
- " 62.419998 | \n",
- " 62.520000 | \n",
- " 62.680000 | \n",
- " 62.689999 | \n",
- " 62.732800 | \n",
- " 62.610001 | \n",
- " 62.639999 | \n",
- " 62.790001 | \n",
- " 62.669998 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 27 | \n",
- " 109.989998 | \n",
- " 110.054497 | \n",
- " 109.870003 | \n",
- " 109.791000 | \n",
- " 109.565002 | \n",
- " 109.580002 | \n",
- " 109.688904 | \n",
- " 109.699997 | \n",
- " 109.255699 | \n",
- " 109.379997 | \n",
- " ... | \n",
- " 139.590103 | \n",
- " 140.048996 | \n",
- " 140.350006 | \n",
- " 140.175003 | \n",
- " 140.460007 | \n",
- " 139.990005 | \n",
- " 139.949997 | \n",
- " 141.990005 | \n",
- " 142.125000 | \n",
- " 142.380005 | \n",
- "
\n",
- " \n",
- " 28 | \n",
- " 140.850006 | \n",
- " 140.779999 | \n",
- " 140.729996 | \n",
- " 140.740005 | \n",
- " 140.701996 | \n",
- " 140.779404 | \n",
- " 140.759995 | \n",
- " 140.875000 | \n",
- " 140.681198 | \n",
- " 140.835007 | \n",
- " ... | \n",
- " 170.584793 | \n",
- " 170.820007 | \n",
- " 171.270004 | \n",
- " 171.169998 | \n",
- " 171.460007 | \n",
- " 170.964996 | \n",
- " 171.199997 | \n",
- " 174.239304 | \n",
- " 173.419998 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 29 | \n",
- " 133.889999 | \n",
- " 133.850006 | \n",
- " 133.800003 | \n",
- " 133.990005 | \n",
- " 134.044998 | \n",
- " 134.065002 | \n",
- " 134.110001 | \n",
- " 134.130005 | \n",
- " 134.223801 | \n",
- " 134.320007 | \n",
- " ... | \n",
- " 130.970993 | \n",
- " 130.850006 | \n",
- " 130.975006 | \n",
- " 131.100006 | \n",
- " 131.089996 | \n",
- " 130.955002 | \n",
- " 131.089996 | \n",
- " 130.470001 | \n",
- " 130.429993 | \n",
- " 130.301697 | \n",
- "
\n",
- " \n",
- " 30 | \n",
- " 23.934999 | \n",
- " 23.944401 | \n",
- " 23.934999 | \n",
- " 23.945000 | \n",
- " 23.924999 | \n",
- " 23.945000 | \n",
- " 23.984400 | \n",
- " 24.021700 | \n",
- " 24.009899 | \n",
- " 24.090000 | \n",
- " ... | \n",
- " 23.115000 | \n",
- " 23.115000 | \n",
- " 23.135000 | \n",
- " 23.155001 | \n",
- " 23.170000 | \n",
- " 23.120001 | \n",
- " 23.110001 | \n",
- " 23.455000 | \n",
- " 23.455000 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 31 | \n",
- " 161.500000 | \n",
- " 161.660004 | \n",
- " 161.619995 | \n",
- " 161.660004 | \n",
- " 161.660004 | \n",
- " 161.679993 | \n",
- " 161.820007 | \n",
- " 161.929993 | \n",
- " 161.899994 | \n",
- " 161.889999 | \n",
- " ... | \n",
- " 162.869995 | \n",
- " 162.910004 | \n",
- " 163.220001 | \n",
- " 163.062500 | \n",
- " 162.970001 | \n",
- " 162.542496 | \n",
- " 162.779999 | \n",
- " 164.559998 | \n",
- " 164.494995 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 32 | \n",
- " 148.220001 | \n",
- " 148.119995 | \n",
- " 147.970001 | \n",
- " 148.115997 | \n",
- " 147.779999 | \n",
- " 147.520004 | \n",
- " 147.679993 | \n",
- " 147.800003 | \n",
- " 147.550003 | \n",
- " 147.729996 | \n",
- " ... | \n",
- " 147.695007 | \n",
- " 148.000000 | \n",
- " 148.399994 | \n",
- " 148.138000 | \n",
- " 148.300003 | \n",
- " 147.720001 | \n",
- " 147.539993 | \n",
- " 149.725006 | \n",
- " 150.080002 | \n",
- " 150.208405 | \n",
- "
\n",
- " \n",
- " 33 | \n",
- " 27.354799 | \n",
- " 27.330000 | \n",
- " 27.334999 | \n",
- " 27.315001 | \n",
- " 27.315001 | \n",
- " 27.320101 | \n",
- " 27.315001 | \n",
- " 27.315001 | \n",
- " 27.340000 | \n",
- " 27.334999 | \n",
- " ... | \n",
- " 27.705000 | \n",
- " 27.725000 | \n",
- " 27.775000 | \n",
- " 27.785000 | \n",
- " 27.825001 | \n",
- " 27.760000 | \n",
- " 27.770000 | \n",
- " 27.940001 | \n",
- " 27.905001 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 34 | \n",
- " 428.820007 | \n",
- " 428.809998 | \n",
- " 429.019989 | \n",
- " 429.614990 | \n",
- " 429.622101 | \n",
- " 429.619995 | \n",
- " 429.940002 | \n",
- " 429.825012 | \n",
- " 429.779999 | \n",
- " 429.911804 | \n",
- " ... | \n",
- " 398.369995 | \n",
- " 398.579987 | \n",
- " 399.429993 | \n",
- " 399.350006 | \n",
- " 399.640015 | \n",
- " 398.029999 | \n",
- " 398.359985 | \n",
- " 403.609985 | \n",
- " 403.510010 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 35 | \n",
- " 285.842712 | \n",
- " 285.929993 | \n",
- " 285.815002 | \n",
- " 285.850006 | \n",
- " 285.760010 | \n",
- " 285.904999 | \n",
- " 286.339996 | \n",
- " 286.250000 | \n",
- " 286.035004 | \n",
- " 286.564209 | \n",
- " ... | \n",
- " 281.750000 | \n",
- " 285.200012 | \n",
- " 286.614990 | \n",
- " 283.140106 | \n",
- " 284.559998 | \n",
- " 284.709991 | \n",
- " 284.731689 | \n",
- " 298.609314 | \n",
- " 298.989990 | \n",
- " 299.092896 | \n",
- "
\n",
- " \n",
- " 36 | \n",
- " 411.345001 | \n",
- " 411.029999 | \n",
- " 411.119995 | \n",
- " 411.170013 | \n",
- " 411.304993 | \n",
- " 411.344788 | \n",
- " 411.605011 | \n",
- " 412.149994 | \n",
- " 412.100006 | \n",
- " 412.114990 | \n",
- " ... | \n",
- " 294.782990 | \n",
- " 294.915009 | \n",
- " 295.869995 | \n",
- " 295.420013 | \n",
- " 296.375000 | \n",
- " 295.600006 | \n",
- " 295.890015 | \n",
- " 300.200012 | \n",
- " 298.815002 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 37 | \n",
- " 341.195007 | \n",
- " 341.394989 | \n",
- " 340.850006 | \n",
- " 340.880005 | \n",
- " 340.625000 | \n",
- " 340.785004 | \n",
- " 340.894989 | \n",
- " 340.869995 | \n",
- " 340.875000 | \n",
- " 341.208008 | \n",
- " ... | \n",
- " 366.557190 | \n",
- " 366.709991 | \n",
- " 367.230011 | \n",
- " 367.165009 | \n",
- " 367.394989 | \n",
- " 366.684998 | \n",
- " 366.825012 | \n",
- " 369.334991 | \n",
- " 368.484985 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 38 | \n",
- " 95.799896 | \n",
- " 95.820000 | \n",
- " 95.730003 | \n",
- " 95.699997 | \n",
- " 95.675003 | \n",
- " 95.750000 | \n",
- " 95.724998 | \n",
- " 95.750000 | \n",
- " 95.750000 | \n",
- " 95.779999 | \n",
- " ... | \n",
- " 97.800003 | \n",
- " 97.875000 | \n",
- " 98.004997 | \n",
- " 97.945000 | \n",
- " 98.089996 | \n",
- " 97.800003 | \n",
- " 97.940002 | \n",
- " 98.165001 | \n",
- " 98.260803 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " 39 | \n",
- " 108.184998 | \n",
- " 108.264999 | \n",
- " 108.169998 | \n",
- " 108.199997 | \n",
- " 108.144997 | \n",
- " 108.143700 | \n",
- " 108.379997 | \n",
- " 108.480003 | \n",
- " 108.595001 | \n",
- " 108.561302 | \n",
- " ... | \n",
- " 101.874001 | \n",
- " 101.924698 | \n",
- " 102.019997 | \n",
- " 102.139999 | \n",
- " 102.110001 | \n",
- " 101.805000 | \n",
- " 101.875000 | \n",
- " 103.430000 | \n",
- " 103.779999 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- "
\n",
- "
40 rows × 2048 columns
\n",
- "
"
- ],
- "text/plain": [
- " 2025-04-29 18:35:00+00:00 2025-04-29 18:40:00+00:00 \\\n",
- "0 211.920105 211.804993 \n",
- "1 131.119995 131.139999 \n",
- "2 371.709991 371.940002 \n",
- "3 187.830002 187.729996 \n",
- "4 182.020004 182.229996 \n",
- "5 40.014999 40.000000 \n",
- "6 33.965000 33.924999 \n",
- "7 990.640015 989.539978 \n",
- "8 267.640015 267.369202 \n",
- "9 57.415001 57.395000 \n",
- "10 139.585007 139.554993 \n",
- "11 91.550003 91.514999 \n",
- "12 160.529907 160.429993 \n",
- "13 359.584991 359.635010 \n",
- "14 239.585007 239.581894 \n",
- "15 20.590000 20.594999 \n",
- "16 156.490005 156.434998 \n",
- "17 245.190002 244.845001 \n",
- "18 72.394997 72.400002 \n",
- "19 891.500000 891.059998 \n",
- "20 538.905029 538.835022 \n",
- "21 315.899994 315.950012 \n",
- "22 556.359924 555.941223 \n",
- "23 84.830101 84.820000 \n",
- "24 394.160004 393.859497 \n",
- "25 1121.935059 1121.750854 \n",
- "26 57.290001 57.409901 \n",
- "27 109.989998 110.054497 \n",
- "28 140.850006 140.779999 \n",
- "29 133.889999 133.850006 \n",
- "30 23.934999 23.944401 \n",
- "31 161.500000 161.660004 \n",
- "32 148.220001 148.119995 \n",
- "33 27.354799 27.330000 \n",
- "34 428.820007 428.809998 \n",
- "35 285.842712 285.929993 \n",
- "36 411.345001 411.029999 \n",
- "37 341.195007 341.394989 \n",
- "38 95.799896 95.820000 \n",
- "39 108.184998 108.264999 \n",
- "\n",
- " 2025-04-29 18:45:00+00:00 2025-04-29 18:50:00+00:00 \\\n",
- "0 211.550003 211.460007 \n",
- "1 130.985001 130.970001 \n",
- "2 371.690002 371.600006 \n",
- "3 187.600006 187.520004 \n",
- "4 182.009995 181.970001 \n",
- "5 39.994999 39.990002 \n",
- "6 33.930199 33.934200 \n",
- "7 989.715027 989.380005 \n",
- "8 267.394989 267.630005 \n",
- "9 57.375000 57.384998 \n",
- "10 139.449997 139.485001 \n",
- "11 91.470001 91.449997 \n",
- "12 160.365005 160.315002 \n",
- "13 359.195007 359.209991 \n",
- "14 239.580002 239.619995 \n",
- "15 20.565001 20.555000 \n",
- "16 156.350006 156.320007 \n",
- "17 244.634995 244.537796 \n",
- "18 72.360001 72.404999 \n",
- "19 890.415894 890.369995 \n",
- "20 538.525024 538.315125 \n",
- "21 315.465912 315.510010 \n",
- "22 555.840027 555.900024 \n",
- "23 84.781998 84.739998 \n",
- "24 393.750000 393.809998 \n",
- "25 1120.964966 1121.196411 \n",
- "26 57.450001 57.494999 \n",
- "27 109.870003 109.791000 \n",
- "28 140.729996 140.740005 \n",
- "29 133.800003 133.990005 \n",
- "30 23.934999 23.945000 \n",
- "31 161.619995 161.660004 \n",
- "32 147.970001 148.115997 \n",
- "33 27.334999 27.315001 \n",
- "34 429.019989 429.614990 \n",
- "35 285.815002 285.850006 \n",
- "36 411.119995 411.170013 \n",
- "37 340.850006 340.880005 \n",
- "38 95.730003 95.699997 \n",
- "39 108.169998 108.199997 \n",
- "\n",
- " 2025-04-29 18:55:00+00:00 2025-04-29 19:00:00+00:00 \\\n",
- "0 211.300003 211.241302 \n",
- "1 130.939896 130.925003 \n",
- "2 371.179993 371.304993 \n",
- "3 187.464996 187.520004 \n",
- "4 181.880005 181.797501 \n",
- "5 39.965302 39.974998 \n",
- "6 33.924999 33.919998 \n",
- "7 988.895386 990.369995 \n",
- "8 267.575012 267.779999 \n",
- "9 57.389900 57.395000 \n",
- "10 139.378998 139.419998 \n",
- "11 91.379997 91.375000 \n",
- "12 160.059998 160.050003 \n",
- "13 359.730011 359.890015 \n",
- "14 239.504700 239.490005 \n",
- "15 20.520000 20.470200 \n",
- "16 156.065002 156.125000 \n",
- "17 244.238403 244.404495 \n",
- "18 72.389999 72.400002 \n",
- "19 889.929993 889.916077 \n",
- "20 538.380005 538.842590 \n",
- "21 315.390015 315.730103 \n",
- "22 555.025024 554.700012 \n",
- "23 84.599998 84.705002 \n",
- "24 393.484985 393.850006 \n",
- "25 1119.510010 1119.930054 \n",
- "26 57.500000 57.480000 \n",
- "27 109.565002 109.580002 \n",
- "28 140.701996 140.779404 \n",
- "29 134.044998 134.065002 \n",
- "30 23.924999 23.945000 \n",
- "31 161.660004 161.679993 \n",
- "32 147.779999 147.520004 \n",
- "33 27.315001 27.320101 \n",
- "34 429.622101 429.619995 \n",
- "35 285.760010 285.904999 \n",
- "36 411.304993 411.344788 \n",
- "37 340.625000 340.785004 \n",
- "38 95.675003 95.750000 \n",
- "39 108.144997 108.143700 \n",
- "\n",
- " 2025-04-29 19:05:00+00:00 2025-04-29 19:10:00+00:00 \\\n",
- "0 211.495605 211.509995 \n",
- "1 131.035004 131.110001 \n",
- "2 371.470001 371.480011 \n",
- "3 187.679199 187.565002 \n",
- "4 182.050003 182.139999 \n",
- "5 39.994999 40.023399 \n",
- "6 33.924999 33.919998 \n",
- "7 989.239990 988.799988 \n",
- "8 267.929993 267.959991 \n",
- "9 57.334999 57.334999 \n",
- "10 139.580002 139.630005 \n",
- "11 91.410004 91.440002 \n",
- "12 160.330002 160.419998 \n",
- "13 359.825012 359.730011 \n",
- "14 239.479996 239.649994 \n",
- "15 20.504999 20.513700 \n",
- "16 156.066193 156.160004 \n",
- "17 244.669998 244.679993 \n",
- "18 72.434998 72.480003 \n",
- "19 889.750000 890.099976 \n",
- "20 538.760010 539.049988 \n",
- "21 315.637512 315.470001 \n",
- "22 554.479980 555.000000 \n",
- "23 84.730003 84.834999 \n",
- "24 393.787415 393.935913 \n",
- "25 1121.368896 1120.930054 \n",
- "26 57.505001 57.560001 \n",
- "27 109.688904 109.699997 \n",
- "28 140.759995 140.875000 \n",
- "29 134.110001 134.130005 \n",
- "30 23.984400 24.021700 \n",
- "31 161.820007 161.929993 \n",
- "32 147.679993 147.800003 \n",
- "33 27.315001 27.315001 \n",
- "34 429.940002 429.825012 \n",
- "35 286.339996 286.250000 \n",
- "36 411.605011 412.149994 \n",
- "37 340.894989 340.869995 \n",
- "38 95.724998 95.750000 \n",
- "39 108.379997 108.480003 \n",
- "\n",
- " 2025-04-29 19:15:00+00:00 2025-04-29 19:20:00+00:00 ... \\\n",
- "0 211.199997 211.410004 ... \n",
- "1 131.095001 131.119995 ... \n",
- "2 371.500000 371.700012 ... \n",
- "3 187.429993 187.625000 ... \n",
- "4 182.320007 182.235001 ... \n",
- "5 40.035000 40.040001 ... \n",
- "6 33.963600 33.994999 ... \n",
- "7 988.580017 989.422485 ... \n",
- "8 267.730988 268.179993 ... \n",
- "9 57.305000 57.395000 ... \n",
- "10 139.649994 139.625000 ... \n",
- "11 91.400002 91.455002 ... \n",
- "12 160.379898 160.360001 ... \n",
- "13 359.609985 359.959991 ... \n",
- "14 239.580002 239.794998 ... \n",
- "15 20.475000 20.469999 ... \n",
- "16 156.110001 156.125000 ... \n",
- "17 244.619995 244.910004 ... \n",
- "18 72.457298 72.455002 ... \n",
- "19 889.000000 889.659973 ... \n",
- "20 539.195007 539.688782 ... \n",
- "21 315.299988 315.454987 ... \n",
- "22 554.193176 555.000000 ... \n",
- "23 84.805000 84.919998 ... \n",
- "24 393.769989 394.010010 ... \n",
- "25 1120.799927 1122.050049 ... \n",
- "26 57.564999 57.619999 ... \n",
- "27 109.255699 109.379997 ... \n",
- "28 140.681198 140.835007 ... \n",
- "29 134.223801 134.320007 ... \n",
- "30 24.009899 24.090000 ... \n",
- "31 161.899994 161.889999 ... \n",
- "32 147.550003 147.729996 ... \n",
- "33 27.340000 27.334999 ... \n",
- "34 429.779999 429.911804 ... \n",
- "35 286.035004 286.564209 ... \n",
- "36 412.100006 412.114990 ... \n",
- "37 340.875000 341.208008 ... \n",
- "38 95.750000 95.779999 ... \n",
- "39 108.595001 108.561302 ... \n",
- "\n",
- " 2025-06-05 19:25:00+00:00 2025-06-05 19:30:00+00:00 \\\n",
- "0 200.729996 200.880005 \n",
- "1 133.899994 133.899994 \n",
- "2 415.299988 416.000000 \n",
- "3 208.494995 208.506195 \n",
- "4 208.860001 209.088303 \n",
- "5 44.285000 44.355000 \n",
- "6 34.188999 34.224998 \n",
- "7 1010.789978 1010.659973 \n",
- "8 266.265015 266.744995 \n",
- "9 64.610001 64.625000 \n",
- "10 136.964996 136.990005 \n",
- "11 112.285004 112.440002 \n",
- "12 168.210007 168.255005 \n",
- "13 368.829987 369.135010 \n",
- "14 265.850006 266.309998 \n",
- "15 19.955000 20.029699 \n",
- "16 153.845001 153.710007 \n",
- "17 261.047485 261.350006 \n",
- "18 71.004997 70.934998 \n",
- "19 761.500000 762.429993 \n",
- "20 583.924988 584.419983 \n",
- "21 308.454987 308.720001 \n",
- "22 684.989990 686.200012 \n",
- "23 77.550003 77.580002 \n",
- "24 467.429993 467.859985 \n",
- "25 1248.354980 1251.709961 \n",
- "26 62.419998 62.520000 \n",
- "27 139.590103 140.048996 \n",
- "28 170.584793 170.820007 \n",
- "29 130.970993 130.850006 \n",
- "30 23.115000 23.115000 \n",
- "31 162.869995 162.910004 \n",
- "32 147.695007 148.000000 \n",
- "33 27.705000 27.725000 \n",
- "34 398.369995 398.579987 \n",
- "35 281.750000 285.200012 \n",
- "36 294.782990 294.915009 \n",
- "37 366.557190 366.709991 \n",
- "38 97.800003 97.875000 \n",
- "39 101.874001 101.924698 \n",
- "\n",
- " 2025-06-05 19:35:00+00:00 2025-06-05 19:40:00+00:00 \\\n",
- "0 201.210007 200.800003 \n",
- "1 133.985001 134.039993 \n",
- "2 416.904999 416.554993 \n",
- "3 209.110001 208.910004 \n",
- "4 209.705002 209.425003 \n",
- "5 44.435001 44.384998 \n",
- "6 34.285000 34.275002 \n",
- "7 1012.719971 1010.710022 \n",
- "8 267.019989 267.070007 \n",
- "9 64.724998 64.724998 \n",
- "10 137.164993 137.240005 \n",
- "11 112.684998 112.680000 \n",
- "12 168.869995 168.654999 \n",
- "13 369.855011 369.660004 \n",
- "14 266.920013 266.899994 \n",
- "15 20.098801 20.055000 \n",
- "16 153.800003 153.934998 \n",
- "17 261.890015 261.739990 \n",
- "18 71.004997 71.025002 \n",
- "19 764.650024 765.104980 \n",
- "20 585.380005 585.200012 \n",
- "21 309.390015 309.579987 \n",
- "22 687.695007 685.770020 \n",
- "23 77.745003 77.830002 \n",
- "24 468.959991 468.410004 \n",
- "25 1254.925049 1253.310059 \n",
- "26 62.680000 62.689999 \n",
- "27 140.350006 140.175003 \n",
- "28 171.270004 171.169998 \n",
- "29 130.975006 131.100006 \n",
- "30 23.135000 23.155001 \n",
- "31 163.220001 163.062500 \n",
- "32 148.399994 148.138000 \n",
- "33 27.775000 27.785000 \n",
- "34 399.429993 399.350006 \n",
- "35 286.614990 283.140106 \n",
- "36 295.869995 295.420013 \n",
- "37 367.230011 367.165009 \n",
- "38 98.004997 97.945000 \n",
- "39 102.019997 102.139999 \n",
- "\n",
- " 2025-06-05 19:45:00+00:00 2025-06-05 19:50:00+00:00 \\\n",
- "0 200.914993 200.380005 \n",
- "1 134.104996 133.740005 \n",
- "2 416.359985 414.904999 \n",
- "3 208.964996 208.100006 \n",
- "4 209.669998 208.934998 \n",
- "5 44.415001 44.365002 \n",
- "6 34.305000 34.174999 \n",
- "7 1012.559998 1009.440002 \n",
- "8 267.174988 266.440002 \n",
- "9 64.790001 64.550003 \n",
- "10 137.210007 136.850006 \n",
- "11 112.775002 112.360001 \n",
- "12 168.690002 168.169998 \n",
- "13 369.700012 368.570007 \n",
- "14 267.209991 266.540009 \n",
- "15 20.084999 19.990000 \n",
- "16 153.979996 153.470001 \n",
- "17 262.024994 261.559998 \n",
- "18 71.025002 70.849998 \n",
- "19 765.890015 764.120789 \n",
- "20 585.320007 584.062927 \n",
- "21 309.609009 308.665009 \n",
- "22 686.349976 685.010010 \n",
- "23 77.885002 77.639999 \n",
- "24 468.565002 467.350006 \n",
- "25 1253.590088 1250.574951 \n",
- "26 62.732800 62.610001 \n",
- "27 140.460007 139.990005 \n",
- "28 171.460007 170.964996 \n",
- "29 131.089996 130.955002 \n",
- "30 23.170000 23.120001 \n",
- "31 162.970001 162.542496 \n",
- "32 148.300003 147.720001 \n",
- "33 27.825001 27.760000 \n",
- "34 399.640015 398.029999 \n",
- "35 284.559998 284.709991 \n",
- "36 296.375000 295.600006 \n",
- "37 367.394989 366.684998 \n",
- "38 98.089996 97.800003 \n",
- "39 102.110001 101.805000 \n",
- "\n",
- " 2025-06-05 19:55:00+00:00 2025-06-06 13:30:00+00:00 \\\n",
- "0 200.550003 205.021698 \n",
- "1 133.919998 134.529999 \n",
- "2 415.200012 417.290009 \n",
- "3 207.850006 210.779999 \n",
- "4 209.179993 209.990005 \n",
- "5 44.369999 44.904999 \n",
- "6 34.240002 34.689999 \n",
- "7 1010.530029 1012.315002 \n",
- "8 267.100006 268.722504 \n",
- "9 64.650002 65.589996 \n",
- "10 136.945007 139.449997 \n",
- "11 112.514999 114.129997 \n",
- "12 168.220001 171.669998 \n",
- "13 369.350006 371.404999 \n",
- "14 266.820007 268.142487 \n",
- "15 19.990000 20.360001 \n",
- "16 153.639999 155.089996 \n",
- "17 261.970001 265.095001 \n",
- "18 70.940002 71.279999 \n",
- "19 765.969971 768.690002 \n",
- "20 585.440002 588.650024 \n",
- "21 308.970001 308.325012 \n",
- "22 684.419983 697.229980 \n",
- "23 77.650002 78.959999 \n",
- "24 467.609985 469.520294 \n",
- "25 1250.829956 1248.181885 \n",
- "26 62.639999 62.790001 \n",
- "27 139.949997 141.990005 \n",
- "28 171.199997 174.239304 \n",
- "29 131.089996 130.470001 \n",
- "30 23.110001 23.455000 \n",
- "31 162.779999 164.559998 \n",
- "32 147.539993 149.725006 \n",
- "33 27.770000 27.940001 \n",
- "34 398.359985 403.609985 \n",
- "35 284.731689 298.609314 \n",
- "36 295.890015 300.200012 \n",
- "37 366.825012 369.334991 \n",
- "38 97.940002 98.165001 \n",
- "39 101.875000 103.430000 \n",
- "\n",
- " 2025-06-06 13:35:00+00:00 2025-06-06 13:40:00+00:00 \n",
- "0 204.977707 NaN \n",
- "1 134.389999 NaN \n",
- "2 417.079987 417.500000 \n",
- "3 211.850800 212.429993 \n",
- "4 210.395004 NaN \n",
- "5 44.935001 NaN \n",
- "6 34.654999 34.654999 \n",
- "7 1011.419983 1014.000000 \n",
- "8 268.924988 NaN \n",
- "9 65.389999 65.443298 \n",
- "10 139.634995 NaN \n",
- "11 113.919998 NaN \n",
- "12 171.525497 171.580002 \n",
- "13 370.375000 NaN \n",
- "14 268.236511 NaN \n",
- "15 20.405500 20.410000 \n",
- "16 154.930496 NaN \n",
- "17 264.950012 NaN \n",
- "18 71.270203 NaN \n",
- "19 768.664978 NaN \n",
- "20 588.349976 NaN \n",
- "21 308.649994 NaN \n",
- "22 700.359985 701.509583 \n",
- "23 78.860001 NaN \n",
- "24 470.404999 471.000000 \n",
- "25 1247.890015 1250.069946 \n",
- "26 62.669998 NaN \n",
- "27 142.125000 142.380005 \n",
- "28 173.419998 NaN \n",
- "29 130.429993 130.301697 \n",
- "30 23.455000 NaN \n",
- "31 164.494995 NaN \n",
- "32 150.080002 150.208405 \n",
- "33 27.905001 NaN \n",
- "34 403.510010 NaN \n",
- "35 298.989990 299.092896 \n",
- "36 298.815002 NaN \n",
- "37 368.484985 NaN \n",
- "38 98.260803 NaN \n",
- "39 103.779999 NaN \n",
- "\n",
- "[40 rows x 2048 columns]"
- ]
- },
- "execution_count": 14,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "import pandas as pd\n",
- "\n",
- "df = pd.read_csv(\"data/stocks_data_noindex.csv\")\n",
- "\n",
- "df.shape\n",
- "df.iloc[:,-2048:]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Stable version"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import io\n",
- "import gradio as gr\n",
- "import pandas as pd\n",
- "import torch\n",
- "import matplotlib.pyplot as plt\n",
- "from PIL import Image\n",
- "import numpy as np\n",
- "\n",
- "torch.manual_seed(42)\n",
- "output = torch.load(\"stocks_data_forecast.pt\") # (n_timeseries, pred_len, n_quantiles)\n",
- "\n",
- "def model_forecast(input_data):\n",
- " return output\n",
- "\n",
- "def plot_forecast_image(timeseries, quantile_predictions, timeseries_name):\n",
- " \"\"\"Returns a NumPy array of the plotted figure.\"\"\"\n",
- " fig, ax = plt.subplots(figsize=(10, 6), dpi=150)\n",
- " ax.plot(timeseries, color=\"blue\")\n",
- " x_pred = range(len(timeseries) - 1, len(timeseries) - 1 + len(quantile_predictions))\n",
- " for i in range(quantile_predictions.shape[1]):\n",
- " ax.plot(x_pred, quantile_predictions[:, i], color=f\"C{i}\")\n",
- " buf = io.BytesIO()\n",
- "\n",
- " # Add title\n",
- " ax.set_title(f\"Timeseries: {timeseries_name}\")\n",
- " # Add labels to the legend (quantiles)\n",
- " labels = [f\"Quantile {i+1}\" for i in range(quantile_predictions.shape[1])]\n",
- " ax.legend(labels, loc='center left', bbox_to_anchor=(1, 0.5))\n",
- " plt.tight_layout(rect=[0, 0, 0.85, 1])\n",
- "\n",
- " fig.savefig(buf, format=\"png\", bbox_inches=\"tight\")\n",
- " plt.close(fig)\n",
- " buf.seek(0)\n",
- " img = Image.open(buf).convert(\"RGB\")\n",
- " return np.array(img) # Return as an H×W×3 array\n",
- "\n",
- "def display_forecast(file, preset_filename):\n",
- " accepted_formats = ['csv', 'xls', 'xlsx', 'parquet']\n",
- "\n",
- " def load_table(file_path):\n",
- " ext = file_path.split('.')[-1].lower()\n",
- " if ext == 'csv':\n",
- " return pd.read_csv(file_path)\n",
- " elif ext in ['xls', 'xlsx']:\n",
- " return pd.read_excel(file_path)\n",
- " elif ext == 'parquet':\n",
- " return pd.read_parquet(file_path)\n",
- " else:\n",
- " raise ValueError(f\"Unsupported file format '.{ext}'. Acceptable formats: CSV, XLS, XLSX, PARQUET.\")\n",
- " \n",
- " try:\n",
- " if file is not None:\n",
- " df = load_table(file.name)\n",
- " else:\n",
- " if not preset_filename:\n",
- " return [], \"Please upload a file or select a preset.\"\n",
- " df = load_table(preset_filename)\n",
- " \n",
- " # Check first column for timeseries names\n",
- " if df.shape[1] > 0 and df.iloc[:, 0].dtype == object:\n",
- " if not df.iloc[:, 0].str.isnumeric().all():\n",
- " timeseries_names = df.iloc[:, 0].tolist()\n",
- " df = df.iloc[:, 1:]\n",
- " else:\n",
- " timeseries_names = [f\"Series {i}\" for i in range(len(df))]\n",
- " else:\n",
- " timeseries_names = [f\"Series {i}\" for i in range(len(df))]\n",
- "\n",
- " _input = torch.tensor(df.values)\n",
- " _output = model_forecast(_input)\n",
- "\n",
- " gallery_images = []\n",
- " for i in range(_input.shape[0]):\n",
- " img_array = plot_forecast_image(_input[i], _output[i], timeseries_names[i])\n",
- " gallery_images.append(img_array)\n",
- "\n",
- " return gallery_images, \"\"\n",
- " except Exception as e:\n",
- " return [], f\"Error: {e}. Please upload files in one of the following formats: CSV, XLS, XLSX, PARQUET.\"\n",
- "\n",
- "\n",
- "\n",
- "iface = gr.Interface(\n",
- " fn=display_forecast,\n",
- " inputs=[\n",
- " gr.File(label=\"Upload your CSV file (optional)\"),\n",
- " gr.Dropdown(\n",
- " label=\"Or select a preset CSV file\",\n",
- " choices=[\"stocks_data_noindex.csv\", \"stocks_data.csv\"],\n",
- " value=\"stocks_data_noindex.csv\"\n",
- " )\n",
- " ],\n",
- " outputs=[\n",
- " gr.Gallery(label=\"Forecast Plots (one per row)\"), \n",
- " gr.Textbox(label=\"Error Message\")\n",
- " ],\n",
- " title=\"CSV→Dynamic Forecast Gallery\",\n",
- " description=\"Upload a CSV with any number of rows; each row’s forecast becomes one image in a gallery.\",\n",
- " allow_flagging=\"never\",\n",
- ")\n",
- "\n",
- "if __name__ == \"__main__\":\n",
- " iface.launch()\n",
- "\n",
- "\n",
- "\n",
- "# '''\n",
- "# 1. Prepared datasets\n",
- "# 2. Plots of different quiantilies (different colors)\n",
- "# 3. Filters for plots...\n",
- "# 4. Different input options\n",
- "# 5. README.md in there (in UI) (contact us for fine-tuning)\n",
- "# 6. Requirements for dimensions\n",
- "# 7. Multivariate data (x_t is vector)\n",
- "# 8. LOGO of NX-AI and xLSTM and tirex\n",
- "# '''"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " Ticker | \n",
- " 2024-12-04 | \n",
- " 2024-12-05 | \n",
- " 2024-12-06 | \n",
- " 2024-12-09 | \n",
- " 2024-12-10 | \n",
- " 2024-12-11 | \n",
- " 2024-12-12 | \n",
- " 2024-12-13 | \n",
- " 2024-12-16 | \n",
- " ... | \n",
- " 2025-05-21 | \n",
- " 2025-05-22 | \n",
- " 2025-05-23 | \n",
- " 2025-05-27 | \n",
- " 2025-05-28 | \n",
- " 2025-05-29 | \n",
- " 2025-05-30 | \n",
- " 2025-06-02 | \n",
- " 2025-06-03 | \n",
- " 2025-06-04 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " AAPL | \n",
- " 242.425201 | \n",
- " 242.455124 | \n",
- " 242.255600 | \n",
- " 246.156204 | \n",
- " 247.173752 | \n",
- " 245.896820 | \n",
- " 247.363297 | \n",
- " 247.532883 | \n",
- " 250.435867 | \n",
- " ... | \n",
- " 202.089996 | \n",
- " 201.360001 | \n",
- " 195.270004 | \n",
- " 200.210007 | \n",
- " 200.419998 | \n",
- " 199.949997 | \n",
- " 200.850006 | \n",
- " 201.699997 | \n",
- " 203.270004 | \n",
- " 203.150101 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " AMZN | \n",
- " 218.160004 | \n",
- " 220.550003 | \n",
- " 227.029999 | \n",
- " 226.089996 | \n",
- " 225.039993 | \n",
- " 230.259995 | \n",
- " 228.970001 | \n",
- " 227.460007 | \n",
- " 232.929993 | \n",
- " ... | \n",
- " 201.119995 | \n",
- " 203.100006 | \n",
- " 200.990005 | \n",
- " 206.020004 | \n",
- " 204.720001 | \n",
- " 205.699997 | \n",
- " 205.009995 | \n",
- " 206.649994 | \n",
- " 205.710007 | \n",
- " 207.472000 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " GOOGL | \n",
- " 173.970016 | \n",
- " 172.244003 | \n",
- " 174.309265 | \n",
- " 175.168259 | \n",
- " 184.956985 | \n",
- " 195.175217 | \n",
- " 191.739182 | \n",
- " 189.601639 | \n",
- " 196.433777 | \n",
- " ... | \n",
- " 168.559998 | \n",
- " 170.869995 | \n",
- " 168.470001 | \n",
- " 172.899994 | \n",
- " 172.360001 | \n",
- " 171.860001 | \n",
- " 171.740005 | \n",
- " 169.029999 | \n",
- " 166.179993 | \n",
- " 167.785004 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " JNJ | \n",
- " 148.006256 | \n",
- " 147.071823 | \n",
- " 146.865265 | \n",
- " 147.150513 | \n",
- " 146.786560 | \n",
- " 144.238968 | \n",
- " 143.845535 | \n",
- " 144.219299 | \n",
- " 141.494659 | \n",
- " ... | \n",
- " 151.877960 | \n",
- " 151.312805 | \n",
- " 151.639999 | \n",
- " 153.250000 | \n",
- " 152.429993 | \n",
- " 153.580002 | \n",
- " 155.210007 | \n",
- " 155.399994 | \n",
- " 154.419998 | \n",
- " 153.419998 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " JPM | \n",
- " 240.666992 | \n",
- " 242.723633 | \n",
- " 244.582520 | \n",
- " 241.072388 | \n",
- " 240.133057 | \n",
- " 240.795532 | \n",
- " 238.817978 | \n",
- " 237.245850 | \n",
- " 236.889893 | \n",
- " ... | \n",
- " 261.040009 | \n",
- " 260.670013 | \n",
- " 260.709991 | \n",
- " 265.290009 | \n",
- " 263.489990 | \n",
- " 264.369995 | \n",
- " 264.000000 | \n",
- " 264.660004 | \n",
- " 266.269989 | \n",
- " 265.065002 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " META | \n",
- " 612.740173 | \n",
- " 607.898376 | \n",
- " 622.713257 | \n",
- " 612.530518 | \n",
- " 618.270813 | \n",
- " 631.608154 | \n",
- " 629.721375 | \n",
- " 619.299072 | \n",
- " 623.685120 | \n",
- " ... | \n",
- " 635.500000 | \n",
- " 636.570007 | \n",
- " 627.059998 | \n",
- " 642.320007 | \n",
- " 643.580017 | \n",
- " 645.049988 | \n",
- " 647.489990 | \n",
- " 670.900024 | \n",
- " 666.849976 | \n",
- " 685.159973 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " MSFT | \n",
- " 435.744720 | \n",
- " 440.924805 | \n",
- " 441.871155 | \n",
- " 444.311768 | \n",
- " 441.632050 | \n",
- " 447.270416 | \n",
- " 447.838196 | \n",
- " 445.556976 | \n",
- " 449.860413 | \n",
- " ... | \n",
- " 452.570007 | \n",
- " 454.859985 | \n",
- " 450.179993 | \n",
- " 460.690002 | \n",
- " 457.359985 | \n",
- " 458.679993 | \n",
- " 460.359985 | \n",
- " 461.970001 | \n",
- " 462.970001 | \n",
- " 464.190002 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " NVDA | \n",
- " 145.116653 | \n",
- " 145.046661 | \n",
- " 142.426895 | \n",
- " 138.797226 | \n",
- " 135.057587 | \n",
- " 139.297180 | \n",
- " 137.327362 | \n",
- " 134.237656 | \n",
- " 131.987854 | \n",
- " ... | \n",
- " 131.800003 | \n",
- " 132.830002 | \n",
- " 131.289993 | \n",
- " 135.500000 | \n",
- " 134.809998 | \n",
- " 139.190002 | \n",
- " 135.130005 | \n",
- " 137.380005 | \n",
- " 141.220001 | \n",
- " 141.854996 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " TSLA | \n",
- " 357.929993 | \n",
- " 369.489990 | \n",
- " 389.220001 | \n",
- " 389.790009 | \n",
- " 400.989990 | \n",
- " 424.769989 | \n",
- " 418.100006 | \n",
- " 436.230011 | \n",
- " 463.019989 | \n",
- " ... | \n",
- " 334.619995 | \n",
- " 341.040009 | \n",
- " 339.339996 | \n",
- " 362.890015 | \n",
- " 356.899994 | \n",
- " 358.429993 | \n",
- " 346.459991 | \n",
- " 342.690002 | \n",
- " 344.269989 | \n",
- " 334.671600 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " V | \n",
- " 308.866455 | \n",
- " 308.049194 | \n",
- " 309.972778 | \n",
- " 307.271790 | \n",
- " 311.338196 | \n",
- " 312.743500 | \n",
- " 313.182037 | \n",
- " 313.690308 | \n",
- " 314.836517 | \n",
- " ... | \n",
- " 358.299988 | \n",
- " 357.970001 | \n",
- " 353.540009 | \n",
- " 359.299988 | \n",
- " 359.730011 | \n",
- " 362.399994 | \n",
- " 365.190002 | \n",
- " 365.320007 | \n",
- " 365.859985 | \n",
- " 368.179993 | \n",
- "
\n",
- " \n",
- "
\n",
- "
10 rows × 125 columns
\n",
- "
"
- ],
- "text/plain": [
- " Ticker 2024-12-04 2024-12-05 2024-12-06 2024-12-09 2024-12-10 \\\n",
- "0 AAPL 242.425201 242.455124 242.255600 246.156204 247.173752 \n",
- "1 AMZN 218.160004 220.550003 227.029999 226.089996 225.039993 \n",
- "2 GOOGL 173.970016 172.244003 174.309265 175.168259 184.956985 \n",
- "3 JNJ 148.006256 147.071823 146.865265 147.150513 146.786560 \n",
- "4 JPM 240.666992 242.723633 244.582520 241.072388 240.133057 \n",
- "5 META 612.740173 607.898376 622.713257 612.530518 618.270813 \n",
- "6 MSFT 435.744720 440.924805 441.871155 444.311768 441.632050 \n",
- "7 NVDA 145.116653 145.046661 142.426895 138.797226 135.057587 \n",
- "8 TSLA 357.929993 369.489990 389.220001 389.790009 400.989990 \n",
- "9 V 308.866455 308.049194 309.972778 307.271790 311.338196 \n",
- "\n",
- " 2024-12-11 2024-12-12 2024-12-13 2024-12-16 ... 2025-05-21 \\\n",
- "0 245.896820 247.363297 247.532883 250.435867 ... 202.089996 \n",
- "1 230.259995 228.970001 227.460007 232.929993 ... 201.119995 \n",
- "2 195.175217 191.739182 189.601639 196.433777 ... 168.559998 \n",
- "3 144.238968 143.845535 144.219299 141.494659 ... 151.877960 \n",
- "4 240.795532 238.817978 237.245850 236.889893 ... 261.040009 \n",
- "5 631.608154 629.721375 619.299072 623.685120 ... 635.500000 \n",
- "6 447.270416 447.838196 445.556976 449.860413 ... 452.570007 \n",
- "7 139.297180 137.327362 134.237656 131.987854 ... 131.800003 \n",
- "8 424.769989 418.100006 436.230011 463.019989 ... 334.619995 \n",
- "9 312.743500 313.182037 313.690308 314.836517 ... 358.299988 \n",
- "\n",
- " 2025-05-22 2025-05-23 2025-05-27 2025-05-28 2025-05-29 2025-05-30 \\\n",
- "0 201.360001 195.270004 200.210007 200.419998 199.949997 200.850006 \n",
- "1 203.100006 200.990005 206.020004 204.720001 205.699997 205.009995 \n",
- "2 170.869995 168.470001 172.899994 172.360001 171.860001 171.740005 \n",
- "3 151.312805 151.639999 153.250000 152.429993 153.580002 155.210007 \n",
- "4 260.670013 260.709991 265.290009 263.489990 264.369995 264.000000 \n",
- "5 636.570007 627.059998 642.320007 643.580017 645.049988 647.489990 \n",
- "6 454.859985 450.179993 460.690002 457.359985 458.679993 460.359985 \n",
- "7 132.830002 131.289993 135.500000 134.809998 139.190002 135.130005 \n",
- "8 341.040009 339.339996 362.890015 356.899994 358.429993 346.459991 \n",
- "9 357.970001 353.540009 359.299988 359.730011 362.399994 365.190002 \n",
- "\n",
- " 2025-06-02 2025-06-03 2025-06-04 \n",
- "0 201.699997 203.270004 203.150101 \n",
- "1 206.649994 205.710007 207.472000 \n",
- "2 169.029999 166.179993 167.785004 \n",
- "3 155.399994 154.419998 153.419998 \n",
- "4 264.660004 266.269989 265.065002 \n",
- "5 670.900024 666.849976 685.159973 \n",
- "6 461.970001 462.970001 464.190002 \n",
- "7 137.380005 141.220001 141.854996 \n",
- "8 342.690002 344.269989 334.671600 \n",
- "9 365.320007 365.859985 368.179993 \n",
- "\n",
- "[10 rows x 125 columns]"
- ]
- },
- "execution_count": 15,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.read_csv(\"stocks_data.csv\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Not checked but with labels filter"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import io\n",
- "import pandas as pd\n",
- "import torch\n",
- "import matplotlib.pyplot as plt\n",
- "from PIL import Image\n",
- "import numpy as np\n",
- "import gradio as gr\n",
- "\n",
- "# Set random seed and load your pretrained forecast tensor\n",
- "torch.manual_seed(42)\n",
- "_forecast_tensor = torch.load(\"stocks_data_forecast.pt\") # shape = (n_series, pred_len, n_q)\n",
- "\n",
- "def model_forecast(input_data):\n",
- " return _forecast_tensor\n",
- "\n",
- "def plot_forecast_image(timeseries, quantile_predictions, timeseries_name):\n",
- " \"\"\"Given one 1D series + quantile‐matrix, return a NumPy array of the plotted figure.\"\"\"\n",
- " fig, ax = plt.subplots(figsize=(10, 6), dpi=150)\n",
- " ax.plot(timeseries, color=\"blue\")\n",
- " x_pred = range(len(timeseries) - 1, len(timeseries) - 1 + len(quantile_predictions))\n",
- " for i in range(quantile_predictions.shape[1]):\n",
- " ax.plot(x_pred, quantile_predictions[:, i], color=f\"C{i}\")\n",
- " ax.set_title(f\"Timeseries: {timeseries_name}\")\n",
- "\n",
- " labels = [f\"Quantile {i}\" for i in range(quantile_predictions.shape[1])]\n",
- " ax.legend(labels, loc=\"center left\", bbox_to_anchor=(1, 0.5))\n",
- " plt.tight_layout(rect=[0, 0, 0.85, 1])\n",
- "\n",
- " buf = io.BytesIO()\n",
- " fig.savefig(buf, format=\"png\", bbox_inches=\"tight\")\n",
- " plt.close(fig)\n",
- " buf.seek(0)\n",
- " img = Image.open(buf).convert(\"RGB\")\n",
- " return np.array(img)\n",
- "\n",
- "def load_table(file_path):\n",
- " \"\"\"Load CSV / XLS(X) / Parquet by extension, else raise.\"\"\"\n",
- " ext = file_path.split(\".\")[-1].lower()\n",
- " if ext == \"csv\":\n",
- " return pd.read_csv(file_path)\n",
- " elif ext in (\"xls\", \"xlsx\"):\n",
- " return pd.read_excel(file_path)\n",
- " elif ext == \"parquet\":\n",
- " return pd.read_parquet(file_path)\n",
- " else:\n",
- " raise ValueError(\n",
- " f\"Unsupported file format '.{ext}'. Accepted: CSV, XLS, XLSX, PARQUET.\"\n",
- " )\n",
- "\n",
- "def extract_names_and_update(file, preset_filename):\n",
- " \"\"\"\n",
- " Read the table (uploaded or preset), extract timeseries names, and return:\n",
- " 1) gr.update for the CheckboxGroup (all names pre‐checked)\n",
- " 2) the full list of names to store in state.\n",
- " \"\"\"\n",
- " try:\n",
- " if file is not None:\n",
- " df = load_table(file.name)\n",
- " else:\n",
- " if not preset_filename:\n",
- " return gr.update(choices=[], value=[]), []\n",
- " df = load_table(preset_filename)\n",
- "\n",
- " if df.shape[1] > 0 and df.iloc[:, 0].dtype == object and not df.iloc[:, 0].str.isnumeric().all():\n",
- " names = df.iloc[:, 0].tolist()\n",
- " else:\n",
- " names = [f\"Series {i}\" for i in range(len(df))]\n",
- "\n",
- " return gr.update(choices=names, value=names), names\n",
- " except Exception:\n",
- " return gr.update(choices=[], value=[]), []\n",
- "\n",
- "def filter_names(search_term, all_names):\n",
- " \"\"\"\n",
- " Filter the full list of names (all_names) by the search_term (case‐insensitive substring).\n",
- " Return gr.update with filtered choices and keep checked those that remain in both.\n",
- " \"\"\"\n",
- " if not all_names:\n",
- " return gr.update(choices=[], value=[])\n",
- " if not search_term:\n",
- " # No search term → show all\n",
- " return gr.update(choices=all_names, value=all_names)\n",
- " lower = search_term.lower()\n",
- " filtered = [n for n in all_names if lower in str(n).lower()]\n",
- " return gr.update(choices=filtered, value=filtered)\n",
- "\n",
- "def check_all(names_list):\n",
- " \"\"\"Return an update that checks all names in the checkbox.\"\"\"\n",
- " return gr.update(value=names_list)\n",
- "\n",
- "def uncheck_all(_):\n",
- " \"\"\"Return an update that unchecks all names.\"\"\"\n",
- " return gr.update(value=[])\n",
- "\n",
- "def display_filtered_forecast(file, preset_filename, selected_names):\n",
- " \"\"\"\n",
- " Load the table, filter by selected_names, run forecast, and return:\n",
- " - list of images (NumPy arrays) for the gallery\n",
- " - error string (empty if OK)\n",
- " \"\"\"\n",
- " try:\n",
- " if file is not None:\n",
- " df = load_table(file.name)\n",
- " else:\n",
- " if not preset_filename:\n",
- " return [], \"No file selected.\"\n",
- " df = load_table(preset_filename)\n",
- "\n",
- " if df.shape[1] > 0 and df.iloc[:, 0].dtype == object and not df.iloc[:, 0].str.isnumeric().all():\n",
- " all_names = df.iloc[:, 0].tolist()\n",
- " data_only = df.iloc[:, 1:].astype(float)\n",
- " else:\n",
- " all_names = [f\"Series {i}\" for i in range(len(df))]\n",
- " data_only = df.astype(float)\n",
- "\n",
- " mask = [name in selected_names for name in all_names]\n",
- " if not any(mask):\n",
- " return [], \"No timeseries chosen to plot.\"\n",
- "\n",
- " filtered_data = data_only.iloc[mask, :].values\n",
- " filtered_names = [all_names[i] for i, m in enumerate(mask) if m]\n",
- "\n",
- " inp = torch.tensor(filtered_data) # (n_chosen, length)\n",
- " out = model_forecast(inp) # (n_chosen, pred_len, n_q)\n",
- "\n",
- " gallery_images = []\n",
- " for i in range(inp.shape[0]):\n",
- " gallery_images.append(\n",
- " plot_forecast_image(inp[i], out[i], filtered_names[i])\n",
- " )\n",
- "\n",
- " return gallery_images, \"\"\n",
- " except Exception as e:\n",
- " return [], f\"Error: {e}. Please upload a valid CSV, XLS, XLSX, or PARQUET file.\"\n",
- "\n",
- "with gr.Blocks() as demo:\n",
- " gr.Markdown(\"## Upload or select a preset → search/filter by name → click Plot\")\n",
- "\n",
- " with gr.Row():\n",
- " file_input = gr.File(\n",
- " label=\"Upload CSV/XLSX/PARQUET (optional)\",\n",
- " file_types=[\".csv\", \".xls\", \".xlsx\", \".parquet\"]\n",
- " )\n",
- " preset_dropdown = gr.Dropdown(\n",
- " label=\"Or pick a preset:\",\n",
- " choices=[\"stocks_data_noindex.csv\", \"stocks_data.csv\"],\n",
- " value=\"stocks_data_noindex.csv\"\n",
- " )\n",
- "\n",
- " # A text box to type a substring (search term)\n",
- " search_box = gr.Textbox(\n",
- " label=\"Search/Filter timeseries by name\",\n",
- " placeholder=\"Type to filter (e.g. 'AMZN')\",\n",
- " value=\"\"\n",
- " )\n",
- "\n",
- " # A CheckboxGroup to show matching names; choices/value will be updated dynamically\n",
- " filter_checkbox = gr.CheckboxGroup(\n",
- " choices=[], value=[], label=\"Select which timeseries to show\"\n",
- " )\n",
- "\n",
- " # Buttons to check or uncheck all\n",
- " with gr.Row():\n",
- " check_all_btn = gr.Button(\"Check All\")\n",
- " uncheck_all_btn = gr.Button(\"Uncheck All\")\n",
- "\n",
- " plot_button = gr.Button(\"Plot\")\n",
- "\n",
- " gallery = gr.Gallery(label=\"Forecast Plots (filtered)\")\n",
- " errbox = gr.Textbox(label=\"Error Message\")\n",
- "\n",
- " # State to hold the full list of names\n",
- " names_state = gr.State([])\n",
- "\n",
- " # 1) When file or preset changes, extract full names and update the checkbox + state\n",
- " file_input.change(\n",
- " fn=extract_names_and_update,\n",
- " inputs=[file_input, preset_dropdown],\n",
- " outputs=[filter_checkbox, names_state]\n",
- " )\n",
- " preset_dropdown.change(\n",
- " fn=extract_names_and_update,\n",
- " inputs=[file_input, preset_dropdown],\n",
- " outputs=[filter_checkbox, names_state]\n",
- " )\n",
- "\n",
- " # 2) When search text changes, filter names_state and update the checkbox\n",
- " search_box.change(\n",
- " fn=filter_names,\n",
- " inputs=[search_box, names_state],\n",
- " outputs=filter_checkbox\n",
- " )\n",
- "\n",
- " # 3) Check All button: set checkbox value to all names in state\n",
- " check_all_btn.click(\n",
- " fn=check_all,\n",
- " inputs=names_state,\n",
- " outputs=filter_checkbox\n",
- " )\n",
- "\n",
- " # 4) Uncheck All button: set checkbox value to empty list\n",
- " uncheck_all_btn.click(\n",
- " fn=uncheck_all,\n",
- " inputs=names_state,\n",
- " outputs=filter_checkbox\n",
- " )\n",
- "\n",
- " # 5) When \"Plot\" is clicked, generate the filtered plots\n",
- " plot_button.click(\n",
- " fn=display_filtered_forecast,\n",
- " inputs=[file_input, preset_dropdown, filter_checkbox],\n",
- " outputs=[gallery, errbox],\n",
- " )\n",
- "\n",
- "demo.launch()\n",
- "\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Checked, filter"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import io\n",
- "import pandas as pd\n",
- "import torch\n",
- "import matplotlib.pyplot as plt\n",
- "from PIL import Image\n",
- "import numpy as np\n",
- "import gradio as gr\n",
- "\n",
- "# ----------------------------\n",
- "# Helper functions (logic unchanged)\n",
- "# ----------------------------\n",
- "\n",
- "torch.manual_seed(42)\n",
- "_forecast_tensor = torch.load(\"stocks_data_forecast.pt\") # shape = (n_series, pred_len, n_q)\n",
- "\n",
- "def model_forecast(input_data):\n",
- " return _forecast_tensor\n",
- "\n",
- "def plot_forecast_image(timeseries, quantile_predictions, timeseries_name):\n",
- " fig, ax = plt.subplots(figsize=(10, 6), dpi=150)\n",
- " ax.plot(timeseries, color=\"blue\")\n",
- " x_pred = range(len(timeseries) - 1, len(timeseries) - 1 + len(quantile_predictions))\n",
- " for i in range(quantile_predictions.shape[1]):\n",
- " ax.plot(x_pred, quantile_predictions[:, i], color=f\"C{i}\")\n",
- " ax.set_title(f\"Timeseries: {timeseries_name}\")\n",
- " labels = [f\"Quantile {i}\" for i in range(quantile_predictions.shape[1])]\n",
- " ax.legend(labels, loc=\"center left\", bbox_to_anchor=(1, 0.5))\n",
- " plt.tight_layout(rect=[0, 0, 0.85, 1])\n",
- " buf = io.BytesIO()\n",
- " fig.savefig(buf, format=\"png\", bbox_inches=\"tight\")\n",
- " plt.close(fig)\n",
- " buf.seek(0)\n",
- " img = Image.open(buf).convert(\"RGB\")\n",
- " return np.array(img)\n",
- "\n",
- "def load_table(file_path):\n",
- " ext = file_path.split(\".\")[-1].lower()\n",
- " if ext == \"csv\":\n",
- " return pd.read_csv(file_path)\n",
- " elif ext in (\"xls\", \"xlsx\"):\n",
- " return pd.read_excel(file_path)\n",
- " elif ext == \"parquet\":\n",
- " return pd.read_parquet(file_path)\n",
- " else:\n",
- " raise ValueError(\"Unsupported format. Use CSV, XLS, XLSX, or PARQUET.\")\n",
- "\n",
- "def extract_names_and_update(file, preset_filename):\n",
- " try:\n",
- " if file is not None:\n",
- " df = load_table(file.name)\n",
- " else:\n",
- " if not preset_filename:\n",
- " return gr.update(choices=[], value=[]), []\n",
- " df = load_table(preset_filename)\n",
- "\n",
- " if df.shape[1] > 0 and df.iloc[:, 0].dtype == object and not df.iloc[:, 0].str.isnumeric().all():\n",
- " names = df.iloc[:, 0].tolist()\n",
- " else:\n",
- " names = [f\"Series {i}\" for i in range(len(df))]\n",
- " return gr.update(choices=names, value=names), names\n",
- " except Exception:\n",
- " return gr.update(choices=[], value=[]), []\n",
- "\n",
- "def filter_names(search_term, all_names):\n",
- " if not all_names:\n",
- " return gr.update(choices=[], value=[])\n",
- " if not search_term:\n",
- " return gr.update(choices=all_names, value=all_names)\n",
- " lower = search_term.lower()\n",
- " filtered = [n for n in all_names if lower in str(n).lower()]\n",
- " return gr.update(choices=filtered, value=filtered)\n",
- "\n",
- "def check_all(names_list):\n",
- " return gr.update(value=names_list)\n",
- "\n",
- "def uncheck_all(_):\n",
- " return gr.update(value=[])\n",
- "\n",
- "def display_filtered_forecast(file, preset_filename, selected_names):\n",
- " \"\"\"\n",
- " Load the table, filter by selected_names, run forecast (correctly sliced),\n",
- " and return a gallery + error string.\n",
- " \"\"\"\n",
- " try:\n",
- " if file is not None:\n",
- " df = load_table(file.name)\n",
- " else:\n",
- " if not preset_filename:\n",
- " return [], \"No file selected.\"\n",
- " df = load_table(preset_filename)\n",
- "\n",
- " # Extract all_names and numeric data\n",
- " if df.shape[1] > 0 and df.iloc[:, 0].dtype == object \\\n",
- " and not df.iloc[:, 0].str.isnumeric().all():\n",
- " all_names = df.iloc[:, 0].tolist()\n",
- " data_only = df.iloc[:, 1:].astype(float)\n",
- " else:\n",
- " all_names = [f\"Series {i}\" for i in range(len(df))]\n",
- " data_only = df.astype(float)\n",
- "\n",
- " # Build mask and filtered subset\n",
- " mask = [name in selected_names for name in all_names]\n",
- " if not any(mask):\n",
- " return [], \"No timeseries chosen to plot.\"\n",
- "\n",
- " filtered_data = data_only.iloc[mask, :].values\n",
- " filtered_names = [all_names[i] for i, m in enumerate(mask) if m]\n",
- "\n",
- " # ------------------------\n",
- " # HERE is the only change:\n",
- " # Instead of calling model_forecast(inp), slice the full tensor by mask:\n",
- " # ------------------------\n",
- " out = _forecast_tensor[mask] # shape = (n_chosen, pred_len, n_q)\n",
- " inp = torch.tensor(filtered_data)\n",
- "\n",
- " # Plot each chosen series against its properly‐aligned forecast\n",
- " gallery_images = []\n",
- " for i in range(inp.shape[0]):\n",
- " gallery_images.append(\n",
- " plot_forecast_image(inp[i], out[i], filtered_names[i])\n",
- " )\n",
- "\n",
- " return gallery_images, \"\"\n",
- " except Exception as e:\n",
- " return [], f\"Error: {e}. Please upload a valid CSV, XLS, XLSX, or PARQUET file.\"\n",
- "\n",
- "\n",
- "# ----------------------------\n",
- "# Gradio layout: two columns\n",
- "# ----------------------------\n",
- "\n",
- "with gr.Blocks() as demo:\n",
- " gr.Markdown(\"# 📈 Stock Forecast Viewer 📊\")\n",
- " gr.Markdown(\"Upload data or choose a preset, filter by name, then click Plot.\")\n",
- "\n",
- " with gr.Row():\n",
- " # Left column: controls\n",
- " with gr.Column():\n",
- " gr.Markdown(\"## Data Selection\")\n",
- " file_input = gr.File(\n",
- " label=\"Upload CSV / XLSX / PARQUET\",\n",
- " file_types=[\".csv\", \".xls\", \".xlsx\", \".parquet\"]\n",
- " )\n",
- " preset_dropdown = gr.Dropdown(\n",
- " label=\"Or choose a preset:\",\n",
- " choices=[\"stocks_data_noindex.csv\", \"stocks_data.csv\"],\n",
- " value=\"stocks_data_noindex.csv\"\n",
- " )\n",
- "\n",
- " gr.Markdown(\"## Search / Filter\")\n",
- " search_box = gr.Textbox(\n",
- " placeholder=\"Type to filter (e.g. 'AMZN')\"\n",
- " )\n",
- " filter_checkbox = gr.CheckboxGroup(\n",
- " choices=[], value=[], label=\"Select which timeseries to show\"\n",
- " )\n",
- "\n",
- " with gr.Row():\n",
- " check_all_btn = gr.Button(\"✅ Check All\")\n",
- " uncheck_all_btn = gr.Button(\"❎ Uncheck All\")\n",
- "\n",
- " plot_button = gr.Button(\"▶️ Plot Forecasts\")\n",
- " errbox = gr.Textbox(interactive=False, placeholder=\"\")\n",
- "\n",
- " # Right column: gallery\n",
- " with gr.Column():\n",
- " gr.Markdown(\"## Forecast Gallery\")\n",
- " gallery = gr.Gallery()\n",
- "\n",
- " names_state = gr.State([])\n",
- "\n",
- " # When file or preset changes, update names\n",
- " file_input.change(\n",
- " fn=extract_names_and_update,\n",
- " inputs=[file_input, preset_dropdown],\n",
- " outputs=[filter_checkbox, names_state]\n",
- " )\n",
- " preset_dropdown.change(\n",
- " fn=extract_names_and_update,\n",
- " inputs=[file_input, preset_dropdown],\n",
- " outputs=[filter_checkbox, names_state]\n",
- " )\n",
- "\n",
- " # When search term changes, filter names\n",
- " search_box.change(\n",
- " fn=filter_names,\n",
- " inputs=[search_box, names_state],\n",
- " outputs=filter_checkbox\n",
- " )\n",
- "\n",
- " # Check All / Uncheck All\n",
- " check_all_btn.click(fn=check_all, inputs=names_state, outputs=filter_checkbox)\n",
- " uncheck_all_btn.click(fn=uncheck_all, inputs=names_state, outputs=filter_checkbox)\n",
- "\n",
- " # Plot button\n",
- " plot_button.click(\n",
- " fn=display_filtered_forecast,\n",
- " inputs=[file_input, preset_dropdown, filter_checkbox],\n",
- " outputs=[gallery, errbox]\n",
- " )\n",
- "\n",
- "demo.launch()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Checked, almost ideal"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import io\n",
- "import pandas as pd\n",
- "import torch\n",
- "import matplotlib.pyplot as plt\n",
- "from PIL import Image\n",
- "import numpy as np\n",
- "import gradio as gr\n",
- "\n",
- "# ----------------------------\n",
- "# Helper functions (logic unchanged)\n",
- "# ----------------------------\n",
- "\n",
- "torch.manual_seed(42)\n",
- "_forecast_tensor = torch.load(\"stocks_data_forecast.pt\") # shape = (n_series, pred_len, n_q)\n",
- "\n",
- "def model_forecast(input_data):\n",
- " return _forecast_tensor\n",
- "\n",
- "def plot_forecast_image(timeseries, quantile_predictions, timeseries_name):\n",
- " fig, ax = plt.subplots(figsize=(10, 6), dpi=150)\n",
- " ax.plot(timeseries, color=\"blue\")\n",
- " x_pred = range(len(timeseries) - 1, len(timeseries) - 1 + len(quantile_predictions))\n",
- " for i in range(quantile_predictions.shape[1]):\n",
- " ax.plot(x_pred, quantile_predictions[:, i], color=f\"C{i}\")\n",
- " ax.set_title(f\"Timeseries: {timeseries_name}\")\n",
- " labels = [f\"Quantile {i}\" for i in range(quantile_predictions.shape[1])]\n",
- " ax.legend(labels, loc=\"center left\", bbox_to_anchor=(1, 0.5))\n",
- " plt.tight_layout(rect=[0, 0, 0.85, 1])\n",
- " buf = io.BytesIO()\n",
- " fig.savefig(buf, format=\"png\", bbox_inches=\"tight\")\n",
- " plt.close(fig)\n",
- " buf.seek(0)\n",
- " img = Image.open(buf).convert(\"RGB\")\n",
- " return np.array(img)\n",
- "\n",
- "def load_table(file_path):\n",
- " ext = file_path.split(\".\")[-1].lower()\n",
- " if ext == \"csv\":\n",
- " return pd.read_csv(file_path)\n",
- " elif ext in (\"xls\", \"xlsx\"):\n",
- " return pd.read_excel(file_path)\n",
- " elif ext == \"parquet\":\n",
- " return pd.read_parquet(file_path)\n",
- " else:\n",
- " raise ValueError(\"Unsupported format. Use CSV, XLS, XLSX, or PARQUET.\")\n",
- "\n",
- "def extract_names_and_update(file, preset_filename):\n",
- " try:\n",
- " if file is not None:\n",
- " df = load_table(file.name)\n",
- " else:\n",
- " if not preset_filename:\n",
- " return gr.update(choices=[], value=[]), []\n",
- " df = load_table(preset_filename)\n",
- "\n",
- " if df.shape[1] > 0 and df.iloc[:, 0].dtype == object and not df.iloc[:, 0].str.isnumeric().all():\n",
- " names = df.iloc[:, 0].tolist()\n",
- " else:\n",
- " names = [f\"Series {i}\" for i in range(len(df))]\n",
- " return gr.update(choices=names, value=names), names\n",
- " except Exception:\n",
- " return gr.update(choices=[], value=[]), []\n",
- "\n",
- "def filter_names(search_term, all_names):\n",
- " if not all_names:\n",
- " return gr.update(choices=[], value=[])\n",
- " if not search_term:\n",
- " return gr.update(choices=all_names, value=all_names)\n",
- " lower = search_term.lower()\n",
- " filtered = [n for n in all_names if lower in str(n).lower()]\n",
- " return gr.update(choices=filtered, value=filtered)\n",
- "\n",
- "def check_all(names_list):\n",
- " return gr.update(value=names_list)\n",
- "\n",
- "def uncheck_all(_):\n",
- " return gr.update(value=[])\n",
- "\n",
- "def display_filtered_forecast(file, preset_filename, selected_names):\n",
- " try:\n",
- " if file is not None:\n",
- " df = load_table(file.name)\n",
- " else:\n",
- " if not preset_filename:\n",
- " return [], \"No file selected.\"\n",
- " df = load_table(preset_filename)\n",
- "\n",
- " if df.shape[1] > 0 and df.iloc[:, 0].dtype == object and not df.iloc[:, 0].str.isnumeric().all():\n",
- " all_names = df.iloc[:, 0].tolist()\n",
- " data_only = df.iloc[:, 1:].astype(float)\n",
- " else:\n",
- " all_names = [f\"Series {i}\" for i in range(len(df))]\n",
- " data_only = df.astype(float)\n",
- "\n",
- " mask = [name in selected_names for name in all_names]\n",
- " if not any(mask):\n",
- " return [], \"No timeseries chosen to plot.\"\n",
- "\n",
- " filtered_data = data_only.iloc[mask, :].values\n",
- " filtered_names = [all_names[i] for i, m in enumerate(mask) if m]\n",
- " out = _forecast_tensor[mask] # slice forecasts to match filtered rows\n",
- " inp = torch.tensor(filtered_data)\n",
- "\n",
- " gallery_images = []\n",
- " for i in range(inp.shape[0]):\n",
- " gallery_images.append(plot_forecast_image(inp[i], out[i], filtered_names[i]))\n",
- "\n",
- " return gallery_images, \"\"\n",
- " except Exception as e:\n",
- " return [], f\"Error: {e}. Use CSV, XLS, XLSX, or PARQUET.\"\n",
- "\n",
- "# ----------------------------\n",
- "# Gradio layout: two columns + instructions\n",
- "# ----------------------------\n",
- "\n",
- "with gr.Blocks() as demo:\n",
- " gr.Markdown(\"# 📈 Stock Forecast Viewer 📊\")\n",
- " gr.Markdown(\"Upload data or choose a preset, filter by name, then click Plot.\")\n",
- "\n",
- " with gr.Row():\n",
- " # Left column: controls\n",
- " with gr.Column():\n",
- " gr.Markdown(\"## Data Selection\")\n",
- " file_input = gr.File(\n",
- " label=\"Upload CSV / XLSX / PARQUET\",\n",
- " file_types=[\".csv\", \".xls\", \".xlsx\", \".parquet\"]\n",
- " )\n",
- " preset_dropdown = gr.Dropdown(\n",
- " label=\"Or choose a preset:\",\n",
- " choices=[\"stocks_data_noindex.csv\", \"stocks_data.csv\"],\n",
- " value=\"stocks_data_noindex.csv\"\n",
- " )\n",
- "\n",
- " gr.Markdown(\"## Search / Filter\")\n",
- " search_box = gr.Textbox(placeholder=\"Type to filter (e.g. 'AMZN')\")\n",
- " filter_checkbox = gr.CheckboxGroup(\n",
- " choices=[], value=[], label=\"Select which timeseries to show\"\n",
- " )\n",
- "\n",
- " with gr.Row():\n",
- " check_all_btn = gr.Button(\"✅ Check All\")\n",
- " uncheck_all_btn = gr.Button(\"❎ Uncheck All\")\n",
- "\n",
- " plot_button = gr.Button(\"▶️ Plot Forecasts\")\n",
- " errbox = gr.Textbox(interactive=False, placeholder=\"\")\n",
- "\n",
- " # Right column: gallery + instructions\n",
- " with gr.Column():\n",
- " gr.Markdown(\"## Forecast Gallery\")\n",
- " gallery = gr.Gallery()\n",
- "\n",
- " # Instruction text below gallery\n",
- " gr.Markdown(\n",
- " \"\"\"\n",
- " **How to format your data:**\n",
- " - Your file must be a table (CSV, XLS, XLSX, or Parquet).\n",
- " - If you haven't prepared the data, the preset file will be used.\n",
- " - **One row per timeseries.** Each row is treated as a separate series.\n",
- " - If you want to **name** each series, put the name as the first value in **every** row:\n",
- " - Example (CSV): \n",
- " `AAPL, 120.5, 121.0, 119.8, ...` \n",
- " `AMZN, 3300.0, 3310.5, 3295.2, ...` \n",
- " - In that case, the first column is not numeric, so it will be used as the series name.\n",
- " - If you do **not** want named series, simply leave out the first column entirely and have all values numeric:\n",
- " - Example: \n",
- " `120.5, 121.0, 119.8, ...` \n",
- " `3300.0, 3310.5, 3295.2, ...` \n",
- " - Then every row will be auto-named “Series 0, Series 1, …” in order.\n",
- " - **Consistency rule:** Either all rows have a non-numeric first entry for the name, or none do. Do not mix.\n",
- " - The rest of the columns (after the optional name) must be numeric data points for that series.\n",
- " - You can filter by typing in the search box. Then check or uncheck individual names before plotting.\n",
- " - Use “Check All” / “Uncheck All” to quickly select or deselect every series.\n",
- " - Finally, click **Plot Forecasts** to view the quantile forecast for each selected series.\n",
- " \"\"\"\n",
- " )\n",
- "\n",
- " names_state = gr.State([])\n",
- "\n",
- " # When file or preset changes, update names\n",
- " file_input.change(\n",
- " fn=extract_names_and_update,\n",
- " inputs=[file_input, preset_dropdown],\n",
- " outputs=[filter_checkbox, names_state]\n",
- " )\n",
- " preset_dropdown.change(\n",
- " fn=extract_names_and_update,\n",
- " inputs=[file_input, preset_dropdown],\n",
- " outputs=[filter_checkbox, names_state]\n",
- " )\n",
- "\n",
- " # When search term changes, filter names\n",
- " search_box.change(\n",
- " fn=filter_names,\n",
- " inputs=[search_box, names_state],\n",
- " outputs=filter_checkbox\n",
- " )\n",
- "\n",
- " # Check All / Uncheck All\n",
- " check_all_btn.click(fn=check_all, inputs=names_state, outputs=filter_checkbox)\n",
- " uncheck_all_btn.click(fn=uncheck_all, inputs=names_state, outputs=filter_checkbox)\n",
- "\n",
- " # Plot button\n",
- " plot_button.click(\n",
- " fn=display_filtered_forecast,\n",
- " inputs=[file_input, preset_dropdown, filter_checkbox],\n",
- " outputs=[gallery, errbox]\n",
- " )\n",
- "\n",
- "demo.launch()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# The default choice isn't processed when the default choice is chosen"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": []
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import io\n",
- "import pandas as pd\n",
- "import torch\n",
- "import matplotlib.pyplot as plt\n",
- "from PIL import Image\n",
- "import numpy as np\n",
- "import gradio as gr\n",
- "\n",
- "# ----------------------------\n",
- "# Helper functions (logic unchanged)\n",
- "# ----------------------------\n",
- "\n",
- "torch.manual_seed(42)\n",
- "_forecast_tensor = torch.load(\"stocks_data_forecast.pt\") # shape = (n_series, pred_len, n_q)\n",
- "\n",
- "def model_forecast(input_data):\n",
- " return _forecast_tensor\n",
- "\n",
- "def plot_forecast_image(timeseries, quantile_predictions, timeseries_name):\n",
- " fig, ax = plt.subplots(figsize=(10, 6), dpi=150)\n",
- " ax.plot(timeseries, color=\"blue\")\n",
- " x_pred = range(len(timeseries) - 1, len(timeseries) - 1 + len(quantile_predictions))\n",
- " for i in range(quantile_predictions.shape[1]):\n",
- " ax.plot(x_pred, quantile_predictions[:, i], color=f\"C{i}\")\n",
- " ax.set_title(f\"Timeseries: {timeseries_name}\")\n",
- " labels = [f\"Quantile {i}\" for i in range(quantile_predictions.shape[1])]\n",
- " ax.legend(labels, loc=\"center left\", bbox_to_anchor=(1, 0.5))\n",
- " plt.tight_layout(rect=[0, 0, 0.85, 1])\n",
- " buf = io.BytesIO()\n",
- " fig.savefig(buf, format=\"png\", bbox_inches=\"tight\")\n",
- " plt.close(fig)\n",
- " buf.seek(0)\n",
- " img = Image.open(buf).convert(\"RGB\")\n",
- " return np.array(img)\n",
- "\n",
- "def load_table(file_path):\n",
- " ext = file_path.split(\".\")[-1].lower()\n",
- " if ext == \"csv\":\n",
- " return pd.read_csv(file_path)\n",
- " elif ext in (\"xls\", \"xlsx\"):\n",
- " return pd.read_excel(file_path)\n",
- " elif ext == \"parquet\":\n",
- " return pd.read_parquet(file_path)\n",
- " else:\n",
- " raise ValueError(\"Unsupported format. Use CSV, XLS, XLSX, or PARQUET.\")\n",
- "\n",
- "def extract_names_and_update(file, preset_filename):\n",
- " try:\n",
- " if file is not None:\n",
- " df = load_table(file.name)\n",
- " else:\n",
- " if not preset_filename:\n",
- " return gr.update(choices=[], value=[]), []\n",
- " df = load_table(preset_filename)\n",
- "\n",
- " if df.shape[1] > 0 and df.iloc[:, 0].dtype == object and not df.iloc[:, 0].str.isnumeric().all():\n",
- " names = df.iloc[:, 0].tolist()\n",
- " else:\n",
- " names = [f\"Series {i}\" for i in range(len(df))]\n",
- " return gr.update(choices=names, value=names), names\n",
- " except Exception:\n",
- " return gr.update(choices=[], value=[]), []\n",
- "\n",
- "def filter_names(search_term, all_names):\n",
- " if not all_names:\n",
- " return gr.update(choices=[], value=[])\n",
- " if not search_term:\n",
- " return gr.update(choices=all_names, value=all_names)\n",
- " lower = search_term.lower()\n",
- " filtered = [n for n in all_names if lower in str(n).lower()]\n",
- " return gr.update(choices=filtered, value=filtered)\n",
- "\n",
- "def check_all(names_list):\n",
- " return gr.update(value=names_list)\n",
- "\n",
- "def uncheck_all(_):\n",
- " return gr.update(value=[])\n",
- "\n",
- "def display_filtered_forecast(file, preset_filename, selected_names):\n",
- " try:\n",
- " if file is not None:\n",
- " df = load_table(file.name)\n",
- " else:\n",
- " if not preset_filename:\n",
- " return [], \"No file selected.\"\n",
- " df = load_table(preset_filename)\n",
- "\n",
- " if df.shape[1] > 0 and df.iloc[:, 0].dtype == object and not df.iloc[:, 0].str.isnumeric().all():\n",
- " all_names = df.iloc[:, 0].tolist()\n",
- " data_only = df.iloc[:, 1:].astype(float)\n",
- " else:\n",
- " all_names = [f\"Series {i}\" for i in range(len(df))]\n",
- " data_only = df.astype(float)\n",
- "\n",
- " mask = [name in selected_names for name in all_names]\n",
- " if not any(mask):\n",
- " return [], \"No timeseries chosen to plot.\"\n",
- "\n",
- " filtered_data = data_only.iloc[mask, :].values\n",
- " filtered_names = [all_names[i] for i, m in enumerate(mask) if m]\n",
- " out = _forecast_tensor[mask] # slice forecasts to match filtered rows\n",
- " inp = torch.tensor(filtered_data)\n",
- "\n",
- " gallery_images = []\n",
- " for i in range(inp.shape[0]):\n",
- " gallery_images.append(plot_forecast_image(inp[i], out[i], filtered_names[i]))\n",
- "\n",
- " return gallery_images, \"\"\n",
- " except Exception as e:\n",
- " return [], f\"Error: {e}. Use CSV, XLS, XLSX, or PARQUET.\"\n",
- "\n",
- "\n",
- "# ----------------------------\n",
- "# Gradio layout: two columns + instructions\n",
- "# ----------------------------\n",
- "\n",
- "with gr.Blocks() as demo:\n",
- " gr.Markdown(\"# 📈 Stock Forecast Viewer 📊\")\n",
- " gr.Markdown(\"Upload data or choose a preset, filter by name, then click Plot.\")\n",
- "\n",
- " with gr.Row():\n",
- " # Left column: controls\n",
- " with gr.Column():\n",
- " gr.Markdown(\"## Data Selection\")\n",
- " gr.Markdown(\"*If you haven't prepared the data, the preset file will be used.*\")\n",
- " file_input = gr.File(\n",
- " label=\"Upload CSV / XLSX / PARQUET\",\n",
- " file_types=[\".csv\", \".xls\", \".xlsx\", \".parquet\"]\n",
- " )\n",
- " preset_dropdown = gr.Dropdown(\n",
- " label=\"Or choose a preset:\",\n",
- " choices=[\"stocks_data_noindex.csv\", \"stocks_data.csv\"],\n",
- " value=\"stocks_data_noindex.csv\"\n",
- " )\n",
- "\n",
- " gr.Markdown(\"## Search / Filter\")\n",
- " search_box = gr.Textbox(placeholder=\"Type to filter (e.g. 'AMZN')\")\n",
- " filter_checkbox = gr.CheckboxGroup(\n",
- " choices=[], value=[], label=\"Select which timeseries to show\"\n",
- " )\n",
- "\n",
- " with gr.Row():\n",
- " check_all_btn = gr.Button(\"✅ Check All\")\n",
- " uncheck_all_btn = gr.Button(\"❎ Uncheck All\")\n",
- "\n",
- " plot_button = gr.Button(\"▶️ Plot Forecasts\")\n",
- " errbox = gr.Textbox(label=\"Error Message\", interactive=False)\n",
- "\n",
- " # Right column: gallery + instructions\n",
- " with gr.Column():\n",
- " gr.Markdown(\"## Forecast Gallery\")\n",
- " gallery = gr.Gallery()\n",
- "\n",
- " # Instruction text below gallery\n",
- " gr.Markdown(\n",
- " \"\"\"\n",
- " **How to format your data:**\n",
- " - Your file must be a table (CSV, XLS, XLSX, or Parquet).\n",
- " - **One row per timeseries.** Each row is treated as a separate series.\n",
- " - If you want to **name** each series, put the name as the first value in **every** row:\n",
- " - Example (CSV): \n",
- " `AAPL, 120.5, 121.0, 119.8, ...` \n",
- " `AMZN, 3300.0, 3310.5, 3295.2, ...` \n",
- " - In that case, the first column is not numeric, so it will be used as the series name.\n",
- " - If you do **not** want named series, simply leave out the first column entirely and have all values numeric:\n",
- " - Example: \n",
- " `120.5, 121.0, 119.8, ...` \n",
- " `3300.0, 3310.5, 3295.2, ...` \n",
- " - Then every row will be auto-named “Series 0, Series 1, …” in order.\n",
- " - **Consistency rule:** Either all rows have a non-numeric first entry for the name, or none do. Do not mix.\n",
- " - The rest of the columns (after the optional name) must be numeric data points for that series.\n",
- " - You can filter by typing in the search box. Then check or uncheck individual names before plotting.\n",
- " - Use “Check All” / “Uncheck All” to quickly select or deselect every series.\n",
- " - Finally, click **Plot Forecasts** to view the quantile forecast for each selected series.\n",
- " \"\"\"\n",
- " )\n",
- "\n",
- " names_state = gr.State([])\n",
- "\n",
- " # When file or preset changes, update names\n",
- " file_input.change(\n",
- " fn=extract_names_and_update,\n",
- " inputs=[file_input, preset_dropdown],\n",
- " outputs=[filter_checkbox, names_state]\n",
- " )\n",
- " preset_dropdown.change(\n",
- " fn=extract_names_and_update,\n",
- " inputs=[file_input, preset_dropdown],\n",
- " outputs=[filter_checkbox, names_state]\n",
- " )\n",
- "\n",
- " # When search term changes, filter names\n",
- " search_box.change(\n",
- " fn=filter_names,\n",
- " inputs=[search_box, names_state],\n",
- " outputs=filter_checkbox\n",
- " )\n",
- "\n",
- " # Check All / Uncheck All\n",
- " check_all_btn.click(fn=check_all, inputs=names_state, outputs=filter_checkbox)\n",
- " uncheck_all_btn.click(fn=uncheck_all, inputs=names_state, outputs=filter_checkbox)\n",
- "\n",
- " # Plot button\n",
- " plot_button.click(\n",
- " fn=display_filtered_forecast,\n",
- " inputs=[file_input, preset_dropdown, filter_checkbox],\n",
- " outputs=[gallery, errbox]\n",
- " )\n",
- "\n",
- "demo.launch()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Default choice - None"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import io\n",
- "import pandas as pd\n",
- "import torch\n",
- "import matplotlib.pyplot as plt\n",
- "from PIL import Image\n",
- "import numpy as np\n",
- "import gradio as gr\n",
- "\n",
- "# ----------------------------\n",
- "# Helper functions (logic unchanged)\n",
- "# ----------------------------\n",
- "\n",
- "torch.manual_seed(42)\n",
- "_forecast_tensor = torch.load(\"stocks_data_forecast.pt\") # shape = (n_series, pred_len, n_q)\n",
- "\n",
- "def model_forecast(input_data):\n",
- " return _forecast_tensor\n",
- "\n",
- "def plot_forecast_image(timeseries, quantile_predictions, timeseries_name):\n",
- " fig, ax = plt.subplots(figsize=(10, 6), dpi=300)\n",
- " \n",
- " # Plot the original timeseries with thicker line and marker\n",
- " ax.plot(timeseries, color=\"blue\", linewidth=2.5, marker='o', label=\"Given Data\")\n",
- " \n",
- " x_pred = range(len(timeseries) - 1, len(timeseries) - 1 + len(quantile_predictions))\n",
- " # Use distinct colors with higher alpha for smoothness\n",
- " for i in range(quantile_predictions.shape[1]):\n",
- " ax.plot(x_pred, quantile_predictions[:, i], color=f\"C{i}\", linewidth=2, alpha=0.8, label=f\"Quantile {i+1}\")\n",
- " \n",
- " ax.set_title(f\"Timeseries: {timeseries_name}\", fontsize=16, fontweight='bold')\n",
- " ax.set_xlabel(\"Time\", fontsize=12)\n",
- " ax.set_ylabel(\"Value\", fontsize=12)\n",
- " \n",
- " ax.grid(True, which='both', linestyle='--', linewidth=0.7, alpha=0.6)\n",
- " ax.legend(loc=\"center left\", bbox_to_anchor=(1, 0.5), fontsize=10, frameon=True, shadow=True)\n",
- " \n",
- " plt.tight_layout(rect=[0, 0, 0.82, 1])\n",
- " \n",
- " buf = io.BytesIO()\n",
- " fig.savefig(buf, format=\"png\", bbox_inches=\"tight\", transparent=True)\n",
- " plt.close(fig)\n",
- " buf.seek(0)\n",
- " img = Image.open(buf).convert(\"RGB\")\n",
- " return np.array(img)\n",
- "\n",
- "def load_table(file_path):\n",
- " ext = file_path.split(\".\")[-1].lower()\n",
- " if ext == \"csv\":\n",
- " return pd.read_csv(file_path)\n",
- " elif ext in (\"xls\", \"xlsx\"):\n",
- " return pd.read_excel(file_path)\n",
- " elif ext == \"parquet\":\n",
- " return pd.read_parquet(file_path)\n",
- " else:\n",
- " raise ValueError(\"Unsupported format. Use CSV, XLS, XLSX, or PARQUET.\")\n",
- "\n",
- "def extract_names_and_update(file, preset_filename):\n",
- " try:\n",
- " if file is not None:\n",
- " df = load_table(file.name)\n",
- " else:\n",
- " if not preset_filename:\n",
- " return gr.update(choices=[], value=[]), []\n",
- " df = load_table(preset_filename)\n",
- "\n",
- " if df.shape[1] > 0 and df.iloc[:, 0].dtype == object and not df.iloc[:, 0].str.isnumeric().all():\n",
- " names = df.iloc[:, 0].tolist()\n",
- " else:\n",
- " names = [f\"Series {i}\" for i in range(len(df))]\n",
- " return gr.update(choices=names, value=names), names\n",
- " except Exception:\n",
- " return gr.update(choices=[], value=[]), []\n",
- "\n",
- "def filter_names(search_term, all_names):\n",
- " if not all_names:\n",
- " return gr.update(choices=[], value=[])\n",
- " if not search_term:\n",
- " return gr.update(choices=all_names, value=all_names)\n",
- " lower = search_term.lower()\n",
- " filtered = [n for n in all_names if lower in str(n).lower()]\n",
- " return gr.update(choices=filtered, value=filtered)\n",
- "\n",
- "def check_all(names_list):\n",
- " return gr.update(value=names_list)\n",
- "\n",
- "def uncheck_all(_):\n",
- " return gr.update(value=[])\n",
- "\n",
- "def display_filtered_forecast(file, preset_filename, selected_names):\n",
- " try:\n",
- " if file is not None:\n",
- " df = load_table(file.name)\n",
- " else:\n",
- " if not preset_filename:\n",
- " return [], \"No file selected.\"\n",
- " df = load_table(preset_filename)\n",
- "\n",
- " if df.shape[1] > 0 and df.iloc[:, 0].dtype == object and not df.iloc[:, 0].str.isnumeric().all():\n",
- " all_names = df.iloc[:, 0].tolist()\n",
- " data_only = df.iloc[:, 1:].astype(float)\n",
- " else:\n",
- " all_names = [f\"Series {i}\" for i in range(len(df))]\n",
- " data_only = df.astype(float)\n",
- "\n",
- " mask = [name in selected_names for name in all_names]\n",
- " if not any(mask):\n",
- " return [], \"No timeseries chosen to plot.\"\n",
- "\n",
- " filtered_data = data_only.iloc[mask, :].values\n",
- " filtered_names = [all_names[i] for i, m in enumerate(mask) if m]\n",
- " out = _forecast_tensor[mask] # slice forecasts to match filtered rows\n",
- " inp = torch.tensor(filtered_data)\n",
- "\n",
- " gallery_images = []\n",
- " for i in range(inp.shape[0]):\n",
- " gallery_images.append(plot_forecast_image(inp[i], out[i], filtered_names[i]))\n",
- "\n",
- " return gallery_images, \"\"\n",
- " except Exception as e:\n",
- " return [], f\"Error: {e}. Use CSV, XLS, XLSX, or PARQUET.\"\n",
- "\n",
- "\n",
- "# ----------------------------\n",
- "# Gradio layout: two columns + instructions\n",
- "# ----------------------------\n",
- "\n",
- "with gr.Blocks() as demo:\n",
- " gr.Markdown(\"# 📈 Stock Forecast Viewer 📊\")\n",
- " gr.Markdown(\"Upload data or choose a preset, filter by name, then click Plot.\")\n",
- "\n",
- " with gr.Row():\n",
- " # Left column: controls\n",
- " with gr.Column():\n",
- " gr.Markdown(\"## Data Selection\")\n",
- " file_input = gr.File(\n",
- " label=\"Upload CSV / XLSX / PARQUET\",\n",
- " file_types=[\".csv\", \".xls\", \".xlsx\", \".parquet\"]\n",
- " )\n",
- " preset_dropdown = gr.Dropdown(\n",
- " label=\"Or choose a preset:\",\n",
- " choices=[\"stocks_data_noindex.csv\", \"stocks_data.csv\"],\n",
- " value=\"No file selected\"\n",
- " )\n",
- "\n",
- " gr.Markdown(\"## Search / Filter\")\n",
- " search_box = gr.Textbox(placeholder=\"Type to filter (e.g. 'AMZN')\")\n",
- " filter_checkbox = gr.CheckboxGroup(\n",
- " choices=[], value=[], label=\"Select which timeseries to show\"\n",
- " )\n",
- "\n",
- " with gr.Row():\n",
- " check_all_btn = gr.Button(\"✅ Check All\")\n",
- " uncheck_all_btn = gr.Button(\"❎ Uncheck All\")\n",
- "\n",
- " plot_button = gr.Button(\"▶️ Plot Forecasts\")\n",
- " errbox = gr.Textbox(label=\"Error Message\", interactive=False)\n",
- "\n",
- " # Right column: gallery + instructions\n",
- " with gr.Column():\n",
- " gr.Markdown(\"## Forecast Gallery\")\n",
- " gallery = gr.Gallery()\n",
- "\n",
- " # Instruction text below gallery\n",
- " gr.Markdown(\"## Instructions\")\n",
- " gr.Markdown(\n",
- " \"\"\"\n",
- " **How to format your data:**\n",
- " - Your file must be a table (CSV, XLS, XLSX, or Parquet).\n",
- " - **One row per timeseries.** Each row is treated as a separate series.\n",
- " - If you want to **name** each series, put the name as the first value in **every** row:\n",
- " - Example (CSV): \n",
- " `AAPL, 120.5, 121.0, 119.8, ...` \n",
- " `AMZN, 3300.0, 3310.5, 3295.2, ...` \n",
- " - In that case, the first column is not numeric, so it will be used as the series name.\n",
- " - If you do **not** want named series, simply leave out the first column entirely and have all values numeric:\n",
- " - Example: \n",
- " `120.5, 121.0, 119.8, ...` \n",
- " `3300.0, 3310.5, 3295.2, ...` \n",
- " - Then every row will be auto-named “Series 0, Series 1, …” in order.\n",
- " - **Consistency rule:** Either all rows have a non-numeric first entry for the name, or none do. Do not mix.\n",
- " - The rest of the columns (after the optional name) must be numeric data points for that series.\n",
- " - You can filter by typing in the search box. Then check or uncheck individual names before plotting.\n",
- " - Use “Check All” / “Uncheck All” to quickly select or deselect every series.\n",
- " - Finally, click **Plot Forecasts** to view the quantile forecast for each selected series.\n",
- " \"\"\"\n",
- " )\n",
- "\n",
- " names_state = gr.State([])\n",
- "\n",
- " # When file or preset changes, update names\n",
- " file_input.change(\n",
- " fn=extract_names_and_update,\n",
- " inputs=[file_input, preset_dropdown],\n",
- " outputs=[filter_checkbox, names_state]\n",
- " )\n",
- " preset_dropdown.change(\n",
- " fn=extract_names_and_update,\n",
- " inputs=[file_input, preset_dropdown],\n",
- " outputs=[filter_checkbox, names_state]\n",
- " )\n",
- "\n",
- " # When search term changes, filter names\n",
- " search_box.change(\n",
- " fn=filter_names,\n",
- " inputs=[search_box, names_state],\n",
- " outputs=filter_checkbox\n",
- " )\n",
- "\n",
- " # Check All / Uncheck All\n",
- " check_all_btn.click(fn=check_all, inputs=names_state, outputs=filter_checkbox)\n",
- " uncheck_all_btn.click(fn=uncheck_all, inputs=names_state, outputs=filter_checkbox)\n",
- "\n",
- " # Plot button\n",
- " plot_button.click(\n",
- " fn=display_filtered_forecast,\n",
- " inputs=[file_input, preset_dropdown, filter_checkbox],\n",
- " outputs=[gallery, errbox]\n",
- " )\n",
- "\n",
- "demo.launch()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# maybe some sanity checks in regard to the input would be good\n",
- "# maxium of idk maybe 30? variates (to save compute and avoid visualization problems) -> with just sending error messages when more thant that are in the input file\n",
- "# series longer than 2048 we can cut off (tirex is anyway doing that internally)\n",
- "# apart from that maybe check with \n",
- "# @Elias Bürger\n",
- "# how one then can set this up in hugginface (if there are open questions) - it would be cool if it would be possible to set it up first \"private\" so that we can test it on hugginface and then set it public afterwards (edited) \n",
- "\n",
- "# '''\n",
- "# 8. *Range of prediction length customizable \n",
- "# 9. *Multivariate data (x_t is vector)\n",
- "# '''"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 24,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(torch.Size([1, 256, 9]), torch.Size([4, 256, 9]))"
- ]
- },
- "execution_count": 24,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "torch.load('data/air_passengers_forecast_256.pt').shape, torch.load('data/merged_ett2_loop_forecast_256.pt').shape"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 26,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " index | \n",
- " 0 | \n",
- " 1 | \n",
- " 2 | \n",
- " 3 | \n",
- " 4 | \n",
- " 5 | \n",
- " 6 | \n",
- " 7 | \n",
- " 8 | \n",
- " ... | \n",
- " 132 | \n",
- " 133 | \n",
- " 134 | \n",
- " 135 | \n",
- " 136 | \n",
- " 137 | \n",
- " 138 | \n",
- " 139 | \n",
- " 140 | \n",
- " 141 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " air_passangers | \n",
- " 132.0 | \n",
- " 129.0 | \n",
- " 121.0 | \n",
- " 135.0 | \n",
- " 148.0 | \n",
- " 148.0 | \n",
- " 136.0 | \n",
- " 119.0 | \n",
- " 104.0 | \n",
- " ... | \n",
- " 419.0 | \n",
- " 461.0 | \n",
- " 472.0 | \n",
- " 535.0 | \n",
- " 622.0 | \n",
- " 606.0 | \n",
- " 508.0 | \n",
- " 461.0 | \n",
- " 390.0 | \n",
- " 432.0 | \n",
- "
\n",
- " \n",
- "
\n",
- "
1 rows × 143 columns
\n",
- "
"
- ],
- "text/plain": [
- " index 0 1 2 3 4 5 6 7 \\\n",
- "0 air_passangers 132.0 129.0 121.0 135.0 148.0 148.0 136.0 119.0 \n",
- "\n",
- " 8 ... 132 133 134 135 136 137 138 139 140 \\\n",
- "0 104.0 ... 419.0 461.0 472.0 535.0 622.0 606.0 508.0 461.0 390.0 \n",
- "\n",
- " 141 \n",
- "0 432.0 \n",
- "\n",
- "[1 rows x 143 columns]"
- ]
- },
- "execution_count": 26,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.read_csv('data/air_passangers.csv')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 27,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " Unnamed: 0 | \n",
- " 0 | \n",
- " 1 | \n",
- " 2 | \n",
- " 3 | \n",
- " 4 | \n",
- " 5 | \n",
- " 6 | \n",
- " 7 | \n",
- " 8 | \n",
- " ... | \n",
- " 2517 | \n",
- " 2518 | \n",
- " 2519 | \n",
- " 2520 | \n",
- " 2521 | \n",
- " 2522 | \n",
- " 2523 | \n",
- " 2524 | \n",
- " 2525 | \n",
- " 2526 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " ett2_2 | \n",
- " 25.214001 | \n",
- " 21.193001 | \n",
- " 19.601999 | \n",
- " 22.617001 | \n",
- " 25.884001 | \n",
- " 25.549000 | \n",
- " 24.628000 | \n",
- " 23.287001 | \n",
- " 22.701000 | \n",
- " ... | \n",
- " 31.329000 | \n",
- " 28.565001 | \n",
- " 32.585999 | \n",
- " 32.167000 | \n",
- " 30.240000 | \n",
- " 30.073000 | \n",
- " 29.989000 | \n",
- " 29.486000 | \n",
- " 31.329000 | \n",
- " 32.417999 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " ett2_5 | \n",
- " 12.649000 | \n",
- " 13.068000 | \n",
- " 13.403000 | \n",
- " 12.733000 | \n",
- " 12.481000 | \n",
- " 13.068000 | \n",
- " 11.895000 | \n",
- " 11.644000 | \n",
- " 11.225000 | \n",
- " ... | \n",
- " 33.005001 | \n",
- " 31.413000 | \n",
- " 29.820999 | \n",
- " 30.073000 | \n",
- " 32.585999 | \n",
- " 30.827000 | \n",
- " 27.476000 | \n",
- " 28.565001 | \n",
- " 31.329000 | \n",
- " 31.747999 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " loop_6 | \n",
- " 54.271523 | \n",
- " 56.406818 | \n",
- " 55.328819 | \n",
- " 52.330349 | \n",
- " 54.279472 | \n",
- " 55.758884 | \n",
- " 55.381527 | \n",
- " 56.369274 | \n",
- " 54.589359 | \n",
- " ... | \n",
- " 58.924488 | \n",
- " 60.137211 | \n",
- " 59.653061 | \n",
- " 56.785187 | \n",
- " 58.367878 | \n",
- " 55.989887 | \n",
- " 56.791931 | \n",
- " 56.689064 | \n",
- " 56.753975 | \n",
- " 57.298767 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " loop_7 | \n",
- " 58.644505 | \n",
- " 52.885113 | \n",
- " 54.297569 | \n",
- " 55.952805 | \n",
- " 60.136642 | \n",
- " 60.026550 | \n",
- " 53.077511 | \n",
- " 53.965748 | \n",
- " 57.957455 | \n",
- " ... | \n",
- " 63.770260 | \n",
- " 63.091949 | \n",
- " 62.029819 | \n",
- " 62.587704 | \n",
- " 64.200348 | \n",
- " 63.076702 | \n",
- " 64.517593 | \n",
- " 64.431839 | \n",
- " 62.695835 | \n",
- " 64.302551 | \n",
- "
\n",
- " \n",
- "
\n",
- "
4 rows × 2528 columns
\n",
- "
"
- ],
- "text/plain": [
- " Unnamed: 0 0 1 2 3 4 \\\n",
- "0 ett2_2 25.214001 21.193001 19.601999 22.617001 25.884001 \n",
- "1 ett2_5 12.649000 13.068000 13.403000 12.733000 12.481000 \n",
- "2 loop_6 54.271523 56.406818 55.328819 52.330349 54.279472 \n",
- "3 loop_7 58.644505 52.885113 54.297569 55.952805 60.136642 \n",
- "\n",
- " 5 6 7 8 ... 2517 2518 \\\n",
- "0 25.549000 24.628000 23.287001 22.701000 ... 31.329000 28.565001 \n",
- "1 13.068000 11.895000 11.644000 11.225000 ... 33.005001 31.413000 \n",
- "2 55.758884 55.381527 56.369274 54.589359 ... 58.924488 60.137211 \n",
- "3 60.026550 53.077511 53.965748 57.957455 ... 63.770260 63.091949 \n",
- "\n",
- " 2519 2520 2521 2522 2523 2524 \\\n",
- "0 32.585999 32.167000 30.240000 30.073000 29.989000 29.486000 \n",
- "1 29.820999 30.073000 32.585999 30.827000 27.476000 28.565001 \n",
- "2 59.653061 56.785187 58.367878 55.989887 56.791931 56.689064 \n",
- "3 62.029819 62.587704 64.200348 63.076702 64.517593 64.431839 \n",
- "\n",
- " 2525 2526 \n",
- "0 31.329000 32.417999 \n",
- "1 31.329000 31.747999 \n",
- "2 56.753975 57.298767 \n",
- "3 62.695835 64.302551 \n",
- "\n",
- "[4 rows x 2528 columns]"
- ]
- },
- "execution_count": 27,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.read_csv('data/merged_ett2_loop.csv')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAJOCAYAAABm7rQwAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnQd4I9XVhr9Rc197e+8LLLuwS++99w6B0EOA0HtL/tBL6L2HBEjovSSU0CFAYFnYZXvvvbjbKjPzP98dS5ZtyR7JKiPpvDxm5bE0mjszd+65557zHc00TROCIAiCIAiCIAiCIAiCkEFcmfwyQRAEQRAEQRAEQRAEQSDilBIEQRAEQRAEQRAEQRAyjjilBEEQBEEQBEEQBEEQhIwjTilBEARBEARBEARBEAQh44hTShAEQRAEQRAEQRAEQcg44pQSBEEQBEEQBEEQBEEQMo44pQRBEARBEARBEARBEISMI04pQRAEQRAEQRAEQRAEIeOIU0oQBEEQBEEQBEEQBEHIOOKUEgRBEBLmjDPOwIgRI1CoFHr785VErivfW15ejlzjiy++gKZp6t9Cup9zpY2ZuD7PPvus+o5FixalbJ9CR3jNeO0EQRCEzhGnlCAIgqDgJMXOT/RkyUlwgnXmmWdi9OjRKC4uxoABA7DHHnvghhtuQD6w1157xb0ms2bNQj7T2NiIG2+8MeP3Xjq/N3w9N9lkk5h//89//hO5vq+//nrKv1+w18969eqF7bffHn/7299gGAZyidtvvx1vv/02nOaoOeyww5L67L///W/VHwVBEIT8wpPtAxAEQRCcwT/+8Y82vz///PNqYtx+++abb46nn37aURO0efPmqYljSUkJfve736mJz8qVKzF58mTceeeduOmmm1L6fdlq/5AhQ3DHHXd02D5o0CDkM3QOha8hnQbpov11Tff30nnKe/eHH37ADjvs0OZvL7zwgvp7c3Mz0o3T+nO2ie5na9euVc/Cs846C3PmzMFf/vKXjB9PsteHTqnjjjsORx11VJvtp556Kk488UQUFRUhl6BT6tFHHxXHlCAIQp4hTilBEARBccopp7T5/fvvv1dOqfbbncj999+P+vp6/PLLLxg+fHibv61ZsyZl39PQ0ICysjJ4vV5kg8rKyrRcD9M0lfODTr1CJtPXlVF9oVAIL730UhunFK/FW2+9hUMPPRRvvPFG2o8jW/ezU2nfz84991xsttlmeOSRR3DLLbfEPF90GgUCAeVIdPr1cbvd6keQZ58gCIITkPQ9QRAEIWHaa5wwdY6pLvfcc49ayR41ahRKS0txwAEHYOnSpcrw52SOEQg0/o888khs2LChw34/+OAD7L777srxU1FRoSbl06dP7/J45s+fr/bd3iFF+vXrl9T3hDWDuO9DDjlEve/kk0+O2f7wpPSBBx7A+PHj1cS0f//+ajK7cePGNu+bNGkSDjzwQPTp00edi5EjR6rorlRABwfPM50djILgMf7xj3+E3++PmULz0UcfYbvttlPH8eSTT6q/VVdX49JLL8XQoUPVPsaMGaOizdpHavD3Bx98EFtuuaVqb9++fXHQQQep9oX5+9//jn322UddA+5r3LhxePzxxzscd2fnhPcW900YtRROq4oXLcHj54T7oYceimxbt24dXC4Xevfure7FMOedd55K8wwTfV3tfu/y5ctVJArvFb7/yiuvhK7rsMtJJ52EV155pc35fe+991SU1gknnBDzM/xOnh/eYzyvvOeYXtaeZcuWqWPjfc5rcNlll3W4F9q3Owz78i677KLOGa/JtttuGzONkOfkwgsvVGliW2yxReR4Pvzwwy7bTifO9ddfr/ZNRxCPk/3y888/b/O+6OfLU089Fbm/GR35448/dthv+Fh4X/JfOvi6A59lO+20k3JKM3Iqut2MaGN7eTzhNmfi+nTV/3h8PN7nnnsucu+G9Y3iaUo99thjkbYw+vKCCy5Q/SkaRgzynM6YMQN77723OjeDBw/GXXfdldS5tXtteewcW8JtC/8k+vyN9+xjm9ie9nC/bB8jzhLtG4IgCII9JFJKEARBSBmcoHGiedFFFymnEycqnFjTMUFdnmuuuUalKz388MNq8h49UWOa4Omnn66cE3SCcFJOB8Zuu+2Gn3/+uVOhXzqjPvnkE3z22Wfquzojke+hk4fv4984EeEELB6cAHGyR12riy++GAsXLlSRFdznf//7XxXtwKgtOuo4gbz22mtRVVWlJmVvvvmmrfNLZwcdLNFwAhYW3P7973+vJqGcQF1xxRX43//+p9KQZs6c2WFiPnv2bOUQ4XGfffbZKhKE52LPPfdUk2puHzZsGL799ltcd911Kh2Sk74wTGdiew8++GD1vTxXX3/9tYqw42SP8LxyknjEEUfA4/EoZ8v555+vJnqc8JKuzgm3cz90IB199NE45phj1PYJEybEPEf8PCeYX331lboO5JtvvlETWN6TnEzzmAiPl06QWNj5Xl4P3h877rijuj94D957771qYs3P2eG3v/1tRLcqfO+++OKL2HfffWM6VFevXq0cJGGnCI+TTlZej9raWuVQJE1NTWofS5YsUeeBTgbe++wjdqDDg9eNjlj26ZdffhnHH3883n//feXEjYbnl9eL15bOWzoEjz32WPXdnLjHg8f717/+Vd2HvAfr6urwzDPPqHPKlMatttqqzft5Xvge3ptsP58vvC4LFiyIRBN9/PHH6rvpAOW9v379etUn6bTuDvwOOjt5f4XhuXz11VfVdaBDlc+OTF2frvof98XtjMA755xz1Gd4X8aD9yCdr/vtt5+6d/l84P1Px1D4+RWGjh46wHju+XynQ4bPdjrIeDzJ0NW15fYVK1bETCm3+/zt7Nn3m9/8Rp2DVatWtXFU897m9zLdMZm+IQiCINjAFARBEIQYXHDBBQwpifm3008/3Rw+fHjk94ULF6r39u3b16yuro5sv+6669T2iRMnmsFgMLL9pJNOMn0+n9nc3Kx+r6urM6uqqsyzzz67zfesWrXKrKys7LC9PdOmTTNLSkrUd2211VbmJZdcYr799ttmQ0NDm/cl8j1sI/d37bXXdtn+r7/+Wr33hRdeaPO+Dz/8sM32t956S/3+448/momy5557qs+2/+GxkF9++UX9/vvf/77N56688kq1/bPPPots47FzG48vmltuucUsKysz58yZ02Y7z4Hb7TaXLFmifue++PmLL764w3EahhF53djY2OHvBx54oDlq1KjI73bOydq1a9V7brjhBtPuvdu/f//I75dffrm5xx57mP369TMff/xxtW39+vWmpmnmgw8+GPe6dva94fvj5ptvbrN96623Nrfddltb13P8+PHq9XbbbWeeddZZ6vXGjRtV33juuefMzz//XH3Ha6+9Fvkc3zdw4EBz3bp1bfZ34oknqns4fM4feOAB9dlXX3018h72hzFjxqjt3He8dse6doFAwNxiiy3MffbZp8127ovHO2/evMi2KVOmqO0PP/xwp+cgFAqZfr+/zTa2n9fud7/7XYfnS+/evc0NGzZEtr/zzjtq+3vvvRfZxv7P8xP9HPr444/V+9q3Md51GTt2rLr2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U7HNNtsojR1GHbBcOkV2uQLO8t7xuPPOO/HTTz+pEuLh9BhGwjz//PMqkiBchr273xMP6iKxvDjTjqgzcsABB6iUDkZsMBWEwut0OnCyTKcDRay5us8S6NSu4XHFi46xC6OAmDLESS0nYTymH374QX0nV/uZxtgVTKFiZBM1jZhWRaHghoYG/Prrr2ryzMlXnz591L54DjmJZRuZ3sIoLToH+TdGGfAccKJLkWCeG0Zgsa2MUgtHrhE754TRDxSUpoOJKYS8pltssYX6iUfY4cToDzohwzDthtpNjHLYfvvtOz0fyXxvsjCCiyXpu+Ivf/mLijajMD+FqHl8jJjh/c5oEb4m/Bvv5dNOO031DTpsmLYadrR1Bp0QdNzxujKCi7o6jz76qNJA6o5uUHt4nzEahdee38monCeeeEK1ifdLMrAPcl+77babSgPl+aBQOYshJLvPRMjE9bHT/wj7L7+T1zKc0houPhENn4FMW6OTi/tiehr7Dfsl+0i0qHk2YXvIxRdfrBYY6CDiM9zu89cOdHBR340/7O/to8Qy1TcEQRAKinbV+ARBEASh0/LbsUqUh8t633333W3eF6ukfXRJ8h9//LHD+w888EBVOr24uNgcPXq0ecYZZ5iTJk3q9Fj/+9//quNlWW5+1uv1msOGDVOfnT9/fof32/ketpEl1e20P8xTTz1lbrvttmZJSYlZUVFhbrnllubVV19trlixQv198uTJ5kknnaSOraioyOzXr5952GGHddm+cCn28ePHd/qeYDBo3nTTTebIkSPVORg6dKh53XXXmc3NzZ2WZY+mrq5OfYal6Vkmvk+fPuYuu+xi3nPPPar0eZhQKKSu99ixY9X7+vbtax588MHmTz/9FHnPu+++a06YMEGd4xEjRph33nmnKi8fXY7e7jn59ttv1bnld/HzN9xwQ5fnjPvie1evXh3Z9s0336htu+++u63rGu97490f/Lsd88rO9YzXf9ge3u+8vrzOAwYMMPfdd191/0WzePFi84gjjjBLS0vVdbzkkkvMDz/8UO2T++6s3c8884y5ySabqGvCa8w+G6tt/J3H0h7uj/vtDMMwzNtvv129l9+z9dZbm++//77t50v4+9vfC2+88Ya5+eabq32OGzfOfPPNN+P22WSuS2ftztT1sdP/Zs2aZe6xxx7qecR9hq9H+Pkb7oNhHnnk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GYvjhcgcjhmi7BsvDKUaCQHRb1trZMHmxJ3weEaDKS0oslgs6uR0OlUgceedd4rH45Gm9t5778ldd91l6LrffPON2satW7c2+D4a6vfff1ePPXv2bMO3uf3226Vv376Sbp555hnp1KmTHHTQQXG7z5UrV8rQoUMlLy9PBSvXXXddva+vzZs3y9lnny1FRUVSUlIio0ePlh07duz2nISfpk2bJk3J7/fLrbfeKq1bt5bc3FwZNGiQ/PbbbzFvs337dhWcdujQQd0Gx3bGjBlRx6F2OvbYY4OXN2/eXM477zy57bbbmmzfiCh1uOxWFEmpXlLoKUVERESUjdjovJHQD6La61e9IexhSzw3BY+qyvKrx3WI8cfDh9+XXnpJampqZOLEiTJmzBhxOBzyj3/8I2IlDcKreCgrK0uJ+0hl8TzeRgKXJ554QoWS8YJkHoFUq1atVPXVmjVrVLiC19c999wT9XYIpHDdSZMmidvtlpEjR8rFF18sr7/+esj1vvzyS+nVq1fw/82aNZOm9MADD8hjjz0mr7zyigrvbrnlFhk8eLAsWLBAcnJyIt7mwgsvlF9//VX++9//Sps2beS1115TYRZus8cee+w2DjUulyvkfnAM9ttvP3nwwQcz/nVPlO0cu943FDltKqQmIiIiykaslIoTvLF0JOBkJvjSv8nFh1+EBqjkuPTSS9UH5g8//DBkyt24cePUB+q99tpLnf/nn3/KGWecoapY8AH5pJNOUtUr+jDimmuuUZcjKLj++utV6BFr6h1CsRtuuEHatWuntglVW//5z3/U/R5xxBHqOqWlpWrbsV2R7mPLli0q9MD1UJkzZMiQkEqWl19+WW3T559/Lj169JCCggIVBiAAMUqr2vrqq69U8zg8DqpfFi9eHHyMO+64Q+bMmROsesF5gEovhBQtWrRQVUBHHnmkul54hdULL7ygQg8EHc8995w69uF9jXDMR40apb5ftmyZ+n/Lli3VPu2///4qsDHj559/VveDEElv+vTp0q9fP7Ut2N/333/fcOXYF198ocIXBDHYLzwfqGx78skno85xXrhwoXz22WfqGBxwwAHyt7/9TR5//HF58803ZfXq1SHXxWsLr13thLArlsrKSvX6wDFCtdNDDz1kaAoo9hevX0x/vPnmm9Wx7tOnj7z66qtqmyZMmBB12t+7776rwqxDDz1U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V6rvtXHB92dEItddd52qljrzzDPVKpXnnnuuWjwDKyUDxwtRZEbGBr6GL3Dm8XjUinypOn4YSmUYlInvt99+ap62/q93+P/AgQOTum1EyYRegQik3n//ffn666/VMsR6GDdYNUk/dhYvXqw+UHDsULY56qijZN68eeqv19oJVSCYWqF9z/FCVAfTwTEG9NAvp0OHDup7/M7BhwH9mMH0JfT34JihbLNz507V30YPf1THZxbgeCGKzMjYwFf80RB/YNTgsw/GF3pPpSJO38tA6GeA0ld8aBgwYIA88sgjamnJkSNHJnvTiJI6ZQ9l4h988IEUFhYG51SjOWBubq76Onr0aDV+MOe6qKhIrrjiCvWD/cADD0z25hMlFMaI1m9NgyWHmzVrFjyf44WoDqo80LwZ0/fOOOMMmT59ujz33HPqBBaLRU1Puvvuu6Vbt27qg8Utt9yipiudfPLJyd58ooQ64YQTVA8pLI6B6Xu//PKLPPzwwzJq1Ch1OccLZbMdO3bI0qVLQ5qb4w+CeL+FMVPf2ECV7rHHHisXXXSRmkKOhWnwh3lUJuJ6KSnZy/9R03j88cf97du39zudTv+AAQP806ZNS/YmESUVftxFOr300kvB61RVVfkvu+wyf2lpqT8vL89/yimn+NesWZPU7SZKFYcddpj/qquuCv6f44Uo1EcffeTv3bu3Wpq7e/fu/ueeey7kcizlfcstt/hbtmyprnPUUUf5Fy9enLTtJUqWbdu2qd8n+KySk5Pj79y5s/+mm27y19TUBK/D8ULZavLkyRE/s5x//vmGx8amTZv8I0aM8BcUFPiLior8I0eO9G/fvt2fqiz4J9nBGBERERERERERZRf2lCIiIiIiIiIiooRjKEVERERERERERAnHUIqIiIiIiIiIiBKOoRQRERERERERESUcQykiIiIiIiIiIko4hlJERERERERERJRwDKWIiIiIiIiIiCjhGEoREREREREREVHCMZQiIiIiaoQLLrhATj755GRvBhEREVHaYShFREREFIXFYol5uv322+XRRx+Vl19+OSnb9/zzz8s+++wjBQUFUlJSIv369ZN77703eDkDMyIiIkpl9mRvABEREVGqWrNmTfD7t956S2699VZZvHhx8DyEQTglw4svvihjx46Vxx57TA477DCpqamRuXPnyq+//pqU7SEiIiIyi5VSRERERFG0atUqeCouLlbVUfrzEEiFVyMdfvjhcsUVV6jAqLS0VFq2bKkqmiorK2XkyJFSWFgoXbt2lU8//TTksRAmDRkyRN0nbnPuuefKxo0bo27bhx9+KGeccYaMHj1a3V+vXr1kxIgRMm7cOHU5qrheeeUV+eCDD4KVXd9884267M8//1S3RXVVWVmZnHTSSfL7778H71vbpzvuuENatGghRUVFcskll0htbW3wOv/73/9k7733ltzcXGnWrJkMGjRI7SMRERGRUQyliIiIiOIMYVDz5s1l+vTpKqC69NJLZdiwYXLQQQfJrFmz5JhjjlGh086dO9X1t27dKkceeaSafjdz5kz57LPPZN26dSo4igah2LRp0+SPP/6IePm1116rbn/ssceqii+c8Phut1sGDx6swrHvvvtOfvjhBxWE4Xr60Omrr76ShQsXqiDrjTfekPfee0+FVID7QgA2atSo4HVOPfVU8fv9cT+WRERElLksfr57ICIiIqoX+kah+gkBkh6qinDehAkTgpVSXq9XBT6A71FlhdDm1VdfVeetXbtWWrduLVOnTpUDDzxQ7r77bnX9zz//PHi/q1atknbt2qnpgnvuuedu24NgCPeJYAqXDxw4UI477jg5/fTTxWq1Rtw2eO2119TjIUxC9RQgjELVFK6HwAy3++ijj1RFVV5enrrOM888I9ddd51UVFTI7NmzZb/99lPVVR06dGiCo01ERETZgJVSRERERHHWp0+f4Pc2m01Nb8NUNw2m58H69evV1zlz5sjkyZODPapw6t69u7ps2bJlER9DC7XmzZsnV111lXg8Hjn//PNVxZPP54u6bXispUuXqkop7bEwha+6ujrksdBAXQukAKHXjh07VFCFy4466ii1T6gAw/TELVu2NOqYERERUfZho3MiIiKiOHM4HCH/R0WS/jytQkkLjxD2nHDCCXL//fdHDJ9i6d27tzpddtllqu/TIYccIt9++60cccQREa+Px0KV0/jx43e7DP2jjEDQNmnSJPnxxx/liy++kMcff1xuuukm+emnn6RTp06G7oOIiIiIoRQRERFRku27777y7rvvSseOHcVub/jbs549e6qvWsNxp9Oppg+GPxZWEiwvL1cNzGNVVFVVValG5oBpgqiqwpRCLVg7+OCD1QmrEmIa3/vvvy/XXHNNg7efiIiIsgun7xEREREl2ZgxY2Tz5s2qefiMGTPUNDr0l8JqfeGhkgbN0++66y7VqBzNzhEanXfeearaCVPtACHX3LlzVV8qrOSHJudnn322asKOFffQx2rFihWqUfmVV16p+lhp0GcKK/stWLBAJk6cKLfddptcfvnlql8VKqLuuece1ZR95cqVqgn6hg0bpEePHgk7ZkRERJT+GEoRERERJVmbNm1UuIQACo3G0asJTdXRfFxrWh5u0KBBKohCTyc0Oj/ttNMkJydHrZqHHlZw0UUXyV577SX9+/dXYRUeA32ipkyZIu3bt1eN0hEkIXxCTyl95RR6RnXr1k0OPfRQGT58uJx44oly++23q8twPdwHGqvjsW+++WZ56KGHZMiQIQk6YkRERJQJuPoeEREREYWItGofERERUbyxUoqIiIiIiIiIiBKOoRQRERERERERESUcp+8REREREREREVHCsVKKiIiIiIiIiIgSjqEUERERERERERElHEMpIiIiIiIiIiJKOIZSRERERERERESUcAyliIiIiIiIiIgo4RhKERERERERERFRwjGUIiIiIiIiIiKihGMoRURERERERERECcdQioiIiIiIiIiIJNH+H9HUdjWEmj1XAAAAAElFTkSuQmCC",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "import pandas as pd\n",
- "import numpy as np\n",
- "import matplotlib.pyplot as plt\n",
- "\n",
- "# --- 1. Generate Sample Data (Replace with your actual data) ---\n",
- "# Let's imagine a time series of 100 steps\n",
- "time_steps = np.arange(100)\n",
- "\n",
- "# Actual values (optional, for context)\n",
- "actual_values = pd.Series(np.sin(time_steps / 10) * 10 + np.random.normal(0, 1, 100), index=time_steps)\n",
- "\n",
- "# Quantile predictions from your LSTLM\n",
- "# For demonstration, we'll create some plausible quantile forecasts\n",
- "# In a real scenario, these would be the output of your model\n",
- "data = {}\n",
- "data['q_0.05'] = actual_values - np.abs(np.random.normal(0, 3, 100)) - 2\n",
- "data['q_0.25'] = actual_values - np.abs(np.random.normal(0, 1.5, 100)) - 1\n",
- "data['q_0.50'] = actual_values + np.random.normal(0, 0.5, 100) # Median forecast\n",
- "data['q_0.75'] = actual_values + np.abs(np.random.normal(0, 1.5, 100)) + 1\n",
- "data['q_0.95'] = actual_values + np.abs(np.random.normal(0, 3, 100)) + 2\n",
- "\n",
- "# Ensure the quantiles are ordered correctly (lower < median < upper)\n",
- "data['q_0.05'] = np.minimum(data['q_0.05'], data['q_0.25'])\n",
- "data['q_0.25'] = np.minimum(data['q_0.25'], data['q_0.50'])\n",
- "data['q_0.95'] = np.maximum(data['q_0.95'], data['q_0.75'])\n",
- "data['q_0.75'] = np.maximum(data['q_0.75'], data['q_0.50'])\n",
- "\n",
- "\n",
- "predictions_df = pd.DataFrame(data, index=time_steps)\n",
- "\n",
- "# --- 2. Select Quantiles for Plotting ---\n",
- "median_quantile_col = 'q_0.50' # Your median quantile column name\n",
- "\n",
- "# For the range, choose two quantiles. E.g., 0.05 and 0.95 for a 90% interval\n",
- "lower_quantile_col = 'q_0.05'\n",
- "upper_quantile_col = 'q_0.95'\n",
- "# Or, for a 50% interval (interquartile range):\n",
- "# lower_quantile_col = 'q_0.25'\n",
- "# upper_quantile_col = 'q_0.75'\n",
- "\n",
- "# Extract the series\n",
- "median_forecast = predictions_df[median_quantile_col]\n",
- "lower_bound = predictions_df[lower_quantile_col]\n",
- "upper_bound = predictions_df[upper_quantile_col]\n",
- "\n",
- "# --- 3. Create the Plot ---\n",
- "plt.figure(figsize=(12, 6))\n",
- "\n",
- "# Plot actual values (if you have them)\n",
- "plt.plot(actual_values.index, actual_values, label='Actual Values', color='black', linestyle=':')\n",
- "\n",
- "# Plot the median forecast as a line\n",
- "plt.plot(median_forecast.index, median_forecast, label=f'Median Forecast ({median_quantile_col})', color='blue', linewidth=2)\n",
- "\n",
- "# Plot the prediction interval as a shaded range\n",
- "# The 'alpha' parameter controls the transparency of the fill\n",
- "fill_alpha = 0.3 # You can adjust this value (0.0 to 1.0)\n",
- "plt.fill_between(median_forecast.index, lower_bound, upper_bound,\n",
- " color='skyblue', alpha=fill_alpha,\n",
- " label=f'Prediction Interval ({lower_quantile_col}-{upper_quantile_col})')\n",
- "\n",
- "# --- 4. Customize and Show Plot ---\n",
- "plt.title('Time Series Forecast with Median and Prediction Interval')\n",
- "plt.xlabel('Time Steps')\n",
- "plt.ylabel('Value')\n",
- "plt.legend()\n",
- "plt.grid(True, linestyle='--', alpha=0.7)\n",
- "plt.tight_layout() # Adjusts plot to prevent labels from overlapping\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.plotly.v1+json": {
- "config": {
- "plotlyServerURL": "https://plot.ly"
- },
- "data": [
- {
- "line": {
- "color": "rgba(0,0,0,0.7)",
- "width": 2
- },
- "marker": {
- "size": 4
- },
- "mode": "lines+markers",
- "name": "Sample Sine Wave Data - Historical Data",
- "type": "scatter",
- "x": [
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 9,
- 10,
- 11,
- 12,
- 13,
- 14,
- 15,
- 16,
- 17,
- 18,
- 19,
- 20,
- 21,
- 22,
- 23,
- 24,
- 25,
- 26,
- 27,
- 28,
- 29,
- 30,
- 31,
- 32,
- 33,
- 34,
- 35,
- 36,
- 37,
- 38,
- 39,
- 40,
- 41,
- 42,
- 43,
- 44,
- 45,
- 46,
- 47,
- 48,
- 49,
- 50,
- 51,
- 52,
- 53,
- 54,
- 55,
- 56,
- 57,
- 58,
- 59,
- 60,
- 61,
- 62,
- 63,
- 64,
- 65,
- 66,
- 67,
- 68,
- 69,
- 70,
- 71,
- 72,
- 73,
- 74,
- 75,
- 76,
- 77,
- 78,
- 79,
- 80,
- 81,
- 82,
- 83,
- 84,
- 85,
- 86,
- 87,
- 88,
- 89,
- 90,
- 91,
- 92,
- 93,
- 94,
- 95,
- 96,
- 97,
- 98,
- 99
- ],
- "y": {
- "bdata": "XeR+np/X5z8HfDucXE/pPxxHFHRyqgdAMFTVMoD1FECwCYbu91cMQG+Z4eKuxRFAmV5TDs4HIECkyOSgkV8eQKOXXByd4BlAbH1c5FFLIUCYNWly2uAeQMRKlx1NbSBAcy8y/d1dI0C3EZ2QCRAbQLuDvAyIER1Azqb8ZlZDIkB0in1p9vMgQLvNnnCqxiRAViXxxLzAIEABP1l90GAdQCjjsJg4lSZASMCqWjyWIEAG2t79XF8gQClMSbCbRxVAHLfeM5LAF0CB475au5oYQIQWtqadbQtANrVqL3FZE0DLaL4vZZcDQCDOvnJ8R/8/6hjKu8dG4D9Ie7pCxY0JQFQ/OR3dU+O/CEFYd+tPCcBl3KZiPyX1vx5r6XA8WxXAQkqTSJhyEMAt2numyXkgwHIJpWDCOCDAAy6Mu1hUGsDIiGV1X9cZwL3Il5nvsx/AWyKGLEnHIcCWvnhpBDojwBdcLB+1dyfA5FfsZ8u1JcAmVJTwd0ElwEF/urm80yDArqN7xXbkIsBER1gWLPAowJ0/Z7nLNCLAbQ7RE+qrI8BlHIz3KbMjwFs6mULinh3A/KfiOn65GMAoP0NjSaIWwCqHb181SR7Ac0XEXPjhF8C63N+ntJgQwGKFRZUeNALAoF6k4XMaDMB/P4xPCM0AwL3ymP5U7APAKq94z8sE+r9QrXzNARMDQMKMr2sDvhBANEaF6yYPCEDG5cb3FjcWQAMaDpMx7xVAb+/9uVFEE0Bvwtd7pXIcQDrQ8ZeIMSNAB8wuUCGIH0AEQU2/4bMlQO3s6qjXOhRAME3o78c5JUASfpDSmZ4jQJJpXqHI3SJAHEbrogM/JEC/bJDkQAgcQCAr92POICNANvdMKRl4JECaGsklkD8nQC4vSZgWfSBAEsAcJD9VHUA9aqsoz+0cQFqX+1ckbyFACF09QcR9HECGHkoj1zcUQKD2txTVHhdAvl7dUzQREUD+imrrZ5MSQDrMtBso0PI/c4lMcf4Y6D97TiiIPsnVv2KDTEsDkwfAlvKy3Q/J9L91gRgispsCwFizE7bIQQ3AtuW/Tn61E8A=",
- "dtype": "f8"
- }
- },
- {
- "fill": "toself",
- "fillcolor": "rgba(0,100,200,0.3)",
- "hoverinfo": "skip",
- "line": {
- "color": "rgba(255,255,255,0)"
- },
- "name": "Sample Sine Wave Data - Prediction Interval (Q1-Q9)",
- "showlegend": true,
- "type": "scatter",
- "x": [
- 99,
- 100,
- 101,
- 102,
- 103,
- 104,
- 105,
- 106,
- 107,
- 108,
- 109,
- 110,
- 111,
- 112,
- 113,
- 114,
- 115,
- 116,
- 117,
- 118,
- 119,
- 120,
- 121,
- 122,
- 123,
- 124,
- 125,
- 126,
- 127,
- 128,
- 128,
- 127,
- 126,
- 125,
- 124,
- 123,
- 122,
- 121,
- 120,
- 119,
- 118,
- 117,
- 116,
- 115,
- 114,
- 113,
- 112,
- 111,
- 110,
- 109,
- 108,
- 107,
- 106,
- 105,
- 104,
- 103,
- 102,
- 101,
- 100,
- 99
- ],
- "y": [
- -2.634925008841142,
- -2.3479090086336987,
- -2.0377682438699054,
- -1.9884586163079452,
- -1.6636742371319753,
- -1.1134190209079584,
- 0.11081013201596601,
- 0.4049203264743535,
- 0.6619432679418251,
- 0.6732683657321221,
- -0.31521765002242574,
- -0.4300766337592181,
- -0.566027975325583,
- 0.445669463457687,
- 0.08846253773600754,
- -0.0485000752892617,
- -0.36484426311677876,
- -1.2435171991250469,
- -0.9460644744035775,
- -0.808772853355924,
- -0.6031460885648201,
- -1.1873863701735097,
- -0.546041817657315,
- -1.231145208541352,
- -0.8426638720459696,
- 0.4270446092044242,
- 0.18271568452504994,
- 0.220947156051996,
- 0.6537685379631482,
- 0.8353596278221778,
- -10.964640372177822,
- -10.946231462036852,
- -11.179052843948003,
- -11.01728431547495,
- -10.572955390795576,
- -11.64266387204597,
- -11.83114520854135,
- -10.946041817657315,
- -11.387386370173509,
- -10.60314608856482,
- -10.608772853355925,
- -10.546064474403579,
- -10.643517199125046,
- -9.564844263116779,
- -9.048500075289262,
- -8.711537462263994,
- -8.154330536542313,
- -8.96602797532558,
- -8.630076633759217,
- -8.315217650022426,
- -7.126731634267879,
- -6.9380567320581745,
- -6.995079673525646,
- -7.089189867984033,
- -8.113419020907958,
- -8.463674237131976,
- -8.588458616307946,
- -8.437768243869906,
- -8.547909008633699,
- -8.634925008841142
- ]
- },
- {
- "line": {
- "color": "rgba(255,0,0,0.8)",
- "width": 2.5
- },
- "mode": "lines",
- "name": "Sample Sine Wave Data - Median Forecast (Q5)",
- "type": "scatter",
- "x": [
- 99,
- 100,
- 101,
- 102,
- 103,
- 104,
- 105,
- 106,
- 107,
- 108,
- 109,
- 110,
- 111,
- 112,
- 113,
- 114,
- 115,
- 116,
- 117,
- 118,
- 119,
- 120,
- 121,
- 122,
- 123,
- 124,
- 125,
- 126,
- 127,
- 128
- ],
- "y": {
- "bdata": "dooRyCmKFsB+qb6oqMoVwF3LvYR58xTADCsNsmEnFcB+UbjRM0EUwBQtph0kdBLANjWkYNzpC8BbDly7UlwKwMB16Xy9GgnAgDHRrFjQCcCI32dqyEIRwHt6uWjMHhLAvWA3o2kQE8AOY5M/q9UOwFmcL60DPxHAOOL0AKoxEsB1R28iANwTwIjSZV8pxhfATBVZU/j7FsBA0wWNyNUWwIhi1CCfaRbActjUnEgmGcBxJeFi8vsWwOZykIfkHxrAxG7J4Hz4GMC2ImbRtEoUwAZlYJRMqxXA9z8n1IzqFcDQYEyzvZUUwCMF8hUxQhTA",
- "dtype": "f8"
- }
- }
- ],
- "layout": {
- "hovermode": "x unified",
- "legend": {
- "orientation": "h",
- "x": 1,
- "xanchor": "right",
- "y": 1.02,
- "yanchor": "bottom"
- },
- "margin": {
- "b": 50,
- "l": 50,
- "r": 50,
- "t": 80
- },
- "template": {
- "data": {
- "bar": [
- {
- "error_x": {
- "color": "#2a3f5f"
- },
- "error_y": {
- "color": "#2a3f5f"
- },
- "marker": {
- "line": {
- "color": "#E5ECF6",
- "width": 0.5
- },
- "pattern": {
- "fillmode": "overlay",
- "size": 10,
- "solidity": 0.2
- }
- },
- "type": "bar"
- }
- ],
- "barpolar": [
- {
- "marker": {
- "line": {
- "color": "#E5ECF6",
- "width": 0.5
- },
- "pattern": {
- "fillmode": "overlay",
- "size": 10,
- "solidity": 0.2
- }
- },
- "type": "barpolar"
- }
- ],
- "carpet": [
- {
- "aaxis": {
- "endlinecolor": "#2a3f5f",
- "gridcolor": "white",
- "linecolor": "white",
- "minorgridcolor": "white",
- "startlinecolor": "#2a3f5f"
- },
- "baxis": {
- "endlinecolor": "#2a3f5f",
- "gridcolor": "white",
- "linecolor": "white",
- "minorgridcolor": "white",
- "startlinecolor": "#2a3f5f"
- },
- "type": "carpet"
- }
- ],
- "choropleth": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "type": "choropleth"
- }
- ],
- "contour": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "colorscale": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ],
- "type": "contour"
- }
- ],
- "contourcarpet": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "type": "contourcarpet"
- }
- ],
- "heatmap": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "colorscale": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ],
- "type": "heatmap"
- }
- ],
- "histogram": [
- {
- "marker": {
- "pattern": {
- "fillmode": "overlay",
- "size": 10,
- "solidity": 0.2
- }
- },
- "type": "histogram"
- }
- ],
- "histogram2d": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "colorscale": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ],
- "type": "histogram2d"
- }
- ],
- "histogram2dcontour": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "colorscale": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ],
- "type": "histogram2dcontour"
- }
- ],
- "mesh3d": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "type": "mesh3d"
- }
- ],
- "parcoords": [
- {
- "line": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "parcoords"
- }
- ],
- "pie": [
- {
- "automargin": true,
- "type": "pie"
- }
- ],
- "scatter": [
- {
- "fillpattern": {
- "fillmode": "overlay",
- "size": 10,
- "solidity": 0.2
- },
- "type": "scatter"
- }
- ],
- "scatter3d": [
- {
- "line": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scatter3d"
- }
- ],
- "scattercarpet": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scattercarpet"
- }
- ],
- "scattergeo": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scattergeo"
- }
- ],
- "scattergl": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scattergl"
- }
- ],
- "scattermap": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scattermap"
- }
- ],
- "scattermapbox": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scattermapbox"
- }
- ],
- "scatterpolar": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scatterpolar"
- }
- ],
- "scatterpolargl": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scatterpolargl"
- }
- ],
- "scatterternary": [
- {
- "marker": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "type": "scatterternary"
- }
- ],
- "surface": [
- {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- },
- "colorscale": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ],
- "type": "surface"
- }
- ],
- "table": [
- {
- "cells": {
- "fill": {
- "color": "#EBF0F8"
- },
- "line": {
- "color": "white"
- }
- },
- "header": {
- "fill": {
- "color": "#C8D4E3"
- },
- "line": {
- "color": "white"
- }
- },
- "type": "table"
- }
- ]
- },
- "layout": {
- "annotationdefaults": {
- "arrowcolor": "#2a3f5f",
- "arrowhead": 0,
- "arrowwidth": 1
- },
- "autotypenumbers": "strict",
- "coloraxis": {
- "colorbar": {
- "outlinewidth": 0,
- "ticks": ""
- }
- },
- "colorscale": {
- "diverging": [
- [
- 0,
- "#8e0152"
- ],
- [
- 0.1,
- "#c51b7d"
- ],
- [
- 0.2,
- "#de77ae"
- ],
- [
- 0.3,
- "#f1b6da"
- ],
- [
- 0.4,
- "#fde0ef"
- ],
- [
- 0.5,
- "#f7f7f7"
- ],
- [
- 0.6,
- "#e6f5d0"
- ],
- [
- 0.7,
- "#b8e186"
- ],
- [
- 0.8,
- "#7fbc41"
- ],
- [
- 0.9,
- "#4d9221"
- ],
- [
- 1,
- "#276419"
- ]
- ],
- "sequential": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ],
- "sequentialminus": [
- [
- 0,
- "#0d0887"
- ],
- [
- 0.1111111111111111,
- "#46039f"
- ],
- [
- 0.2222222222222222,
- "#7201a8"
- ],
- [
- 0.3333333333333333,
- "#9c179e"
- ],
- [
- 0.4444444444444444,
- "#bd3786"
- ],
- [
- 0.5555555555555556,
- "#d8576b"
- ],
- [
- 0.6666666666666666,
- "#ed7953"
- ],
- [
- 0.7777777777777778,
- "#fb9f3a"
- ],
- [
- 0.8888888888888888,
- "#fdca26"
- ],
- [
- 1,
- "#f0f921"
- ]
- ]
- },
- "colorway": [
- "#636efa",
- "#EF553B",
- "#00cc96",
- "#ab63fa",
- "#FFA15A",
- "#19d3f3",
- "#FF6692",
- "#B6E880",
- "#FF97FF",
- "#FECB52"
- ],
- "font": {
- "color": "#2a3f5f"
- },
- "geo": {
- "bgcolor": "white",
- "lakecolor": "white",
- "landcolor": "#E5ECF6",
- "showlakes": true,
- "showland": true,
- "subunitcolor": "white"
- },
- "hoverlabel": {
- "align": "left"
- },
- "hovermode": "closest",
- "mapbox": {
- "style": "light"
- },
- "paper_bgcolor": "white",
- "plot_bgcolor": "#E5ECF6",
- "polar": {
- "angularaxis": {
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": ""
- },
- "bgcolor": "#E5ECF6",
- "radialaxis": {
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": ""
- }
- },
- "scene": {
- "xaxis": {
- "backgroundcolor": "#E5ECF6",
- "gridcolor": "white",
- "gridwidth": 2,
- "linecolor": "white",
- "showbackground": true,
- "ticks": "",
- "zerolinecolor": "white"
- },
- "yaxis": {
- "backgroundcolor": "#E5ECF6",
- "gridcolor": "white",
- "gridwidth": 2,
- "linecolor": "white",
- "showbackground": true,
- "ticks": "",
- "zerolinecolor": "white"
- },
- "zaxis": {
- "backgroundcolor": "#E5ECF6",
- "gridcolor": "white",
- "gridwidth": 2,
- "linecolor": "white",
- "showbackground": true,
- "ticks": "",
- "zerolinecolor": "white"
- }
- },
- "shapedefaults": {
- "line": {
- "color": "#2a3f5f"
- }
- },
- "ternary": {
- "aaxis": {
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": ""
- },
- "baxis": {
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": ""
- },
- "bgcolor": "#E5ECF6",
- "caxis": {
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": ""
- }
- },
- "title": {
- "x": 0.05
- },
- "xaxis": {
- "automargin": true,
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": "",
- "title": {
- "standoff": 15
- },
- "zerolinecolor": "white",
- "zerolinewidth": 2
- },
- "yaxis": {
- "automargin": true,
- "gridcolor": "white",
- "linecolor": "white",
- "ticks": "",
- "title": {
- "standoff": 15
- },
- "zerolinecolor": "white",
- "zerolinewidth": 2
- }
- }
- },
- "title": {
- "font": {
- "color": "#333",
- "family": "Arial",
- "size": 18
- },
- "text": "Timeseries Forecast: Sample Sine Wave Data",
- "x": 0.5
- },
- "xaxis": {
- "title": {
- "text": "Time Step"
- }
- },
- "yaxis": {
- "title": {
- "text": "Value"
- }
- }
- }
- }
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "import plotly.graph_objects as go\n",
- "import numpy as np\n",
- "import pandas as pd # Included for the sample data generation\n",
- "\n",
- "def plot_forecast_plotly_with_interval(timeseries, quantile_predictions, timeseries_name,\n",
- " idx_lower_quantile=0,\n",
- " idx_median_quantile=4,\n",
- " idx_upper_quantile=8,\n",
- " interval_opacity=0.3):\n",
- " \"\"\"\n",
- " Creates an interactive Plotly figure to visualize time series forecasts\n",
- " with a median line and a shaded prediction interval.\n",
- "\n",
- " Args:\n",
- " timeseries (array-like): The historical time series data.\n",
- " quantile_predictions (np.ndarray): A 2D NumPy array of quantile forecasts.\n",
- " Shape: (num_forecast_steps, num_quantiles).\n",
- " Assumed to have 9 quantiles unless indices are changed.\n",
- " timeseries_name (str): Name of the time series for titles and legend.\n",
- " idx_lower_quantile (int): Column index in quantile_predictions for the lower bound of the interval.\n",
- " Defaults to 0 (e.g., 0.05 quantile for 9 quantiles).\n",
- " idx_median_quantile (int): Column index in quantile_predictions for the median forecast.\n",
- " Defaults to 4 (e.g., 0.5 quantile for 9 quantiles).\n",
- " idx_upper_quantile (int): Column index in quantile_predictions for the upper bound of the interval.\n",
- " Defaults to 8 (e.g., 0.95 quantile for 9 quantiles).\n",
- " interval_opacity (float): Opacity for the shaded prediction interval (0.0 to 1.0).\n",
- " Defaults to 0.3.\n",
- " Returns:\n",
- " plotly.graph_objects.Figure: The Plotly figure object.\n",
- " \"\"\"\n",
- " if not isinstance(quantile_predictions, np.ndarray):\n",
- " quantile_predictions = np.array(quantile_predictions)\n",
- "\n",
- " if quantile_predictions.ndim != 2:\n",
- " raise ValueError(\"quantile_predictions must be a 2D array.\")\n",
- " \n",
- " num_quantiles = quantile_predictions.shape[1]\n",
- " if not (0 <= idx_lower_quantile < num_quantiles and \\\n",
- " 0 <= idx_median_quantile < num_quantiles and \\\n",
- " 0 <= idx_upper_quantile < num_quantiles):\n",
- " raise ValueError(f\"Quantile indices are out of bounds for {num_quantiles} available quantiles.\")\n",
- " if not idx_lower_quantile < idx_median_quantile < idx_upper_quantile:\n",
- " print(\"Warning: Quantile indices are not ordered as lower < median < upper. \"\n",
- " \"The plot might look unusual.\")\n",
- "\n",
- "\n",
- " fig = go.Figure()\n",
- " x_hist = list(range(len(timeseries)))\n",
- " num_forecast_steps = quantile_predictions.shape[0]\n",
- "\n",
- " # Historical data trace\n",
- " fig.add_trace(go.Scatter(\n",
- " x=x_hist,\n",
- " y=timeseries,\n",
- " mode='lines+markers',\n",
- " name=f\"{timeseries_name} - Historical Data\",\n",
- " line=dict(color='rgba(0,0,0,0.7)', width=2), # Dark gray for historical\n",
- " marker=dict(size=4)\n",
- " ))\n",
- "\n",
- " # Define x-axis for predictions\n",
- " # Predictions typically start at the last point of historical data or one step after.\n",
- " # This matches the original logic: connecting to the last historical point.\n",
- " start_x_pred = len(timeseries) -1\n",
- " if start_x_pred < 0: # Handle case where timeseries might be empty or very short\n",
- " start_x_pred = 0\n",
- " \n",
- " x_pred = list(range(start_x_pred, start_x_pred + num_forecast_steps))\n",
- " \n",
- " # Ensure x_pred aligns with quantile_predictions length\n",
- " if len(x_pred) != num_forecast_steps:\n",
- " # If historical data is shorter than one step, predictions start from 0\n",
- " if len(timeseries) == 0:\n",
- " x_pred = list(range(num_forecast_steps))\n",
- " else: # Fallback if lengths don't match for other reasons, adjust x_pred\n",
- " x_pred = list(range(x_hist[-1] if x_hist else 0, (x_hist[-1] if x_hist else 0) + num_forecast_steps))\n",
- "\n",
- "\n",
- " # Extract specific quantile series\n",
- " lower_bound_series = quantile_predictions[:, idx_lower_quantile]\n",
- " median_forecast_series = quantile_predictions[:, idx_median_quantile]\n",
- " upper_bound_series = quantile_predictions[:, idx_upper_quantile]\n",
- "\n",
- " # --- Prediction Interval (Shaded Area) ---\n",
- " # Plot the upper bound, then the lower bound in reverse, then fill to self\n",
- " # This creates the shaded region.\n",
- " # Ensure x_pred, upper_bound_series, and lower_bound_series are compatible for concatenation\n",
- " # Convert to list for concatenation if they are numpy arrays\n",
- " x_pred_list = list(x_pred)\n",
- " \n",
- " fig.add_trace(go.Scatter(\n",
- " x=x_pred_list + x_pred_list[::-1], # x, then x reversed\n",
- " y=list(upper_bound_series) + list(lower_bound_series[::-1]), # upper, then lower reversed\n",
- " fill='toself',\n",
- " fillcolor=f'rgba(0,100,200,{interval_opacity})', # Sky blue with specified opacity\n",
- " line=dict(color='rgba(255,255,255,0)'), # No border line for the fill area\n",
- " hoverinfo=\"skip\", # Optional: skip hover labels for the fill shape itself\n",
- " showlegend=True,\n",
- " name=f\"{timeseries_name} - Prediction Interval (Q{idx_lower_quantile+1}-Q{idx_upper_quantile+1})\"\n",
- " ))\n",
- "\n",
- " # --- Median Forecast Line ---\n",
- " fig.add_trace(go.Scatter(\n",
- " x=x_pred,\n",
- " y=median_forecast_series,\n",
- " mode='lines',\n",
- " name=f\"{timeseries_name} - Median Forecast (Q{idx_median_quantile+1})\",\n",
- " line=dict(color='rgba(255,0,0,0.8)', width=2.5), # Red, slightly thicker for median\n",
- " ))\n",
- "\n",
- " fig.update_layout(\n",
- " title=dict(text=f\"Timeseries Forecast: {timeseries_name}\", x=0.5, font=dict(size=18, family=\"Arial\", color=\"#333\")),\n",
- " xaxis_title=\"Time Step\",\n",
- " yaxis_title=\"Value\",\n",
- " hovermode='x unified',\n",
- " legend=dict(\n",
- " orientation=\"h\",\n",
- " yanchor=\"bottom\",\n",
- " y=1.02,\n",
- " xanchor=\"right\",\n",
- " x=1\n",
- " ),\n",
- " margin=dict(l=50, r=50, t=80, b=50) # Adjust margins\n",
- " )\n",
- " return fig\n",
- "\n",
- "if __name__ == '__main__':\n",
- " # --- Generate Sample Data (Replace with your actual data) ---\n",
- " np.random.seed(42)\n",
- " series_length = 100\n",
- " forecast_horizon = 30\n",
- "\n",
- " # Historical time series\n",
- " time_hist = np.arange(series_length)\n",
- " historical_data = pd.Series(np.sin(time_hist / 10) * 10 + np.random.normal(0, 1.5, series_length))\n",
- "\n",
- " # Quantile predictions (9 quantiles for the forecast horizon)\n",
- " # For demonstration, create plausible quantile forecasts\n",
- " # These would come from your LSTLM model\n",
- " num_quantiles = 9\n",
- " predictions_array = np.zeros((forecast_horizon, num_quantiles))\n",
- " \n",
- " # Simulate a base forecast trend\n",
- " last_hist_val = historical_data.iloc[-1]\n",
- " base_forecast = last_hist_val + np.cumsum(np.random.normal(0, 0.5, forecast_horizon)) \\\n",
- " + np.sin(np.arange(forecast_horizon)/5) * 2\n",
- "\n",
- "\n",
- " # Generate quantiles around the base forecast\n",
- " # q_levels = [0.05, 0.1, 0.2, 0.25, 0.5, 0.75, 0.8, 0.9, 0.95] # Example quantile levels\n",
- " # For simplicity, let's assume indices 0, 4, 8 are 0.05, 0.5, 0.95\n",
- " \n",
- " predictions_array[:, 4] = base_forecast # Median (index 4)\n",
- "\n",
- " # Spread for other quantiles, increasing with distance from median and over time\n",
- " for i in range(forecast_horizon):\n",
- " spread_factor = 1.0 + (i / forecast_horizon) # Increasing uncertainty over time\n",
- " predictions_array[i, 0] = base_forecast[i] - 3.0 * spread_factor # 0.05 quantile (index 0)\n",
- " predictions_array[i, 1] = base_forecast[i] - 2.0 * spread_factor\n",
- " predictions_array[i, 2] = base_forecast[i] - 1.0 * spread_factor\n",
- " predictions_array[i, 3] = base_forecast[i] - 0.5 * spread_factor\n",
- " # predictions_array[i, 4] is median\n",
- " predictions_array[i, 5] = base_forecast[i] + 0.5 * spread_factor\n",
- " predictions_array[i, 6] = base_forecast[i] + 1.0 * spread_factor\n",
- " predictions_array[i, 7] = base_forecast[i] + 2.0 * spread_factor\n",
- " predictions_array[i, 8] = base_forecast[i] + 3.0 * spread_factor # 0.95 quantile (index 8)\n",
- " \n",
- " # Ensure quantiles are sorted within each time step (monotonicity)\n",
- " for q_idx in range(num_quantiles -1):\n",
- " if predictions_array[i, q_idx] > predictions_array[i, q_idx+1]:\n",
- " predictions_array[i, q_idx+1] = predictions_array[i, q_idx] + np.random.uniform(0.01, 0.1) # Ensure increasing\n",
- "\n",
- " # --- Use the function ---\n",
- " fig = plot_forecast_plotly_with_interval(\n",
- " timeseries=historical_data,\n",
- " quantile_predictions=predictions_array,\n",
- " timeseries_name=\"Sample Sine Wave Data\"\n",
- " )\n",
- " # To display in a script/notebook, you might need:\n",
- " # fig.show()\n",
- "\n",
- " # If you're in an environment that doesn't automatically render Plotly,\n",
- " # you might need to install `kaleido` to save as an image or use `fig.to_html()`\n",
- " try:\n",
- " fig.show() # This usually works in notebooks or IDEs with Plotly support\n",
- " except Exception as e:\n",
- " print(f\"Could not show figure directly: {e}\")\n",
- " print(\"Try saving to HTML: fig.to_html('forecast_plot.html')\")\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Collecting nbformat\n",
- " Downloading nbformat-5.10.4-py3-none-any.whl.metadata (3.6 kB)\n",
- "Collecting fastjsonschema>=2.15 (from nbformat)\n",
- " Downloading fastjsonschema-2.21.1-py3-none-any.whl.metadata (2.2 kB)\n",
- "Collecting jsonschema>=2.6 (from nbformat)\n",
- " Downloading jsonschema-4.24.0-py3-none-any.whl.metadata (7.8 kB)\n",
- "Requirement already satisfied: jupyter-core!=5.0.*,>=4.12 in ./.conda/lib/python3.11/site-packages (from nbformat) (5.8.1)\n",
- "Requirement already satisfied: traitlets>=5.1 in ./.conda/lib/python3.11/site-packages (from nbformat) (5.14.3)\n",
- "Collecting attrs>=22.2.0 (from jsonschema>=2.6->nbformat)\n",
- " Using cached attrs-25.3.0-py3-none-any.whl.metadata (10 kB)\n",
- "Collecting jsonschema-specifications>=2023.03.6 (from jsonschema>=2.6->nbformat)\n",
- " Downloading jsonschema_specifications-2025.4.1-py3-none-any.whl.metadata (2.9 kB)\n",
- "Collecting referencing>=0.28.4 (from jsonschema>=2.6->nbformat)\n",
- " Downloading referencing-0.36.2-py3-none-any.whl.metadata (2.8 kB)\n",
- "Collecting rpds-py>=0.7.1 (from jsonschema>=2.6->nbformat)\n",
- " Downloading rpds_py-0.25.1-cp311-cp311-macosx_11_0_arm64.whl.metadata (4.1 kB)\n",
- "Requirement already satisfied: platformdirs>=2.5 in ./.conda/lib/python3.11/site-packages (from jupyter-core!=5.0.*,>=4.12->nbformat) (4.3.8)\n",
- "Requirement already satisfied: typing-extensions>=4.4.0 in ./.conda/lib/python3.11/site-packages (from referencing>=0.28.4->jsonschema>=2.6->nbformat) (4.14.0)\n",
- "Downloading nbformat-5.10.4-py3-none-any.whl (78 kB)\n",
- "Downloading fastjsonschema-2.21.1-py3-none-any.whl (23 kB)\n",
- "Downloading jsonschema-4.24.0-py3-none-any.whl (88 kB)\n",
- "Using cached attrs-25.3.0-py3-none-any.whl (63 kB)\n",
- "Downloading jsonschema_specifications-2025.4.1-py3-none-any.whl (18 kB)\n",
- "Downloading referencing-0.36.2-py3-none-any.whl (26 kB)\n",
- "Downloading rpds_py-0.25.1-cp311-cp311-macosx_11_0_arm64.whl (359 kB)\n",
- "Installing collected packages: fastjsonschema, rpds-py, attrs, referencing, jsonschema-specifications, jsonschema, nbformat\n",
- "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7/7\u001b[0m [nbformat]\n",
- "\u001b[1A\u001b[2KSuccessfully installed attrs-25.3.0 fastjsonschema-2.21.1 jsonschema-4.24.0 jsonschema-specifications-2025.4.1 nbformat-5.10.4 referencing-0.36.2 rpds-py-0.25.1\n"
- ]
- }
- ],
- "source": [
- "!pip install nbformat"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "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.11.11"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}