(exception)勉强赚钱rank

This commit is contained in:
liaozhaorun
2025-03-31 23:08:03 +08:00
parent ee35513935
commit 01092b8cae
14 changed files with 5561 additions and 2922 deletions

View File

@@ -2,35 +2,49 @@
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "18d1d622-b083-4cc4-a6f8-7c1ed2d0edd2",
"metadata": {
"ExecuteTime": {
"end_time": "2025-02-11T15:43:54.745322Z",
"start_time": "2025-02-11T15:43:53.837662Z"
"end_time": "2025-03-30T16:42:34.194992Z",
"start_time": "2025-03-30T16:42:33.440178Z"
}
},
"outputs": [],
"source": [
"import tushare as ts\n",
"ts.set_token('3a0741c702ee7e5e5f2bf1f0846bafaafe4e320833240b2a7e4a685f')\n",
"pro = ts.pro_api()"
]
],
"outputs": [],
"execution_count": 1
},
{
"cell_type": "code",
"execution_count": 2,
"id": "14671a7f72de2564",
"metadata": {
"ExecuteTime": {
"end_time": "2025-02-11T15:53:08.235573Z",
"start_time": "2025-02-11T15:53:07.753701Z"
"end_time": "2025-03-30T16:42:36.432691Z",
"start_time": "2025-03-30T16:42:34.197998Z"
}
},
"outputs": [],
"source": [
"from datetime import datetime\n",
"import pandas as pd\n",
"import warnings\n",
"\n",
"warnings.filterwarnings(\"ignore\")\n",
"def filter_rows(df):\n",
" # 按照 name 和 start_date 分组\n",
" def select_row(group):\n",
" # 如果有 end_date 不为 NaT 的行,优先保留这些行\n",
" valid_rows = group[group['end_date'].notna()]\n",
" if not valid_rows.empty:\n",
" return valid_rows.iloc[0] # 返回第一个有效行\n",
" else:\n",
" return group.iloc[0] # 如果没有有效行,返回第一行\n",
"\n",
" filtered_df = df.groupby(['name', 'start_date'], group_keys=False).apply(select_row)\n",
" filtered_df = filtered_df.reset_index(drop=True)\n",
" return filtered_df\n",
"\n",
"def is_st(name_change_dict, stock_code, target_date):\n",
" target_date = datetime.strptime(target_date, '%Y%m%d')\n",
@@ -58,39 +72,20 @@
" # 只保留 'ST' 和 '*ST' 的记录\n",
" st_data = group[(group['change_reason'] == 'ST') | (group['change_reason'] == '*ST')]\n",
" if not st_data.empty:\n",
" name_change_dict[ts_code] = st_data"
]
" name_change_dict[ts_code] = filter_rows(st_data)"
],
"outputs": [],
"execution_count": 2
},
{
"cell_type": "code",
"execution_count": 3,
"id": "e7f8cce2f80e2f20",
"metadata": {
"ExecuteTime": {
"end_time": "2025-02-11T15:53:19.812860Z",
"start_time": "2025-02-11T15:53:09.614377Z"
"end_time": "2025-03-30T16:43:03.790361Z",
"start_time": "2025-03-30T16:42:36.633554Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"Index: 8291970 entries, 0 to 8291969\n",
"Data columns (total 2 columns):\n",
" # Column Dtype \n",
"--- ------ ----- \n",
" 0 ts_code object\n",
" 1 trade_date object\n",
"dtypes: object(2)\n",
"memory usage: 189.8+ MB\n",
"None\n",
"20250211\n",
"20250212\n"
]
}
],
"source": [
"import time\n",
"from concurrent.futures import ThreadPoolExecutor, as_completed\n",
@@ -104,39 +99,44 @@
" max_date = df['trade_date'].max()\n",
"\n",
"print(max_date)\n",
"trade_cal = pro.trade_cal(exchange='', start_date='20170101', end_date='20250220')\n",
"trade_cal = pro.trade_cal(exchange='', start_date='20170101', end_date='20250420')\n",
"trade_cal = trade_cal[trade_cal['is_open'] == 1] # 只保留交易日\n",
"trade_dates = trade_cal[trade_cal['cal_date'] > max_date]['cal_date'].tolist()\n",
"start_date = min(trade_dates)\n",
"print(start_date)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "553cfb36-f560-4cc4-b2bc-68323ccc5072",
"metadata": {
"ExecuteTime": {
"end_time": "2025-02-11T15:53:24.100612Z",
"start_time": "2025-02-11T15:53:22.361257Z"
},
"scrolled": true
},
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"任务 20250220 完成\n",
"任务 20250219 完成\n",
"任务 20250217 完成\n",
"任务 20250218 完成\n",
"任务 20250214 完成\n",
"任务 20250213 完成\n",
"任务 20250212 完成\n"
"<class 'pandas.core.frame.DataFrame'>\n",
"Index: 8453605 entries, 0 to 32308\n",
"Data columns (total 2 columns):\n",
" # Column Dtype \n",
"--- ------ ----- \n",
" 0 ts_code object\n",
" 1 trade_date object\n",
"dtypes: object(2)\n",
"memory usage: 193.5+ MB\n",
"None\n",
"20250321\n",
"20250324\n"
]
}
],
"execution_count": 3
},
{
"cell_type": "code",
"id": "553cfb36-f560-4cc4-b2bc-68323ccc5072",
"metadata": {
"scrolled": true,
"ExecuteTime": {
"end_time": "2025-03-30T16:43:07.947442Z",
"start_time": "2025-03-30T16:43:03.827519Z"
}
},
"source": [
"\n",
"\n",
@@ -186,169 +186,202 @@
" # 重置批次起始时间\n",
" batch_start_time = time.time()\n",
"\n"
]
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"任务 20250418 完成\n",
"任务 20250417 完成\n",
"任务 20250416 完成\n",
"任务 20250415 完成\n",
"任务 20250411 完成\n",
"任务 20250414 完成\n",
"任务 20250410 完成\n",
"任务 20250409 完成\n",
"任务 20250408 完成\n",
"任务 20250407 完成\n",
"任务 20250403 完成\n",
"任务 20250402 完成\n",
"任务 20250331 完成\n",
"任务 20250401 完成\n",
"任务 20250327 完成\n",
"任务 20250328 完成\n",
"任务 20250326 完成\n",
"任务 20250324 完成\n",
"任务 20250325 完成\n"
]
}
],
"execution_count": 4
},
{
"cell_type": "code",
"execution_count": 5,
"id": "919023c693d7a47a",
"metadata": {
"ExecuteTime": {
"end_time": "2025-02-11T15:53:25.913933Z",
"start_time": "2025-02-11T15:53:25.902629Z"
"end_time": "2025-03-30T16:43:07.962318Z",
"start_time": "2025-03-30T16:43:07.951757Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" ts_code trade_date close turnover_rate turnover_rate_f \\\n",
"0 601162.SH 20250212 4.77 7.3760 9.7054 \n",
"1 603216.SH 20250212 11.42 8.8711 8.8711 \n",
"2 872808.BJ 20250212 74.36 4.1219 15.3296 \n",
"3 601881.SH 20250212 14.43 0.5617 1.9533 \n",
"4 002837.SZ 20250212 42.25 3.8199 5.7136 \n",
"... ... ... ... ... ... \n",
"5380 603931.SH 20250212 23.83 1.4692 4.6843 \n",
"5381 688567.SH 20250212 12.35 1.3091 2.1970 \n",
"5382 688530.SH 20250212 19.30 6.6093 6.6093 \n",
"5383 301363.SZ 20250212 31.99 2.1990 2.1990 \n",
"5384 833533.BJ 20250212 46.02 27.7269 27.7597 \n",
"\n",
" volume_ratio pe pe_ttm pb ps ps_ttm dv_ratio \\\n",
"0 2.00 134.5633 NaN 1.7935 12.0634 19.0461 0.0000 \n",
"1 2.09 26.5657 27.5224 1.4454 1.9304 1.9996 2.6270 \n",
"2 1.20 142.3485 196.0315 22.9124 22.8711 25.8281 NaN \n",
"3 0.84 20.0264 15.5707 1.4245 4.6898 4.4609 2.1067 \n",
"4 0.65 91.3544 64.5935 11.2259 8.9056 7.2600 0.3621 \n",
"... ... ... ... ... ... ... ... \n",
"5380 1.16 27.1631 29.0662 3.0982 6.8392 6.9124 1.1120 \n",
"5381 1.01 NaN NaN 1.4955 0.9183 1.0469 NaN \n",
"5382 0.99 62.5995 198.4906 3.6879 6.4857 7.9319 NaN \n",
"5383 0.98 41.5226 47.9900 3.8396 9.7258 8.9664 0.4982 \n",
"5384 0.84 52.3997 62.1858 13.3582 6.6261 5.9638 NaN \n",
"\n",
" dv_ttm total_share float_share free_share total_mv \\\n",
"0 NaN 8.665757e+05 866575.7464 658594.7570 4.133566e+06 \n",
"1 2.6270 2.226900e+04 5669.0000 5669.0000 2.543120e+05 \n",
"2 NaN 2.000000e+04 19461.9464 5233.0650 1.487200e+06 \n",
"3 2.1067 1.093440e+06 724341.7623 208280.6759 1.577834e+07 \n",
"4 0.3621 7.438227e+04 64662.2002 43230.4691 3.142651e+06 \n",
"... ... ... ... ... ... \n",
"5380 1.1120 1.995584e+04 19955.8380 6258.8392 4.755476e+05 \n",
"5381 NaN 1.222104e+05 122210.3885 72818.9706 1.509298e+06 \n",
"5382 NaN 1.600448e+04 3200.8966 3200.8966 3.088865e+05 \n",
"5383 0.4982 4.066600e+04 11215.9100 11215.9100 1.300905e+06 \n",
"5384 NaN 1.005826e+04 3796.0235 3791.5280 4.628809e+05 \n",
"\n",
" circ_mv is_st \n",
"0 4.133566e+06 False \n",
"1 6.473998e+04 False \n",
"2 1.447190e+06 False \n",
"3 1.045225e+07 False \n",
"4 2.731978e+06 False \n",
"... ... ... \n",
"5380 4.755476e+05 False \n",
"5381 1.509298e+06 False \n",
"5382 6.177730e+04 False \n",
"5383 3.587970e+05 False \n",
"5384 1.746930e+05 False \n",
"\n",
"[5385 rows x 19 columns]\n"
]
}
],
"source": [
"all_daily_data_df = pd.concat(all_daily_data, ignore_index=True)\n",
"print(all_daily_data_df)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "28cb78d032671b20",
"metadata": {
"ExecuteTime": {
"end_time": "2025-02-11T15:53:42.062142Z",
"start_time": "2025-02-11T15:53:42.044324Z"
}
},
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" ts_code trade_date close turnover_rate turnover_rate_f \\\n",
"10 002366.SZ 20250212 5.10 3.8029 4.1742 \n",
"48 002124.SZ 20250212 2.80 1.8388 1.9195 \n",
"57 000504.SZ 20250212 9.32 0.9666 1.5370 \n",
"63 603007.SH 20250212 10.03 2.0477 2.7581 \n",
"91 300201.SZ 20250212 5.33 2.3317 3.1604 \n",
"... ... ... ... ... ... \n",
"5303 002316.SZ 20250212 3.52 3.1023 3.3580 \n",
"5335 600568.SH 20250212 1.30 0.3996 0.6514 \n",
"5364 002168.SZ 20250212 2.48 0.8869 1.0824 \n",
"5367 300600.SZ 20250212 7.19 0.7517 1.4024 \n",
"5369 000972.SZ 20250212 3.38 4.6979 7.2993 \n",
" ts_code trade_date close turnover_rate turnover_rate_f \\\n",
"0 603328.SH 20250327 10.44 1.0910 2.6596 \n",
"1 603989.SH 20250327 15.66 0.9036 2.6145 \n",
"2 603194.SH 20250327 38.03 14.0348 14.0348 \n",
"3 600884.SH 20250327 7.13 1.9769 2.1153 \n",
"4 688325.SH 20250327 47.26 1.5250 1.8078 \n",
"... ... ... ... ... ... \n",
"26946 688539.SH 20250325 26.70 1.0257 1.3011 \n",
"26947 688479.SH 20250325 18.73 0.9840 1.2588 \n",
"26948 000552.SZ 20250325 2.63 1.8147 3.0665 \n",
"26949 688719.SH 20250325 31.64 4.2998 5.1737 \n",
"26950 002709.SZ 20250325 19.50 1.2468 1.4268 \n",
"\n",
" volume_ratio pe pe_ttm pb ps ps_ttm dv_ratio \\\n",
"10 0.92 52.0324 56.8856 2.2889 14.2486 11.9214 0.0000 \n",
"48 0.97 NaN 260.7218 1.7484 0.6080 0.6154 0.0000 \n",
"57 0.83 NaN NaN 12.3702 22.4855 24.7156 0.0000 \n",
"63 0.86 NaN NaN 24.6750 55.2244 76.4853 0.0000 \n",
"91 0.75 26.1255 26.1088 4.2311 3.9774 4.2028 0.6431 \n",
"... ... ... ... ... ... ... ... \n",
"5303 0.95 NaN NaN 19.4146 2.2930 2.3153 0.0000 \n",
"5335 0.76 NaN NaN 1.1378 4.0571 4.0379 0.0000 \n",
"5364 0.88 1024.9794 NaN NaN 7.6515 7.4299 0.0000 \n",
"5367 1.18 NaN NaN 2.2914 10.7845 8.9952 0.0000 \n",
"5369 0.77 24.0853 120.2360 16.2931 4.5277 4.9137 0.0000 \n",
" volume_ratio pe pe_ttm pb ps ps_ttm dv_ratio \\\n",
"0 0.79 29.3625 23.3887 2.5786 3.2807 2.9727 1.8582 \n",
"1 0.79 17.8968 27.7940 1.7060 1.8591 1.6666 1.6823 \n",
"2 1.87 18.9266 18.3213 3.2891 2.5755 2.4322 NaN \n",
"3 0.52 20.9930 NaN 0.7305 0.8425 0.9106 2.7224 \n",
"4 0.93 67.1638 50.1073 2.3433 16.1029 10.2149 NaN \n",
"... ... ... ... ... ... ... ... \n",
"26946 0.56 51.5254 83.3548 2.8475 14.5500 13.9718 NaN \n",
"26947 0.61 23.5448 33.4921 1.4043 3.6736 4.5444 NaN \n",
"26948 1.42 8.0989 11.6324 0.8431 1.2501 1.3463 3.8023 \n",
"26949 1.64 26.3323 49.9921 2.0474 4.4195 3.6954 NaN \n",
"26950 0.76 19.7447 78.2248 2.9106 2.4233 3.0741 1.5444 \n",
"\n",
" dv_ttm total_share float_share free_share total_mv \\\n",
"10 NaN 208093.7640 125646.4390 114472.2056 1.061278e+06 \n",
"48 NaN 222193.3832 197428.3498 189130.4452 6.221415e+05 \n",
"57 NaN 33002.3098 31066.8701 19536.7046 3.075815e+05 \n",
"63 NaN 87689.6101 49983.0778 37108.5778 8.795268e+05 \n",
"91 0.6431 100904.3607 100450.7422 74110.3317 5.378202e+05 \n",
"... ... ... ... ... ... \n",
"5303 NaN 39312.0000 31500.7500 29101.6694 1.383782e+05 \n",
"5335 NaN 199286.9681 166906.7279 102374.4773 2.590731e+05 \n",
"5364 NaN 78416.3368 78416.3368 64258.0991 1.944725e+05 \n",
"5367 NaN 29423.4480 24616.3436 13195.4382 2.115546e+05 \n",
"5369 NaN 77128.3579 77128.3579 49641.0760 2.606938e+05 \n",
" dv_ttm total_share float_share free_share total_mv \\\n",
"0 1.8582 99844.2611 99844.2611 40955.5563 1.042374e+06 \n",
"1 1.6823 40113.0603 40113.0603 13863.2102 6.281705e+05 \n",
"2 NaN 40100.0000 4982.8436 4982.8436 1.525003e+06 \n",
"3 2.7224 225339.6168 175723.6492 164220.4548 1.606671e+06 \n",
"4 NaN 8494.7740 3830.4117 3231.0886 4.014630e+05 \n",
"... ... ... ... ... ... \n",
"26946 NaN 18592.0000 10286.0800 8109.0800 4.964064e+05 \n",
"26947 NaN 14431.7400 6087.4224 4758.2224 2.703065e+05 \n",
"26948 3.8023 535180.1936 372577.7383 220477.9354 1.407524e+06 \n",
"26949 NaN 11538.5418 7349.9938 6108.5305 3.650795e+05 \n",
"26950 1.5444 191434.3762 138501.6891 121034.9868 3.732970e+06 \n",
"\n",
" circ_mv is_st \n",
"10 640796.8389 True \n",
"48 552799.3794 True \n",
"57 289543.2293 True \n",
"63 501330.2703 True \n",
"91 535402.4559 True \n",
"... ... ... \n",
"5303 110882.6400 True \n",
"5335 216978.7463 True \n",
"5364 194472.5153 True \n",
"5367 176991.5105 True \n",
"5369 260693.8497 True \n",
" circ_mv is_st \n",
"0 1.042374e+06 False \n",
"1 6.281705e+05 False \n",
"2 1.894975e+05 False \n",
"3 1.252910e+06 False \n",
"4 1.810253e+05 False \n",
"... ... ... \n",
"26946 2.746383e+05 False \n",
"26947 1.140174e+05 False \n",
"26948 9.798795e+05 False \n",
"26949 2.325538e+05 False \n",
"26950 2.700783e+06 False \n",
"\n",
"[318 rows x 19 columns]\n"
"[26951 rows x 19 columns]\n"
]
}
],
"source": [
"print(all_daily_data_df[all_daily_data_df['is_st']])"
]
"execution_count": 5
},
{
"cell_type": "code",
"id": "28cb78d032671b20",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-30T16:43:08.000073Z",
"start_time": "2025-03-30T16:43:07.984082Z"
}
},
"source": [
"print(all_daily_data_df[all_daily_data_df['is_st']])"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" ts_code trade_date close turnover_rate turnover_rate_f \\\n",
"100 002528.SZ 20250327 2.53 0.6855 1.4642 \n",
"128 300163.SZ 20250327 3.15 3.0563 3.2999 \n",
"129 300205.SZ 20250327 4.34 0.9211 1.5246 \n",
"147 000851.SZ 20250327 2.53 2.2990 2.6472 \n",
"299 300097.SZ 20250327 4.88 3.1648 3.6912 \n",
"... ... ... ... ... ... \n",
"26750 000506.SZ 20250325 5.21 1.2689 1.8939 \n",
"26770 002592.SZ 20250325 5.22 1.0547 1.6712 \n",
"26786 600603.SH 20250325 7.63 0.4610 1.0776 \n",
"26828 002528.SZ 20250325 2.51 0.9799 2.0928 \n",
"26906 300097.SZ 20250325 4.92 3.2717 3.8159 \n",
"\n",
" volume_ratio pe pe_ttm pb ps ps_ttm dv_ratio \\\n",
"100 0.43 NaN NaN 7.3528 2.1714 2.7257 0.0000 \n",
"128 0.87 NaN NaN 3.0547 5.9187 5.8999 0.0000 \n",
"129 0.63 94.7108 NaN 1.3743 1.0976 1.5538 0.4608 \n",
"147 0.64 NaN NaN 1.0360 0.4939 0.8666 0.0000 \n",
"299 0.70 10.0614 NaN 2.2055 2.9549 3.1999 0.0000 \n",
"... ... ... ... ... ... ... ... \n",
"26750 0.37 725.4828 NaN 8.2869 17.0204 21.9262 0.0000 \n",
"26770 0.94 14.0192 61.1217 1.6387 2.7253 2.3121 0.0000 \n",
"26786 0.56 15.6086 24.2223 1.3160 1.8461 2.4398 0.0000 \n",
"26828 0.58 NaN NaN 7.2947 2.1542 2.7042 0.0000 \n",
"26906 0.53 10.1438 NaN 2.2236 2.9791 3.2261 0.0000 \n",
"\n",
" dv_ttm total_share float_share free_share total_mv circ_mv \\\n",
"100 NaN 119867.5082 105021.9577 49171.2582 303264.7957 265705.5530 \n",
"128 NaN 47400.0000 41596.4553 38525.5904 149310.0000 131028.8342 \n",
"129 0.4608 43005.6000 42599.1218 25737.4813 186644.3040 184880.1886 \n",
"147 NaN 115786.0020 113197.7266 98311.5254 292938.5851 286390.2483 \n",
"299 NaN 28854.9669 27000.9948 23150.5534 140812.2385 131764.8546 \n",
"... ... ... ... ... ... ... \n",
"26750 NaN 92901.7761 92867.0961 62218.8027 484018.2535 483837.5707 \n",
"26770 NaN 28333.1157 26271.6370 16580.1814 147898.8640 137137.9451 \n",
"26786 NaN 119332.9151 119332.9151 51048.6002 910510.1422 910510.1422 \n",
"26828 NaN 119867.5082 105021.9577 49171.2582 300867.4456 263605.1138 \n",
"26906 NaN 28854.9669 27000.9948 23150.5534 141966.4371 132844.8944 \n",
"\n",
" is_st \n",
"100 True \n",
"128 True \n",
"129 True \n",
"147 True \n",
"299 True \n",
"... ... \n",
"26750 True \n",
"26770 True \n",
"26786 True \n",
"26828 True \n",
"26906 True \n",
"\n",
"[540 rows x 19 columns]\n"
]
}
],
"execution_count": 6
},
{
"cell_type": "code",
"execution_count": 7,
"id": "692b58674b7462c9",
"metadata": {
"ExecuteTime": {
"end_time": "2025-02-11T15:53:33.693894Z",
"start_time": "2025-02-11T15:53:33.609884Z"
"end_time": "2025-03-30T16:43:08.703938Z",
"start_time": "2025-03-30T16:43:08.021067Z"
}
},
"source": [
"# 将数据保存为 HDF5 文件table 格式)\n",
"all_daily_data_df.to_hdf(h5_filename, key='daily_basic', mode='a', format='table', append=True, data_columns=True)\n",
"\n",
"print(\"所有每日基础数据获取并保存完毕!\")\n"
],
"outputs": [
{
"name": "stdout",
@@ -358,30 +391,29 @@
]
}
],
"source": [
"# 将数据保存为 HDF5 文件table 格式)\n",
"all_daily_data_df.to_hdf(h5_filename, key='daily_basic', mode='a', format='table', append=True, data_columns=True)\n",
"\n",
"print(\"所有每日基础数据获取并保存完毕!\")\n"
]
"execution_count": 7
},
{
"cell_type": "code",
"execution_count": 8,
"id": "d7a773fc20293477",
"metadata": {
"ExecuteTime": {
"end_time": "2025-02-11T15:54:27.868021Z",
"start_time": "2025-02-11T15:54:18.853803Z"
"end_time": "2025-03-30T16:43:15.188800Z",
"start_time": "2025-03-30T16:43:08.725449Z"
}
},
"source": [
"with pd.HDFStore(h5_filename, mode='r') as store:\n",
" df = store[key][['ts_code', 'trade_date', 'is_st']]\n",
" print(df.info())"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"Index: 8297355 entries, 0 to 5384\n",
"Index: 8480556 entries, 0 to 26950\n",
"Data columns (total 3 columns):\n",
" # Column Dtype \n",
"--- ------ ----- \n",
@@ -389,16 +421,12 @@
" 1 trade_date object\n",
" 2 is_st bool \n",
"dtypes: bool(1), object(2)\n",
"memory usage: 197.8+ MB\n",
"memory usage: 202.2+ MB\n",
"None\n"
]
}
],
"source": [
"with pd.HDFStore(h5_filename, mode='r') as store:\n",
" df = store[key][['ts_code', 'trade_date', 'is_st']]\n",
" print(df.info())"
]
"execution_count": 8
}
],
"metadata": {
@@ -417,7 +445,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.19"
"version": "3.11.11"
}
},
"nbformat": 4,