From 709ee960a5104954d0ff6abbbcd8b4909f8fc193 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=B8=BD=E5=AD=90?= <2316994765@qq.com> Date: Tue, 28 Nov 2023 18:35:14 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BE=93=E5=87=BA=E9=A2=84=E6=B5=8B=E7=BB=93?= =?UTF-8?q?=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 入模数据/绍兴.xlsx | Bin 58987 -> 60394 bytes 各地级市日电量模型/丽水.py | 4 +- 各地级市日电量模型/台州.py | 2 +- 各地级市日电量模型/绍兴.py | 14 +-- 文档处理.py | 31 +++++- .../区县分压/区县分压.py | 97 ++++++++++-------- 6 files changed, 89 insertions(+), 59 deletions(-) diff --git a/入模数据/绍兴.xlsx b/入模数据/绍兴.xlsx index 4367359e654a112d3c09c4ff2231925c20879e9f..c905a038f352918ef390f6914a83df1aa57ffe66 100644 GIT binary patch delta 19753 zcmZsCbyOTdx91>(yAAH{?hb>y1a}CU;4Xu^JHcIo69NQx*I)_mZo&QWy|;UI&z}9K zPj#JJ-PKoq*Sbz7V2+ny>i@z4qccNyi&8e=h#?Y=f7x-mRR2Qi{Zz5bF>L15WF0I7?jBxf< zazMa`zi1S_RmMfMoe;As=LC2#j33gBYZVMxB>pz!1(4Ot9U zBlPJy{qs^@9VAM}e z=rSFkV$AwaXK5JG_ewwR!m|^6BQ%q)uG8ExS)%W`TXM(P$82oZsrxRe`$!NLavaxY zw4Dv3P#OcAHe2dfR+ha>C<52-x%!(+!t?2Ed+h9w*_yTE{F52kIi7mDwIp4=JRv=j znpoEx|+lT`{AtfwYg$=5{*-d~@t&zBO~FCgb#ucTt^lxyy< z5ZxqB14Ph#9e!;snGSU1aec$ehz;yg{{u z?odROOM22w>Ye6?#i)*dTqtLE_uH9XSpJ0K*&YH-k{dyt9AJwG6I;+nc zJ2}C1(c|^z#{TWJ$J=Tp_@A>R;*YscRYstjgM@{{AS^Oz1H>-|^oN+j{`wsdz72zx zD^ziEIU9e8Y>Zzy9Bf4FeF`PB0vp;>ZD5!2%{oF$* znHC*2GStVZ``f$gfNtBvt-TVB&e;YtOZ+aF)v$-gQ@4 z0K@XL4liQS3mTy%K&hVr@#izN`vZdh@FjJ&8dm$yA0F5t`Lis&(p~7$QK2Yy@KQZE z_dV|-)~aQ;Z`RGyh_F?s6R8@DDTl?8YPBwc@At<_Fw3)r=0`IL=GGB#;E zIL7eHf6JwPqJow+*LopoKprg2zpp|<)%VMpY`h677Gvm*NQ+id*jV@C`e zp-`%z7!*%~p3*0Ho6nY;!%lUGWS2;!B0E)%Kt-q$&FrWD9h4Q#hY?#8Ke(fu!ptZea%Jn~5J#4H6sa~QiUT@`fZ$pb-Lxu^(@2VQwm{;Owzlmro)ApH!Y zQo!g+r3V$u(PG!Q+nzc2zrPCOALTF+@c;8vM}Wxo3K_ykiH~tMf5vPh^hLT0E5Lw? z*Sy2A?+h!Qg68nMyl6GShkx7gA3-t0)<)o>+9*g8m)`c9A38MxjiUZ8E%dHZjX`1NRriR4~aC%6bFk?qL{44Y7*kwf9cl= z_sKAYrj9d*MscEo=%8Zo1zTb2t;A@?#39g`-7A*c`@Za$VzQ-Qs z(Wca|cuPkO>gA;F??^vu)#R_@QR-J*%8|l}z^FoStZ5du0GXX&L%wL#^WI5X(_Y(8 zDy&`>dMFzBkL`?>zHhh2my6@rj9K}0aTKMTbio_y2-<2fPJ(n^x6-wBW-9EQH4xEs zsQl;_HPjihC|J^6SP68P1p7FdJrWy@M2uwh-Bg)Deb2QjeE!}%{E(oQr0J9T$8dL^ z1iY8lRSa2c1S-)=zlY5)IHb6j8cJdv)-1=8PS!hmuwTW$o3owgRXzyO_LwgbZH45+ zgc5!q6RNK&co!xKHe`ljP+_(te1nwMJ$ zkw*UkpQ>5t^~zv+sPralrsLYL89KQ%0Ds{dhWBp%p)WqlZKTPsziU|qsqu982=Pq2 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 Hk3o_E)y@k7 diff --git a/各地级市日电量模型/丽水.py b/各地级市日电量模型/丽水.py index b454534..2741b74 100644 --- a/各地级市日电量模型/丽水.py +++ b/各地级市日电量模型/丽水.py @@ -87,8 +87,8 @@ import numpy as np X_eval = np.array([ [21,10,10,0,0], [21, 11, 10, 0, 0], - [18, 7, 10, 0, 0], - [17, 9, 10, 0, 0], + [20, 8, 10, 0, 0], + [20, 8, 10, 0, 0], [17, 10, 10, 0, 0] ]) print(model.predict(X_eval)) diff --git a/各地级市日电量模型/台州.py b/各地级市日电量模型/台州.py index 2680d68..b0bf3e1 100644 --- a/各地级市日电量模型/台州.py +++ b/各地级市日电量模型/台州.py @@ -85,7 +85,7 @@ model.save_model('taizhou.bin') import numpy as np X_eval = np.array([ - [19,11,10,0,0], + [19,11,10,1,0], [21, 7, 10, 0, 0], [19, 5, 10, 0, 0], [17, 8, 10, 0, 0], diff --git a/各地级市日电量模型/绍兴.py b/各地级市日电量模型/绍兴.py index 65a1702..f218c85 100644 --- a/各地级市日电量模型/绍兴.py +++ b/各地级市日电量模型/绍兴.py @@ -45,7 +45,7 @@ data = data.loc[normal(data['售电量']).index] # print(list0,list1,list2) data['season'] = data.index.map(season) -df_eval = data.loc['2023-10'] +df_eval = data.loc['2023-11'] # data = data.loc[:'2023-8'] df_train = data[450:-1] # df_train = data[450:][:-3] @@ -85,16 +85,16 @@ print(goal2) # x = goal2 # print(best_i,best_goal,x) print(result_eval) -# 保存模型 -model.save_model('shaoxing.bin') -loaded_model = xgb.XGBRegressor() -loaded_model.load_model('shaoxing.bin') +# # 保存模型 +# model.save_model('shaoxing.bin') +# loaded_model = xgb.XGBRegressor() +# loaded_model.load_model('shaoxing.bin') import numpy as np X_eval = np.array([ - [17, 9, 10, 0, 0], + [16.2, 8.2, 10, 1, 0], [20, 6, 10, 0, 0], - [17, 5, 10, 0, 0], + [19, 7, 10, 0, 0], [16, 8, 10, 0, 0], [12, 7, 10, 0, 0] ]) diff --git a/文档处理.py b/文档处理.py index 5de17ae..462b18f 100644 --- a/文档处理.py +++ b/文档处理.py @@ -60,10 +60,31 @@ # df = pd.concat(list1,ignore_index=True) # df.to_csv('各市行业电量预测结果.csv',encoding='gbk') # print(df) +import os +from openpyxl import Workbook import pandas as pd -df = pd.read_excel(r'C:\Users\鸽子\Desktop\浙江省11月分行业售电量预测v2.xlsx',sheet_name=1) -print(df.head()) -print(df[df.columns[2:]].groupby(df['city_name']).sum().T) -df2 = df[df.columns[2:]].groupby(df['city_name']).sum().T -df2.to_excel(r'C:\Users\鸽子\Desktop\1.xlsx') +# df = pd.read_excel(r'C:\Users\鸽子\Desktop\浙江省11月分行业售电量预测v2.xlsx',sheet_name=1) +# print(df.head()) +# print(df[df.columns[2:]].groupby(df['city_name']).sum().T) +# df2 = df[df.columns[2:]].groupby(df['city_name']).sum().T +# df2.to_excel(r'C:\Users\鸽子\Desktop\1.xlsx') +file_dir = r'C:\Users\鸽子\Desktop\11月区县分压预测' +for file in os.listdir(file_dir): + city = file[:-5] + wb = Workbook() + wb.save(fr'C:\Users\鸽子\Desktop\11月区县分压汇总\{city}.xlsx') + +for file in os.listdir(file_dir): + city = file[:-5] + excel_file = pd.ExcelFile(os.path.join(file_dir,file)) + sheet_names = excel_file.sheet_names[1:] + for sheet in sheet_names: + df = excel_file.parse(sheet) + df_result = df[df.columns[1:]].sum() + df_result = pd.DataFrame(df_result) + df_result.columns = ['售电量'] + + with pd.ExcelWriter(fr'C:\Users\鸽子\Desktop\11月区县分压汇总\{city}.xlsx', mode='a', engine='openpyxl', + if_sheet_exists='replace') as writer: + df_result.to_excel(writer, sheet_name=f'{sheet}') diff --git a/浙江电压等级电量/区县分压/区县分压.py b/浙江电压等级电量/区县分压/区县分压.py index bd4f4b9..639ac93 100644 --- a/浙江电压等级电量/区县分压/区县分压.py +++ b/浙江电压等级电量/区县分压/区县分压.py @@ -9,47 +9,51 @@ pd.set_option('display.width',None) def normal(x): high = x.describe()['75%'] + 1.5*(x.describe()['75%']-x.describe()['25%']) low = x.describe()['25%'] - 1.5*(x.describe()['75%']-x.describe()['25%']) - return x[(x<=high)&(x>=low)] + return (x<=high)&(x>=low) df = pd.read_csv(r'C:\Users\鸽子\Desktop\浙江各区县数据(2).csv') df.columns = df.columns.map(lambda x:x.strip()) -df.drop(columns=['500kv(含330kv)及以上','220kv','110kv(含66kv)','20kv','power_sal'],inplace=True) +df.dropna(subset=['city_name','county_name'],inplace=True) +print(df.info()) print(df.columns) print(dict(zip(df.columns,[(df[x]==0).sum()/len(df) for x in df.columns]))) yc_org_list = [] list_fl = [] list_org = [] -for city in df['市'].drop_duplicates(): - df_ct = df[df['市']==city] - # wb = Workbook() - # wb.save(fr'C:\Users\鸽子\Desktop\9月0.4kv区县预测\{city}.xlsx') - for org in df_ct['org_name'].drop_duplicates(): - if org.strip()[-4:] != '供电公司': - continue - df_org = df_ct[df_ct['org_name']==org] - df_org['1-10kv'] /= 10000 - df_org['35kv'] /= 10000 - df_org['0.4kv及以下'] /= 10000 - s1 = df_org[['日期','0.4kv及以下']] +list1 = [] +for city in df['city_name'].drop_duplicates(): + wb = Workbook() + wb.save(fr'C:\Users\鸽子\Desktop\11月区县分压预测\{city}.xlsx') + +for org in df['county_name'].drop_duplicates(): + if org.strip()[-4:] != '供电公司': + continue + df_org = df[df['county_name']==org] + city = df_org['city_name'].iloc[0] + df_result = pd.DataFrame({}) + for level in df_org.columns[3:]: + s1 = df_org[['pt_date',level]] s1.replace(0,np.NaN,inplace=True) s1.dropna(how='any',inplace=True) - # plt.plot(range(len(s1)),s1['1-10kv']) - # plt.show() - # 更改列名,更改为Prophet指定的列名ds和y - dd = s1.rename(columns={'日期':'ds','0.4kv及以下':'y'}) + dd = s1.rename(columns={'pt_date':'ds',level:'y'}) + dd['ds'] = dd['ds'].map(lambda x:x.strip()) dd['ds'] = pd.to_datetime(dd['ds']) + dd.drop_duplicates(inplace=True) + + # 划分数据,划分为训练集和验证集,预测的数据设置为未来4天 + df_train = dd[(dd['ds']>='2023-01-01')&(dd['ds']<='2023-11-30')] - # 划分数据,划分为训练集和验证集,预测的数据设置为未来3天 - df_train = dd[(dd['ds']>='2022-01-01')&(dd['ds']<='2023-07-31')][:-3] - df_train = df_train.loc[normal(df_train['y']).index] - if df_train.shape[0] <= 180: + # df_train = df_train.loc[normal(df_train['y']).index] + df_train['y'] = df_train['y'].where(normal(df_train['y']),other=np.nan).bfill() + + if df_train.shape[0] <= 90: yc_org_list.append(org) continue - df_test = dd[(dd['ds']>='2022-01-01')&(dd['ds']<='2023-07-31')][-3:] + # df_test = dd[(dd['ds']>='2022-01-01')&(dd['ds']<='2023-07-31')][-3:] # 数据的变动会受到季节、周、天的影响,存在一定的规律性,因此我们将这三个参数设置为True model = Prophet(yearly_seasonality=True, weekly_seasonality=True, daily_seasonality=True) # 采用中国的假期模式,其余参数均保持默认 @@ -57,7 +61,7 @@ for city in df['市'].drop_duplicates(): model.fit(df_train) # make_future_dataframe: 作用是告诉模型我们要预测多长时间,以及时间的周期是什么。生成一个时间戳 - future = model.make_future_dataframe(periods=3, freq='D') + future = model.make_future_dataframe(periods=4, freq='D') # 进行预测,返回预测的结果forecast forecast = model.predict(future) @@ -65,37 +69,43 @@ for city in df['市'].drop_duplicates(): # 有:forecast['yhat'] = forecast['trend'] + forecast['additive_terms'] 。 # 因此:forecast['yhat'] = forecast['trend'] +forecast['weekly'] + forecast['yearly']。 # 如果有节假日因素,那么就会有forecast['yhat'] = forecast['trend'] +forecast['weekly'] + forecast['yearly'] + forecast['holidays']。 - # print(forecast) # 测试,把ds列,即data_series列设置为索引列 - df_test = df_test.set_index('ds') + # df_test = df_test.set_index('ds') # 把预测到的数据取出ds列,预测值列yhat,同样把ds列设置为索引列。 - forecast = forecast[['ds','yhat']].set_index('ds') + forecast = forecast[['ds','yhat']].set_index('ds').sort_index(ascending=True).loc['2023-11'] + + # 将预测列前25天替换为真实值 + forecast.loc['2023-11'][:25] = dd.set_index('ds').loc['2023-11'][:25] + if len(forecast) < 334: + list1.append(org) # join:按照索引进行连接, - # dropna:能够找到DataFrame类型数据的空值(缺失值),将空值所在的行/列删除后,将新的DataFrame作为返回值返回。 - df_all = forecast.join(dd.set_index('ds')).dropna() - df_all['org_name'] = org - df_all['偏差率'] = (df_all['y'] - df_all['yhat'])/df_all['y'] - df_all.rename(columns={'y':'真实值','yhat':'预测值'},inplace=True) - df_all = df_all[['org_name','真实值','预测值','偏差率']] + forecast.columns = [level] + + df_result = pd.concat([df_result,forecast],axis=1) + + # df_all = forecast.join(dd.set_index('ds')).dropna() + # df_all['org_name'] = org + # df_all['偏差率'] = (df_all['y'] - df_all['yhat'])/df_all['y'] + # df_all.rename(columns={'y':'真实值','yhat':'预测值'},inplace=True) + # df_all = df_all[['org_name','真实值','预测值','偏差率']] list_org.append(org) - try: - result = df_all.loc['2023-7'] - result['goal'] = (result['真实值'] - result['预测值'])[-3:].sum()/result['真实值'].sum() - list_fl.append((result['真实值'] - result['预测值'])[-3:].sum()/result['真实值'].sum()) - - # with pd.ExcelWriter(fr'C:\Users\鸽子\Desktop\9月0.4kv区县预测\{city}.xlsx',mode='a',engine='openpyxl',if_sheet_exists='replace') as writer: - # result.to_excel(writer,sheet_name=f'{org}') - except: - yc_org_list.append(org) + # result = df_all.loc['2023-7'] + # result['goal'] = (result['真实值'] - result['预测值'])[-3:].sum()/result['真实值'].sum() + # list_fl.append((result['真实值'] - result['预测值'])[-3:].sum()/result['真实值'].sum()) + + with pd.ExcelWriter(fr'C:\Users\鸽子\Desktop\11月区县分压预测\{city}.xlsx',mode='a',engine='openpyxl',if_sheet_exists='replace') as writer: + df_result.to_excel(writer,sheet_name=f'{org}') + +print(yc_org_list) df = pd.DataFrame({'org':list_org,'goal':list_fl}) print(df) print(df['goal'].value_counts(bins=[-0.05,-0.01,-0.005,0, 0.005, 0.01, 0.02,0.05],sort=False)) -# print(yc_org_list) + # # 创建一个ExcelWriter对象 # with pd.ExcelWriter(r'C:\Users\鸽子\Desktop\output.xlsx',mode='a',if_sheet_exists='replace') as writer: # # 将不同的子文件写入同一个Excel文件的不同工作表 @@ -107,4 +117,3 @@ print(df['goal'].value_counts(bins=[-0.05,-0.01,-0.005,0, 0.005, 0.01, 0.02,0.05 # plt.show() -