2024-11-01 17:33:48 +08:00
|
|
|
|
{
|
|
|
|
|
"cells": [
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
"execution_count": 1,
|
2024-11-01 17:33:48 +08:00
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
2025-01-23 15:07:59 +08:00
|
|
|
|
{
|
|
|
|
|
"name": "stderr",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
"C:\\Users\\Administrator\\Anaconda3\\lib\\site-packages\\statsmodels\\compat\\pandas.py:49: FutureWarning:\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"The Panel class is removed from pandas. Accessing it from the top-level namespace will also be removed in the next version\n",
|
|
|
|
|
"\n"
|
|
|
|
|
]
|
|
|
|
|
},
|
2024-11-01 17:33:48 +08:00
|
|
|
|
{
|
|
|
|
|
"data": {
|
|
|
|
|
"text/html": [
|
|
|
|
|
" <script type=\"text/javascript\">\n",
|
|
|
|
|
" window.PlotlyConfig = {MathJaxConfig: 'local'};\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
" if (window.MathJax) {MathJax.Hub.Config({SVG: {font: \"STIX-Web\"}});}\n",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
" if (typeof require !== 'undefined') {\n",
|
|
|
|
|
" require.undef(\"plotly\");\n",
|
|
|
|
|
" requirejs.config({\n",
|
|
|
|
|
" paths: {\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
" 'plotly': ['https://cdn.plot.ly/plotly-2.2.0.min']\n",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
" }\n",
|
|
|
|
|
" });\n",
|
|
|
|
|
" require(['plotly'], function(Plotly) {\n",
|
|
|
|
|
" window._Plotly = Plotly;\n",
|
|
|
|
|
" });\n",
|
|
|
|
|
" }\n",
|
|
|
|
|
" </script>\n",
|
|
|
|
|
" "
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"output_type": "display_data"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"import requests\n",
|
|
|
|
|
"import json\n",
|
|
|
|
|
"import xlrd\n",
|
|
|
|
|
"import xlwt\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
"from datetime import datetime,timedelta\n",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
"import time\n",
|
|
|
|
|
"# 变量定义\n",
|
|
|
|
|
"login_url = \"http://10.200.32.39/jingbo-api/api/server/login\"\n",
|
|
|
|
|
"search_url = \"http://10.200.32.39/jingbo-api/api/warehouse/dwDataItem/queryByItemNos\"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"login_push_url = \"http://10.200.32.39/jingbo-api/api/server/login\"\n",
|
|
|
|
|
"upload_url = \"http://10.200.32.39/jingbo-api/api/dw/dataValue/pushDataValueList\"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"login_data = {\n",
|
|
|
|
|
" \"data\": {\n",
|
|
|
|
|
" \"account\": \"api_dev\",\n",
|
|
|
|
|
" \"password\": \"ZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2U=\",\n",
|
|
|
|
|
" \"tenantHashCode\": \"8a4577dbd919675758d57999a1e891fe\",\n",
|
|
|
|
|
" \"terminal\": \"API\"\n",
|
|
|
|
|
" },\n",
|
|
|
|
|
" \"funcModule\": \"API\",\n",
|
|
|
|
|
" \"funcOperation\": \"获取token\"\n",
|
|
|
|
|
"}\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"login_push_data = {\n",
|
|
|
|
|
" \"data\": {\n",
|
|
|
|
|
" \"account\": \"api_dev\",\n",
|
|
|
|
|
" \"password\": \"ZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2U=\",\n",
|
|
|
|
|
" \"tenantHashCode\": \"8a4577dbd919675758d57999a1e891fe\",\n",
|
|
|
|
|
" \"terminal\": \"API\"\n",
|
|
|
|
|
" },\n",
|
|
|
|
|
" \"funcModule\": \"API\",\n",
|
|
|
|
|
" \"funcOperation\": \"获取token\"\n",
|
|
|
|
|
"}\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"read_file_path_name = \"液化气数据.xls\"\n",
|
|
|
|
|
"one_cols = []\n",
|
|
|
|
|
"two_cols = []\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"import pandas as pd\n",
|
|
|
|
|
"import numpy as np\n",
|
|
|
|
|
"import matplotlib.pyplot as plt\n",
|
|
|
|
|
"import seaborn as sn\n",
|
|
|
|
|
"import random\n",
|
|
|
|
|
"import time\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"from plotly import __version__\n",
|
|
|
|
|
"from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"from sklearn import preprocessing\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"from pandas import Series,DataFrame\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"import matplotlib.pyplot as plt\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"import sklearn.datasets as datasets\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"#导入机器学习算法模型\n",
|
|
|
|
|
"from sklearn.linear_model import Lasso\n",
|
|
|
|
|
"from xgboost import XGBRegressor\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"import statsmodels.api as sm\n",
|
|
|
|
|
"try:\n",
|
|
|
|
|
" from keras.preprocessing.sequence import TimeseriesGenerator\n",
|
|
|
|
|
"except:\n",
|
|
|
|
|
" from tensorflow.keras.preprocessing.sequence import TimeseriesGenerator\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"import plotly.express as px\n",
|
|
|
|
|
"import plotly.graph_objects as go\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"import xgboost as xgb\n",
|
|
|
|
|
"from xgboost import plot_importance, plot_tree\n",
|
|
|
|
|
"from sklearn.metrics import mean_absolute_error\n",
|
|
|
|
|
"from statsmodels.tools.eval_measures import mse,rmse\n",
|
|
|
|
|
"from sklearn.model_selection import GridSearchCV\n",
|
|
|
|
|
"from xgboost import XGBRegressor\n",
|
|
|
|
|
"import warnings\n",
|
|
|
|
|
"import pickle\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"from sklearn.metrics import mean_squared_error\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"#切割训练数据和样本数据\n",
|
|
|
|
|
"from sklearn.model_selection import train_test_split\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"#用于模型评分\n",
|
|
|
|
|
"from sklearn.metrics import r2_score\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"le = preprocessing.LabelEncoder()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# print(__version__) # requires version >= 1.9.0\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"import cufflinks as cf\n",
|
|
|
|
|
"cf.go_offline()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"random.seed(100)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"%matplotlib inline\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# 数据获取\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"def get_head_auth():\n",
|
|
|
|
|
" login_res = requests.post(url=login_url, json=login_data, timeout=(3, 5))\n",
|
|
|
|
|
" text = json.loads(login_res.text)\n",
|
|
|
|
|
" if text[\"status\"]:\n",
|
|
|
|
|
" token = text[\"data\"][\"accessToken\"]\n",
|
|
|
|
|
" return token\n",
|
|
|
|
|
" else:\n",
|
|
|
|
|
" print(\"获取认证失败\")\n",
|
|
|
|
|
" return None\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"def get_data_value(token, dataItemNoList,date):\n",
|
|
|
|
|
" search_data = {\n",
|
|
|
|
|
" \"data\": {\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
" \"date\": date,\n",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
" \"dataItemNoList\": dataItemNoList\n",
|
|
|
|
|
" },\n",
|
|
|
|
|
" \"funcModule\": \"数据项\",\n",
|
|
|
|
|
" \"funcOperation\": \"查询\"\n",
|
|
|
|
|
" }\n",
|
|
|
|
|
" headers = {\"Authorization\": token}\n",
|
|
|
|
|
" search_res = requests.post(url=search_url, headers=headers, json=search_data, timeout=(3, 5))\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
" print(search_data)\n",
|
|
|
|
|
" \n",
|
2024-12-02 10:50:49 +08:00
|
|
|
|
" try:\n",
|
|
|
|
|
" search_value = json.loads(search_res.text)[\"data\"]\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
" print(search_value)\n",
|
2024-12-02 10:50:49 +08:00
|
|
|
|
" except json.JSONDecodeError as e:\n",
|
|
|
|
|
" print(f\"Error decoding JSON: {e}\")\n",
|
|
|
|
|
" print(\"Response content:\", search_res.text)\n",
|
|
|
|
|
" return None \n",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
" if search_value:\n",
|
|
|
|
|
" return search_value\n",
|
|
|
|
|
" else:\n",
|
|
|
|
|
" print(\"今天没有新数据\")\n",
|
|
|
|
|
" return search_value\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# xls文件处理\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"def write_xls(data):\n",
|
|
|
|
|
" # 创建一个Workbook对象\n",
|
|
|
|
|
" workbook = xlwt.Workbook()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 创建一个Sheet对象,可指定名称\n",
|
|
|
|
|
" sheet = workbook.load('Sheet1')\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 写入数据行\n",
|
|
|
|
|
" for row_index, row_data in enumerate(data):\n",
|
|
|
|
|
" for col_index, cell_data in enumerate(row_data):\n",
|
|
|
|
|
" sheet.write(row_index, col_index, cell_data)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 保存Workbook到文件\n",
|
|
|
|
|
" workbook.save(get_cur_time()[0] + '.xls')\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"def get_cur_time(date = ''):\n",
|
|
|
|
|
" if date == '':\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
" now = datetime.now()\n",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
" else:\n",
|
|
|
|
|
" now = date\n",
|
|
|
|
|
" year = now.year\n",
|
|
|
|
|
" month = now.month\n",
|
|
|
|
|
" day = now.day\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" if month < 10:\n",
|
|
|
|
|
" month = \"0\" + str(month)\n",
|
|
|
|
|
" if day < 10:\n",
|
|
|
|
|
" day = \"0\" + str(day)\n",
|
|
|
|
|
" cur_time = str(year) + str(month) + str(day)\n",
|
|
|
|
|
" cur_time2 = str(year) + \"-\" + str(month) + \"-\" + str(day)\n",
|
|
|
|
|
"# cur_time = '20231011'\n",
|
|
|
|
|
"# cur_time2 = '2023-10-11'\n",
|
|
|
|
|
" return cur_time, cur_time2\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"def get_head_push_auth():\n",
|
|
|
|
|
" login_res = requests.post(url=login_push_url, json=login_push_data, timeout=(3, 5))\n",
|
|
|
|
|
" text = json.loads(login_res.text)\n",
|
|
|
|
|
" if text[\"status\"]:\n",
|
|
|
|
|
" token = text[\"data\"][\"accessToken\"]\n",
|
|
|
|
|
" return token\n",
|
|
|
|
|
" else:\n",
|
|
|
|
|
" print(\"获取认证失败\")\n",
|
|
|
|
|
" return None\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"def upload_data_to_system(token_push,date):\n",
|
|
|
|
|
" data = {\n",
|
|
|
|
|
" \"funcModule\": \"数据表信息列表\",\n",
|
|
|
|
|
" \"funcOperation\": \"新增\",\n",
|
|
|
|
|
" \"data\": [\n",
|
|
|
|
|
" {\"dataItemNo\": \"250855713|Forecast_Price|ACN\",\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
" \"dataDate\": date,\n",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
" \"dataStatus\": \"add\",\n",
|
|
|
|
|
" \"dataValue\": forecast_price()\n",
|
|
|
|
|
" }\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" ]\n",
|
|
|
|
|
" }\n",
|
|
|
|
|
" headers = {\"Authorization\": token_push}\n",
|
|
|
|
|
" res = requests.post(url=upload_url, headers=headers, json=data, timeout=(3, 5))\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
" # print(res.text)\n",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
"\n",
|
|
|
|
|
" \n",
|
|
|
|
|
"# def upload_data_to_system(token):\n",
|
|
|
|
|
"# data = {\n",
|
|
|
|
|
"# \"funcModule\": \"数据表信息列表\",\n",
|
|
|
|
|
"# \"funcOperation\": \"新增\",\n",
|
|
|
|
|
"# \"data\": [\n",
|
|
|
|
|
"# {\"dataItemNo\": \"C01100036|Forecast_ Price|ACN\",\n",
|
|
|
|
|
"# \"dataDate\": '20230706',\n",
|
|
|
|
|
"# \"dataStatus\": \"add\",\n",
|
|
|
|
|
"# \"dataValue\": 3780.0\n",
|
|
|
|
|
"# }\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# ]\n",
|
|
|
|
|
"# }\n",
|
|
|
|
|
"# headers = {\"Authorization\": token}\n",
|
|
|
|
|
"# res = requests.post(url=upload_url, headers=headers, json=data, timeout=(3, 5))\n",
|
|
|
|
|
"# print(res.text)\n",
|
|
|
|
|
"\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
"price_list = []\n",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
" \n",
|
|
|
|
|
"def forecast_price():\n",
|
|
|
|
|
" # df_test = pd.read_csv('定价模型数据收集0212.csv')\n",
|
|
|
|
|
" df_test = pd.read_excel('液化气数据.xls')\n",
|
|
|
|
|
" df_test.drop([0],inplace=True)\n",
|
|
|
|
|
" try:\n",
|
|
|
|
|
" df_test['Date']=pd.to_datetime(df_test['Date'], format='%m/%d/%Y',infer_datetime_format=True)\n",
|
|
|
|
|
" except:\n",
|
|
|
|
|
" df_test['Date']=pd.to_datetime(df_test['Date'], format=r'%Y-%m-%d',infer_datetime_format=True)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" df_test_1 = df_test\n",
|
|
|
|
|
" df_test_1=df_test_1.fillna(df_test.ffill())\n",
|
|
|
|
|
" df_test_1=df_test_1.fillna(df_test_1.bfill())\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 选择用于模型训练的列名称\n",
|
|
|
|
|
" col_for_training = df_test_1.columns\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" import joblib\n",
|
|
|
|
|
" Best_model_DalyLGPrice = joblib.load(\"日度价格预测_液化气最佳模型.pkl\")\n",
|
|
|
|
|
" # 最新的一天为最后一行的数据\n",
|
|
|
|
|
" \n",
|
|
|
|
|
" df_test_1_Day = df_test_1.tail(1)\n",
|
|
|
|
|
" # 移除不需要的列\n",
|
|
|
|
|
" df_test_1_Day.index = df_test_1_Day[\"Date\"]\n",
|
|
|
|
|
" df_test_1_Day = df_test_1_Day.drop([\"Date\"], axis= 1)\n",
|
|
|
|
|
" df_test_1_Day=df_test_1_Day.drop('Price',axis=1)\n",
|
|
|
|
|
" df_test_1_Day=df_test_1_Day.dropna()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" for col in df_test_1_Day.columns:\n",
|
|
|
|
|
" df_test_1_Day[col] = pd.to_numeric(df_test_1_Day[col],errors='coerce')\n",
|
|
|
|
|
" #预测今日价格,显示至小数点后两位\n",
|
|
|
|
|
" Ypredict_Today=Best_model_DalyLGPrice.predict(df_test_1_Day)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" df_test_1_Day['日度预测价格']=Ypredict_Today\n",
|
|
|
|
|
" print(df_test_1_Day['日度预测价格'])\n",
|
|
|
|
|
" a = df_test_1_Day['日度预测价格']\n",
|
|
|
|
|
" a = a[0]\n",
|
|
|
|
|
" a = float(a)\n",
|
|
|
|
|
" a = round(a,2)\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
" price_list.append(a)\n",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
" return a\n",
|
|
|
|
|
"def optimize_Model():\n",
|
|
|
|
|
" from sklearn.model_selection import train_test_split\n",
|
|
|
|
|
" from sklearn.impute import SimpleImputer\n",
|
|
|
|
|
" from sklearn.preprocessing import OrdinalEncoder\n",
|
|
|
|
|
" from sklearn.feature_selection import SelectFromModel\n",
|
|
|
|
|
" from sklearn.metrics import mean_squared_error, r2_score\n",
|
|
|
|
|
" import pandas as pd\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" pd.set_option('display.max_rows',40) \n",
|
|
|
|
|
" pd.set_option('display.max_columns',40) \n",
|
|
|
|
|
" df_test = pd.read_excel('液化气数据.xls')\n",
|
|
|
|
|
" df_test.drop([0],inplace=True)\n",
|
|
|
|
|
" try:\n",
|
|
|
|
|
" df_test['Date']=pd.to_datetime(df_test['Date'], format='%m/%d/%Y',infer_datetime_format=True)\n",
|
|
|
|
|
" except:\n",
|
|
|
|
|
" df_test['Date']=pd.to_datetime(df_test['Date'], format=r'%Y-%m-%d',infer_datetime_format=True)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" \n",
|
|
|
|
|
" #将缺失值补为前一个或者后一个数值\n",
|
|
|
|
|
" df_test_1 = df_test\n",
|
|
|
|
|
" df_test_1=df_test_1.fillna(df_test.ffill())\n",
|
|
|
|
|
" df_test_1=df_test_1.fillna(df_test_1.bfill())\n",
|
|
|
|
|
" df_test_1[\"Date\"] = pd.to_datetime(df_test_1[\"Date\"])\n",
|
|
|
|
|
" df_test_1.index = df_test_1[\"Date\"]\n",
|
|
|
|
|
" df_test_1 = df_test_1.drop([\"Date\"], axis= 1)\n",
|
|
|
|
|
" df_test_1 = df_test_1.astype('float')\n",
|
|
|
|
|
" \n",
|
|
|
|
|
" \n",
|
|
|
|
|
" import numpy as np\n",
|
|
|
|
|
" import pandas as pd\n",
|
|
|
|
|
" from pandas import Series,DataFrame\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" import matplotlib.pyplot as plt\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" import sklearn.datasets as datasets\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" #导入机器学习算法模型\n",
|
|
|
|
|
" from sklearn.linear_model import Lasso\n",
|
|
|
|
|
" from xgboost import XGBRegressor\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" import statsmodels.api as sm\n",
|
|
|
|
|
" try:\n",
|
|
|
|
|
" from keras.preprocessing.sequence import TimeseriesGenerator\n",
|
|
|
|
|
" except:\n",
|
|
|
|
|
" from tensorflow.keras.preprocessing.sequence import TimeseriesGenerator\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" import plotly.express as px\n",
|
|
|
|
|
" import plotly.graph_objects as go\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" import xgboost as xgb\n",
|
|
|
|
|
" from xgboost import plot_importance, plot_tree\n",
|
|
|
|
|
" from sklearn.metrics import mean_absolute_error\n",
|
|
|
|
|
" from statsmodels.tools.eval_measures import mse,rmse\n",
|
|
|
|
|
" from sklearn.model_selection import GridSearchCV\n",
|
|
|
|
|
" from xgboost import XGBRegressor\n",
|
|
|
|
|
" import warnings\n",
|
|
|
|
|
" import pickle\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" from sklearn.metrics import mean_squared_error\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" #切割训练数据和样本数据\n",
|
|
|
|
|
" from sklearn.model_selection import train_test_split\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" #用于模型评分\n",
|
|
|
|
|
" from sklearn.metrics import r2_score\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" dataset1=df_test_1.drop('Price',axis=1)#.astype(float)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" y=df_test_1['Price']\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" x=dataset1 \n",
|
|
|
|
|
"\n",
|
|
|
|
|
" train = x\n",
|
|
|
|
|
" target = y\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" #切割数据样本集合测试集\n",
|
|
|
|
|
" X_train,x_test,y_train,y_true = train_test_split(train,target,test_size=0.2,random_state=0)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" #模型缩写\n",
|
|
|
|
|
" Lasso = Lasso(random_state=0)\n",
|
|
|
|
|
" XGBR = XGBRegressor(random_state=0)\n",
|
|
|
|
|
" #训练模型\n",
|
|
|
|
|
" Lasso.fit(X_train,y_train)\n",
|
|
|
|
|
" XGBR.fit(X_train,y_train)\n",
|
|
|
|
|
" #模型拟合\n",
|
|
|
|
|
" y_pre_Lasso = Lasso.predict(x_test)\n",
|
|
|
|
|
" y_pre_XGBR = XGBR.predict(x_test)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" #计算Lasso、XGBR、RandomForestR、AdaBoostR、GradientBoostingR、BaggingRegressor各模型的R²\n",
|
|
|
|
|
" Lasso_score = r2_score(y_true,y_pre_Lasso)\n",
|
|
|
|
|
" XGBR_score=r2_score(y_true,y_pre_XGBR)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" #计算Lasso、XGBR的MSE和RMSE\n",
|
|
|
|
|
" Lasso_MSE=mean_squared_error(y_true, y_pre_Lasso)\n",
|
|
|
|
|
" XGBR_MSE=mean_squared_error(y_true, y_pre_XGBR)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" Lasso_RMSE=np.sqrt(Lasso_MSE)\n",
|
|
|
|
|
" XGBR_RMSE=np.sqrt(XGBR_MSE)\n",
|
|
|
|
|
" # 将不同模型的不同误差值整合成一个表格\n",
|
|
|
|
|
" model_results = pd.DataFrame([['Lasso', Lasso_RMSE, Lasso_score],\n",
|
|
|
|
|
" ['XgBoost', XGBR_RMSE, XGBR_score]],\n",
|
|
|
|
|
" columns = ['模型(Model)','均方根误差(RMSE)', 'R^2 score'])\n",
|
|
|
|
|
" #将模型名称(Model)列设置为索引\n",
|
|
|
|
|
" model_results1=model_results.set_index('模型(Model)')\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" model_results1\n",
|
|
|
|
|
" #定义plot_feature_importance函数,该函数用于计算特征重要性。此部分代码无需调整\n",
|
|
|
|
|
" def plot_feature_importance(importance,names,model_type):\n",
|
|
|
|
|
" feature_importance = np.array(importance)\n",
|
|
|
|
|
" feature_names = np.array(names)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" data={'feature_names':feature_names,'feature_importance':feature_importance}\n",
|
|
|
|
|
" fi_df = pd.DataFrame(data)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" fi_df.sort_values(by=['feature_importance'], ascending=False,inplace=True)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" plt.figure(figsize=(10,8))\n",
|
|
|
|
|
" sn.barplot(x=fi_df['feature_importance'], y=fi_df['feature_names'])\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" plt.title(model_type + \" \"+'FEATURE IMPORTANCE')\n",
|
|
|
|
|
" plt.xlabel('FEATURE IMPORTANCE')\n",
|
|
|
|
|
" plt.ylabel('FEATURE NAMES')\n",
|
|
|
|
|
" from pylab import mpl\n",
|
|
|
|
|
" %pylab\n",
|
|
|
|
|
" mpl.rcParams['font.sans-serif'] = ['SimHei']\n",
|
|
|
|
|
" ## Xgboost 模型参数优化-初步\n",
|
|
|
|
|
" #参考: https://juejin.im/post/6844903661013827598 \n",
|
|
|
|
|
" #每次调参时,备选参数数值以同数量级的1、3、10设置即可(比如设置1、3、10,或0.1、0.3、1.0,或0.01,0.03,0.10即可)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" from xgboost import XGBRegressor\n",
|
|
|
|
|
" from sklearn.model_selection import GridSearchCV\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" estimator = XGBRegressor(random_state=0,\n",
|
|
|
|
|
" nthread=4,\n",
|
|
|
|
|
" seed=0\n",
|
|
|
|
|
" )\n",
|
|
|
|
|
" parameters = {\n",
|
|
|
|
|
" 'max_depth': range (2, 11, 2), # 树的最大深度\n",
|
|
|
|
|
" 'n_estimators': range (50, 101, 10), # 迭代次数\n",
|
|
|
|
|
" 'learning_rate': [0.01, 0.03, 0.1, 0.3, 0.5, 1]\n",
|
|
|
|
|
" }\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" grid_search_XGB = GridSearchCV(\n",
|
|
|
|
|
" estimator=estimator,\n",
|
|
|
|
|
" param_grid=parameters,\n",
|
|
|
|
|
" # n_jobs = 10,\n",
|
|
|
|
|
" cv = 3,\n",
|
|
|
|
|
" verbose=True\n",
|
|
|
|
|
" )\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" grid_search_XGB.fit(X_train, y_train)\n",
|
|
|
|
|
" #如果电脑在此步骤报错,可能是因为计算量太大,超过硬件可支持程度,可注释掉“n_jobs=10”一行\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" best_parameters = grid_search_XGB.best_estimator_.get_params()\n",
|
|
|
|
|
" y_pred = grid_search_XGB.predict(x_test)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" op_XGBR_score = r2_score(y_true,y_pred)\n",
|
|
|
|
|
" op_XGBR_MSE= mean_squared_error(y_true, y_pred)\n",
|
|
|
|
|
" op_XGBR_RMSE= np.sqrt(op_XGBR_MSE)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" model_results2 = pd.DataFrame([['Optimized_Xgboost', op_XGBR_RMSE, op_XGBR_score]],\n",
|
|
|
|
|
" columns = ['模型(Model)', '均方根误差(RMSE)', 'R^2 score'])\n",
|
|
|
|
|
" model_results2=model_results2.set_index('模型(Model)')\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" try:\n",
|
|
|
|
|
" results = model_results1.append(model_results2, ignore_index = False)\n",
|
|
|
|
|
" except:\n",
|
|
|
|
|
" results = pd.concat([model_results1,model_results2],ignore_index=True)\n",
|
|
|
|
|
" import pickle\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" Pkl_Filename = \"日度价格预测_液化气最佳模型.pkl\" \n",
|
|
|
|
|
"\n",
|
|
|
|
|
" with open(Pkl_Filename, 'wb') as file: \n",
|
|
|
|
|
" pickle.dump(grid_search_XGB, file)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" \n",
|
|
|
|
|
"\n",
|
|
|
|
|
"def read_xls_data():\n",
|
|
|
|
|
" global one_cols, two_cols\n",
|
|
|
|
|
" # 打开 XLS 文件\n",
|
|
|
|
|
" workbook = xlrd.open_workbook(read_file_path_name)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 获取所有表格名称\n",
|
|
|
|
|
" # sheet_names = workbook.sheet_names()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 选择第一个表格\n",
|
|
|
|
|
" sheet = workbook.sheet_by_index(0)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 获取行数和列数\n",
|
|
|
|
|
" num_rows = sheet.nrows\n",
|
|
|
|
|
" # num_cols = sheet.ncols\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 遍历每一行,获取单元格数据\n",
|
|
|
|
|
" # for i in range(num_rows):\n",
|
|
|
|
|
" # row_data = sheet.row_values(i)\n",
|
|
|
|
|
" # one_cols.append(row_data)\n",
|
|
|
|
|
" # two_cols.append(row_data[1])\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" row_data = sheet.row_values(1)\n",
|
|
|
|
|
" one_cols = row_data\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 关闭 XLS 文件\n",
|
|
|
|
|
" # workbook.close()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
"def start(date=''):\n",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
" read_xls_data()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" token = get_head_auth()\n",
|
|
|
|
|
" if not token:\n",
|
|
|
|
|
" return\n",
|
|
|
|
|
" token_push = get_head_push_auth()\n",
|
|
|
|
|
" if not token_push:\n",
|
|
|
|
|
" return\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
" cur_time,cur_time2 = getNow(date)\n",
|
|
|
|
|
" datas = get_data_value(token, one_cols[1:],cur_time)\n",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
"# if not datas:\n",
|
|
|
|
|
"# return\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # data_list = [two_cols, one_cols]\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
" append_rows = [cur_time2]\n",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
" dataItemNo_dataValue = {}\n",
|
|
|
|
|
" for data_value in datas:\n",
|
|
|
|
|
" if \"dataValue\" not in data_value:\n",
|
|
|
|
|
" print(data_value)\n",
|
|
|
|
|
" dataItemNo_dataValue[data_value[\"dataItemNo\"]] = \"\"\n",
|
|
|
|
|
" else:\n",
|
|
|
|
|
" dataItemNo_dataValue[data_value[\"dataItemNo\"]] = data_value[\"dataValue\"]\n",
|
|
|
|
|
" \n",
|
|
|
|
|
" for value in one_cols[1:]:\n",
|
|
|
|
|
" if value in dataItemNo_dataValue:\n",
|
|
|
|
|
" append_rows.append(dataItemNo_dataValue[value])\n",
|
|
|
|
|
" else:\n",
|
|
|
|
|
" append_rows.append(\"\")\n",
|
|
|
|
|
" save_xls(append_rows)\n",
|
|
|
|
|
" optimize_Model()\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
" upload_data_to_system(token_push,cur_time)\n",
|
2024-12-02 10:50:49 +08:00
|
|
|
|
" \n",
|
|
|
|
|
" \n",
|
|
|
|
|
" \n",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
" # data_list.append(three_cols)\n",
|
|
|
|
|
" # write_xls(data_list)\n",
|
|
|
|
|
"\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
"def getNow(date='',offset=0):\n",
|
|
|
|
|
" if date == '':\n",
|
|
|
|
|
" from datetime import datetime\n",
|
|
|
|
|
" now = datetime.now() - timedelta(days=offset)\n",
|
|
|
|
|
" else:\n",
|
|
|
|
|
" try:\n",
|
|
|
|
|
" date = datetime.strptime(date, \"%Y-%m-%d\")\n",
|
|
|
|
|
" except:\n",
|
|
|
|
|
" date = datetime.strptime(date, \"%Y%m%d\")\n",
|
|
|
|
|
" now = date\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" year = now.year\n",
|
|
|
|
|
" month = now.month\n",
|
|
|
|
|
" day = now.day\n",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
"\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
" if month < 10:\n",
|
|
|
|
|
" month = \"0\" + str(month)\n",
|
|
|
|
|
" if day < 10:\n",
|
|
|
|
|
" day = \"0\" + str(day)\n",
|
|
|
|
|
" cur_time = str(year) + str(month) + str(day)\n",
|
|
|
|
|
" cur_time2 = str(year) + \"-\" + str(month) + \"-\" + str(day)\n",
|
|
|
|
|
" return cur_time,cur_time2\n",
|
|
|
|
|
" \n",
|
|
|
|
|
"def start_1(date=''):\n",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
" read_xls_data()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" token = get_head_auth()\n",
|
|
|
|
|
" if not token:\n",
|
|
|
|
|
" return\n",
|
|
|
|
|
" \n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
" cur_time,cur_time2 = getNow(date)\n",
|
|
|
|
|
" datas = get_data_value(token, one_cols[1:],date=cur_time)\n",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
"# if not datas:\n",
|
|
|
|
|
"# return\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # data_list = [two_cols, one_cols]\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
" append_rows = [cur_time2]\n",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
" dataItemNo_dataValue = {}\n",
|
|
|
|
|
" for data_value in datas:\n",
|
|
|
|
|
" if \"dataValue\" not in data_value:\n",
|
|
|
|
|
" print(data_value)\n",
|
|
|
|
|
" dataItemNo_dataValue[data_value[\"dataItemNo\"]] = \"\"\n",
|
|
|
|
|
" else:\n",
|
|
|
|
|
" dataItemNo_dataValue[data_value[\"dataItemNo\"]] = data_value[\"dataValue\"]\n",
|
|
|
|
|
" \n",
|
|
|
|
|
" for value in one_cols[1:]:\n",
|
|
|
|
|
" if value in dataItemNo_dataValue:\n",
|
|
|
|
|
" append_rows.append(dataItemNo_dataValue[value])\n",
|
|
|
|
|
" else:\n",
|
|
|
|
|
" append_rows.append(\"\")\n",
|
|
|
|
|
" save_xls_1(append_rows)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" \n",
|
|
|
|
|
" # data_list.append(three_cols)\n",
|
|
|
|
|
" # write_xls(data_list)\n",
|
|
|
|
|
" \n",
|
|
|
|
|
"def save_xls_1(append_rows):\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 打开xls文件\n",
|
|
|
|
|
" workbook = xlrd.open_workbook('液化气数据.xls')\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 获取所有sheet的个数\n",
|
|
|
|
|
" sheet_count = len(workbook.sheet_names())\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 获取所有sheet的名称\n",
|
|
|
|
|
" sheet_names = workbook.sheet_names()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" new_workbook = xlwt.Workbook()\n",
|
|
|
|
|
" for i in range(sheet_count):\n",
|
|
|
|
|
" # 获取当前sheet\n",
|
|
|
|
|
" sheet = workbook.sheet_by_index(i)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 获取sheet的行数和列数\n",
|
|
|
|
|
" row_count = sheet.nrows - 1\n",
|
|
|
|
|
" col_count = sheet.ncols\n",
|
|
|
|
|
" # 获取原有数据\n",
|
|
|
|
|
" data = []\n",
|
|
|
|
|
" for row in range(row_count):\n",
|
|
|
|
|
" row_data = []\n",
|
|
|
|
|
" for col in range(col_count):\n",
|
|
|
|
|
" row_data.append(sheet.cell_value(row, col))\n",
|
|
|
|
|
" data.append(row_data)\n",
|
|
|
|
|
" # 创建xlwt的Workbook对象\n",
|
|
|
|
|
" # 创建sheet\n",
|
|
|
|
|
" new_sheet = new_workbook.add_sheet(sheet_names[i])\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 将原有的数据写入新的sheet\n",
|
|
|
|
|
" for row in range(row_count):\n",
|
|
|
|
|
" for col in range(col_count):\n",
|
|
|
|
|
" new_sheet.write(row, col, data[row][col])\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" if i == 0:\n",
|
|
|
|
|
" # 在新的sheet中添加数据\n",
|
|
|
|
|
" for col in range(col_count):\n",
|
|
|
|
|
" new_sheet.write(row_count, col, append_rows[col])\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 保存新的xls文件\n",
|
|
|
|
|
" new_workbook.save(\"液化气数据.xls\") \n",
|
|
|
|
|
"\n",
|
|
|
|
|
" \n",
|
|
|
|
|
" \n",
|
|
|
|
|
" \n",
|
|
|
|
|
"def check_data(dataItemNo):\n",
|
|
|
|
|
" token = get_head_auth()\n",
|
|
|
|
|
" if not token:\n",
|
|
|
|
|
" return\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" datas = get_data_value(token, dataItemNo)\n",
|
|
|
|
|
" if not datas:\n",
|
|
|
|
|
" return\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"def save_xls(append_rows):\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 打开xls文件\n",
|
|
|
|
|
" workbook = xlrd.open_workbook('液化气数据.xls')\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 获取所有sheet的个数\n",
|
|
|
|
|
" sheet_count = len(workbook.sheet_names())\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 获取所有sheet的名称\n",
|
|
|
|
|
" sheet_names = workbook.sheet_names()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" new_workbook = xlwt.Workbook()\n",
|
|
|
|
|
" for i in range(sheet_count):\n",
|
|
|
|
|
" # 获取当前sheet\n",
|
|
|
|
|
" sheet = workbook.sheet_by_index(i)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 获取sheet的行数和列数\n",
|
|
|
|
|
" row_count = sheet.nrows\n",
|
|
|
|
|
" col_count = sheet.ncols\n",
|
|
|
|
|
" # 获取原有数据\n",
|
|
|
|
|
" data = []\n",
|
|
|
|
|
" for row in range(row_count):\n",
|
|
|
|
|
" row_data = []\n",
|
|
|
|
|
" for col in range(col_count):\n",
|
|
|
|
|
" row_data.append(sheet.cell_value(row, col))\n",
|
|
|
|
|
" data.append(row_data)\n",
|
|
|
|
|
" # 创建xlwt的Workbook对象\n",
|
|
|
|
|
" # 创建sheet\n",
|
|
|
|
|
" new_sheet = new_workbook.add_sheet(sheet_names[i])\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 将原有的数据写入新的sheet\n",
|
|
|
|
|
" for row in range(row_count):\n",
|
|
|
|
|
" for col in range(col_count):\n",
|
|
|
|
|
" new_sheet.write(row, col, data[row][col])\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" if i == 0:\n",
|
|
|
|
|
" # 在新的sheet中添加数据\n",
|
|
|
|
|
" for col in range(col_count):\n",
|
|
|
|
|
" new_sheet.write(row_count, col, append_rows[col])\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 保存新的xls文件\n",
|
|
|
|
|
" new_workbook.save(\"液化气数据.xls\")\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
"\n"
|
2024-11-01 17:33:48 +08:00
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
"execution_count": null,
|
|
|
|
|
"metadata": {
|
|
|
|
|
"scrolled": true
|
|
|
|
|
},
|
2024-11-01 17:33:48 +08:00
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
2025-01-23 15:07:59 +08:00
|
|
|
|
"运行中\n",
|
|
|
|
|
"13:38:57\n",
|
|
|
|
|
"13:38:58\n",
|
|
|
|
|
"13:38:59\n",
|
|
|
|
|
"13:39:00\n",
|
|
|
|
|
"13:39:01\n",
|
|
|
|
|
"13:39:02\n",
|
|
|
|
|
"13:39:03\n",
|
|
|
|
|
"13:39:04\n",
|
|
|
|
|
"13:39:05\n",
|
|
|
|
|
"13:39:06\n",
|
|
|
|
|
"13:39:07\n",
|
|
|
|
|
"13:39:08\n",
|
|
|
|
|
"13:39:09\n",
|
|
|
|
|
"13:39:10\n",
|
|
|
|
|
"13:39:11\n",
|
|
|
|
|
"13:39:12\n",
|
|
|
|
|
"13:39:13\n",
|
|
|
|
|
"13:39:14\n",
|
|
|
|
|
"13:39:15\n",
|
|
|
|
|
"13:39:16\n",
|
|
|
|
|
"13:39:17\n",
|
|
|
|
|
"13:39:18\n",
|
|
|
|
|
"13:39:19\n",
|
|
|
|
|
"13:39:20\n",
|
|
|
|
|
"13:39:21\n",
|
|
|
|
|
"13:39:22\n",
|
|
|
|
|
"13:39:23\n",
|
|
|
|
|
"13:39:24\n",
|
|
|
|
|
"13:39:25\n",
|
|
|
|
|
"13:39:26\n",
|
|
|
|
|
"13:39:27\n",
|
|
|
|
|
"13:39:28\n",
|
|
|
|
|
"13:39:29\n",
|
|
|
|
|
"13:39:30\n",
|
|
|
|
|
"13:39:31\n",
|
|
|
|
|
"13:39:32\n",
|
|
|
|
|
"13:39:33\n",
|
|
|
|
|
"13:39:34\n",
|
|
|
|
|
"13:39:35\n",
|
|
|
|
|
"13:39:36\n",
|
|
|
|
|
"13:39:37\n",
|
|
|
|
|
"13:39:38\n",
|
|
|
|
|
"13:39:39\n",
|
|
|
|
|
"13:39:40\n",
|
|
|
|
|
"13:39:41\n",
|
|
|
|
|
"13:39:42\n",
|
|
|
|
|
"13:39:43\n",
|
|
|
|
|
"13:39:44\n",
|
|
|
|
|
"13:39:45\n",
|
|
|
|
|
"13:39:46\n",
|
|
|
|
|
"13:39:47\n",
|
|
|
|
|
"13:39:48\n",
|
|
|
|
|
"13:39:49\n",
|
|
|
|
|
"13:39:50\n",
|
|
|
|
|
"13:39:51\n",
|
|
|
|
|
"13:39:52\n",
|
|
|
|
|
"13:39:53\n",
|
|
|
|
|
"13:39:54\n",
|
|
|
|
|
"13:39:55\n",
|
|
|
|
|
"13:39:56\n",
|
|
|
|
|
"13:39:57\n",
|
|
|
|
|
"13:39:58\n",
|
|
|
|
|
"13:39:59\n",
|
|
|
|
|
"13:40:00\n",
|
|
|
|
|
"执行定时任务\n",
|
|
|
|
|
"{'data': {'date': '20250123', 'dataItemNoList': ['251926669|STRIKE_PRICE', 'C01100008|CORTED_VALUE', 'C01100008|AUCTION_MAX_PRICE', 'C01100008|YEDAY_AMOUNT', 'ICE_CL0_LAST_YEDAY_PRICE\\n', '100028046|LISTING_PRICE', 'C01100008|PLAN_SALE', '91370200163576944B|C01100008|STRIKE_PRICE', '9137078672073757X8|C01100008|STRIKE_PRICE', '91370500674526498A|C01100008|STRIKE_PRICE', '91370305773165341A|C01100008|STRIKE_PRICE', '91370521164880008P|C01100008|STRIKE_PRICE', '91370321164425136B|C01100008|STRIKE_PRICE', 'SD|GC|ZDW|LIST_PRICE', '370500|ISOBUTANE|LIST_PRICE', 'SD|YT|SG|LIST_PRICE', '91110000710926094P|C01100008|SUPPLY_MERE', '91110000710932515R|C01100008|SUPPLY_MERE', '91370500674526498A|C01100008|SUPPLY_MERE', '91370321164425136B|C01100008|SUPPLY_MERE', 'C01100008|OTHER|SUPPLY_MERE', 'SD|WJH|DEMANDS', 'C01100008|SUY_DED_DAP', 'C01100008|EFFECTIVE_STOCK', '912102117169477344|C01100008|STRIKE_PRICE', '91110304102767480H|C01100008|STRIKE_PRICE', '91130193670310403L|C01100008|STRIKE_PRICE', 'HD|LPG|IMPORT_PRICE', 'SD|WJH|SALES_PRICE']}, 'funcModule': '数据项', 'funcOperation': '查询'}\n",
|
|
|
|
|
"[{'dataDate': '20250123', 'dataItemNo': '251926669|STRIKE_PRICE', 'dataValue': 5400.0}, {'dataDate': '20250123', 'dataItemNo': '91370305773165341A|C01100008|STRIKE_PRICE', 'dataValue': 5500.0}, {'dataDate': '20250123', 'dataItemNo': '91370321164425136B|C01100008|STRIKE_PRICE', 'dataValue': 5430.0}, {'dataDate': '20250123', 'dataItemNo': '91370521164880008P|C01100008|STRIKE_PRICE', 'dataValue': 5535.0}]\n",
|
|
|
|
|
"Using matplotlib backend: Qt5Agg\n",
|
2024-12-02 10:50:49 +08:00
|
|
|
|
"Populating the interactive namespace from numpy and matplotlib\n",
|
|
|
|
|
"Fitting 3 folds for each of 180 candidates, totalling 540 fits\n"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": "stderr",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
2025-01-23 15:07:59 +08:00
|
|
|
|
"C:\\Users\\Administrator\\Anaconda3\\lib\\site-packages\\IPython\\core\\magics\\pylab.py:160: UserWarning:\n",
|
2024-12-02 10:50:49 +08:00
|
|
|
|
"\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
"pylab import has clobbered these variables: ['datetime', 'random', 'plot', '__version__']\n",
|
2024-12-30 14:00:16 +08:00
|
|
|
|
"`%matplotlib` prevents importing * from pylab and numpy\n",
|
2024-12-02 10:50:49 +08:00
|
|
|
|
"\n"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
"Date\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
"2025-01-23 5399.734863\n",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
"Name: 日度预测价格, dtype: float32\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
"13:40:46\n",
|
|
|
|
|
"13:40:47\n",
|
|
|
|
|
"13:40:48\n",
|
|
|
|
|
"13:40:49\n",
|
|
|
|
|
"13:40:50\n",
|
|
|
|
|
"13:40:51\n",
|
|
|
|
|
"13:40:52\n",
|
|
|
|
|
"13:40:53\n",
|
|
|
|
|
"13:40:54\n",
|
|
|
|
|
"13:40:55\n",
|
|
|
|
|
"13:40:56\n",
|
|
|
|
|
"13:40:57\n",
|
|
|
|
|
"13:40:58\n",
|
|
|
|
|
"13:40:59\n",
|
|
|
|
|
"13:41:00\n",
|
|
|
|
|
"13:41:01\n",
|
|
|
|
|
"13:41:02\n",
|
|
|
|
|
"13:41:03\n",
|
|
|
|
|
"13:41:04\n",
|
|
|
|
|
"13:41:05\n",
|
|
|
|
|
"13:41:06\n",
|
|
|
|
|
"13:41:07\n",
|
|
|
|
|
"13:41:08\n",
|
|
|
|
|
"13:41:09\n",
|
|
|
|
|
"13:41:10\n",
|
|
|
|
|
"13:41:11\n",
|
|
|
|
|
"13:41:12\n",
|
|
|
|
|
"13:41:13\n",
|
|
|
|
|
"13:41:14\n",
|
|
|
|
|
"13:41:15\n",
|
|
|
|
|
"13:41:16\n",
|
|
|
|
|
"13:41:17\n",
|
|
|
|
|
"13:41:18\n",
|
|
|
|
|
"13:41:19\n",
|
|
|
|
|
"13:41:20\n",
|
|
|
|
|
"13:41:21\n",
|
|
|
|
|
"13:41:22\n",
|
|
|
|
|
"13:41:23\n",
|
|
|
|
|
"13:41:24\n",
|
|
|
|
|
"13:41:25\n",
|
|
|
|
|
"13:41:26\n",
|
|
|
|
|
"13:41:27\n",
|
|
|
|
|
"13:41:28\n",
|
|
|
|
|
"13:41:29\n",
|
|
|
|
|
"13:41:30\n",
|
|
|
|
|
"13:41:31\n",
|
|
|
|
|
"13:41:32\n",
|
|
|
|
|
"13:41:33\n",
|
|
|
|
|
"13:41:34\n",
|
|
|
|
|
"13:41:35\n",
|
|
|
|
|
"13:41:36\n",
|
|
|
|
|
"13:41:37\n",
|
|
|
|
|
"13:41:38\n",
|
|
|
|
|
"13:41:39\n",
|
|
|
|
|
"13:41:40\n",
|
|
|
|
|
"13:41:41\n",
|
|
|
|
|
"13:41:42\n",
|
|
|
|
|
"13:41:43\n",
|
|
|
|
|
"13:41:44\n",
|
|
|
|
|
"13:41:45\n",
|
|
|
|
|
"13:41:46\n",
|
|
|
|
|
"13:41:47\n",
|
|
|
|
|
"13:41:48\n",
|
|
|
|
|
"13:41:49\n",
|
|
|
|
|
"13:41:50\n",
|
|
|
|
|
"13:41:51\n",
|
|
|
|
|
"13:41:52\n",
|
|
|
|
|
"13:41:53\n",
|
|
|
|
|
"13:41:54\n",
|
|
|
|
|
"13:41:55\n",
|
|
|
|
|
"13:41:56\n",
|
|
|
|
|
"13:41:57\n",
|
|
|
|
|
"13:41:58\n",
|
|
|
|
|
"13:41:59\n",
|
|
|
|
|
"13:42:00\n",
|
|
|
|
|
"13:42:01\n",
|
|
|
|
|
"13:42:02\n",
|
|
|
|
|
"13:42:03\n",
|
|
|
|
|
"13:42:04\n",
|
|
|
|
|
"13:42:05\n",
|
|
|
|
|
"13:42:06\n",
|
|
|
|
|
"13:42:07\n",
|
|
|
|
|
"13:42:08\n",
|
|
|
|
|
"13:42:09\n",
|
|
|
|
|
"13:42:10\n",
|
|
|
|
|
"13:42:11\n",
|
|
|
|
|
"13:42:12\n",
|
|
|
|
|
"13:42:13\n",
|
|
|
|
|
"13:42:14\n",
|
|
|
|
|
"13:42:15\n",
|
|
|
|
|
"13:42:16\n",
|
|
|
|
|
"13:42:17\n",
|
|
|
|
|
"13:42:18\n",
|
|
|
|
|
"13:42:19\n",
|
|
|
|
|
"13:42:20\n",
|
|
|
|
|
"13:42:21\n",
|
|
|
|
|
"13:42:22\n",
|
|
|
|
|
"13:42:23\n",
|
|
|
|
|
"13:42:24\n",
|
|
|
|
|
"13:42:25\n",
|
|
|
|
|
"13:42:26\n",
|
|
|
|
|
"13:42:27\n",
|
|
|
|
|
"13:42:28\n",
|
|
|
|
|
"13:42:29\n",
|
|
|
|
|
"13:42:30\n",
|
|
|
|
|
"13:42:31\n",
|
|
|
|
|
"13:42:32\n",
|
|
|
|
|
"13:42:33\n",
|
|
|
|
|
"13:42:34\n",
|
|
|
|
|
"13:42:35\n",
|
|
|
|
|
"13:42:36\n",
|
|
|
|
|
"13:42:37\n",
|
|
|
|
|
"13:42:38\n",
|
|
|
|
|
"13:42:39\n",
|
|
|
|
|
"13:42:40\n",
|
|
|
|
|
"13:42:41\n",
|
|
|
|
|
"13:42:42\n",
|
|
|
|
|
"13:42:43\n",
|
|
|
|
|
"13:42:45\n",
|
|
|
|
|
"13:42:46\n",
|
|
|
|
|
"13:42:47\n",
|
|
|
|
|
"13:42:48\n",
|
|
|
|
|
"13:42:49\n",
|
|
|
|
|
"13:42:50\n",
|
|
|
|
|
"13:42:51\n",
|
|
|
|
|
"13:42:52\n",
|
|
|
|
|
"13:42:53\n",
|
|
|
|
|
"13:42:54\n",
|
|
|
|
|
"13:42:55\n",
|
|
|
|
|
"13:42:56\n",
|
|
|
|
|
"13:42:57\n",
|
|
|
|
|
"13:42:58\n",
|
|
|
|
|
"13:42:59\n",
|
|
|
|
|
"13:43:00\n",
|
|
|
|
|
"13:43:01\n",
|
|
|
|
|
"13:43:02\n",
|
|
|
|
|
"13:43:03\n",
|
|
|
|
|
"13:43:04\n",
|
|
|
|
|
"13:43:05\n",
|
|
|
|
|
"13:43:06\n",
|
|
|
|
|
"13:43:07\n",
|
|
|
|
|
"13:43:08\n",
|
|
|
|
|
"13:43:09\n",
|
|
|
|
|
"13:43:10\n",
|
|
|
|
|
"13:43:11\n",
|
|
|
|
|
"13:43:12\n",
|
|
|
|
|
"13:43:13\n",
|
|
|
|
|
"13:43:14\n",
|
|
|
|
|
"13:43:15\n",
|
|
|
|
|
"13:43:16\n",
|
|
|
|
|
"13:43:17\n",
|
|
|
|
|
"13:43:18\n",
|
|
|
|
|
"13:43:19\n",
|
|
|
|
|
"13:43:20\n",
|
|
|
|
|
"13:43:21\n",
|
|
|
|
|
"13:43:22\n",
|
|
|
|
|
"13:43:23\n",
|
|
|
|
|
"13:43:24\n",
|
|
|
|
|
"13:43:25\n",
|
|
|
|
|
"13:43:26\n",
|
|
|
|
|
"13:43:27\n",
|
|
|
|
|
"13:43:28\n",
|
|
|
|
|
"13:43:29\n",
|
|
|
|
|
"13:43:30\n",
|
|
|
|
|
"13:43:31\n",
|
|
|
|
|
"13:43:32\n",
|
|
|
|
|
"13:43:33\n",
|
|
|
|
|
"13:43:34\n",
|
|
|
|
|
"13:43:35\n",
|
|
|
|
|
"13:43:36\n",
|
|
|
|
|
"13:43:37\n",
|
|
|
|
|
"13:43:38\n",
|
|
|
|
|
"13:43:39\n",
|
|
|
|
|
"13:43:40\n",
|
|
|
|
|
"13:43:41\n",
|
|
|
|
|
"13:43:42\n",
|
|
|
|
|
"13:43:43\n",
|
|
|
|
|
"13:43:44\n",
|
|
|
|
|
"13:43:45\n",
|
|
|
|
|
"13:43:46\n",
|
|
|
|
|
"13:43:47\n",
|
|
|
|
|
"13:43:48\n",
|
|
|
|
|
"13:43:49\n",
|
|
|
|
|
"13:43:50\n",
|
|
|
|
|
"13:43:51\n",
|
|
|
|
|
"13:43:52\n",
|
|
|
|
|
"13:43:53\n",
|
|
|
|
|
"13:43:54\n",
|
|
|
|
|
"13:43:55\n",
|
|
|
|
|
"13:43:56\n",
|
|
|
|
|
"13:43:57\n",
|
|
|
|
|
"13:43:58\n",
|
|
|
|
|
"13:43:59\n",
|
|
|
|
|
"13:44:00\n",
|
|
|
|
|
"13:44:01\n",
|
|
|
|
|
"13:44:02\n",
|
|
|
|
|
"13:44:03\n",
|
|
|
|
|
"13:44:04\n",
|
|
|
|
|
"13:44:05\n",
|
|
|
|
|
"13:44:06\n",
|
|
|
|
|
"13:44:07\n",
|
|
|
|
|
"13:44:08\n",
|
|
|
|
|
"13:44:09\n",
|
|
|
|
|
"13:44:10\n",
|
|
|
|
|
"13:44:11\n",
|
|
|
|
|
"13:44:12\n",
|
|
|
|
|
"13:44:13\n",
|
|
|
|
|
"13:44:14\n",
|
|
|
|
|
"13:44:15\n",
|
|
|
|
|
"13:44:16\n",
|
|
|
|
|
"13:44:17\n",
|
|
|
|
|
"13:44:18\n",
|
|
|
|
|
"13:44:19\n",
|
|
|
|
|
"13:44:20\n",
|
|
|
|
|
"13:44:21\n",
|
|
|
|
|
"13:44:22\n",
|
|
|
|
|
"13:44:23\n",
|
|
|
|
|
"13:44:24\n",
|
|
|
|
|
"13:44:25\n",
|
|
|
|
|
"13:44:26\n",
|
|
|
|
|
"13:44:27\n",
|
|
|
|
|
"13:44:28\n",
|
|
|
|
|
"13:44:29\n",
|
|
|
|
|
"13:44:30\n",
|
|
|
|
|
"13:44:31\n",
|
|
|
|
|
"13:44:32\n",
|
|
|
|
|
"13:44:33\n",
|
|
|
|
|
"13:44:34\n",
|
|
|
|
|
"13:44:35\n",
|
|
|
|
|
"13:44:36\n",
|
|
|
|
|
"13:44:37\n",
|
|
|
|
|
"13:44:38\n",
|
|
|
|
|
"13:44:39\n",
|
|
|
|
|
"13:44:40\n",
|
|
|
|
|
"13:44:41\n",
|
|
|
|
|
"13:44:42\n",
|
|
|
|
|
"13:44:43\n",
|
|
|
|
|
"13:44:44\n",
|
|
|
|
|
"13:44:45\n",
|
|
|
|
|
"13:44:46\n",
|
|
|
|
|
"13:44:47\n",
|
|
|
|
|
"13:44:48\n",
|
|
|
|
|
"13:44:49\n",
|
|
|
|
|
"13:44:50\n",
|
|
|
|
|
"13:44:51\n",
|
|
|
|
|
"13:44:52\n",
|
|
|
|
|
"13:44:53\n",
|
|
|
|
|
"13:44:54\n",
|
|
|
|
|
"13:44:55\n",
|
|
|
|
|
"13:44:56\n",
|
|
|
|
|
"13:44:57\n",
|
|
|
|
|
"13:44:58\n",
|
|
|
|
|
"13:44:59\n",
|
|
|
|
|
"13:45:00\n",
|
|
|
|
|
"更新数据\n",
|
|
|
|
|
"{'data': {'date': '20250123', 'dataItemNoList': ['251926669|STRIKE_PRICE', 'C01100008|CORTED_VALUE', 'C01100008|AUCTION_MAX_PRICE', 'C01100008|YEDAY_AMOUNT', 'ICE_CL0_LAST_YEDAY_PRICE\\n', '100028046|LISTING_PRICE', 'C01100008|PLAN_SALE', '91370200163576944B|C01100008|STRIKE_PRICE', '9137078672073757X8|C01100008|STRIKE_PRICE', '91370500674526498A|C01100008|STRIKE_PRICE', '91370305773165341A|C01100008|STRIKE_PRICE', '91370521164880008P|C01100008|STRIKE_PRICE', '91370321164425136B|C01100008|STRIKE_PRICE', 'SD|GC|ZDW|LIST_PRICE', '370500|ISOBUTANE|LIST_PRICE', 'SD|YT|SG|LIST_PRICE', '91110000710926094P|C01100008|SUPPLY_MERE', '91110000710932515R|C01100008|SUPPLY_MERE', '91370500674526498A|C01100008|SUPPLY_MERE', '91370321164425136B|C01100008|SUPPLY_MERE', 'C01100008|OTHER|SUPPLY_MERE', 'SD|WJH|DEMANDS', 'C01100008|SUY_DED_DAP', 'C01100008|EFFECTIVE_STOCK', '912102117169477344|C01100008|STRIKE_PRICE', '91110304102767480H|C01100008|STRIKE_PRICE', '91130193670310403L|C01100008|STRIKE_PRICE', 'HD|LPG|IMPORT_PRICE', 'SD|WJH|SALES_PRICE']}, 'funcModule': '数据项', 'funcOperation': '查询'}\n",
|
|
|
|
|
"[{'dataDate': '20250123', 'dataItemNo': '251926669|STRIKE_PRICE', 'dataValue': 5400.0}, {'dataDate': '20250123', 'dataItemNo': '91370305773165341A|C01100008|STRIKE_PRICE', 'dataValue': 5500.0}, {'dataDate': '20250123', 'dataItemNo': '91370321164425136B|C01100008|STRIKE_PRICE', 'dataValue': 5430.0}, {'dataDate': '20250123', 'dataItemNo': '91370521164880008P|C01100008|STRIKE_PRICE', 'dataValue': 5535.0}]\n",
|
|
|
|
|
"13:45:04\n",
|
|
|
|
|
"13:45:05\n",
|
|
|
|
|
"13:45:06\n",
|
|
|
|
|
"13:45:07\n",
|
|
|
|
|
"13:45:08\n",
|
|
|
|
|
"13:45:09\n",
|
|
|
|
|
"13:45:10\n",
|
|
|
|
|
"13:45:11\n",
|
|
|
|
|
"13:45:12\n",
|
|
|
|
|
"13:45:13\n",
|
|
|
|
|
"13:45:14\n"
|
2024-11-01 17:33:48 +08:00
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
"if __name__ == \"__main__\":\n",
|
|
|
|
|
" print('运行中')\n",
|
|
|
|
|
" # 需要单独运行放开\n",
|
|
|
|
|
"# start()\n",
|
|
|
|
|
"# start_1(date='2025-01-22')\n",
|
|
|
|
|
"# start_1()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 每天定时12点运行\n",
|
|
|
|
|
" while True:\n",
|
|
|
|
|
" try:\n",
|
|
|
|
|
" # 获取当前时间\n",
|
|
|
|
|
" current_time = time.strftime(\"%H:%M:%S\", time.localtime())\n",
|
|
|
|
|
" current_time_1 = time.strftime(\"%H:%M:%S\", time.localtime())\n",
|
|
|
|
|
"# print(current_time_1)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 判断当前时间是否为执行任务的时间点\n",
|
|
|
|
|
" if current_time == \"09:15:00\":\n",
|
|
|
|
|
" print(\"执行定时任务\")\n",
|
|
|
|
|
" start()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 休眠1秒钟,避免过多占用CPU资源\n",
|
|
|
|
|
" time.sleep(1)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" elif current_time_1 == \"20:00:00\":\n",
|
|
|
|
|
" print(\"更新数据\")\n",
|
|
|
|
|
" start_1()\n",
|
|
|
|
|
" time.sleep(1)\n",
|
|
|
|
|
" except:\n",
|
|
|
|
|
" print('执行错误')\n",
|
|
|
|
|
" time.sleep(1)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" # 检测数据准确性, 需要检测放开\n",
|
|
|
|
|
" # check_data(\"100028098|LISTING_PRICE\")\n",
|
|
|
|
|
" # check_data(\"9137070016544622XB|DAY_Yield\")\n"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": null,
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [],
|
|
|
|
|
"source": [
|
|
|
|
|
"# from datetime import datetime, timedelta\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# start_date = datetime(2025, 1, 21)\n",
|
|
|
|
|
"# end_date = datetime(2025, 1, 23)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# while start_date < end_date:\n",
|
|
|
|
|
"# print(start_date.strftime('%Y%m%d'))\n",
|
|
|
|
|
"# start(start_date)\n",
|
|
|
|
|
"# # time.sleep(1)\n",
|
|
|
|
|
"# # start_2(start_date)\n",
|
|
|
|
|
"# start_date += timedelta(days=1)\n",
|
|
|
|
|
"# time.sleep(5)\n",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
"\n",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
"# print(price_list)"
|
2024-11-01 17:33:48 +08:00
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"metadata": {
|
|
|
|
|
"kernelspec": {
|
2025-01-23 15:07:59 +08:00
|
|
|
|
"display_name": "Python 3",
|
2024-11-01 17:33:48 +08:00
|
|
|
|
"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",
|
2025-01-23 15:07:59 +08:00
|
|
|
|
"version": "3.7.0"
|
2024-11-01 17:33:48 +08:00
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"nbformat": 4,
|
|
|
|
|
"nbformat_minor": 2
|
|
|
|
|
}
|