leuschnm commited on
Commit
3dc21d7
·
1 Parent(s): 552e2fb
Files changed (1) hide show
  1. Untitled.ipynb +892 -32
Untitled.ipynb CHANGED
@@ -2,20 +2,20 @@
2
  "cells": [
3
  {
4
  "cell_type": "code",
5
- "execution_count": 18,
6
- "id": "40d0c64c-1de1-47ed-aa66-7b28d9e8fd1f",
7
  "metadata": {},
8
  "outputs": [],
9
  "source": [
10
- "import pickle \n",
11
- "import pandas as pd \n",
12
- "import datetime"
13
  ]
14
  },
15
  {
16
  "cell_type": "code",
17
- "execution_count": 13,
18
- "id": "5043d237-0287-4705-bfd5-73b880b36def",
19
  "metadata": {},
20
  "outputs": [],
21
  "source": [
@@ -25,8 +25,8 @@
25
  },
26
  {
27
  "cell_type": "code",
28
- "execution_count": 14,
29
- "id": "dce8096f-23d4-4075-8654-6693632c45bc",
30
  "metadata": {},
31
  "outputs": [
32
  {
@@ -399,7 +399,7 @@
399
  "[1464 rows x 22 columns]"
400
  ]
401
  },
402
- "execution_count": 14,
403
  "metadata": {},
404
  "output_type": "execute_result"
405
  }
@@ -410,35 +410,89 @@
410
  },
411
  {
412
  "cell_type": "code",
413
- "execution_count": 17,
414
- "id": "5ea34c2b-fc24-4cfa-ad46-f369bea42364",
415
  "metadata": {},
416
  "outputs": [
417
  {
418
  "data": {
419
  "text/plain": [
420
- "Timestamp('2023-06-26 00:00:00')"
 
 
 
 
 
 
 
 
 
 
 
421
  ]
422
  },
423
- "execution_count": 17,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
424
  "metadata": {},
425
  "output_type": "execute_result"
426
  }
427
  ],
428
  "source": [
429
- "max(df[\"Date\"])"
430
  ]
431
  },
432
  {
433
  "cell_type": "code",
434
  "execution_count": 20,
435
- "id": "a024d9e3-e018-43fe-9bb0-20b9d9e91b53",
436
  "metadata": {},
437
  "outputs": [
438
  {
439
  "data": {
440
  "text/plain": [
441
- "datetime.date(2023, 5, 27)"
 
 
 
 
 
 
 
 
 
 
 
442
  ]
443
  },
444
  "execution_count": 20,
@@ -447,39 +501,845 @@
447
  }
448
  ],
449
  "source": [
450
- "datetime.date(2023, 6, 26) - datetime.timedelta(days = 30)"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
451
  ]
452
  },
453
  {
454
  "cell_type": "code",
455
- "execution_count": 21,
456
- "id": "52e0a2c8-5b53-42f4-91c9-3ca7d6a8d356",
457
  "metadata": {},
458
  "outputs": [
459
  {
460
  "data": {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
461
  "text/plain": [
462
- "Index(['sales', 'DayInYear', 'time_idx', 'Wahl', 'Baustelle', 'MontagLangesWE',\n",
463
- " 'FreitagLangesWE', 'nosale', 'holiday', 'AufSommerzeit',\n",
464
- " 'AufWinterzeit', 'Group', 'Branch', 'Weekday', 'Date',\n",
465
- " 'MTXWTH_Day_precip', 'MTXWTH_Temp_max', 'MTXWTH_Temp_min', 'Start',\n",
466
- " 'End', 'ShiftLength', 'weight'],\n",
467
- " dtype='object')"
 
 
 
 
 
 
 
 
468
  ]
469
  },
470
- "execution_count": 21,
471
  "metadata": {},
472
  "output_type": "execute_result"
473
  }
474
  ],
475
  "source": [
476
- "df.columns"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
477
  ]
478
  },
479
  {
480
  "cell_type": "code",
481
  "execution_count": null,
482
- "id": "75415b44-41ec-4893-8452-939766ebaabc",
483
  "metadata": {},
484
  "outputs": [],
485
  "source": []
@@ -487,9 +1347,9 @@
487
  ],
488
  "metadata": {
489
  "kernelspec": {
490
- "display_name": "Python 3 (ipykernel)",
491
  "language": "python",
492
- "name": "python3"
493
  },
494
  "language_info": {
495
  "codemirror_mode": {
@@ -501,7 +1361,7 @@
501
  "name": "python",
502
  "nbconvert_exporter": "python",
503
  "pygments_lexer": "ipython3",
504
- "version": "3.10.11"
505
  }
506
  },
507
  "nbformat": 4,
 
2
  "cells": [
3
  {
4
  "cell_type": "code",
5
+ "execution_count": 26,
6
+ "id": "702c8313-4ccd-4478-a648-1087978f8af5",
7
  "metadata": {},
8
  "outputs": [],
9
  "source": [
10
+ "import pickle\n",
11
+ "import pandas as pd\n",
12
+ "import matplotlib.pyplot as plt"
13
  ]
14
  },
15
  {
16
  "cell_type": "code",
17
+ "execution_count": 16,
18
+ "id": "06393522-6a98-46d1-98ec-adc8a889be25",
19
  "metadata": {},
20
  "outputs": [],
21
  "source": [
 
25
  },
26
  {
27
  "cell_type": "code",
28
+ "execution_count": 17,
29
+ "id": "c67e2a79-d310-4832-a8e5-f16fecb6b9be",
30
  "metadata": {},
31
  "outputs": [
32
  {
 
399
  "[1464 rows x 22 columns]"
400
  ]
401
  },
402
+ "execution_count": 17,
403
  "metadata": {},
404
  "output_type": "execute_result"
405
  }
 
410
  },
411
  {
412
  "cell_type": "code",
413
+ "execution_count": 18,
414
+ "id": "20cb91bd-f9e7-4a96-9da0-58ccd678c2ca",
415
  "metadata": {},
416
  "outputs": [
417
  {
418
  "data": {
419
  "text/plain": [
420
+ "270300 1600.9030\n",
421
+ "270301 1811.1958\n",
422
+ "270302 1784.2916\n",
423
+ "270303 1757.3488\n",
424
+ "270304 1741.0982\n",
425
+ " ... \n",
426
+ "270661 1885.6552\n",
427
+ "270662 1974.7440\n",
428
+ "270663 1738.3962\n",
429
+ "270664 1741.8702\n",
430
+ "270665 1973.2386\n",
431
+ "Name: sales, Length: 366, dtype: float64"
432
  ]
433
  },
434
+ "execution_count": 18,
435
+ "metadata": {},
436
+ "output_type": "execute_result"
437
+ }
438
+ ],
439
+ "source": [
440
+ "df.loc[df['Group'] == '1', \"sales\"]"
441
+ ]
442
+ },
443
+ {
444
+ "cell_type": "code",
445
+ "execution_count": 19,
446
+ "id": "8923a52d-c601-45a5-af1f-ef245d0ed7be",
447
+ "metadata": {},
448
+ "outputs": [
449
+ {
450
+ "data": {
451
+ "text/plain": [
452
+ "278502 1585.0384\n",
453
+ "278503 0.0000\n",
454
+ "278504 0.0000\n",
455
+ "278505 1582.0276\n",
456
+ "278506 1521.5414\n",
457
+ " ... \n",
458
+ "278863 1672.7762\n",
459
+ "278864 1598.2010\n",
460
+ "278865 1683.6228\n",
461
+ "278866 1660.6944\n",
462
+ "278867 0.0000\n",
463
+ "Name: sales, Length: 366, dtype: float64"
464
+ ]
465
+ },
466
+ "execution_count": 19,
467
  "metadata": {},
468
  "output_type": "execute_result"
469
  }
470
  ],
471
  "source": [
472
+ "df.loc[df['Group'] == '4', \"sales\"]"
473
  ]
474
  },
475
  {
476
  "cell_type": "code",
477
  "execution_count": 20,
478
+ "id": "41cf50d2-7144-49de-9e6e-f155b0b74a1f",
479
  "metadata": {},
480
  "outputs": [
481
  {
482
  "data": {
483
  "text/plain": [
484
+ "283970 1580.6766\n",
485
+ "283971 2168.6318\n",
486
+ "283972 2034.7284\n",
487
+ "283973 2147.1702\n",
488
+ "283974 2364.6812\n",
489
+ " ... \n",
490
+ "284331 2212.5200\n",
491
+ "284332 2160.4100\n",
492
+ "284333 2113.0478\n",
493
+ "284334 2016.5864\n",
494
+ "284335 2106.6402\n",
495
+ "Name: sales, Length: 366, dtype: float64"
496
  ]
497
  },
498
  "execution_count": 20,
 
501
  }
502
  ],
503
  "source": [
504
+ "df.loc[df['Group'] == '6', \"sales\"]"
505
+ ]
506
+ },
507
+ {
508
+ "cell_type": "code",
509
+ "execution_count": 22,
510
+ "id": "6e4ed391-9044-41c8-8334-28d59b104c74",
511
+ "metadata": {},
512
+ "outputs": [
513
+ {
514
+ "data": {
515
+ "text/plain": [
516
+ "Timestamp('2022-06-26 00:00:00')"
517
+ ]
518
+ },
519
+ "execution_count": 22,
520
+ "metadata": {},
521
+ "output_type": "execute_result"
522
+ }
523
+ ],
524
+ "source": [
525
+ "df['Date'].min()"
526
+ ]
527
+ },
528
+ {
529
+ "cell_type": "code",
530
+ "execution_count": 23,
531
+ "id": "37af6fed-9b27-4d7e-a7e6-1f787ebecd5c",
532
+ "metadata": {},
533
+ "outputs": [
534
+ {
535
+ "data": {
536
+ "text/plain": [
537
+ "0.0"
538
+ ]
539
+ },
540
+ "execution_count": 23,
541
+ "metadata": {},
542
+ "output_type": "execute_result"
543
+ }
544
+ ],
545
+ "source": [
546
+ "df['sales'].min()"
547
+ ]
548
+ },
549
+ {
550
+ "cell_type": "code",
551
+ "execution_count": 24,
552
+ "id": "4081b0fd-db08-492c-bf31-a9727b3cbcc2",
553
+ "metadata": {},
554
+ "outputs": [
555
+ {
556
+ "data": {
557
+ "text/plain": [
558
+ "2498.546"
559
+ ]
560
+ },
561
+ "execution_count": 24,
562
+ "metadata": {},
563
+ "output_type": "execute_result"
564
+ }
565
+ ],
566
+ "source": [
567
+ "df['sales'].max()"
568
+ ]
569
+ },
570
+ {
571
+ "cell_type": "code",
572
+ "execution_count": 27,
573
+ "id": "2971c877-6a2f-4410-9070-9de7b04c8026",
574
+ "metadata": {},
575
+ "outputs": [
576
+ {
577
+ "data": {
578
+ "image/png": "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3oPD4cCBAwdqbfeyyy7D0KFD8e233yItLQ3vvfceiouLMXfuXJ9p+uKLL5wZyrFjx3D69Gm88MILAIBbbrkFt9xyi89tEBEBzB8iKX/45ptvMGjQIKSkpOC2226rNQ9Ep06d3Do2U4gK1nBFFLnuvvtu0aBBA3H69GnVdYYMGSLq168vjh8/7hwebvr06YrrLl++XLRr107Uq1fPbag4z+HhhJCGZZs+fbpo06aNiImJEQ6HQ9xxxx1i8+bNznU8h4cTQojy8nIxYcIEcemll4qYmBjRpEkT0alTJzFjxgxx/vx5Tce9bNkyceeddwqHwyHq1asnkpKSxM033yymT58uSkpK3NYFIIYPH664ne+//150795dxMfHi4YNG4ouXbqIjRs31lpv8+bNokOHDiImJkY0b95cvPrqq6rDw/Xs2VOsWrVKXHnllSI2Nla0adNGLF68WNNxyUPRKS2TJ0/WtA0iIiGYP0RS/iBvT21RGtaVQo9NCI3PpYgoLGVnZ+Pyyy/HihUrgp0UIiIKIcwfiH0EiIiIiIgsiIEAEREREZEFMRAgIiIiIrIg9hEgIiIiIrIgPhEgIiIiIrIgBgJERERERBYUsROKVVdX48iRI0hISNA1DTkRUTgQQqC8vBwZGRmIimKdjh7MH4go0mnNIyI2EDhy5AiysrKCnQwiooA6ePAgMjMzg52MsML8gYiswlceEbGBQEJCAgDpBNjt9iCnhojIXGVlZcjKynLe60g75g9EFOm05hERGwjIj3vtdjtv9EQUsdi0RT/mD0RkFb7yCDYsJSIiIiKyIAYCREREREQWxECAiIiIiMiCGAgQEREREVkQAwEiIiIiIgtiIEBEREREZEEMBIiIiIiILIiBABERERGRBTEQICIiIiKyIAYCREREREQWxECAiIiIiMiCGAgQEREREVkQAwEiIiIiIgtiIEBEREREZEEMBIiIiIiILIiBABERERGRBTEQICIiIiKyIAYCREREREQWxECAiIiIiMiCGAgQEREREVkQAwEiIiIiIgtiIEBEREREZEEMBIiIiIiILIiBABERERGRBTEQICIiIiKyIAYCREREREQWxECAiIiIiMiCGAgQEREREVkQAwEiIiIiIgtiIEBEREREZEEMBIiIiIiILIiBABERERGRBTEQICIiIiKyIAYCREREREQWxECAiIiIiMiC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ICIiIiKyIAYCREREREQWxECAiIiIiMiCGAgQEREREVkQAwEiIiIiIgtiIEBEREREZEEMBIiIiIiILIiBABERERGRBTEQICIiIiKyIAYCREREREQWxECAiIiIiMiCGAgQEREREVkQAwEiIiIiIgtiIEBEREREZEEMBIiIiIiILIiBABERERGRBTEQICIiIiKyIAYCREREREQWxECAiIiIiMiCGAgQEREREVkQAwEiIiIiIgtiIEBEREREZEEMBIiIiIiILIiBABERERGRBTEQICIiIiKyIAYCREREREQWxECAiIiIiMiCGAgQEREREVkQAwEiIiIiIgtiIEBEREREZEEMBIiIiIiILIiBABERERGRBTEQICIiIiKyIAYCREREREQWxECAiIiIiMiCdAcCX3zxBe6++25kZGTAZrPh448/dntfCIFJkyahadOmiIuLQ9euXbF79263dU6ePIkHHngAdrsdSUlJGDp0KE6dOuW2zo8//oicnBw0aNAAWVlZePnll/UfHRER1RnmD0RE4UV3IHD69GlcddVVeOONNxTff/nll/Haa6/hrbfewtdff41GjRqhe/fuOHfunHOdBx54ADt27MDq1auxYsUKfPHFFxg2bJjz/bKyMnTr1g0tWrTA5s2bMX36dEyZMgXvvPOOgUMkIqK6wPyBiCjMCD8AEMuWLXP+XV1dLdLT08X06dOdr5WUlIjY2FixYMECIYQQP/30kwAgvv32W+c6//nPf4TNZhOHDx8WQggxZ84c0bhxY1FRUeFc55lnnhGtW7fWnLbS0lIBQJSWlho9PCKikBXq9zjmD0REwaP1PmdqH4F9+/ahqKgIXbt2db6WmJiIDh06oKCgAABQUFCApKQkXH/99c51unbtiqioKHz99dfOdW655RbExMQ41+nevTt27dqFX3/9VXHfFRUVKCsrc1uIiCg0MH8gIgo9pgYCRUVFAIC0tDS319PS0pzvFRUVITU11e39evXqITk52W0dpW247sPTtGnTkJiY6FyysrL8PyAiIjIF8wciotATMaMGTZgwAaWlpc7l4MGDwU4SERGFAOYPRETKTA0E0tPTAQDFxcVurxcXFzvfS09Px9GjR93er6ysxMmTJ93WUdqG6z48xcbGwm63uy1ERBQamD8QEYUeUwOBli1bIj09HWvXrnW+VlZWhq+//hodO3YEAHTs2BElJSXYvHmzc51169ahuroaHTp0cK7zxRdf4MKFC851Vq9ejdatW6Nx48ZmJpmIiOoA8wciotCjOxA4deoUtm7diq1btwKQOoBt3boVBw4cgM1mw+jRo/HCCy/gk08+wbZt2zBo0CBkZGSgd+/eAIC2bduiR48eePTRR/HNN9/gq6++wogRI3DfffchIyMDAHD//fcjJiYGQ4cOxY4dO/DRRx9h9uzZGDt2rGkHTkRE5mL+QEQUZvQOR7R+/XoBoNYyePBgIYQ0RNxzzz0n0tLSRGxsrLjtttvErl273LZx4sQJMXDgQBEfHy/sdrt4+OGHRXl5uds6P/zwg7j55ptFbGysaNasmXjxxRd1pZPDwxFRJAvFexzzByKi0KD1PmcTQohgBCCBVlZWhsTERJSWlrI9KBFFHN7jjOO5I6JIp/U+FzGjBhERERERkXYMBIiIiIiILIiBABERERGRBTEQICIiIiKyIAYCREREREQWxECAiIiIiMiCGAgQEREREVkQAwEiIiIiIgtiIEBEREREZEEMBIiIiIiILIiBABERERGRBTEQICIiIiKyIAYCREREREQWxECAiIiIiMiCGAgQEREREVkQAwEiIiIiIgtiIEBEREREZEEMBIiIiIiILIiBABERERGRBTEQICIiIiKyIAYCREREREQWxECAiIiIiMiCGAgQEREREVkQAwEiIiIiIgtiIEBEREREZEEMBIiIiIiILIiBABERERGRBTEQICIiIiKyIAYCREREREQWxECAiIiIiMiCGAgQEREREVkQAwEiIiIiIgtiIEBEREREZEEMBIiIiIiILIiBABERERGRBZkeCEyZMgU2m81tadOmjfP9c+fOYfjw4UhJSUF8fDz69u2L4uJit20cOHAAPXv2RMOGDZGamopx48ahsrLS7KQSEVEdYv5ARBRa6gVio+3bt8eaNWtqdlKvZjdjxozBv//9byxevBiJiYkYMWIE+vTpg6+++goAUFVVhZ49eyI9PR0bN25EYWEhBg0ahPr16+Ovf/1rIJJLRER1hPkDEVEIESabPHmyuOqqqxTfKykpEfXr1xeLFy92vrZz504BQBQUFAghhPj0009FVFSUKCoqcq7z5ptvCrvdLioqKjSno7S0VAAQpaWlxg6EiCiEheM9jvkDEVHd0HqfC0gfgd27dyMjIwOXXHIJHnjgARw4cAAAsHnzZly4cAFdu3Z1rtumTRs0b94cBQUFAICCggJcccUVSEtLc67TvXt3lJWVYceOHar7rKioQFlZmdtCREShhfkDEVHoMD0Q6NChA+bNm4eVK1fizTffxL59+5CTk4Py8nIUFRUhJiYGSUlJbp9JS0tDUVERAKCoqMjtJi+/L7+nZtq0aUhMTHQuWVlZ5h4YERH5hfkDEVFoMb2PwB133OH8/yuvvBIdOnRAixYtsGjRIsTFxZm9O6cJEyZg7Nixzr/Lysp4syciCiHMH4iIQkvAhw9NSkrCZZddhj179iA9PR3nz59HSUmJ2zrFxcVIT08HAKSnp9caJUL+W15HSWxsLOx2u9tCREShi/kDEVFwBTwQOHXqFPbu3YumTZviuuuuQ/369bF27Vrn+7t27cKBAwfQsWNHAEDHjh2xbds2HD161LnO6tWrYbfb0a5du0Anl4iI6gjzByKi4DK9adDTTz+Nu+++Gy1atMCRI0cwefJkREdHY+DAgUhMTMTQoUMxduxYJCcnw263Y+TIkejYsSNuuukmAEC3bt3Qrl07PPTQQ3j55ZdRVFSEiRMnYvjw4YiNjTU7uUREVEeYPxARhRbTA4FDhw5h4MCBOHHiBBwOB26++WZs2rQJDocDADBz5kxERUWhb9++qKioQPfu3TFnzhzn56Ojo7FixQo8/vjj6NixIxo1aoTBgwfj+eefNzupRERUh5g/EBGFFpsQQgQ7EYFQVlaGxMRElJaWsj0oEUUc3uOM47kjokin9T4X8D4CREREREQUehgIEBERERFZEAMBIiIiIiILYiBARERERGRBDASIiIiIiCyIgQARERERkQUxECAiIiIisiAGAkREREREFsRAgIiIiIjIghgIEBERERFZEAMBIiIiIiILYiBARERERGRBDASIiIiIiCyIgQARERERkQUxECAiIiIisiAGAkREREREFsRAgIiIiIjIghgIEBERERFZEAMBIiIiIiILYiBARERERGRBDASIiIiIiCyIgQARERERkQUxECAiIiIisiAGAkREREREFsRAgIiIiIjIghgIEBERERFZEAMBIiIiIiILYiBARERERGRBDASIiIiIiCyIgQARERERkQUxECAiIiIisiAGAkREREREFsRAgIiIiIjIghgIEBERERFZEAMBIiIiIiILqhfsBHjzxhtvYPr06Sgq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J9cd8wjmESGRR/g507tfunfvLubOnSu2b98utm7dKu68807RvHlzcerUKec6jz32mMjKyhJr164V3333nbjppptEp06dnO//4x//EE8++aTIz88Xe/fuFR988IGIi4sTr7/+unOdUaNGiZdeekl888034pdffhETJkwQ9evXF99//73X9L344osiMTFRfPzxx+KHH34Q99xzj2jZsqU4e/asEEKIiooKUVhY6LY88sgjIi4uTrz33nthe1yHDx8WjRs3Fo899pj4+eefxU033SQuvfRScfvtt4fk8fzzn/8UU6dOFe+++64AILZs2VJrnZkzZ4pp06aJadOmCQDijTfeCPj38/3334v58+eL7du3i3379okPPvhANGzYULz99tt+fT9CCDFp0iTx6quvihYtWoi4uLiwPpZXX31VFBQUiP3794sOHTqIVq1aiauuuipsj6dFixbi+eefd7svuKaftIvEPCIzM1M0adJEbNu2LSyPyQr5w2233VYn1x3zCOYRoZBHBDUQ8HT06FEBQHz++edCCCFKSkpE/fr1xeLFi53r7Ny5UwAQBQUFqtt54oknRJcuXbzuq127dmLq1Kmq71dXV4v09HQxffp052slJSUiNjZWLFiwQPEz58+fFw6HQzz//PNhfVxvv/22SE1NFVVVVc51fvzxRwFA7N69O6SOx9W+fftUb/Sy9evXCwDi119/db5Wl8dz7733igcffFD1fb3X3dy5c0ViYmJEHIts+fLlwmazifPnz4fl8bRo0ULMnDnT677ImFC695iVR4TbMVktfxAivO+rzCNC73hCLY8IqT4CpaWlAIDk5GQAwObNm3HhwgV07drVuU6bNm3QvHlzFBQUeN2OvA0l1dXVKC8v97rOvn37UFRU5LbvxMREdOjQQXXfn3zyCU6cOFFrZstwO66KigrExMQgKqrm8oiLiwMgPS4LpeMxQ10dz5YtW7Bx40bceuutqusYue4i6VhOnjyJ3Nxc5yPtcD2eF198ESkpKbjmmmswffp0VFZWqm6XtAule49ZeUS4HZPV8gc5LUD43Yci8ViYR5gvZCYUq66uxujRo/Hb3/4Wl19+OQCgqKgIMTExSEpKcls3LS0NRUVFitvZuHEjPvroI/z73/9W3deMGTNw6tQp9O/fX3Udefues1R62/c//vEPdO/eHZmZmWF9XL/73e8wduxYTJ8+HaNGjcLp06fx7LPPAgAOHz4cUsfjr7r4fjIzM3Hs2DFUVlZiypQpeOSRR1TTY+S6i4RjeeaZZ/C3v/0NZ86cwU033YQVK1aE7fE8+eSTuPbaa5GcnIyNGzdiwoQJKCwsxKuvvqq6bfItHO+lnjzziHA8JivlD0B431cj6ViYRwROyDwRGD58OLZv346FCxca3sb27dvRq1cvTJ48Gd26dVNcZ/78+Zg6dSoWLVqE1NRUAEBubi7i4+Ody4YNG3Tv+9ChQ1i1ahWGDh3q9no4Hlf79u3x/vvv45VXXkHDhg2Rnp6Oli1bIi0tDf/617/C7ni8qYvvZ8OGDfjuu+/w1ltvYdasWViwYAEA848nnI9l3Lhx2LJlCz777DNER0dj0KBBeOKJJ8LyeMaOHYvOnTvjyiuvxGOPPYZXXnkFr7/+OioqKgwfB4XnvdSVUh4RjsdkpfwBCO/7qqdwPhbmEQEU7LZJQggxfPhwkZmZKf773/+6vb527VrF9nrNmzcXr776qttrO3bsEKmpqeJPf/qT6n4WLFgg4uLixIoVK9xeLysrE7t373YuZ86cEXv37lVsT3jLLbeIJ598sta2n3/+eeFwOMT58+cj6riKiopEeXm5OHXqlAAgUlJSQup4XOltA1pX34+r//u//xOXXXaZ6vHo/X7k9p+RcCyygwcPCgAiNTU1Io5n+/btAoD4+eefNaWDaouEe6lnHhEJxxTJ+YMQdfcduWIewTyirgU1EKiurhbDhw8XGRkZ4pdffqn1vtzpY8mSJc7Xfv7551qdPrZv3y5SU1PFuHHjVPc1f/580aBBA/Hxxx9rTlt6erqYMWOG87XS0lLFTizV1dWiZcuW4qmnnoqo43L9zO9+9zths9nEd999F1LH40rPjf6RRx6pk+/H09SpU0WLFi1U39f7/bz33nsiJiYmIo5F/sygQYMEAPHBBx+E/fEIIcSHH34ooqKixMmTJzWnhSSRci91zSMi5ZhcPxNp+cPJkyfr7DvyxDyCeURdC2og8Pjjj4vExESRn5/vNoySayT/2GOPiebNm4t169aJ7777TnTs2FF07NjR+f62bduEw+EQDz74oNs2jh496lwnNzdX1KtXT7zxxhtu65SUlHhN34svviiSkpLE8uXLxY8//ih69epVaxgoIYRYs2aNACB27twZMcf1+uuvi82bN4tdu3aJnJwcAUCMHDkyJI/nxIkTYsuWLeLf//63ACAWLlwotmzZIgoLC53rFBYWii1btjiHkIuPjxfvvvuu+OmnnwJ2PH/729/EJ598In755Rfxyy+/iL///e8iISFB/PnPf/b7+/nf//4ntmzZIm644QYBQLz77rti9erVYs+ePWF1LJs2bRKvv/662LJli9i/f7+45557RHR0tMjIyBD79+8Pu+9m48aNYubMmWLr1q1i79694sMPPxQOh0MMGjTI63ZJWSTcS4VwzyMi4ZgiPX/o3bu3iI+PF5988klAj4l5BPOIUMgjghoIAFBc5s6d61zn7Nmz4oknnhCNGzcWDRs2FPfee6/bD3jy5MmK23CN2m699VbFdQYPHuw1fdXV1eK5554TaWlpIjY2Vtx2221i165dtdYbOHCg2xi1kXBcDz30kEhOThYxMTEhfzxz585V/NzkyZN97j+Qx/Paa6+J9u3bi4YNGwq73S6uueYaMWfOHLdh94x+P4MHD46IY/nxxx9Fly5dRHJysoiNjQ3749m8ebPo0KGDSExMFA0aNBBt27YVf/3rX8W5c+e8bpeUhfq9x0geEQnHZMX8IZzuQ0IwjwjV4wnFPMImhBAgIiIiIiJLCZlRg4iIiIiIqO4wECAiIiIisiAGAkREREREFsRAgIiIiIjIghgIEBERERFZEAMBIiIiIiILYiBARERERGRBDASIiIiIiCyIgQARERERkQUxECAiIiIisiAGAkREREREFsRAgIiIiIjIghgIEBERERFZEAMBIiIiIiILYiBARERERGRBDASIiIiIiCyIgQARERERkQUxEKCwNWTIEGRnZ+v+XHZ2NoYMGWJ6eoiIKHQwjyDyjYEABdycOXNgs9nQoUMH3Z89cuQIpkyZgq1bt5qfMJP961//wt133420tDTExMQgOTkZt9xyC1555RWUlZUFO3mGjRkzBtdeey2Sk5PRsGFDtG3bFlOmTMGpU6eCnTQiigDMI8I7j3C1d+9eNGjQADabDd99912wk0Ma1At2Aijy5ebmIjs7G9988w327NmDSy+9VPNnjxw5gqlTpyI7OxtXX32123vvvvsuqqurTU6tftXV1Rg6dCjmzZuHK664Ak888QSysrJQXl6OgoICTJw4EZ9++inWrl0b7KQa8u233yInJwcPP/wwGjRogC1btuDFF1/E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fPTRR5g9e7bbo10iIgotzB+IiMKM0Gn9+vUC0hzUbsvgwYPFmTNnRLdu3YTD4RD169cXLVq0EI8++qgoKipy28aJEyfEwIEDRXx8vLDb7eLhhx8W5eXlbuv88MMP4uabbxaxsbGiWbNm4sUXX9SVztLSUgFAlJaW6j1EIqKQF4r3OOYPREShQet9ziaEEEoBQrgrKytDYmIiSktL2R6UiCIO73HG8dwRUaTTep8LeB8BIiIiIiIKPQwEiIiIiIgsiIEAEREREZEFMRAgIiIiIrIgBgJERERERBbEQICIiIiIyIIYCBARERERWRADASIiIiIiC2IgQERERERkQQwEiIiIiIgsiIEAEREREZEFMRAgIiIiIrIgBgJERERERBbEQICIiIiIyIIYCBARERERWRADASIiIiIiC2IgQERERERkQQwEiIiIiIgsiIEAEREREZEFMRAgIiIiIrIgBgJERERERBbEQICIiIiIyIIYCBARERERWRADASIiIiIiC2IgQERERERkQQwEiIiIiIgsiIEAEREREZEFMRAgIiIiIrIgBgJERERERBbEQICIiIiIyIIYCBARERERWRADASIiIiIiC2IgQERERERkQQwEiIiIiIgsiIEAEREREZEF6Q4EvvjiC9x9993IyMiAzWbDxx9/7Pa+EAKTJk1C06ZNERcXh65du2L37t1u65w8eRIPPPAA7HY7kpKSMHToUJw6dcptnR9//BE5OTlo0KABsrKy8PLLL+s/OiIiqjPMH4iIwovuQOD06dO46qqr8MYbbyi+//LLL+O1117DW2+9ha+//hqNGjVC9+7dce7cOec6DzzwAHbs2IHVq1djxYoV+OKLLzBs2DDn+2VlZejWrRtatGiBzZs3Y/r06ZgyZQreeecdA4dIRER1gfkDEVGYEX4AIJYtW+b8u7q6WqSnp4vp06c7XyspKRGxsbFiwYIFQgghfvrpJwFAfPvtt851/vOf/wibzSYOHz4shBBizpw5onHjxqKiosK5zjPPPCNat26tOW2lpaUCgCgtLTV6eEREISvU73HMH4iIgkfrfc7UPgL79u1DUVERunbt6nwtMTERHTp0QEFBAQCgoKAASUlJuP76653rdO3aFVFRUfj666+d69xyyy2IiYlxrtO9e3fs2rULv/76q5lJJiKiOsD8gYgo9NQzc2NFRUUAgLS0NLfX09LSnO8VFRUhNTXVPRH16iE5OdltnZYtW9bahvxe48aNa+27oqICFRUVzr/Lysr8PBoiIjIL8wciotATMaMGTZs2DYmJic4lKysr2EkiIqIQwPyBiEiZqYFAeno6AKC4uNjt9eLiYud76enpOHr0qNv7lZWVOHnypNs6Sttw3YenCRMmoLS01LkcPHjQ/wMiIiJTMH8gIgo9pgYCLVu2RHp6OtauXet8raysDF9//TU6duwIAOjYsSNKSkqwefNm5zrr1q1DdXU1OnTo4Fzniy++wIULF5zrrF69Gq1bt1Z87AsAsbGxsNvtbgsREYUG5g9ERKFHdyBw6tQpbN26FVu3bgUgdQDbunUrDhw4AJvNhtGjR+OFF17AJ598gm3btmHQoEHIyMhA7969AQBt27ZFjx498Oijj+Kbb77BV199hREjRuC+++5DRkYGAOD+++9HTEwMhg4dih07duCjjz7C7NmzMXbsWNMOnIiIzMX8gYgozOgdjmj9+vUCQK1l8ODBQghpiLjnnntOpKWlidjYWHHbbbeJXbt2uW3jxIkTYuDAgSI+Pl7Y7Xbx8MMPi/Lycrd1fvjhB3HzzTeL2NhY0axZM/Hiiy/qSieHhyOiSBaK9zjmD0REoUHrfc4mhBDBCEACraysDImJiSgtLeVjYCKKOLzHGcdzR0SRTut9LmJGDSIiIiIiIu0YCBARERERWRADASIiIiIiC2IgQERERERkQQwEiIiIiIgsiIEAEREREZEFMRAgIiIiIrIgBgJERERERBbEQICIiIiIyIIYCBARERERWRADASIiIiIiC2IgQERERERkQQwEiIiIiIgsiIEAEREREZEFMRAgIiIiIrIgBgJERERERBbEQICIiIiIyIIYCBARERERWRADASIiIiIiC2IgQERERERkQQwEiIiIiIgsiIEAEREREZEFMRAgIiIiIrIgBgJERERERBbEQICIiIiIyIIYCBARERERWRADASIiIiIiC2IgQERERERkQQwEiIiIiIgsiIEAEREREZEFMRAgIiIiIrIgBgJERERERBbEQICIiIiIyIIYCBARERERWRADASIiIiIiCzI9EJgyZQpsNpvb0qZNG+f7586dw/Dhw5GSkoL4+Hj07dsXxcXFbts4cOAAevbsiYYNGyI1NRXjxo1DZWWl2UklIqI6xPyBiCi01AvERtu3b481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",
579
+ "text/plain": [
580
+ "<Figure size 800x600 with 4 Axes>"
581
+ ]
582
+ },
583
+ "metadata": {},
584
+ "output_type": "display_data"
585
+ }
586
+ ],
587
+ "source": [
588
+ "fig, axs = plt.subplots(2, 2, figsize=(8, 6))\n",
589
+ "\n",
590
+ "# Plot scatter plots for each group\n",
591
+ "axs[0, 0].scatter(df.loc[df['Group'] == '4', 'Date'], df.loc[df['Group'] == '4', 'sales'], color='red', marker='o')\n",
592
+ "axs[0, 0].set_title('Article Group 1')\n",
593
+ "\n",
594
+ "axs[0, 1].scatter(df.loc[df['Group'] == '7', 'Date'], df.loc[df['Group'] == '7', 'sales'], color='blue', marker='o')\n",
595
+ "axs[0, 1].set_title('Article Group 2')\n",
596
+ "\n",
597
+ "axs[1, 0].scatter(df.loc[df['Group'] == '1', 'Date'], df.loc[df['Group'] == '1', 'sales'], color='green', marker='o')\n",
598
+ "axs[1, 0].set_title('Article Group 3')\n",
599
+ "\n",
600
+ "axs[1, 1].scatter(df.loc[df['Group'] == '6', 'Date'], df.loc[df['Group'] == '6', 'sales'], color='yellow', marker='o')\n",
601
+ "axs[1, 1].set_title('Article Group 4')\n",
602
+ "\n",
603
+ "# Adjust spacing between subplots\n",
604
+ "plt.tight_layout()\n",
605
+ "\n",
606
+ "for ax in axs.flat:\n",
607
+ " ax.set_xlim(df['Date'].min(), df['Date'].max())\n",
608
+ " ax.set_ylim(df['sales'].min(), df['sales'].max())"
609
+ ]
610
+ },
611
+ {
612
+ "cell_type": "code",
613
+ "execution_count": 1,
614
+ "id": "c0dfb883-aa55-45b1-81ea-12afc089d5fd",
615
+ "metadata": {},
616
+ "outputs": [
617
+ {
618
+ "name": "stderr",
619
+ "output_type": "stream",
620
+ "text": [
621
+ "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/tqdm/auto.py:22: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
622
+ " from .autonotebook import tqdm as notebook_tqdm\n",
623
+ "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/torchvision/io/image.py:11: UserWarning: Failed to load image Python extension: dlopen(/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/torchvision/image.so, 0x0006): Library not loaded: @rpath/libpng16.16.dylib\n",
624
+ " Referenced from: <5F6B6919-410D-397C-98F2-12C5934F9DBE> /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/torchvision/image.so\n",
625
+ " Reason: tried: '/Users/malfet/miniforge3/envs/py_39_torch-1.10.2/lib/libpng16.16.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/malfet/miniforge3/envs/py_39_torch-1.10.2/lib/libpng16.16.dylib' (no such file), '/Users/malfet/miniforge3/envs/py_39_torch-1.10.2/lib/libpng16.16.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/malfet/miniforge3/envs/py_39_torch-1.10.2/lib/libpng16.16.dylib' (no such file), '/Users/malfet/miniforge3/envs/py_39_torch-1.10.2/lib/libpng16.16.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/malfet/miniforge3/envs/py_39_torch-1.10.2/lib/libpng16.16.dylib' (no such file), '/Users/malfet/miniforge3/envs/py_39_torch-1.10.2/lib/libpng16.16.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/malfet/miniforge3/envs/py_39_torch-1.10.2/lib/libpng16.16.dylib' (no such file), '/usr/lib/libpng16.16.dylib' (no such file, not in dyld cache)\n",
626
+ " warn(f\"Failed to load image Python extension: {e}\")\n"
627
+ ]
628
+ }
629
+ ],
630
+ "source": [
631
+ "## Imports\n",
632
+ "import pickle\n",
633
+ "import warnings\n",
634
+ "#import streamlit as st\n",
635
+ "from pathlib import Path\n",
636
+ "\n",
637
+ "import numpy as np\n",
638
+ "import pandas as pd\n",
639
+ "import matplotlib.pyplot as plt\n",
640
+ "import datetime\n",
641
+ "\n",
642
+ "import torch\n",
643
+ "from torch.distributions import Normal\n",
644
+ "from pytorch_forecasting import (\n",
645
+ " TimeSeriesDataSet,\n",
646
+ " TemporalFusionTransformer,\n",
647
+ ")"
648
+ ]
649
+ },
650
+ {
651
+ "cell_type": "code",
652
+ "execution_count": 2,
653
+ "id": "720b4e43-5b2c-489f-9b61-779d618b5f45",
654
+ "metadata": {},
655
+ "outputs": [],
656
+ "source": [
657
+ "def raw_preds_to_df(raw,quantiles = None):\n",
658
+ " \"\"\"\n",
659
+ " raw is output of model.predict with return_index=True\n",
660
+ " quantiles can be provided like [0.1,0.5,0.9] to get interpretable quantiles\n",
661
+ " in the output, time_idx is the first prediction time index (one step after knowledge cutoff)\n",
662
+ " pred_idx the index of the predicted date i.e. time_idx + h - 1\n",
663
+ " \"\"\"\n",
664
+ " index = raw[2]\n",
665
+ " preds = raw[0].prediction\n",
666
+ " dec_len = preds.shape[1]\n",
667
+ " n_quantiles = preds.shape[-1]\n",
668
+ " preds_df = pd.DataFrame(index.values.repeat(dec_len * n_quantiles, axis=0),columns=index.columns)\n",
669
+ " preds_df = preds_df.assign(h=np.tile(np.repeat(np.arange(1,1+dec_len),n_quantiles),len(preds_df)//(dec_len*n_quantiles)))\n",
670
+ " preds_df = preds_df.assign(q=np.tile(np.arange(n_quantiles),len(preds_df)//n_quantiles))\n",
671
+ " preds_df = preds_df.assign(pred=preds.flatten().numpy())\n",
672
+ " if quantiles is not None:\n",
673
+ " preds_df['q'] = preds_df['q'].map({i:q for i,q in enumerate(quantiles)})\n",
674
+ "\n",
675
+ " preds_df['pred_idx'] = preds_df['time_idx'] + preds_df['h'] - 1\n",
676
+ " return preds_df"
677
+ ]
678
+ },
679
+ {
680
+ "cell_type": "code",
681
+ "execution_count": 3,
682
+ "id": "7a0abc6e-5310-4e86-b622-a27c757a05f4",
683
+ "metadata": {},
684
+ "outputs": [],
685
+ "source": [
686
+ "def prepare_dataset(parameters, df, rain = \"Default\", temperature = 0.0, datepicker = datetime.date(2022, 10, 24), mapping = {\n",
687
+ " \"Yes\" : 1,\n",
688
+ " \"No\" : 0\n",
689
+ "}):\n",
690
+ " if rain != \"Default\":\n",
691
+ " df[\"MTXWTH_Day_precip\"] = rain_mapping[rain]\n",
692
+ " \n",
693
+ " df[\"MTXWTH_Temp_min\"] = df[\"MTXWTH_Temp_min\"] + temperature\n",
694
+ " df[\"MTXWTH_Temp_max\"] = df[\"MTXWTH_Temp_max\"] + temperature\n",
695
+ "\n",
696
+ " lowerbound = datepicker - datetime.timedelta(days = 35) \n",
697
+ " upperbound = datepicker + datetime.timedelta(days = 30) \n",
698
+ "\n",
699
+ " df = df.loc[(df[\"Date\"].dt.date>lowerbound) & (df[\"Date\"].dt.date<=upperbound)]\n",
700
+ " print(df)\n",
701
+ " df = TimeSeriesDataSet.from_parameters(parameters, df)\n",
702
+ " return df.to_dataloader(train=False, batch_size=256,num_workers = 0)"
703
+ ]
704
+ },
705
+ {
706
+ "cell_type": "code",
707
+ "execution_count": 4,
708
+ "id": "62785ac5-d144-486a-aa15-790e8624fcf0",
709
+ "metadata": {},
710
+ "outputs": [
711
+ {
712
+ "name": "stdout",
713
+ "output_type": "stream",
714
+ "text": [
715
+ " sales DayInYear time_idx Wahl Baustelle MontagLangesWE \\\n",
716
+ "270386 1920.2408 263 2455 0.0 0.0 0.0 \n",
717
+ "270387 1814.0908 264 2456 0.0 0.0 0.0 \n",
718
+ "270388 1749.4744 265 2457 0.0 0.0 0.0 \n",
719
+ "270389 1878.0510 266 2458 0.0 0.0 0.0 \n",
720
+ "270390 1853.9646 267 2459 0.0 0.0 0.0 \n",
721
+ "... ... ... ... ... ... ... \n",
722
+ "286850 1693.3114 323 2515 0.0 0.0 0.0 \n",
723
+ "286851 1898.4318 324 2516 0.0 0.0 0.0 \n",
724
+ "286852 1581.6030 325 2517 0.0 0.0 0.0 \n",
725
+ "286853 1569.0580 326 2518 0.0 0.0 0.0 \n",
726
+ "286854 0.0000 327 2519 nan nan nan \n",
727
+ "\n",
728
+ " FreitagLangesWE nosale holiday AufSommerzeit ... \\\n",
729
+ "270386 0.0 0 none 0.0 ... \n",
730
+ "270387 0.0 0 none 0.0 ... \n",
731
+ "270388 0.0 0 none 0.0 ... \n",
732
+ "270389 0.0 0 none 0.0 ... \n",
733
+ "270390 0.0 0 none 0.0 ... \n",
734
+ "... ... ... ... ... ... \n",
735
+ "286850 0.0 0 none 0.0 ... \n",
736
+ "286851 0.0 0 NotCondensed_Totensonntag 0.0 ... \n",
737
+ "286852 0.0 0 none 0.0 ... \n",
738
+ "286853 0.0 0 none 0.0 ... \n",
739
+ "286854 nan 1 none 0.0 ... \n",
740
+ "\n",
741
+ " Branch Weekday Date MTXWTH_Day_precip MTXWTH_Temp_max \\\n",
742
+ "270386 15 1 2022-09-20 0.0 16.95 \n",
743
+ "270387 15 2 2022-09-21 0.0 17.99 \n",
744
+ "270388 15 3 2022-09-22 0.0 17.96 \n",
745
+ "270389 15 4 2022-09-23 0.0 17.75 \n",
746
+ "270390 15 5 2022-09-24 0.0 14.59 \n",
747
+ "... ... ... ... ... ... \n",
748
+ "286850 15 5 2022-11-19 0.0 4.47 \n",
749
+ "286851 15 6 2022-11-20 1.0 2.53 \n",
750
+ "286852 15 0 2022-11-21 0.0 1.44 \n",
751
+ "286853 15 1 2022-11-22 0.0 1.99 \n",
752
+ "286854 15 2 2022-11-23 0.0 4.82 \n",
753
+ "\n",
754
+ " MTXWTH_Temp_min Start End ShiftLength weight \n",
755
+ "270386 7.05 6.0 13.983333 480.0 1 \n",
756
+ "270387 6.05 6.0 13.983333 480.0 1 \n",
757
+ "270388 10.03 6.0 13.983333 480.0 1 \n",
758
+ "270389 8.39 6.0 13.983333 480.0 1 \n",
759
+ "270390 11.31 6.0 11.983333 360.0 1 \n",
760
+ "... ... ... ... ... ... \n",
761
+ "286850 -4.95 6.0 11.983333 360.0 1 \n",
762
+ "286851 -2.96 7.0 10.983333 240.0 1 \n",
763
+ "286852 -3.72 6.0 13.983333 480.0 1 \n",
764
+ "286853 -2.58 6.0 13.983333 480.0 1 \n",
765
+ "286854 2.40 7.0 17.983333 660.0 0 \n",
766
+ "\n",
767
+ "[260 rows x 22 columns]\n"
768
+ ]
769
+ },
770
+ {
771
+ "name": "stderr",
772
+ "output_type": "stream",
773
+ "text": [
774
+ "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/sklearn/base.py:329: UserWarning: Trying to unpickle estimator StandardScaler from version 1.2.2 when using version 1.1.3. This might lead to breaking code or invalid results. Use at your own risk. For more info please refer to:\n",
775
+ "https://scikit-learn.org/stable/model_persistence.html#security-maintainability-limitations\n",
776
+ " warnings.warn(\n"
777
+ ]
778
+ }
779
+ ],
780
+ "source": [
781
+ "with open('data/parameters.pkl', 'rb') as f:\n",
782
+ " parameters = pickle.load(f)\n",
783
+ "df = pd.read_pickle('data/test_data.pkl')\n",
784
+ "df = df.loc[(df[\"Branch\"] == \"15\") & (df[\"Group\"].isin([\"6\",\"7\",\"4\",\"1\"]))]\n",
785
+ "_dataloader = prepare_dataset(parameters, df.copy())"
786
+ ]
787
+ },
788
+ {
789
+ "cell_type": "code",
790
+ "execution_count": 5,
791
+ "id": "fda01d15-fd6a-4b87-abfd-7d9011af53e4",
792
+ "metadata": {},
793
+ "outputs": [
794
+ {
795
+ "name": "stderr",
796
+ "output_type": "stream",
797
+ "text": [
798
+ "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pytorch_lightning/utilities/parsing.py:262: UserWarning: Attribute 'loss' is an instance of `nn.Module` and is already saved during checkpointing. It is recommended to ignore them using `self.save_hyperparameters(ignore=['loss'])`.\n",
799
+ " rank_zero_warn(\n",
800
+ "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pytorch_lightning/utilities/parsing.py:262: UserWarning: Attribute 'logging_metrics' is an instance of `nn.Module` and is already saved during checkpointing. It is recommended to ignore them using `self.save_hyperparameters(ignore=['logging_metrics'])`.\n",
801
+ " rank_zero_warn(\n"
802
+ ]
803
+ }
804
+ ],
805
+ "source": [
806
+ "_model = TemporalFusionTransformer.load_from_checkpoint('model/tft_check.ckpt', map_location=torch.device('cpu'))\n",
807
+ "out = _model.predict(_dataloader, mode=\"raw\", return_x=True, return_index=True)\n",
808
+ "preds = raw_preds_to_df(out, quantiles = None)\n",
809
+ "\n",
810
+ "#preds = preds[[\"pred_idx\", \"Group\", \"pred\"]]"
811
+ ]
812
+ },
813
+ {
814
+ "cell_type": "code",
815
+ "execution_count": 6,
816
+ "id": "bdcabe69-bc3b-46c7-a17f-138ec756c1c2",
817
+ "metadata": {},
818
+ "outputs": [
819
+ {
820
+ "data": {
821
+ "text/html": [
822
+ "<div>\n",
823
+ "<style scoped>\n",
824
+ " .dataframe tbody tr th:only-of-type {\n",
825
+ " vertical-align: middle;\n",
826
+ " }\n",
827
+ "\n",
828
+ " .dataframe tbody tr th {\n",
829
+ " vertical-align: top;\n",
830
+ " }\n",
831
+ "\n",
832
+ " .dataframe thead th {\n",
833
+ " text-align: right;\n",
834
+ " }\n",
835
+ "</style>\n",
836
+ "<table border=\"1\" class=\"dataframe\">\n",
837
+ " <thead>\n",
838
+ " <tr style=\"text-align: right;\">\n",
839
+ " <th></th>\n",
840
+ " <th>time_idx</th>\n",
841
+ " <th>Group</th>\n",
842
+ " <th>Branch</th>\n",
843
+ " <th>h</th>\n",
844
+ " <th>q</th>\n",
845
+ " <th>pred</th>\n",
846
+ " <th>pred_idx</th>\n",
847
+ " </tr>\n",
848
+ " </thead>\n",
849
+ " <tbody>\n",
850
+ " <tr>\n",
851
+ " <th>0</th>\n",
852
+ " <td>2490</td>\n",
853
+ " <td>1</td>\n",
854
+ " <td>15</td>\n",
855
+ " <td>1</td>\n",
856
+ " <td>0</td>\n",
857
+ " <td>1826.949707</td>\n",
858
+ " <td>2490</td>\n",
859
+ " </tr>\n",
860
+ " <tr>\n",
861
+ " <th>1</th>\n",
862
+ " <td>2490</td>\n",
863
+ " <td>1</td>\n",
864
+ " <td>15</td>\n",
865
+ " <td>2</td>\n",
866
+ " <td>0</td>\n",
867
+ " <td>1856.215088</td>\n",
868
+ " <td>2491</td>\n",
869
+ " </tr>\n",
870
+ " <tr>\n",
871
+ " <th>2</th>\n",
872
+ " <td>2490</td>\n",
873
+ " <td>1</td>\n",
874
+ " <td>15</td>\n",
875
+ " <td>3</td>\n",
876
+ " <td>0</td>\n",
877
+ " <td>1871.929688</td>\n",
878
+ " <td>2492</td>\n",
879
+ " </tr>\n",
880
+ " <tr>\n",
881
+ " <th>3</th>\n",
882
+ " <td>2490</td>\n",
883
+ " <td>1</td>\n",
884
+ " <td>15</td>\n",
885
+ " <td>4</td>\n",
886
+ " <td>0</td>\n",
887
+ " <td>1866.095825</td>\n",
888
+ " <td>2493</td>\n",
889
+ " </tr>\n",
890
+ " <tr>\n",
891
+ " <th>4</th>\n",
892
+ " <td>2490</td>\n",
893
+ " <td>1</td>\n",
894
+ " <td>15</td>\n",
895
+ " <td>5</td>\n",
896
+ " <td>0</td>\n",
897
+ " <td>1787.610840</td>\n",
898
+ " <td>2494</td>\n",
899
+ " </tr>\n",
900
+ " <tr>\n",
901
+ " <th>...</th>\n",
902
+ " <td>...</td>\n",
903
+ " <td>...</td>\n",
904
+ " <td>...</td>\n",
905
+ " <td>...</td>\n",
906
+ " <td>...</td>\n",
907
+ " <td>...</td>\n",
908
+ " <td>...</td>\n",
909
+ " </tr>\n",
910
+ " <tr>\n",
911
+ " <th>115</th>\n",
912
+ " <td>2490</td>\n",
913
+ " <td>7</td>\n",
914
+ " <td>15</td>\n",
915
+ " <td>26</td>\n",
916
+ " <td>0</td>\n",
917
+ " <td>1655.261475</td>\n",
918
+ " <td>2515</td>\n",
919
+ " </tr>\n",
920
+ " <tr>\n",
921
+ " <th>116</th>\n",
922
+ " <td>2490</td>\n",
923
+ " <td>7</td>\n",
924
+ " <td>15</td>\n",
925
+ " <td>27</td>\n",
926
+ " <td>0</td>\n",
927
+ " <td>1794.728027</td>\n",
928
+ " <td>2516</td>\n",
929
+ " </tr>\n",
930
+ " <tr>\n",
931
+ " <th>117</th>\n",
932
+ " <td>2490</td>\n",
933
+ " <td>7</td>\n",
934
+ " <td>15</td>\n",
935
+ " <td>28</td>\n",
936
+ " <td>0</td>\n",
937
+ " <td>1600.507812</td>\n",
938
+ " <td>2517</td>\n",
939
+ " </tr>\n",
940
+ " <tr>\n",
941
+ " <th>118</th>\n",
942
+ " <td>2490</td>\n",
943
+ " <td>7</td>\n",
944
+ " <td>15</td>\n",
945
+ " <td>29</td>\n",
946
+ " <td>0</td>\n",
947
+ " <td>1595.128540</td>\n",
948
+ " <td>2518</td>\n",
949
+ " </tr>\n",
950
+ " <tr>\n",
951
+ " <th>119</th>\n",
952
+ " <td>2490</td>\n",
953
+ " <td>7</td>\n",
954
+ " <td>15</td>\n",
955
+ " <td>30</td>\n",
956
+ " <td>0</td>\n",
957
+ " <td>1557.557007</td>\n",
958
+ " <td>2519</td>\n",
959
+ " </tr>\n",
960
+ " </tbody>\n",
961
+ "</table>\n",
962
+ "<p>120 rows × 7 columns</p>\n",
963
+ "</div>"
964
+ ],
965
+ "text/plain": [
966
+ " time_idx Group Branch h q pred pred_idx\n",
967
+ "0 2490 1 15 1 0 1826.949707 2490\n",
968
+ "1 2490 1 15 2 0 1856.215088 2491\n",
969
+ "2 2490 1 15 3 0 1871.929688 2492\n",
970
+ "3 2490 1 15 4 0 1866.095825 2493\n",
971
+ "4 2490 1 15 5 0 1787.610840 2494\n",
972
+ ".. ... ... ... .. .. ... ...\n",
973
+ "115 2490 7 15 26 0 1655.261475 2515\n",
974
+ "116 2490 7 15 27 0 1794.728027 2516\n",
975
+ "117 2490 7 15 28 0 1600.507812 2517\n",
976
+ "118 2490 7 15 29 0 1595.128540 2518\n",
977
+ "119 2490 7 15 30 0 1557.557007 2519\n",
978
+ "\n",
979
+ "[120 rows x 7 columns]"
980
+ ]
981
+ },
982
+ "execution_count": 6,
983
+ "metadata": {},
984
+ "output_type": "execute_result"
985
+ }
986
+ ],
987
+ "source": [
988
+ "preds"
989
  ]
990
  },
991
  {
992
  "cell_type": "code",
993
+ "execution_count": 8,
994
+ "id": "ab7c16c2-6fcc-40bd-a866-1fecd122dfc1",
995
  "metadata": {},
996
  "outputs": [
997
  {
998
  "data": {
999
+ "text/html": [
1000
+ "<div>\n",
1001
+ "<style scoped>\n",
1002
+ " .dataframe tbody tr th:only-of-type {\n",
1003
+ " vertical-align: middle;\n",
1004
+ " }\n",
1005
+ "\n",
1006
+ " .dataframe tbody tr th {\n",
1007
+ " vertical-align: top;\n",
1008
+ " }\n",
1009
+ "\n",
1010
+ " .dataframe thead th {\n",
1011
+ " text-align: right;\n",
1012
+ " }\n",
1013
+ "</style>\n",
1014
+ "<table border=\"1\" class=\"dataframe\">\n",
1015
+ " <thead>\n",
1016
+ " <tr style=\"text-align: right;\">\n",
1017
+ " <th></th>\n",
1018
+ " <th>time_idx</th>\n",
1019
+ " <th>sales</th>\n",
1020
+ " <th>Group</th>\n",
1021
+ " </tr>\n",
1022
+ " </thead>\n",
1023
+ " <tbody>\n",
1024
+ " <tr>\n",
1025
+ " <th>270300</th>\n",
1026
+ " <td>2369</td>\n",
1027
+ " <td>1600.9030</td>\n",
1028
+ " <td>1</td>\n",
1029
+ " </tr>\n",
1030
+ " <tr>\n",
1031
+ " <th>270301</th>\n",
1032
+ " <td>2370</td>\n",
1033
+ " <td>1811.1958</td>\n",
1034
+ " <td>1</td>\n",
1035
+ " </tr>\n",
1036
+ " <tr>\n",
1037
+ " <th>270302</th>\n",
1038
+ " <td>2371</td>\n",
1039
+ " <td>1784.2916</td>\n",
1040
+ " <td>1</td>\n",
1041
+ " </tr>\n",
1042
+ " <tr>\n",
1043
+ " <th>270303</th>\n",
1044
+ " <td>2372</td>\n",
1045
+ " <td>1757.3488</td>\n",
1046
+ " <td>1</td>\n",
1047
+ " </tr>\n",
1048
+ " <tr>\n",
1049
+ " <th>270304</th>\n",
1050
+ " <td>2373</td>\n",
1051
+ " <td>1741.0982</td>\n",
1052
+ " <td>1</td>\n",
1053
+ " </tr>\n",
1054
+ " <tr>\n",
1055
+ " <th>...</th>\n",
1056
+ " <td>...</td>\n",
1057
+ " <td>...</td>\n",
1058
+ " <td>...</td>\n",
1059
+ " </tr>\n",
1060
+ " <tr>\n",
1061
+ " <th>287065</th>\n",
1062
+ " <td>2730</td>\n",
1063
+ " <td>1643.1700</td>\n",
1064
+ " <td>7</td>\n",
1065
+ " </tr>\n",
1066
+ " <tr>\n",
1067
+ " <th>287066</th>\n",
1068
+ " <td>2731</td>\n",
1069
+ " <td>1597.3518</td>\n",
1070
+ " <td>7</td>\n",
1071
+ " </tr>\n",
1072
+ " <tr>\n",
1073
+ " <th>287067</th>\n",
1074
+ " <td>2732</td>\n",
1075
+ " <td>1683.6228</td>\n",
1076
+ " <td>7</td>\n",
1077
+ " </tr>\n",
1078
+ " <tr>\n",
1079
+ " <th>287068</th>\n",
1080
+ " <td>2733</td>\n",
1081
+ " <td>1785.2180</td>\n",
1082
+ " <td>7</td>\n",
1083
+ " </tr>\n",
1084
+ " <tr>\n",
1085
+ " <th>287069</th>\n",
1086
+ " <td>2734</td>\n",
1087
+ " <td>1589.9020</td>\n",
1088
+ " <td>7</td>\n",
1089
+ " </tr>\n",
1090
+ " </tbody>\n",
1091
+ "</table>\n",
1092
+ "<p>1464 rows × 3 columns</p>\n",
1093
+ "</div>"
1094
+ ],
1095
  "text/plain": [
1096
+ " time_idx sales Group\n",
1097
+ "270300 2369 1600.9030 1\n",
1098
+ "270301 2370 1811.1958 1\n",
1099
+ "270302 2371 1784.2916 1\n",
1100
+ "270303 2372 1757.3488 1\n",
1101
+ "270304 2373 1741.0982 1\n",
1102
+ "... ... ... ...\n",
1103
+ "287065 2730 1643.1700 7\n",
1104
+ "287066 2731 1597.3518 7\n",
1105
+ "287067 2732 1683.6228 7\n",
1106
+ "287068 2733 1785.2180 7\n",
1107
+ "287069 2734 1589.9020 7\n",
1108
+ "\n",
1109
+ "[1464 rows x 3 columns]"
1110
  ]
1111
  },
1112
+ "execution_count": 8,
1113
  "metadata": {},
1114
  "output_type": "execute_result"
1115
  }
1116
  ],
1117
  "source": [
1118
+ "df[[\"time_idx\",\"sales\", \"Group\"]]"
1119
+ ]
1120
+ },
1121
+ {
1122
+ "cell_type": "code",
1123
+ "execution_count": 16,
1124
+ "id": "b5812d1f-f42d-4031-b9b7-32fac2bbe425",
1125
+ "metadata": {},
1126
+ "outputs": [
1127
+ {
1128
+ "name": "stdout",
1129
+ "output_type": "stream",
1130
+ "text": [
1131
+ " sales DayInYear time_idx Wahl Baustelle MontagLangesWE \\\n",
1132
+ "0 1600.9030 177 2369 0.0 0.0 0.0 \n",
1133
+ "1 1811.1958 178 2370 0.0 0.0 0.0 \n",
1134
+ "2 1784.2916 179 2371 0.0 0.0 0.0 \n",
1135
+ "3 1757.3488 180 2372 0.0 0.0 0.0 \n",
1136
+ "4 1741.0982 181 2373 0.0 0.0 0.0 \n",
1137
+ "... ... ... ... ... ... ... \n",
1138
+ "1459 1643.1700 173 2730 0.0 0.0 0.0 \n",
1139
+ "1460 1597.3518 174 2731 0.0 0.0 0.0 \n",
1140
+ "1461 1683.6228 175 2732 0.0 0.0 0.0 \n",
1141
+ "1462 1785.2180 176 2733 0.0 0.0 0.0 \n",
1142
+ "1463 1589.9020 177 2734 0.0 0.0 0.0 \n",
1143
+ "\n",
1144
+ " FreitagLangesWE nosale holiday AufSommerzeit ... Date \\\n",
1145
+ "0 0.0 0 none 0.0 ... 2022-06-26 \n",
1146
+ "1 0.0 0 none 0.0 ... 2022-06-27 \n",
1147
+ "2 0.0 0 none 0.0 ... 2022-06-28 \n",
1148
+ "3 0.0 0 none 0.0 ... 2022-06-29 \n",
1149
+ "4 0.0 0 none 0.0 ... 2022-06-30 \n",
1150
+ "... ... ... ... ... ... ... \n",
1151
+ "1459 0.0 0 none 0.0 ... 2023-06-22 \n",
1152
+ "1460 0.0 0 none 0.0 ... 2023-06-23 \n",
1153
+ "1461 0.0 0 none 0.0 ... 2023-06-24 \n",
1154
+ "1462 0.0 0 none 0.0 ... 2023-06-25 \n",
1155
+ "1463 0.0 0 none 0.0 ... 2023-06-26 \n",
1156
+ "\n",
1157
+ " MTXWTH_Day_precip MTXWTH_Temp_max MTXWTH_Temp_min Start End \\\n",
1158
+ "0 0.0 28.52 17.47 7.0 10.983333 \n",
1159
+ "1 0.0 25.75 16.70 6.0 13.983333 \n",
1160
+ "2 0.0 23.57 14.17 6.0 13.983333 \n",
1161
+ "3 0.0 26.81 13.09 6.0 13.983333 \n",
1162
+ "4 0.0 27.26 15.00 6.0 13.983333 \n",
1163
+ "... ... ... ... ... ... \n",
1164
+ "1459 0.0 26.93 13.06 6.0 16.983333 \n",
1165
+ "1460 1.0 23.99 15.98 6.0 16.983333 \n",
1166
+ "1461 0.0 25.99 12.04 6.0 15.983333 \n",
1167
+ "1462 0.0 28.99 15.02 7.0 15.983333 \n",
1168
+ "1463 0.0 27.96 17.01 6.0 16.983333 \n",
1169
+ "\n",
1170
+ " ShiftLength weight pred_idx pred \n",
1171
+ "0 240.0 1 NaN NaN \n",
1172
+ "1 480.0 1 NaN NaN \n",
1173
+ "2 480.0 1 NaN NaN \n",
1174
+ "3 480.0 1 NaN NaN \n",
1175
+ "4 480.0 1 NaN NaN \n",
1176
+ "... ... ... ... ... \n",
1177
+ "1459 660.0 1 NaN NaN \n",
1178
+ "1460 660.0 1 NaN NaN \n",
1179
+ "1461 600.0 1 NaN NaN \n",
1180
+ "1462 540.0 1 NaN NaN \n",
1181
+ "1463 660.0 1 NaN NaN \n",
1182
+ "\n",
1183
+ "[1344 rows x 24 columns]\n"
1184
+ ]
1185
+ }
1186
+ ],
1187
+ "source": [
1188
+ "new = pd.merge(df, preds, left_on=[\"time_idx\", \"Group\"], right_on=[\"pred_idx\", \"Group\"], how = \"left\")\n",
1189
+ "print(new[new[\"pred\"].isna()])"
1190
+ ]
1191
+ },
1192
+ {
1193
+ "cell_type": "code",
1194
+ "execution_count": 12,
1195
+ "id": "f4577535-4d1c-4500-96df-7df83c61011e",
1196
+ "metadata": {},
1197
+ "outputs": [
1198
+ {
1199
+ "name": "stdout",
1200
+ "output_type": "stream",
1201
+ "text": [
1202
+ "0 1826.949707\n",
1203
+ "1 1856.215088\n",
1204
+ "2 1871.929688\n",
1205
+ "3 1866.095825\n",
1206
+ "4 1787.610840\n",
1207
+ "5 1659.851440\n",
1208
+ "6 1749.331543\n",
1209
+ "7 1878.842407\n",
1210
+ "8 1868.011841\n",
1211
+ "9 1886.265625\n",
1212
+ "10 1882.206055\n",
1213
+ "11 1794.047852\n",
1214
+ "12 1664.293335\n",
1215
+ "13 1855.808838\n",
1216
+ "14 1866.882690\n",
1217
+ "15 1880.703613\n",
1218
+ "16 1893.997437\n",
1219
+ "17 1886.795654\n",
1220
+ "18 1808.130371\n",
1221
+ "19 1699.440552\n",
1222
+ "20 1854.313721\n",
1223
+ "21 1858.726685\n",
1224
+ "22 1814.451782\n",
1225
+ "23 1863.013184\n",
1226
+ "24 1884.281982\n",
1227
+ "25 1781.215820\n",
1228
+ "26 1679.599243\n",
1229
+ "27 1804.118652\n",
1230
+ "28 1800.697144\n",
1231
+ "29 1794.221802\n",
1232
+ "Name: 1, dtype: float32\n",
1233
+ "30 1528.776611\n",
1234
+ "31 1543.648682\n",
1235
+ "32 1544.217407\n",
1236
+ "33 1533.632935\n",
1237
+ "34 1547.297485\n",
1238
+ "35 1568.251465\n",
1239
+ "36 1432.989502\n",
1240
+ "37 1559.411621\n",
1241
+ "38 1555.778076\n",
1242
+ "39 1562.257935\n",
1243
+ "40 1563.604248\n",
1244
+ "41 1542.455200\n",
1245
+ "42 1595.332031\n",
1246
+ "43 1542.713867\n",
1247
+ "44 1494.202271\n",
1248
+ "45 1556.931152\n",
1249
+ "46 1561.306152\n",
1250
+ "47 1575.157959\n",
1251
+ "48 1546.359741\n",
1252
+ "49 1665.563232\n",
1253
+ "50 1547.409302\n",
1254
+ "51 1537.488281\n",
1255
+ "52 1533.096191\n",
1256
+ "53 1506.796509\n",
1257
+ "54 1532.159912\n",
1258
+ "55 1509.309326\n",
1259
+ "56 1635.444092\n",
1260
+ "57 1473.974487\n",
1261
+ "58 1466.395752\n",
1262
+ "59 1451.778198\n",
1263
+ "Name: 4, dtype: float32\n",
1264
+ "60 2009.041016\n",
1265
+ "61 2052.925537\n",
1266
+ "62 2075.127686\n",
1267
+ "63 2073.555420\n",
1268
+ "64 1894.730835\n",
1269
+ "65 1712.648071\n",
1270
+ "66 2012.644165\n",
1271
+ "67 2078.718262\n",
1272
+ "68 2063.913574\n",
1273
+ "69 2102.091309\n",
1274
+ "70 2095.394043\n",
1275
+ "71 1910.086914\n",
1276
+ "72 1771.222168\n",
1277
+ "73 2049.833252\n",
1278
+ "74 2064.734375\n",
1279
+ "75 2089.499023\n",
1280
+ "76 2110.970947\n",
1281
+ "77 2104.520020\n",
1282
+ "78 1933.123291\n",
1283
+ "79 1808.569946\n",
1284
+ "80 2050.945801\n",
1285
+ "81 2056.272217\n",
1286
+ "82 2002.636841\n",
1287
+ "83 2061.285889\n",
1288
+ "84 2097.291260\n",
1289
+ "85 1900.992188\n",
1290
+ "86 1744.634521\n",
1291
+ "87 1993.816650\n",
1292
+ "88 1990.942261\n",
1293
+ "89 2046.452393\n",
1294
+ "Name: 6, dtype: float32\n",
1295
+ "90 1626.679443\n",
1296
+ "91 1618.315674\n",
1297
+ "92 1620.280151\n",
1298
+ "93 1627.040161\n",
1299
+ "94 1673.808228\n",
1300
+ "95 1787.030273\n",
1301
+ "96 1562.161865\n",
1302
+ "97 1642.268433\n",
1303
+ "98 1618.766113\n",
1304
+ "99 1619.909424\n",
1305
+ "100 1619.908691\n",
1306
+ "101 1666.063477\n",
1307
+ "102 1777.630371\n",
1308
+ "103 1620.351807\n",
1309
+ "104 1619.798706\n",
1310
+ "105 1613.335693\n",
1311
+ "106 1611.184326\n",
1312
+ "107 1621.388306\n",
1313
+ "108 1673.271851\n",
1314
+ "109 1810.889648\n",
1315
+ "110 1619.840698\n",
1316
+ "111 1615.521118\n",
1317
+ "112 1616.226562\n",
1318
+ "113 1593.204102\n",
1319
+ "114 1606.631958\n",
1320
+ "115 1655.261475\n",
1321
+ "116 1794.728027\n",
1322
+ "117 1600.507812\n",
1323
+ "118 1595.128540\n",
1324
+ "119 1557.557007\n",
1325
+ "Name: 7, dtype: float32\n"
1326
+ ]
1327
+ }
1328
+ ],
1329
+ "source": [
1330
+ "datepicker = datetime.date(2022, 10, 24)\n",
1331
+ "def add_dates(group):\n",
1332
+ " #group[\"date_imputed\"] = [datepicker + datetime.timedelta(days=x) for x in range(30)]\n",
1333
+ " print(group)\n",
1334
+ " return group\n",
1335
+ "\n",
1336
+ "preds[\"date_imputed\"] = preds.groupby(\"Group\").pred.transform(add_dates)"
1337
  ]
1338
  },
1339
  {
1340
  "cell_type": "code",
1341
  "execution_count": null,
1342
+ "id": "a8af2ca0-b8bb-4e08-8963-d463a7122033",
1343
  "metadata": {},
1344
  "outputs": [],
1345
  "source": []
 
1347
  ],
1348
  "metadata": {
1349
  "kernelspec": {
1350
+ "display_name": "TFT_HF",
1351
  "language": "python",
1352
+ "name": "tft_hf"
1353
  },
1354
  "language_info": {
1355
  "codemirror_mode": {
 
1361
  "name": "python",
1362
  "nbconvert_exporter": "python",
1363
  "pygments_lexer": "ipython3",
1364
+ "version": "3.9.12"
1365
  }
1366
  },
1367
  "nbformat": 4,