Files
ETSformer/notebooks/001_001_run-S.ipynb
T
wassname af542fc3f3 nbs
2022-11-28 18:37:30 +08:00

1280 lines
66 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "0c996f31",
"metadata": {
"ExecuteTime": {
"end_time": "2022-11-28T08:05:25.343764Z",
"start_time": "2022-11-28T08:05:25.341915Z"
}
},
"outputs": [],
"source": [
"import os\n",
"os.sys.path.append('..')"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "23a27691",
"metadata": {
"ExecuteTime": {
"end_time": "2022-11-28T08:05:25.373979Z",
"start_time": "2022-11-28T08:05:25.344792Z"
}
},
"outputs": [],
"source": [
"import warnings\n",
"warnings.simplefilter(\"ignore\")\n",
"\n",
"# autoreload import your package\n",
"%load_ext autoreload\n",
"%autoreload 2"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "e60bfdb0",
"metadata": {
"ExecuteTime": {
"end_time": "2022-11-28T08:05:25.391886Z",
"start_time": "2022-11-28T08:05:25.375700Z"
}
},
"outputs": [],
"source": [
"from loguru import logger\n",
"logger.remove()\n",
"logger.add(os.sys.stdout, level=\"ERROR\", colorize=True, format=\"<level>{time} | {message}</level>\")\n",
"# import_dir(ta_dir, verbose=False)\n",
"warnings.simplefilter(\"ignore\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "d52338d2",
"metadata": {
"ExecuteTime": {
"end_time": "2022-11-28T08:05:26.106212Z",
"start_time": "2022-11-28T08:05:25.392963Z"
}
},
"outputs": [],
"source": [
"import torch\n",
"import pandas as pd\n",
"from matplotlib import pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"id": "20d78524",
"metadata": {},
"source": [
"# Args"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "750cdcc3",
"metadata": {
"ExecuteTime": {
"end_time": "2022-11-28T08:05:26.385536Z",
"start_time": "2022-11-28T08:05:26.107218Z"
}
},
"outputs": [],
"source": [
"from run import set_seed, get_args, Exp_Main"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "b3a40300",
"metadata": {
"ExecuteTime": {
"end_time": "2022-11-28T08:57:00.631472Z",
"start_time": "2022-11-28T08:07:12.981164Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Args in experiment:\n",
"Namespace(K=0, activation='sigmoid', batch_size=32, c_out=1, checkpoints='./checkpoints/', d_ff=2048, d_layers=4, d_model=512, damping_learning_rate=0, data='custom', data_path='OXY_2019.csv.gz', dec_in=7, des=\"'Exp'\", devices='0,1,2,3', dropout=0.2, e_layers=4, embed='timeF', enc_in=1, features='S', freq='h', gpu=0, itr=1, label_len=0, learning_rate=0.0001, lradj='exponential_with_warmup', min_lr=1e-30, model='ETSformer', model_id='Exchange', n_heads=8, num_workers=0, optim='adam', output_attention=False, patience=5, pred_len=48, root_path='../dataset/stocks/', seq_len=256, smoothing_learning_rate=0, std=0.2, target='RSMKs_18_144_72_2ref_2ref', train_epochs=15, use_gpu=True, use_multi_gpu=False, warmup_epochs=3)\n",
"Use GPU: cuda:0\n",
">>>>>>>start training : Exchange_ETSformer_custom_ftS_sl256_pl48_dm512_nh8_el4_dl4_df2048_K0_lr0.0001_'Exp'_0>>>>>>>>>>>>>>>>>>>>>>>>>>\n",
"train 37075\n",
"val 5294\n",
"test 10632\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "70a188ffee114abfa0fc2128df82570c",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/15 [00:00<?, ?epoch/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 1, Steps: 1158 | Train Loss: 0.3729197 Vali Loss: 0.0965895 Test Loss: 0.1416199\n",
"Validation loss decreased (inf --> 0.096589). Saving model ...\n",
"Updating learning rate to 2.5e-05\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 2, Steps: 1158 | Train Loss: 0.2895640 Vali Loss: 0.0698275 Test Loss: 0.1066696\n",
"Validation loss decreased (0.096589 --> 0.069827). Saving model ...\n",
"Updating learning rate to 5e-05\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 3, Steps: 1158 | Train Loss: 0.2814703 Vali Loss: 0.0588029 Test Loss: 0.0828039\n",
"Validation loss decreased (0.069827 --> 0.058803). Saving model ...\n",
"Updating learning rate to 7.500000000000001e-05\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 4, Steps: 1158 | Train Loss: 0.2805967 Vali Loss: 0.0554975 Test Loss: 0.0784109\n",
"Validation loss decreased (0.058803 --> 0.055498). Saving model ...\n",
"Updating learning rate to 0.0001\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 5, Steps: 1158 | Train Loss: 0.2617843 Vali Loss: 0.0553705 Test Loss: 0.0781345\n",
"Validation loss decreased (0.055498 --> 0.055370). Saving model ...\n",
"Updating learning rate to 5e-05\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 6, Steps: 1158 | Train Loss: 0.2596816 Vali Loss: 0.0536334 Test Loss: 0.0759336\n",
"Validation loss decreased (0.055370 --> 0.053633). Saving model ...\n",
"Updating learning rate to 2.5e-05\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 7, Steps: 1158 | Train Loss: 0.2558732 Vali Loss: 0.0516733 Test Loss: 0.0734066\n",
"Validation loss decreased (0.053633 --> 0.051673). Saving model ...\n",
"Updating learning rate to 1.25e-05\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 8, Steps: 1158 | Train Loss: 0.2663585 Vali Loss: 0.0526782 Test Loss: 0.0746597\n",
"EarlyStopping counter: 1 out of 5\n",
"Updating learning rate to 6.25e-06\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 9, Steps: 1158 | Train Loss: 0.2524643 Vali Loss: 0.0532676 Test Loss: 0.0754930\n",
"EarlyStopping counter: 2 out of 5\n",
"Updating learning rate to 3.125e-06\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 10, Steps: 1158 | Train Loss: 0.2388380 Vali Loss: 0.0524606 Test Loss: 0.0746193\n",
"EarlyStopping counter: 3 out of 5\n",
"Updating learning rate to 1.5625e-06\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 11, Steps: 1158 | Train Loss: 0.2432093 Vali Loss: 0.0529288 Test Loss: 0.0752425\n",
"EarlyStopping counter: 4 out of 5\n",
"Updating learning rate to 7.8125e-07\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 12, Steps: 1158 | Train Loss: 0.2591919 Vali Loss: 0.0529958 Test Loss: 0.0752713\n",
"EarlyStopping counter: 5 out of 5\n",
"Early stopping\n",
">>>>>>>testing : Exchange_ETSformer_custom_ftS_sl256_pl48_dm512_nh8_el4_dl4_df2048_K0_lr0.0001_'Exp'_0<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n",
"val 5294\n",
"loading model\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/165 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"test shape: (165, 32, 48, 1) (165, 32, 48, 1)\n",
"test shape: (5280, 48, 1) (5280, 48, 1)\n",
"mse:0.05175326019525528, mae:0.15480808913707733\n",
"test 10632\n",
"loading model\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/332 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"test shape: (332, 32, 48, 1) (332, 32, 48, 1)\n",
"test shape: (10624, 48, 1) (10624, 48, 1)\n",
"mse:0.07340655475854874, mae:0.18461503088474274\n"
]
}
],
"source": [
"# mimic cli args to avoid code duplication\n",
"argv = \"\"\"python -u run.py \\\n",
" --root_path ../dataset/stocks/ \\\n",
" --data_path OXY_2019.csv.gz \\\n",
" --checkpoints ./checkpoints/ \\\n",
" --model_id Exchange \\\n",
" --model ETSformer \\\n",
" --data custom \\\n",
" --features S \\\n",
" --seq_len 256 \\\n",
" --pred_len 48 \\\n",
" --e_layers 4 \\\n",
" --d_layers 4 \\\n",
" --enc_in 1 \\\n",
" --c_out 1 \\\n",
" --num_workers 0 \\\n",
" --des 'Exp' \\\n",
" --K 0 \\\n",
" --learning_rate 1e-4 \\\n",
" --target RSMKs_18_144_72_2ref_2ref \\\n",
" --itr 1\n",
"\"\"\"\n",
"argv = argv.replace(\"\\\\n\", \"\").split()[3:]\n",
"args = get_args(argv)\n",
"args\n",
"\n",
"\n",
"Exp = Exp_Main\n",
"ii=0\n",
"set_seed(ii)\n",
"# setting record of experiments\n",
"setting = '{}_{}_{}_ft{}_sl{}_pl{}_dm{}_nh{}_el{}_dl{}_df{}_K{}_lr{}_{}_{}'.format(\n",
" args.model_id,\n",
" args.model,\n",
" args.data,\n",
" args.features,\n",
" args.seq_len,\n",
" args.pred_len,\n",
" args.d_model,\n",
" args.n_heads,\n",
" args.e_layers,\n",
" args.d_layers,\n",
" args.d_ff,\n",
" args.K,\n",
" args.learning_rate,\n",
" args.des, ii)\n",
"\n",
"# if os.path.exists(os.path.join(args.checkpoints, setting)):\n",
"# print('skipping exists')\n",
"# continue\n",
"\n",
"exp = Exp(args) # set experiments\n",
"print('>>>>>>>start training : {}>>>>>>>>>>>>>>>>>>>>>>>>>>'.format(setting))\n",
"exp.train(setting)\n",
"\n",
"print('>>>>>>>testing : {}<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<'.format(setting))\n",
"exp.test(setting, data='val')\n",
"exp.test(setting, data='test')\n",
"\n",
"torch.cuda.empty_cache()"
]
},
{
"cell_type": "markdown",
"id": "72811788",
"metadata": {
"ExecuteTime": {
"end_time": "2022-11-28T05:28:20.356399Z",
"start_time": "2022-11-28T05:28:20.339961Z"
}
},
"source": [
"# Plot"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "92b67ed7",
"metadata": {
"ExecuteTime": {
"end_time": "2022-11-28T08:57:00.645341Z",
"start_time": "2022-11-28T08:57:00.632794Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"\"Exchange_ETSformer_custom_ftS_sl256_pl48_dm512_nh8_el4_dl4_df2048_K0_lr0.0001_'Exp'_0\""
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"setting"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "ebea79f7",
"metadata": {
"ExecuteTime": {
"end_time": "2022-11-28T08:57:00.797206Z",
"start_time": "2022-11-28T08:57:00.646274Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"test 10632\n"
]
}
],
"source": [
"ds, dl = exp._get_data('test')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "9833f218",
"metadata": {
"ExecuteTime": {
"end_time": "2022-11-28T08:57:12.689804Z",
"start_time": "2022-11-28T08:57:00.798499Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"test 10632\n",
"loading model\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/332 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"test shape: (332, 32, 48, 1) (332, 32, 48, 1)\n",
"test shape: (10624, 48, 1) (10624, 48, 1)\n",
"mse:0.07340655475854874, mae:0.18461503088474274\n"
]
}
],
"source": [
"preds, trues = exp.test(setting, data='test')"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "d441dd5c",
"metadata": {
"ExecuteTime": {
"end_time": "2022-11-28T08:57:12.702997Z",
"start_time": "2022-11-28T08:57:12.690850Z"
}
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "5c88dbf7",
"metadata": {
"ExecuteTime": {
"end_time": "2022-11-28T08:57:12.810707Z",
"start_time": "2022-11-28T08:57:12.703870Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f471cae5ac0>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"i=990\n",
"(batch_x, batch_y, batch_x_mark, batch_y_mark) = ds[i]\n",
"l1 = batch_x.shape[0]\n",
"l2 = batch_y.shape[0]\n",
"plt.plot(range(l1), batch_x[:, -1], label='past')\n",
"plt.plot(range(l1, l1+l2), batch_y[:, -1], color='blue', ls='--', label='true')\n",
"plt.plot(range(l1, l1+l2), preds[i], label='pred');\n",
"plt.legend(loc='lower left')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "0a25923b",
"metadata": {
"ExecuteTime": {
"end_time": "2022-11-28T07:33:57.703528Z",
"start_time": "2022-11-28T07:33:57.689258Z"
}
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "665b98c3",
"metadata": {},
"source": [
"# TODO check index"
]
},
{
"cell_type": "markdown",
"id": "fc6ff0cd",
"metadata": {},
"source": [
"- s_end = index + self.seq_len\n",
"- r_begin = index + self.seq_len - self.label_len\n",
"- r_end = index + self.seq_len + self.pred_len"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "f482f601",
"metadata": {
"ExecuteTime": {
"end_time": "2022-11-28T10:36:01.084244Z",
"start_time": "2022-11-28T10:36:00.763026Z"
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>close</th>\n",
" <th>ref_close</th>\n",
" <th>sec_close</th>\n",
" <th>RVOLs_50_12_2ref_2ref</th>\n",
" <th>MACDVs_3_10_9_2ref_2ref</th>\n",
" <th>MACDVs_8_24_9_2ref_2ref</th>\n",
" <th>RRVOLs_50_12_2ref_2ref</th>\n",
" <th>RSMKs_3_24_12_2ref_2ref</th>\n",
" <th>RSMKs_128_8_4_2ref_2ref</th>\n",
" <th>RRSs_12_12_12_2ref_2ref</th>\n",
" <th>VRRSs_5_21_12_2ref_2ref</th>\n",
" <th>RSMKs_18_144_72_2ref_2ref</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2019-01-02 07:00:00</th>\n",
" <td>60.7500</td>\n",
" <td>246.3900</td>\n",
" <td>56.70</td>\n",
" <td>0.634561</td>\n",
" <td>0.228822</td>\n",
" <td>0.749770</td>\n",
" <td>-0.081572</td>\n",
" <td>0.754948</td>\n",
" <td>0.041974</td>\n",
" <td>0.452882</td>\n",
" <td>0.094300</td>\n",
" <td>-0.141763</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-01-02 09:30:00</th>\n",
" <td>60.2000</td>\n",
" <td>246.3000</td>\n",
" <td>56.30</td>\n",
" <td>0.619485</td>\n",
" <td>-0.138271</td>\n",
" <td>0.516611</td>\n",
" <td>-0.159545</td>\n",
" <td>0.690752</td>\n",
" <td>0.037310</td>\n",
" <td>0.201226</td>\n",
" <td>-0.050731</td>\n",
" <td>-0.127774</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-01-02 09:35:00</th>\n",
" <td>59.8500</td>\n",
" <td>246.5200</td>\n",
" <td>56.36</td>\n",
" <td>0.689500</td>\n",
" <td>-0.535564</td>\n",
" <td>0.191501</td>\n",
" <td>-0.104752</td>\n",
" <td>0.553376</td>\n",
" <td>0.027199</td>\n",
" <td>-0.217425</td>\n",
" <td>-0.069932</td>\n",
" <td>-0.117113</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-01-02 09:40:00</th>\n",
" <td>60.0600</td>\n",
" <td>246.9001</td>\n",
" <td>56.70</td>\n",
" <td>0.746596</td>\n",
" <td>-0.803242</td>\n",
" <td>-0.130051</td>\n",
" <td>-0.070761</td>\n",
" <td>0.402911</td>\n",
" <td>0.015511</td>\n",
" <td>-0.473000</td>\n",
" <td>-0.089949</td>\n",
" <td>-0.109966</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-01-02 09:45:00</th>\n",
" <td>60.2350</td>\n",
" <td>247.1400</td>\n",
" <td>56.69</td>\n",
" <td>0.701637</td>\n",
" <td>-0.936439</td>\n",
" <td>-0.409001</td>\n",
" <td>-0.130581</td>\n",
" <td>0.263664</td>\n",
" <td>0.003868</td>\n",
" <td>-0.679096</td>\n",
" <td>-0.096488</td>\n",
" <td>-0.105561</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-12-31 17:35:00</th>\n",
" <td>17.3300</td>\n",
" <td>374.2100</td>\n",
" <td>37.90</td>\n",
" <td>0.706492</td>\n",
" <td>-0.129955</td>\n",
" <td>-0.551704</td>\n",
" <td>0.197178</td>\n",
" <td>-0.842459</td>\n",
" <td>-0.216290</td>\n",
" <td>-3.579407</td>\n",
" <td>-0.088556</td>\n",
" <td>-1.118991</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-12-31 18:30:00</th>\n",
" <td>17.3200</td>\n",
" <td>374.4000</td>\n",
" <td>37.96</td>\n",
" <td>0.615936</td>\n",
" <td>-0.147461</td>\n",
" <td>-0.538942</td>\n",
" <td>0.174563</td>\n",
" <td>-0.803874</td>\n",
" <td>-0.213881</td>\n",
" <td>-3.258388</td>\n",
" <td>-0.075389</td>\n",
" <td>-1.179880</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-12-31 19:15:00</th>\n",
" <td>17.3600</td>\n",
" <td>374.3900</td>\n",
" <td>37.95</td>\n",
" <td>0.605291</td>\n",
" <td>-0.105155</td>\n",
" <td>-0.508192</td>\n",
" <td>0.226633</td>\n",
" <td>-0.756699</td>\n",
" <td>-0.210656</td>\n",
" <td>-2.735903</td>\n",
" <td>-0.063731</td>\n",
" <td>-1.239256</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-12-31 19:20:00</th>\n",
" <td>17.3501</td>\n",
" <td>374.3900</td>\n",
" <td>37.95</td>\n",
" <td>0.592393</td>\n",
" <td>-0.065321</td>\n",
" <td>-0.475375</td>\n",
" <td>0.268617</td>\n",
" <td>-0.720279</td>\n",
" <td>-0.207647</td>\n",
" <td>-2.416748</td>\n",
" <td>-0.053941</td>\n",
" <td>-1.297199</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-12-31 19:55:00</th>\n",
" <td>17.4000</td>\n",
" <td>374.3900</td>\n",
" <td>37.95</td>\n",
" <td>0.504877</td>\n",
" <td>0.054870</td>\n",
" <td>-0.408612</td>\n",
" <td>0.198019</td>\n",
" <td>-0.664792</td>\n",
" <td>-0.201618</td>\n",
" <td>-2.009522</td>\n",
" <td>-0.045287</td>\n",
" <td>-1.352772</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>53398 rows × 12 columns</p>\n",
"</div>"
],
"text/plain": [
" close ref_close sec_close RVOLs_50_12_2ref_2ref \\\n",
"date \n",
"2019-01-02 07:00:00 60.7500 246.3900 56.70 0.634561 \n",
"2019-01-02 09:30:00 60.2000 246.3000 56.30 0.619485 \n",
"2019-01-02 09:35:00 59.8500 246.5200 56.36 0.689500 \n",
"2019-01-02 09:40:00 60.0600 246.9001 56.70 0.746596 \n",
"2019-01-02 09:45:00 60.2350 247.1400 56.69 0.701637 \n",
"... ... ... ... ... \n",
"2020-12-31 17:35:00 17.3300 374.2100 37.90 0.706492 \n",
"2020-12-31 18:30:00 17.3200 374.4000 37.96 0.615936 \n",
"2020-12-31 19:15:00 17.3600 374.3900 37.95 0.605291 \n",
"2020-12-31 19:20:00 17.3501 374.3900 37.95 0.592393 \n",
"2020-12-31 19:55:00 17.4000 374.3900 37.95 0.504877 \n",
"\n",
" MACDVs_3_10_9_2ref_2ref MACDVs_8_24_9_2ref_2ref \\\n",
"date \n",
"2019-01-02 07:00:00 0.228822 0.749770 \n",
"2019-01-02 09:30:00 -0.138271 0.516611 \n",
"2019-01-02 09:35:00 -0.535564 0.191501 \n",
"2019-01-02 09:40:00 -0.803242 -0.130051 \n",
"2019-01-02 09:45:00 -0.936439 -0.409001 \n",
"... ... ... \n",
"2020-12-31 17:35:00 -0.129955 -0.551704 \n",
"2020-12-31 18:30:00 -0.147461 -0.538942 \n",
"2020-12-31 19:15:00 -0.105155 -0.508192 \n",
"2020-12-31 19:20:00 -0.065321 -0.475375 \n",
"2020-12-31 19:55:00 0.054870 -0.408612 \n",
"\n",
" RRVOLs_50_12_2ref_2ref RSMKs_3_24_12_2ref_2ref \\\n",
"date \n",
"2019-01-02 07:00:00 -0.081572 0.754948 \n",
"2019-01-02 09:30:00 -0.159545 0.690752 \n",
"2019-01-02 09:35:00 -0.104752 0.553376 \n",
"2019-01-02 09:40:00 -0.070761 0.402911 \n",
"2019-01-02 09:45:00 -0.130581 0.263664 \n",
"... ... ... \n",
"2020-12-31 17:35:00 0.197178 -0.842459 \n",
"2020-12-31 18:30:00 0.174563 -0.803874 \n",
"2020-12-31 19:15:00 0.226633 -0.756699 \n",
"2020-12-31 19:20:00 0.268617 -0.720279 \n",
"2020-12-31 19:55:00 0.198019 -0.664792 \n",
"\n",
" RSMKs_128_8_4_2ref_2ref RRSs_12_12_12_2ref_2ref \\\n",
"date \n",
"2019-01-02 07:00:00 0.041974 0.452882 \n",
"2019-01-02 09:30:00 0.037310 0.201226 \n",
"2019-01-02 09:35:00 0.027199 -0.217425 \n",
"2019-01-02 09:40:00 0.015511 -0.473000 \n",
"2019-01-02 09:45:00 0.003868 -0.679096 \n",
"... ... ... \n",
"2020-12-31 17:35:00 -0.216290 -3.579407 \n",
"2020-12-31 18:30:00 -0.213881 -3.258388 \n",
"2020-12-31 19:15:00 -0.210656 -2.735903 \n",
"2020-12-31 19:20:00 -0.207647 -2.416748 \n",
"2020-12-31 19:55:00 -0.201618 -2.009522 \n",
"\n",
" VRRSs_5_21_12_2ref_2ref RSMKs_18_144_72_2ref_2ref \n",
"date \n",
"2019-01-02 07:00:00 0.094300 -0.141763 \n",
"2019-01-02 09:30:00 -0.050731 -0.127774 \n",
"2019-01-02 09:35:00 -0.069932 -0.117113 \n",
"2019-01-02 09:40:00 -0.089949 -0.109966 \n",
"2019-01-02 09:45:00 -0.096488 -0.105561 \n",
"... ... ... \n",
"2020-12-31 17:35:00 -0.088556 -1.118991 \n",
"2020-12-31 18:30:00 -0.075389 -1.179880 \n",
"2020-12-31 19:15:00 -0.063731 -1.239256 \n",
"2020-12-31 19:20:00 -0.053941 -1.297199 \n",
"2020-12-31 19:55:00 -0.045287 -1.352772 \n",
"\n",
"[53398 rows x 12 columns]"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f = ds.root_path + '/' + ds.data_path\n",
"df = pd.read_csv(f).set_index('date', drop=False)\n",
"df = df[ds.cols[1:]]\n",
"# df[:] = ds.scaler.transform(df.values)\n",
"df\n",
"# df"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "1893beae",
"metadata": {
"ExecuteTime": {
"end_time": "2022-11-28T10:36:01.752475Z",
"start_time": "2022-11-28T10:36:01.610159Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([-3.5727635])"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from data_provider.data_loader import Dataset_Custom\n",
"ds2 = Dataset_Custom(\n",
" ds.root_path,\n",
" flag=\"test\",\n",
"# size=ds.size,\n",
" size=[ds.seq_len, ds.label_len, ds.pred_len],\n",
" features=ds.features,\n",
" data_path=ds.data_path,\n",
" target=ds.target,\n",
" scale=False,\n",
" timeenc=ds.timeenc,\n",
" freq=ds.freq\n",
")\n",
"\n",
"i=99\n",
"(batch_x, batch_y, batch_x_mark, batch_y_mark) = ds2[i]\n",
"batch_x[-1]"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "ad5e1a84",
"metadata": {
"ExecuteTime": {
"end_time": "2022-11-28T10:36:10.570813Z",
"start_time": "2022-11-28T10:36:10.553352Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'RSMKs_18_144_72_2ref_2ref'"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ds.target"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "c9a56c82",
"metadata": {
"ExecuteTime": {
"end_time": "2022-11-28T10:36:14.702876Z",
"start_time": "2022-11-28T10:36:14.689691Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"['date',\n",
" 'close',\n",
" 'ref_close',\n",
" 'sec_close',\n",
" 'RVOLs_50_12_2ref_2ref',\n",
" 'MACDVs_3_10_9_2ref_2ref',\n",
" 'MACDVs_8_24_9_2ref_2ref',\n",
" 'RRVOLs_50_12_2ref_2ref',\n",
" 'RSMKs_3_24_12_2ref_2ref',\n",
" 'RSMKs_128_8_4_2ref_2ref',\n",
" 'RRSs_12_12_12_2ref_2ref',\n",
" 'VRRSs_5_21_12_2ref_2ref',\n",
" 'RSMKs_18_144_72_2ref_2ref']"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ds.cols"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "f0a63562",
"metadata": {
"ExecuteTime": {
"end_time": "2022-11-28T10:36:01.892659Z",
"start_time": "2022-11-28T10:36:01.875741Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"close 12.425000\n",
"ref_close 354.330000\n",
"sec_close 35.270000\n",
"RVOLs_50_12_2ref_2ref 0.624195\n",
"MACDVs_3_10_9_2ref_2ref -0.120630\n",
"MACDVs_8_24_9_2ref_2ref 0.464484\n",
"RRVOLs_50_12_2ref_2ref -0.396678\n",
"RSMKs_3_24_12_2ref_2ref 1.041695\n",
"RSMKs_128_8_4_2ref_2ref -0.028802\n",
"RRSs_12_12_12_2ref_2ref -0.461073\n",
"VRRSs_5_21_12_2ref_2ref -0.009818\n",
"RSMKs_18_144_72_2ref_2ref -3.572763\n",
"Name: 2020-09-02 11:20:00, dtype: float64"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dt = ds2.index.iloc[i-1]\n",
"df.loc[dt]"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "65c56ec5",
"metadata": {
"ExecuteTime": {
"end_time": "2022-11-28T10:36:02.191462Z",
"start_time": "2022-11-28T10:36:02.167071Z"
}
},
"outputs": [
{
"ename": "AssertionError",
"evalue": "index should be right",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mAssertionError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn [16], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m df\u001b[38;5;241m.\u001b[39mloc[dt]\u001b[38;5;241m.\u001b[39mclose \u001b[38;5;241m==\u001b[39m batch_x[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m0\u001b[39m], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mindex should be right\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mOK\u001b[39m\u001b[38;5;124m'\u001b[39m\n",
"\u001b[0;31mAssertionError\u001b[0m: index should be right"
]
}
],
"source": [
"assert df.loc[dt].close == batch_x[-1, 0], 'index should be right'\n",
"'OK'"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "692aadfa",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "2dd11010",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "e4413025",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "deeptime",
"language": "python",
"name": "deeptime"
},
"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.8.13"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 5
}