From ea3b333936f77ebfa956eb8ac25b073976345667 Mon Sep 17 00:00:00 2001 From: workpc Date: Fri, 20 Dec 2024 18:21:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=87=86=E7=A1=AE=E7=8E=87=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 原油价格预测准确率计算.ipynb | 406 ++++++++--------------------------- 1 file changed, 89 insertions(+), 317 deletions(-) diff --git a/原油价格预测准确率计算.ipynb b/原油价格预测准确率计算.ipynb index 4f6a04b..e024d65 100644 --- a/原油价格预测准确率计算.ipynb +++ b/原油价格预测准确率计算.ipynb @@ -321,345 +321,117 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 31, "id": "0f942c69", "metadata": {}, - "outputs": [ - { - "ename": "KeyError", - "evalue": "'PREDICT_DATE'", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", - "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:3791\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3790\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m-> 3791\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine\u001b[38;5;241m.\u001b[39mget_loc(casted_key)\n\u001b[0;32m 3792\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n", - "File \u001b[1;32mindex.pyx:152\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", - "File \u001b[1;32mindex.pyx:181\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", - "File \u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi:7080\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", - "File \u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi:7088\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", - "\u001b[1;31mKeyError\u001b[0m: 'PREDICT_DATE'", - "\nThe above exception was the direct cause of the following exception:\n", - "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[16], line 4\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[38;5;66;03m# ds 按周取\u001b[39;00m\n\u001b[0;32m 3\u001b[0m df[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mDs_Week\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m df[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mds\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mapply(\u001b[38;5;28;01mlambda\u001b[39;00m x: x\u001b[38;5;241m.\u001b[39mstrftime(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m%\u001b[39m\u001b[38;5;124mU\u001b[39m\u001b[38;5;124m'\u001b[39m))\n\u001b[1;32m----> 4\u001b[0m df[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mPre_Week\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m df[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mPREDICT_DATE\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mapply(\u001b[38;5;28;01mlambda\u001b[39;00m x: x\u001b[38;5;241m.\u001b[39mstrftime(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m%\u001b[39m\u001b[38;5;124mU\u001b[39m\u001b[38;5;124m'\u001b[39m))\n", - "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\pandas\\core\\frame.py:3893\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3891\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns\u001b[38;5;241m.\u001b[39mnlevels \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[0;32m 3892\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getitem_multilevel(key)\n\u001b[1;32m-> 3893\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[39mget_loc(key)\n\u001b[0;32m 3894\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_integer(indexer):\n\u001b[0;32m 3895\u001b[0m indexer \u001b[38;5;241m=\u001b[39m [indexer]\n", - "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:3798\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3793\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(casted_key, \u001b[38;5;28mslice\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m (\n\u001b[0;32m 3794\u001b[0m \u001b[38;5;28misinstance\u001b[39m(casted_key, abc\u001b[38;5;241m.\u001b[39mIterable)\n\u001b[0;32m 3795\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28many\u001b[39m(\u001b[38;5;28misinstance\u001b[39m(x, \u001b[38;5;28mslice\u001b[39m) \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m casted_key)\n\u001b[0;32m 3796\u001b[0m ):\n\u001b[0;32m 3797\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m InvalidIndexError(key)\n\u001b[1;32m-> 3798\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n\u001b[0;32m 3799\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[0;32m 3800\u001b[0m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[0;32m 3801\u001b[0m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[0;32m 3802\u001b[0m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n\u001b[0;32m 3803\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_indexing_error(key)\n", - "\u001b[1;31mKeyError\u001b[0m: 'PREDICT_DATE'" - ] - } - ], - "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": null, - "id": "a7b05510", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
dsACCURACYPREDICT_DATECREAT_DATEHIGH_PRICE_yLOW_PRICE_yMIN_PRICEMAX_PRICEDs_WeekPre_Week
02024-11-261.0000002024-11-262024-11-2573.8071.6371.07155676.0069004747
12024-11-271.0000002024-11-272024-11-2572.8571.7171.00362475.5805604747
22024-11-280.7893242024-11-282024-11-2572.9671.8572.08385076.2042604747
32024-11-291.0000002024-11-292024-11-2573.3471.7571.32973075.7039504747
42024-12-020.8534122024-12-022024-11-2572.8971.5271.72082576.2642754848
.................................
702024-11-250.1183282024-11-252024-11-2274.8372.3074.53063076.6731404747
712024-11-260.0000002024-11-262024-11-2273.8071.6374.44043076.8745654747
722024-11-270.0000002024-11-272024-11-2272.8571.7174.66318076.7341304747
732024-11-280.0000002024-11-282024-11-2272.9671.8574.70841077.1410504747
742024-11-290.0000002024-11-292024-11-2273.3471.7574.70321077.7461704747
\n", - "

75 rows × 10 columns

\n", - "
" - ], - "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": null, - "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" + "(255, 6)\n", + " ds min_price max_price LOW_PRICE LOW_PRICE CREAT_DATE\n", + "0 2024-10-08 78.172055 81.172055 76.36 76.36 2024-10-07\n", + "1 2024-10-09 78.017734 81.017734 75.15 75.15 2024-10-07\n", + "2 2024-10-10 78.196563 81.196563 76.72 76.72 2024-10-07\n", + "3 2024-10-11 78.244970 81.244970 78.04 78.04 2024-10-07\n", + "4 2024-10-14 78.448240 81.448240 74.86 74.86 2024-10-07\n", + "5 2024-10-09 75.442758 78.442758 75.15 75.15 2024-10-08\n", + "6 2024-10-10 75.684414 78.684414 76.72 76.72 2024-10-08\n", + "7 2024-10-11 75.675482 78.675482 78.04 78.04 2024-10-08\n", + "8 2024-10-14 75.819379 78.819379 74.86 74.86 2024-10-08\n", + "9 2024-10-15 75.830953 78.830953 73.34 73.34 2024-10-08\n", + "['2024-10-07', '2024-10-08', '2024-10-09', '2024-10-10', '2024-10-11', '2024-10-12', '2024-10-13']\n", + "(10, 6)\n", + " ds min_price max_price LOW_PRICE LOW_PRICE CREAT_DATE\n", + "0 2024-10-08 78.172055 81.172055 76.36 76.36 2024-10-07\n", + "1 2024-10-09 78.017734 81.017734 75.15 75.15 2024-10-07\n", + "2 2024-10-10 78.196563 81.196563 76.72 76.72 2024-10-07\n", + "3 2024-10-11 78.244970 81.244970 78.04 78.04 2024-10-07\n", + "5 2024-10-09 75.442758 78.442758 75.15 75.15 2024-10-08\n", + "6 2024-10-10 75.684414 78.684414 76.72 76.72 2024-10-08\n", + "7 2024-10-11 75.675482 78.675482 78.04 78.04 2024-10-08\n", + "10 2024-10-10 75.439643 78.439643 76.72 76.72 2024-10-09\n", + "11 2024-10-11 75.214194 78.214194 78.04 78.04 2024-10-09\n", + "15 2024-10-11 77.558740 80.558740 78.04 78.04 2024-10-10\n" ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "(15, 10)\n" + "ename": "ValueError", + "evalue": "Per-column arrays must each be 1-dimensional", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[31], line 33\u001b[0m\n\u001b[0;32m 31\u001b[0m sns\u001b[38;5;241m.\u001b[39mscatterplot(x\u001b[38;5;241m=\u001b[39mdf6\u001b[38;5;241m.\u001b[39mindex,y\u001b[38;5;241m=\u001b[39mdf6[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmin_price\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mvalues,data\u001b[38;5;241m=\u001b[39mdf6)\n\u001b[0;32m 32\u001b[0m sns\u001b[38;5;241m.\u001b[39mscatterplot(x\u001b[38;5;241m=\u001b[39mdf6\u001b[38;5;241m.\u001b[39mindex,y\u001b[38;5;241m=\u001b[39mdf6[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmax_price\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mvalues,data\u001b[38;5;241m=\u001b[39mdf6)\n\u001b[1;32m---> 33\u001b[0m sns\u001b[38;5;241m.\u001b[39mscatterplot(x\u001b[38;5;241m=\u001b[39mdf6\u001b[38;5;241m.\u001b[39mindex,y\u001b[38;5;241m=\u001b[39mdf6[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mLOW_PRICE\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mvalues,data\u001b[38;5;241m=\u001b[39mdf6)\n\u001b[0;32m 34\u001b[0m sns\u001b[38;5;241m.\u001b[39mscatterplot(x\u001b[38;5;241m=\u001b[39mdf6\u001b[38;5;241m.\u001b[39mindex,y\u001b[38;5;241m=\u001b[39mdf6[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mHIGH_PRICE\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mvalues,data\u001b[38;5;241m=\u001b[39mdf6)\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\seaborn\\relational.py:742\u001b[0m, in \u001b[0;36mscatterplot\u001b[1;34m(data, x, y, hue, size, style, palette, hue_order, hue_norm, sizes, size_order, size_norm, markers, style_order, legend, ax, **kwargs)\u001b[0m\n\u001b[0;32m 732\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mscatterplot\u001b[39m(\n\u001b[0;32m 733\u001b[0m data\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m,\n\u001b[0;32m 734\u001b[0m x\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, y\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, hue\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, size\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, style\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 738\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[0;32m 739\u001b[0m ):\n\u001b[0;32m 741\u001b[0m variables \u001b[38;5;241m=\u001b[39m _ScatterPlotter\u001b[38;5;241m.\u001b[39mget_semantics(\u001b[38;5;28mlocals\u001b[39m())\n\u001b[1;32m--> 742\u001b[0m p \u001b[38;5;241m=\u001b[39m _ScatterPlotter(data\u001b[38;5;241m=\u001b[39mdata, variables\u001b[38;5;241m=\u001b[39mvariables, legend\u001b[38;5;241m=\u001b[39mlegend)\n\u001b[0;32m 744\u001b[0m p\u001b[38;5;241m.\u001b[39mmap_hue(palette\u001b[38;5;241m=\u001b[39mpalette, order\u001b[38;5;241m=\u001b[39mhue_order, norm\u001b[38;5;241m=\u001b[39mhue_norm)\n\u001b[0;32m 745\u001b[0m p\u001b[38;5;241m.\u001b[39mmap_size(sizes\u001b[38;5;241m=\u001b[39msizes, order\u001b[38;5;241m=\u001b[39msize_order, norm\u001b[38;5;241m=\u001b[39msize_norm)\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\seaborn\\relational.py:538\u001b[0m, in \u001b[0;36m_ScatterPlotter.__init__\u001b[1;34m(self, data, variables, legend)\u001b[0m\n\u001b[0;32m 529\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39m, data\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, variables\u001b[38;5;241m=\u001b[39m{}, legend\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[0;32m 530\u001b[0m \n\u001b[0;32m 531\u001b[0m \u001b[38;5;66;03m# TODO this is messy, we want the mapping to be agnostic about\u001b[39;00m\n\u001b[0;32m 532\u001b[0m \u001b[38;5;66;03m# the kind of plot to draw, but for the time being we need to set\u001b[39;00m\n\u001b[0;32m 533\u001b[0m \u001b[38;5;66;03m# this information so the SizeMapping can use it\u001b[39;00m\n\u001b[0;32m 534\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_default_size_range \u001b[38;5;241m=\u001b[39m (\n\u001b[0;32m 535\u001b[0m np\u001b[38;5;241m.\u001b[39mr_[\u001b[38;5;241m.5\u001b[39m, \u001b[38;5;241m2\u001b[39m] \u001b[38;5;241m*\u001b[39m np\u001b[38;5;241m.\u001b[39msquare(mpl\u001b[38;5;241m.\u001b[39mrcParams[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mlines.markersize\u001b[39m\u001b[38;5;124m\"\u001b[39m])\n\u001b[0;32m 536\u001b[0m )\n\u001b[1;32m--> 538\u001b[0m \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39m\u001b[38;5;21m__init__\u001b[39m(data\u001b[38;5;241m=\u001b[39mdata, variables\u001b[38;5;241m=\u001b[39mvariables)\n\u001b[0;32m 540\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlegend \u001b[38;5;241m=\u001b[39m legend\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\seaborn\\_oldcore.py:640\u001b[0m, in \u001b[0;36mVectorPlotter.__init__\u001b[1;34m(self, data, variables)\u001b[0m\n\u001b[0;32m 635\u001b[0m \u001b[38;5;66;03m# var_ordered is relevant only for categorical axis variables, and may\u001b[39;00m\n\u001b[0;32m 636\u001b[0m \u001b[38;5;66;03m# be better handled by an internal axis information object that tracks\u001b[39;00m\n\u001b[0;32m 637\u001b[0m \u001b[38;5;66;03m# such information and is set up by the scale_* methods. The analogous\u001b[39;00m\n\u001b[0;32m 638\u001b[0m \u001b[38;5;66;03m# information for numeric axes would be information about log scales.\u001b[39;00m\n\u001b[0;32m 639\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_var_ordered \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mx\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28;01mFalse\u001b[39;00m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124my\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28;01mFalse\u001b[39;00m} \u001b[38;5;66;03m# alt., used DefaultDict\u001b[39;00m\n\u001b[1;32m--> 640\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39massign_variables(data, variables)\n\u001b[0;32m 642\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m var, \u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_semantic_mappings\u001b[38;5;241m.\u001b[39mitems():\n\u001b[0;32m 643\u001b[0m \n\u001b[0;32m 644\u001b[0m \u001b[38;5;66;03m# Create the mapping function\u001b[39;00m\n\u001b[0;32m 645\u001b[0m map_func \u001b[38;5;241m=\u001b[39m partial(\u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m.\u001b[39mmap, plotter\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m)\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\seaborn\\_oldcore.py:701\u001b[0m, in \u001b[0;36mVectorPlotter.assign_variables\u001b[1;34m(self, data, variables)\u001b[0m\n\u001b[0;32m 699\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 700\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39minput_format \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mlong\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m--> 701\u001b[0m plot_data, variables \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_assign_variables_longform(\n\u001b[0;32m 702\u001b[0m data, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mvariables,\n\u001b[0;32m 703\u001b[0m )\n\u001b[0;32m 705\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mplot_data \u001b[38;5;241m=\u001b[39m plot_data\n\u001b[0;32m 706\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvariables \u001b[38;5;241m=\u001b[39m variables\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\seaborn\\_oldcore.py:962\u001b[0m, in \u001b[0;36mVectorPlotter._assign_variables_longform\u001b[1;34m(self, data, **kwargs)\u001b[0m\n\u001b[0;32m 958\u001b[0m variables[key] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(val, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mname\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[0;32m 960\u001b[0m \u001b[38;5;66;03m# Construct a tidy plot DataFrame. This will convert a number of\u001b[39;00m\n\u001b[0;32m 961\u001b[0m \u001b[38;5;66;03m# types automatically, aligning on index in case of pandas objects\u001b[39;00m\n\u001b[1;32m--> 962\u001b[0m plot_data \u001b[38;5;241m=\u001b[39m pd\u001b[38;5;241m.\u001b[39mDataFrame(plot_data)\n\u001b[0;32m 964\u001b[0m \u001b[38;5;66;03m# Reduce the variables dictionary to fields with valid data\u001b[39;00m\n\u001b[0;32m 965\u001b[0m variables \u001b[38;5;241m=\u001b[39m {\n\u001b[0;32m 966\u001b[0m var: name\n\u001b[0;32m 967\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m var, name \u001b[38;5;129;01min\u001b[39;00m variables\u001b[38;5;241m.\u001b[39mitems()\n\u001b[0;32m 968\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m plot_data[var]\u001b[38;5;241m.\u001b[39mnotnull()\u001b[38;5;241m.\u001b[39many()\n\u001b[0;32m 969\u001b[0m }\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\pandas\\core\\frame.py:733\u001b[0m, in \u001b[0;36mDataFrame.__init__\u001b[1;34m(self, data, index, columns, dtype, copy)\u001b[0m\n\u001b[0;32m 727\u001b[0m mgr \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_init_mgr(\n\u001b[0;32m 728\u001b[0m data, axes\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mindex\u001b[39m\u001b[38;5;124m\"\u001b[39m: index, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcolumns\u001b[39m\u001b[38;5;124m\"\u001b[39m: columns}, dtype\u001b[38;5;241m=\u001b[39mdtype, copy\u001b[38;5;241m=\u001b[39mcopy\n\u001b[0;32m 729\u001b[0m )\n\u001b[0;32m 731\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(data, \u001b[38;5;28mdict\u001b[39m):\n\u001b[0;32m 732\u001b[0m \u001b[38;5;66;03m# GH#38939 de facto copy defaults to False only in non-dict cases\u001b[39;00m\n\u001b[1;32m--> 733\u001b[0m mgr \u001b[38;5;241m=\u001b[39m dict_to_mgr(data, index, columns, dtype\u001b[38;5;241m=\u001b[39mdtype, copy\u001b[38;5;241m=\u001b[39mcopy, typ\u001b[38;5;241m=\u001b[39mmanager)\n\u001b[0;32m 734\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(data, ma\u001b[38;5;241m.\u001b[39mMaskedArray):\n\u001b[0;32m 735\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mma\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m mrecords\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\pandas\\core\\internals\\construction.py:503\u001b[0m, in \u001b[0;36mdict_to_mgr\u001b[1;34m(data, index, columns, dtype, typ, copy)\u001b[0m\n\u001b[0;32m 499\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 500\u001b[0m \u001b[38;5;66;03m# dtype check to exclude e.g. range objects, scalars\u001b[39;00m\n\u001b[0;32m 501\u001b[0m arrays \u001b[38;5;241m=\u001b[39m [x\u001b[38;5;241m.\u001b[39mcopy() \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(x, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdtype\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01melse\u001b[39;00m x \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m arrays]\n\u001b[1;32m--> 503\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m arrays_to_mgr(arrays, columns, index, dtype\u001b[38;5;241m=\u001b[39mdtype, typ\u001b[38;5;241m=\u001b[39mtyp, consolidate\u001b[38;5;241m=\u001b[39mcopy)\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\pandas\\core\\internals\\construction.py:114\u001b[0m, in \u001b[0;36marrays_to_mgr\u001b[1;34m(arrays, columns, index, dtype, verify_integrity, typ, consolidate)\u001b[0m\n\u001b[0;32m 111\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m verify_integrity:\n\u001b[0;32m 112\u001b[0m \u001b[38;5;66;03m# figure out the index, if necessary\u001b[39;00m\n\u001b[0;32m 113\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m index \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m--> 114\u001b[0m index \u001b[38;5;241m=\u001b[39m _extract_index(arrays)\n\u001b[0;32m 115\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 116\u001b[0m index \u001b[38;5;241m=\u001b[39m ensure_index(index)\n", + "File \u001b[1;32md:\\ProgramData\\anaconda3\\Lib\\site-packages\\pandas\\core\\internals\\construction.py:664\u001b[0m, in \u001b[0;36m_extract_index\u001b[1;34m(data)\u001b[0m\n\u001b[0;32m 662\u001b[0m raw_lengths\u001b[38;5;241m.\u001b[39mappend(\u001b[38;5;28mlen\u001b[39m(val))\n\u001b[0;32m 663\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(val, np\u001b[38;5;241m.\u001b[39mndarray) \u001b[38;5;129;01mand\u001b[39;00m val\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m--> 664\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mPer-column arrays must each be 1-dimensional\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 666\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m indexes \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m raw_lengths:\n\u001b[0;32m 667\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIf using all scalar values, you must pass an index\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "\u001b[1;31mValueError\u001b[0m: Per-column arrays must each be 1-dimensional" ] + }, + { + "data": { + "image/png": "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tMSNN9543O9dv359FAqFsUdXV1e1YwAAAAAAFWoaGRkZqeYbL7jggvje974Xn/70p8etvfrqq7F48eLo6+uLzs7OcetDQ0MxNDQ09rxcLkdXV1eUSqVjfj0AAAAAcHzlcjkKhcIJ+9qE7hl4xJ49e2LPnj2xatWqY67PmTMn/vCHP8Sbb755zD+8ra0t2traqvmjAQAAAIAqVXWZ8JYtW2L16tXR0tISERHf/OY3Y8uWLWPr//mf/xmnnXaay38BAAAA4BRS1ZmB27ZtixtuuGHs+XnnnRe33nprfPjDH4633347brrpprj++utj5syZUzYoAAAAADA5E46BAwMD0dPTExs3bhw79sUvfjF2794dn/vc52L27Nnx+c9/Pm677bYpHRQAAAAAmJyqNxCZSpXe4BAAAAAAGK/SvlbVPQMBAAAAgOlHDAQAAACAJKraQGSqHblSuVwu13kSAAAAAJh+jnS1E90R8JSIgf39/RER0dXVVedJAAAAAGD66u/vj0KhcNz1U2IDkT/84Q/xxhtvxOzZs6Opqane40y5crkcXV1dsW/fPhukMGW8rqgVry1qweuKWvC6ola8tqgFrytqweuK9xoZGYn+/v4488wz47TTjn9nwFPizMDTTjstzj777HqPUXOdnZ3+52TKeV1RK15b1ILXFbXgdUWteG1RC15X1ILXFUd80BmBR9hABAAAAACSEAMBAAAAIAkx8CRoa2uLv/3bv422trZ6j0ID8bqiVry2qAWvK2rB64pa8dqiFryuqAWvK6pxSmwgAgAAAADUnjMDAQAAACAJMRAAAAAAkhADAQAAACAJMRAAAAAAkhADa+y5556L888/P+bOnRs333xz2K+FqfDzn/88Fi9eHM3NzfHJT34ydu/eXe+RaDCXXXZZbNq0qd5j0GBuueWWuOKKK+o9Bg3i4YcfjgULFkRHR0esWrUqXnnllXqPxDT2u9/9LhYtWnTU68jneCbrWK8rn+OZrGO9rt7L53gqIQbW0NDQUFxxxRXxiU98Ip566qnYtWuX/ymZtL1798YNN9wQGzZsiNdffz3OOeec+PKXv1zvsWgg//iP/xi/+tWv6j0GDea5556L++67L+666656j0ID2Lt3b9x6663x6KOPxq5du+Kcc86J66+/vt5jMU319vbG6tWrj/rF2ud4JutYryuf45msY72u3svneColBtbQL3/5yyiVSnHHHXfEkiVL4rbbbosHH3yw3mMxze3evTtuu+22+MIXvhDz58+Pv/zLv4ynnnqq3mPRIH7/+9/Ht771rfijP/qjeo9CAxkZGYkbb7wxvv71r8eSJUvqPQ4NYOfOnbFy5cpYsWJFLFiwIG644YZ44YUX6j0W09R1110X11133VHHfI5nso71uvI5nsk61uvqCJ/jmYjmeg/QyJ555plYuXJlzJw5MyIili9fHrt27arzVEx3q1evPur5888/Hx/5yEfqNA2N5lvf+lZ8/vOfj4GBgXqPQgP58Y9/HE8//XR8+ctfjl/84hfxp3/6p9HS0lLvsZjGli1bFjt27IidO3fG4sWL4957741LL7203mMxTW3cuDEWL14cX//618eO+RzPZB3rdeVzPJN1rNfVET7HMxHODKyhcrkcixYtGnve1NQUp59+evT19dVxKhrJ8PBw3H777fFXf/VX9R6FBvCv//qvsX379vjBD35Q71FoIAcOHIjvfOc7sXTp0njttdfijjvuiO7u7hgcHKz3aExjy5Yti2uuuSZWrFgRc+bMiZ6enrj99tvrPRbT1OLFi8cd8zmeyTrW6+q9fI6nGsd7Xfkcz0SJgTXU3NwcbW1tRx2bMWNGHDp0qE4T0Wi+853vREdHR/zFX/xFvUdhmhscHIwbb7wxfvSjH0VnZ2e9x6GBbN26NQ4ePBg7duyI7373u/HrX/863nrrrXjooYfqPRrT2JNPPhmPP/549PT0RH9/f6xZsyYuv/xyGzwwZXyOp9Z8jmeq+BxPNcTAGpo3b17s37//qGP9/f3R2tpap4loJP/yL/8S999/f2zevNnldkza3/3d38X5558fn/nMZ+o9Cg3mtddei09+8pMxb968iBj9BXv58uXx8ssv13kyprOf/exncd1118UFF1wQHR0d8f3vfz9eeumleOaZZ+o9Gg3C53hqyed4ppLP8VTDPQNr6Pzzz48HHnhg7Pkrr7wSQ0NDY78QQbVeeuml+LM/+7P40Y9+FMuWLav3ODSAzZs3x/79+2POnDkREXHo0KHYsmVL/Md//Efcd9999R2Oaa2rq2vcvWteffXVuPjii+s0EY3g7bffPupyzf7+/jh48GC88847dZyKRuJzPLXiczxTzed4qiEG1lB3d3eUSqV46KGH4otf/GJs2LAhVq1aFaeffnq9R2MaGxgYiNWrV8eVV14Zn/vc5+LAgQMRETFr1qxoamqq83RMV7/97W/j7bffHnv+N3/zN7Fy5cq4/vrr6zcUDeEzn/lM3HTTTXH//ffH6tWrY+vWrfH000/HZZddVu/RmMYuuuii+NKXvhR33nlnzJ8/Px544IGYP39+LF++vN6j0SB8jqcWfI6nFnyOpxpiYA01NzfHxo0bY+3atXHzzTfHO++8E7/5zW/qPRbT3K9+9avYvXt37N69O3784x+PHX/55Zdj4cKF9RuMae3ss88+6nlHR0cUi8UoFot1mohGMW/evNi2bVt861vfim9+85vx4Q9/OH760596v2JSrr322nj++efjrrvuijfffDPOPffc2Lp1q8vtmDI+x1MLPsdTCz7HU42mEXdarrnXX389nnrqqbjwwgvjjDPOqPc4AABABXyOB6ARiYEAAAAAkITdhAEAAAAgCTEQAAAAAJIQAwEAAAAgCTEQAAAAAJIQAwEAAAAgCTEQAAAAAJIQAwEAAAAgCTEQAAAAAJIQAwEAAAAgif8fWCR656DKE9YAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "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", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", "\n", + "df5 = df.copy()\n", + "df5 = df5[['ds','min_price','max_price','LOW_PRICE','LOW_PRICE','CREAT_DATE']]\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)" + "print(df5.shape)\n", + "print(df5.head(10))\n", + "# 画图配置\n", + "plt.figure(figsize=(16,10))\n", + "\n", + "def get_this_week_date(end_time):\n", + " endtime = end_time\n", + " # endtimeweek = datetime.datetime.strptime(endtime, '%Y-%m-%d')\n", + " endtimeweek = endtime\n", + " up_week = endtimeweek - datetime.timedelta(days=endtimeweek.weekday() )\n", + " up_week_dates = [up_week + datetime.timedelta(days=i) for i in range(7)]\n", + " up_week_dates = [date.strftime('%Y-%m-%d') for date in up_week_dates]\n", + " return up_week_dates\n", + "\n", + "# ds分组\n", + "end_times = df['ds'].unique()\n", + "for endtime in end_times:\n", + " up_week_dates = get_this_week_date(endtime)\n", + " print(up_week_dates)\n", + " df6 = df5[df5['ds'].isin(up_week_dates)]\n", + " print(df6.shape)\n", + " print(df6.head(10))\n", + " # sns画散点图\n", + " sns.scatterplot(x=df6.index,y=df6['min_price'].values,data=df6)\n", + " sns.scatterplot(x=df6.index,y=df6['max_price'].values,data=df6)\n", + " sns.scatterplot(x=df6.index,y=df6['LOW_PRICE'].values,data=df6)\n", + " sns.scatterplot(x=df6.index,y=df6['HIGH_PRICE'].values,data=df6)\n", + " sns.scatterplot(x=df6.index,y=df6['HIGH_PRICE'].values,data=df6)" ] }, { "cell_type": "code", "execution_count": null, - "id": "8aa47e90", + "id": "336fa6ed", "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)" - ] + "outputs": [], + "source": [] } ], "metadata": {