511 lines
22 KiB
Plaintext
511 lines
22 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"id": "9daadf20-caa6-4b25-901c-6cc3ef563f58",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"(85, 28)\n",
|
||
"(20, 4)\n",
|
||
"(85, 31)\n",
|
||
" ds NHITS Informer LSTM iTransformer TSMixer \\\n",
|
||
"0 2024-11-25 75.714300 75.523370 73.614220 75.27068 75.03936 \n",
|
||
"1 2024-11-26 76.039635 75.558270 73.692310 75.04110 74.60100 \n",
|
||
"2 2024-11-27 77.375790 75.361885 73.826140 74.99121 74.37731 \n",
|
||
"3 2024-11-28 78.872400 76.339920 73.883484 75.79425 74.04826 \n",
|
||
"4 2024-11-29 79.576970 76.333170 73.876396 75.89008 74.07330 \n",
|
||
"\n",
|
||
" TSMixerx PatchTST RNN GRU ... y \\\n",
|
||
"0 74.581190 75.70277 74.721280 74.512060 ... 73.010002 \n",
|
||
"1 73.496025 75.97611 74.588060 74.713425 ... 72.809998 \n",
|
||
"2 73.522026 76.48628 74.486400 74.946010 ... 72.830002 \n",
|
||
"3 73.416306 76.38267 75.195710 74.946014 ... 73.279999 \n",
|
||
"4 73.521570 76.20661 75.089966 74.935165 ... 72.940002 \n",
|
||
"\n",
|
||
" min_within_quantile max_within_quantile id CREAT_DATE min_price \\\n",
|
||
"0 74.41491 75.29100 1 2024-11-22 74.414910 \n",
|
||
"1 74.11780 74.95678 2 2024-11-22 73.496025 \n",
|
||
"2 73.93820 74.50395 3 2024-11-22 73.522026 \n",
|
||
"3 73.85808 74.46382 4 2024-11-22 73.416306 \n",
|
||
"4 73.96690 74.81860 5 2024-11-22 73.521570 \n",
|
||
"\n",
|
||
" max_price 序号 LOW_PRICE HIGH_PRICE \n",
|
||
"0 75.959854 10.0 72.30 74.83 \n",
|
||
"1 77.182580 9.0 71.63 73.80 \n",
|
||
"2 78.378624 8.0 71.71 72.85 \n",
|
||
"3 79.415400 7.0 71.85 72.96 \n",
|
||
"4 79.576970 6.0 71.75 73.34 \n",
|
||
"\n",
|
||
"[5 rows x 31 columns]\n",
|
||
" ds NHITS Informer LSTM iTransformer TSMixer \\\n",
|
||
"80 2024-12-16 74.53431 73.944080 71.68200 74.022340 74.295820 \n",
|
||
"81 2024-12-17 74.81450 73.830450 71.95232 74.314950 74.167290 \n",
|
||
"82 2024-12-18 75.55861 73.525100 72.00824 74.441380 74.212180 \n",
|
||
"83 2024-12-19 75.36518 74.012215 72.20199 74.397190 74.330130 \n",
|
||
"84 2024-12-20 74.78187 73.929596 72.23908 74.510895 74.208084 \n",
|
||
"\n",
|
||
" TSMixerx PatchTST RNN GRU ... y min_within_quantile \\\n",
|
||
"80 74.41700 74.587390 73.607780 73.747700 ... NaN 74.231680 \n",
|
||
"81 74.36576 74.363060 73.688736 73.833950 ... NaN 73.735420 \n",
|
||
"82 74.29719 74.073555 73.456700 74.146034 ... NaN 74.073555 \n",
|
||
"83 73.79145 74.529945 74.230125 74.144520 ... NaN 74.330130 \n",
|
||
"84 74.59672 74.231255 74.201860 73.996100 ... NaN 74.083810 \n",
|
||
"\n",
|
||
" max_within_quantile id CREAT_DATE min_price max_price 序号 LOW_PRICE \\\n",
|
||
"80 74.621160 81 2024-12-16 72.75007 74.62116 NaN NaN \n",
|
||
"81 74.682365 82 2024-12-16 72.72196 74.81450 NaN NaN \n",
|
||
"82 75.157074 83 2024-12-16 73.12483 75.55861 NaN NaN \n",
|
||
"83 75.339240 84 2024-12-16 73.07359 75.36518 NaN NaN \n",
|
||
"84 74.604610 85 2024-12-16 72.93583 74.78187 NaN NaN \n",
|
||
"\n",
|
||
" HIGH_PRICE \n",
|
||
"80 NaN \n",
|
||
"81 NaN \n",
|
||
"82 NaN \n",
|
||
"83 NaN \n",
|
||
"84 NaN \n",
|
||
"\n",
|
||
"[5 rows x 31 columns]\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import sqlite3\n",
|
||
"import os\n",
|
||
"import pandas as pd\n",
|
||
"\n",
|
||
"# 预测价格数据\n",
|
||
"# dbfilename = os.path.join(r'D:\\code\\PriceForecast\\yuanyoudataset','jbsh_yuanyou.db')\n",
|
||
"# conn = sqlite3.connect(dbfilename)\n",
|
||
"# query = 'SELECT * FROM accuracy'\n",
|
||
"# df1 = pd.read_sql_query(query, conn)\n",
|
||
"# df1['ds'] = df1['PREDICT_DATE']\n",
|
||
"# conn.close()\n",
|
||
"# print(df1.shape)\n",
|
||
"\n",
|
||
"# 预测价格数据\n",
|
||
"dfcsvfilename = os.path.join(r'D:\\code\\PriceForecast\\yuanyoudataset','accuracy_ten.csv')\n",
|
||
"df1 = pd.read_csv(dfcsvfilename)\n",
|
||
"print(df1.shape)\n",
|
||
"\n",
|
||
"# 最高最低价\n",
|
||
"xlsfilename = os.path.join(r'D:\\code\\PriceForecast\\yuanyoudataset','数据项下载.xls')\n",
|
||
"df2 = pd.read_excel(xlsfilename)[5:]\n",
|
||
"df2 = df2.rename(columns = {'数据项名称':'ds','布伦特最低价':'LOW_PRICE','布伦特最高价':'HIGH_PRICE'})\n",
|
||
"print(df2.shape)\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"df = pd.merge(df1,df2,on=['ds'],how='left')\n",
|
||
"\n",
|
||
"df['ds'] = pd.to_datetime(df['ds'])\n",
|
||
"# df['PREDICT_DATE'] = pd.to_datetime(df['PREDICT_DATE'])\n",
|
||
"df = df.reindex()\n",
|
||
"\n",
|
||
"print(df.shape)\n",
|
||
"\n",
|
||
"df.to_csv(os.path.join(r'D:\\code\\PriceForecast\\yuanyoudataset','123.csv'))\n",
|
||
"# df = df[['ds','min_within_quantile','max_within_quantile']]\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"# 打印数据框的前几行\n",
|
||
"print(df.head())\n",
|
||
"print(df.tail())\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"id": "e51c3fd0-6bff-45de-b8b6-971e7986c7a7",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"ename": "KeyError",
|
||
"evalue": "\"None of [Index(['HIGH_PRICE_y', 'LOW_PRICE_y', 'MIN_PRICE', 'MAX_PRICE'], dtype='object')] are in the [columns]\"",
|
||
"output_type": "error",
|
||
"traceback": [
|
||
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
|
||
"\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)",
|
||
"Cell \u001b[1;32mIn[3], line 15\u001b[0m\n\u001b[0;32m 12\u001b[0m \u001b[38;5;66;03m# 使用 apply 函数来应用计算准确率的函数\u001b[39;00m\n\u001b[0;32m 14\u001b[0m columns \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mHIGH_PRICE_y\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mLOW_PRICE_y\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mMIN_PRICE\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mMAX_PRICE\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m---> 15\u001b[0m df[columns] \u001b[38;5;241m=\u001b[39m df[columns]\u001b[38;5;241m.\u001b[39mastype(\u001b[38;5;28mfloat\u001b[39m)\n\u001b[0;32m 16\u001b[0m df[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mACCURACY\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m df\u001b[38;5;241m.\u001b[39mapply(calculate_accuracy, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m)\n\u001b[0;32m 19\u001b[0m \u001b[38;5;66;03m# 打印结果\u001b[39;00m\n",
|
||
"File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\pandas\\core\\frame.py:3899\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3897\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_iterator(key):\n\u001b[0;32m 3898\u001b[0m key \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlist\u001b[39m(key)\n\u001b[1;32m-> 3899\u001b[0m indexer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns\u001b[38;5;241m.\u001b[39m_get_indexer_strict(key, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcolumns\u001b[39m\u001b[38;5;124m\"\u001b[39m)[\u001b[38;5;241m1\u001b[39m]\n\u001b[0;32m 3901\u001b[0m \u001b[38;5;66;03m# take() does not accept boolean indexers\u001b[39;00m\n\u001b[0;32m 3902\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(indexer, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdtype\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mbool\u001b[39m:\n",
|
||
"File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:6115\u001b[0m, in \u001b[0;36mIndex._get_indexer_strict\u001b[1;34m(self, key, axis_name)\u001b[0m\n\u001b[0;32m 6112\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 6113\u001b[0m keyarr, indexer, new_indexer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_reindex_non_unique(keyarr)\n\u001b[1;32m-> 6115\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_raise_if_missing(keyarr, indexer, axis_name)\n\u001b[0;32m 6117\u001b[0m keyarr \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtake(indexer)\n\u001b[0;32m 6118\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(key, Index):\n\u001b[0;32m 6119\u001b[0m \u001b[38;5;66;03m# GH 42790 - Preserve name from an Index\u001b[39;00m\n",
|
||
"File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:6176\u001b[0m, in \u001b[0;36mIndex._raise_if_missing\u001b[1;34m(self, key, indexer, axis_name)\u001b[0m\n\u001b[0;32m 6174\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m use_interval_msg:\n\u001b[0;32m 6175\u001b[0m key \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlist\u001b[39m(key)\n\u001b[1;32m-> 6176\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNone of [\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mkey\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m] are in the [\u001b[39m\u001b[38;5;132;01m{\u001b[39;00maxis_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m]\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 6178\u001b[0m not_found \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlist\u001b[39m(ensure_index(key)[missing_mask\u001b[38;5;241m.\u001b[39mnonzero()[\u001b[38;5;241m0\u001b[39m]]\u001b[38;5;241m.\u001b[39munique())\n\u001b[0;32m 6179\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mnot_found\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m not in index\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
|
||
"\u001b[1;31mKeyError\u001b[0m: \"None of [Index(['HIGH_PRICE_y', 'LOW_PRICE_y', 'MIN_PRICE', 'MAX_PRICE'], dtype='object')] are in the [columns]\""
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# 定义一个函数来计算准确率\n",
|
||
"def calculate_accuracy(row):\n",
|
||
" if row['HIGH_PRICE_y'] > row['MIN_PRICE']:\n",
|
||
" sorted_prices = sorted([row['LOW_PRICE_y'], row['MIN_PRICE'], row['MAX_PRICE'], row['HIGH_PRICE_y']])\n",
|
||
" middle_diff = sorted_prices[2] - sorted_prices[1]\n",
|
||
" price_range = row['HIGH_PRICE_y'] - row['LOW_PRICE_y']\n",
|
||
" accuracy = middle_diff / price_range\n",
|
||
" return accuracy\n",
|
||
" else:\n",
|
||
" return 0\n",
|
||
"\n",
|
||
"# 使用 apply 函数来应用计算准确率的函数\n",
|
||
"\n",
|
||
"columns = ['HIGH_PRICE_y','LOW_PRICE_y','MIN_PRICE','MAX_PRICE']\n",
|
||
"df[columns] = df[columns].astype(float)\n",
|
||
"df['ACCURACY'] = df.apply(calculate_accuracy, axis=1)\n",
|
||
"\n",
|
||
"\n",
|
||
"# 打印结果\n",
|
||
"print(df[['ds','ACCURACY',]+columns])\n",
|
||
"\n",
|
||
"df = df[['ds','ACCURACY','PREDICT_DATE','CREAT_DATE']+columns]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 138,
|
||
"id": "0f942c69",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import datetime\n",
|
||
"# ds 按周取\n",
|
||
"df['Ds_Week'] = df['ds'].apply(lambda x: x.strftime('%U'))\n",
|
||
"df['Pre_Week'] = df['PREDICT_DATE'].apply(lambda x: x.strftime('%U'))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 139,
|
||
"id": "a7b05510",
|
||
"metadata": {},
|
||
"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>ds</th>\n",
|
||
" <th>ACCURACY</th>\n",
|
||
" <th>PREDICT_DATE</th>\n",
|
||
" <th>CREAT_DATE</th>\n",
|
||
" <th>HIGH_PRICE_y</th>\n",
|
||
" <th>LOW_PRICE_y</th>\n",
|
||
" <th>MIN_PRICE</th>\n",
|
||
" <th>MAX_PRICE</th>\n",
|
||
" <th>Ds_Week</th>\n",
|
||
" <th>Pre_Week</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>2024-11-26</td>\n",
|
||
" <td>1.000000</td>\n",
|
||
" <td>2024-11-26</td>\n",
|
||
" <td>2024-11-25</td>\n",
|
||
" <td>73.80</td>\n",
|
||
" <td>71.63</td>\n",
|
||
" <td>71.071556</td>\n",
|
||
" <td>76.006900</td>\n",
|
||
" <td>47</td>\n",
|
||
" <td>47</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>2024-11-27</td>\n",
|
||
" <td>1.000000</td>\n",
|
||
" <td>2024-11-27</td>\n",
|
||
" <td>2024-11-25</td>\n",
|
||
" <td>72.85</td>\n",
|
||
" <td>71.71</td>\n",
|
||
" <td>71.003624</td>\n",
|
||
" <td>75.580560</td>\n",
|
||
" <td>47</td>\n",
|
||
" <td>47</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>2024-11-28</td>\n",
|
||
" <td>0.789324</td>\n",
|
||
" <td>2024-11-28</td>\n",
|
||
" <td>2024-11-25</td>\n",
|
||
" <td>72.96</td>\n",
|
||
" <td>71.85</td>\n",
|
||
" <td>72.083850</td>\n",
|
||
" <td>76.204260</td>\n",
|
||
" <td>47</td>\n",
|
||
" <td>47</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>2024-11-29</td>\n",
|
||
" <td>1.000000</td>\n",
|
||
" <td>2024-11-29</td>\n",
|
||
" <td>2024-11-25</td>\n",
|
||
" <td>73.34</td>\n",
|
||
" <td>71.75</td>\n",
|
||
" <td>71.329730</td>\n",
|
||
" <td>75.703950</td>\n",
|
||
" <td>47</td>\n",
|
||
" <td>47</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>2024-12-02</td>\n",
|
||
" <td>0.853412</td>\n",
|
||
" <td>2024-12-02</td>\n",
|
||
" <td>2024-11-25</td>\n",
|
||
" <td>72.89</td>\n",
|
||
" <td>71.52</td>\n",
|
||
" <td>71.720825</td>\n",
|
||
" <td>76.264275</td>\n",
|
||
" <td>48</td>\n",
|
||
" <td>48</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",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>70</th>\n",
|
||
" <td>2024-11-25</td>\n",
|
||
" <td>0.118328</td>\n",
|
||
" <td>2024-11-25</td>\n",
|
||
" <td>2024-11-22</td>\n",
|
||
" <td>74.83</td>\n",
|
||
" <td>72.30</td>\n",
|
||
" <td>74.530630</td>\n",
|
||
" <td>76.673140</td>\n",
|
||
" <td>47</td>\n",
|
||
" <td>47</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>71</th>\n",
|
||
" <td>2024-11-26</td>\n",
|
||
" <td>0.000000</td>\n",
|
||
" <td>2024-11-26</td>\n",
|
||
" <td>2024-11-22</td>\n",
|
||
" <td>73.80</td>\n",
|
||
" <td>71.63</td>\n",
|
||
" <td>74.440430</td>\n",
|
||
" <td>76.874565</td>\n",
|
||
" <td>47</td>\n",
|
||
" <td>47</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>72</th>\n",
|
||
" <td>2024-11-27</td>\n",
|
||
" <td>0.000000</td>\n",
|
||
" <td>2024-11-27</td>\n",
|
||
" <td>2024-11-22</td>\n",
|
||
" <td>72.85</td>\n",
|
||
" <td>71.71</td>\n",
|
||
" <td>74.663180</td>\n",
|
||
" <td>76.734130</td>\n",
|
||
" <td>47</td>\n",
|
||
" <td>47</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>73</th>\n",
|
||
" <td>2024-11-28</td>\n",
|
||
" <td>0.000000</td>\n",
|
||
" <td>2024-11-28</td>\n",
|
||
" <td>2024-11-22</td>\n",
|
||
" <td>72.96</td>\n",
|
||
" <td>71.85</td>\n",
|
||
" <td>74.708410</td>\n",
|
||
" <td>77.141050</td>\n",
|
||
" <td>47</td>\n",
|
||
" <td>47</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>74</th>\n",
|
||
" <td>2024-11-29</td>\n",
|
||
" <td>0.000000</td>\n",
|
||
" <td>2024-11-29</td>\n",
|
||
" <td>2024-11-22</td>\n",
|
||
" <td>73.34</td>\n",
|
||
" <td>71.75</td>\n",
|
||
" <td>74.703210</td>\n",
|
||
" <td>77.746170</td>\n",
|
||
" <td>47</td>\n",
|
||
" <td>47</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>75 rows × 10 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" ds ACCURACY PREDICT_DATE CREAT_DATE HIGH_PRICE_y LOW_PRICE_y \\\n",
|
||
"0 2024-11-26 1.000000 2024-11-26 2024-11-25 73.80 71.63 \n",
|
||
"1 2024-11-27 1.000000 2024-11-27 2024-11-25 72.85 71.71 \n",
|
||
"2 2024-11-28 0.789324 2024-11-28 2024-11-25 72.96 71.85 \n",
|
||
"3 2024-11-29 1.000000 2024-11-29 2024-11-25 73.34 71.75 \n",
|
||
"4 2024-12-02 0.853412 2024-12-02 2024-11-25 72.89 71.52 \n",
|
||
".. ... ... ... ... ... ... \n",
|
||
"70 2024-11-25 0.118328 2024-11-25 2024-11-22 74.83 72.30 \n",
|
||
"71 2024-11-26 0.000000 2024-11-26 2024-11-22 73.80 71.63 \n",
|
||
"72 2024-11-27 0.000000 2024-11-27 2024-11-22 72.85 71.71 \n",
|
||
"73 2024-11-28 0.000000 2024-11-28 2024-11-22 72.96 71.85 \n",
|
||
"74 2024-11-29 0.000000 2024-11-29 2024-11-22 73.34 71.75 \n",
|
||
"\n",
|
||
" MIN_PRICE MAX_PRICE Ds_Week Pre_Week \n",
|
||
"0 71.071556 76.006900 47 47 \n",
|
||
"1 71.003624 75.580560 47 47 \n",
|
||
"2 72.083850 76.204260 47 47 \n",
|
||
"3 71.329730 75.703950 47 47 \n",
|
||
"4 71.720825 76.264275 48 48 \n",
|
||
".. ... ... ... ... \n",
|
||
"70 74.530630 76.673140 47 47 \n",
|
||
"71 74.440430 76.874565 47 47 \n",
|
||
"72 74.663180 76.734130 47 47 \n",
|
||
"73 74.708410 77.141050 47 47 \n",
|
||
"74 74.703210 77.746170 47 47 \n",
|
||
"\n",
|
||
"[75 rows x 10 columns]"
|
||
]
|
||
},
|
||
"execution_count": 139,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 140,
|
||
"id": "1374e354",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"['2024-11-22', '2024-11-23', '2024-11-24', '2024-11-25', '2024-11-26', '2024-11-27', '2024-11-28', '2024-11-29']\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"(15, 10)\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# 取结束日期上一周的日期\n",
|
||
"endtime = '2024-12-3'\n",
|
||
"endtimeweek = datetime.datetime.strptime(endtime, '%Y-%m-%d')\n",
|
||
"up_week = endtimeweek - datetime.timedelta(days=endtimeweek.weekday() + 14)\n",
|
||
"up_week_dates = [up_week + datetime.timedelta(days=i) for i in range(14)][4:-2]\n",
|
||
"up_week_dates = [date.strftime('%Y-%m-%d') for date in up_week_dates]\n",
|
||
"print(up_week_dates)\n",
|
||
"\n",
|
||
"\n",
|
||
"df3 = df.copy()\n",
|
||
"df3 = df3[df3['CREAT_DATE'].isin(up_week_dates)]\n",
|
||
"df3 = df3[df3['PREDICT_DATE'].isin(up_week_dates)]\n",
|
||
"print(df3.shape)\n",
|
||
"df3.to_csv('up_week_dates.csv',index=False)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 141,
|
||
"id": "8aa47e90",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"2024-11-25 00:00:00\n",
|
||
"权重: 0.07\n",
|
||
"准确率: 1.7749209486165771\n",
|
||
"2024-11-26 00:00:00\n",
|
||
"权重: 0.13\n",
|
||
"准确率: 7.5\n",
|
||
"2024-11-27 00:00:00\n",
|
||
"权重: 0.2\n",
|
||
"准确率: 8.034364035087705\n",
|
||
"2024-11-28 00:00:00\n",
|
||
"权重: 0.27\n",
|
||
"准确率: 9.718006756756724\n",
|
||
"2024-11-29 00:00:00\n",
|
||
"权重: 0.33\n",
|
||
"准确率: 10.824716981132076\n",
|
||
"37.85200872159308\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"total = len(df3)\n",
|
||
"accuracy_rote = 0\n",
|
||
"# for i,group in df3.groupby('CREAT_DATE'):\n",
|
||
"for i,group in df3.groupby('ds'):\n",
|
||
" print(i)\n",
|
||
" print('权重:',round(len(group)/total,2))\n",
|
||
" print('准确率:',group['ACCURACY'].sum()/(len(group)/total))\n",
|
||
" accuracy_rote += group['ACCURACY'].sum()/(len(group)/total)\n",
|
||
"\n",
|
||
"print(accuracy_rote)"
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "base",
|
||
"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.7"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 5
|
||
}
|