能源大數(shù)據(jù)分析理論與實踐 課件 12.電力大數(shù)據(jù)分析_第1頁
能源大數(shù)據(jù)分析理論與實踐 課件 12.電力大數(shù)據(jù)分析_第2頁
能源大數(shù)據(jù)分析理論與實踐 課件 12.電力大數(shù)據(jù)分析_第3頁
能源大數(shù)據(jù)分析理論與實踐 課件 12.電力大數(shù)據(jù)分析_第4頁
能源大數(shù)據(jù)分析理論與實踐 課件 12.電力大數(shù)據(jù)分析_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

電力大數(shù)據(jù)分析12E-PowerBigDataAnalysis12.1基于LSTM方法的家庭用電量預測案例數(shù)據(jù)集來自UCI機器學習數(shù)據(jù)集,該數(shù)據(jù)集包含了2006年12月16日至2010年11月26日期間收集的1000個測量值,部分數(shù)據(jù)集如圖所示。數(shù)據(jù)集中的特征信息如下。(1)Date:日期,格式為dd/mm/yyyy。(2)Time:時間,格式為hh:mm:ss。(3)Global_active_power:全球每分鐘消耗的家用平均有功功率(千瓦)。(4)Global_reactive_power:全球每分鐘消耗的家用平均無功功率(千瓦)。(5)Voltage:每分鐘平均電壓(伏特)。(6)Global_intensity:全球每分鐘的家用平均電流強度(安培)。12.1基于LSTM方法的家庭用電量預測(7)Sub_metering_1:1號能量子計量(以瓦時為單位的有功能量),主要是指廚房中的洗碗機、烤箱和微波爐消耗的電量。(8)Sub_metering_2:2號能量子計量(以瓦時為單位的有功能量),主要是指洗衣房中洗衣機、烘干機等消耗的電量。(9)Sub_metering_3:3號能量子計量(以瓦時為單位的有功能量),主要是指電熱水器和空調(diào)消耗的電量。12.1基于LSTM方法的家庭用電量預測1)數(shù)據(jù)的導入與預處理數(shù)據(jù)集包含一些缺失值(約占行數(shù)的1.25%),數(shù)據(jù)集中存在所有日歷時間戳,但對于某些時間戳,缺少測量值,因此需要對數(shù)據(jù)進行預處理。在進行數(shù)據(jù)預處理之前,導入所需的數(shù)據(jù),該數(shù)據(jù)集包含2075259行和7列的數(shù)據(jù)。首先對缺失數(shù)據(jù)進行檢查,查看各列缺失數(shù)據(jù)的情況并用均值進行填充,以保證數(shù)據(jù)的統(tǒng)計特性,并提高分析的準確性。代碼如下。defETL_data():df=pd.read_csv('household_power_consumption.txt',sep=';',parse_dates={'dt':['Date','Time']},low_memory=False,na_values=['nan','?'],index_col='dt',dayfirst=True)print(df.shape)print(df.isnull().sum())df=df.fillna(df.mean())print(df.isnull().sum())print(df.corr())returndf12.1基于LSTM方法的家庭用電量預測2)數(shù)據(jù)可視化為了進一步理解和分析數(shù)據(jù),可以對現(xiàn)有的數(shù)據(jù)集進行可視化操作,分別繪制各列數(shù)據(jù)每月、每日、每小時的均值,代碼如下。defdata_plot(df):i=1cols=[0,1,3,4,5,6]plt.figure(figsize=(20,10))forcolincols:plt.subplot(len(cols),1,i)plt.plot(df.resample('M').mean().values[:,col])plt.title(df.columns[col]+'dataresampleovermonthformean',y=0.75,loc='left')i+=1plt.show()i=1

12.1基于LSTM方法的家庭用電量預測cols=[0,1,3,4,5,6]plt.figure(figsize=(20,10))forcolincols:plt.subplot(len(cols),1,i)plt.plot(df.resample('D').mean().values[:,col])plt.title(df.columns[col]+'dataresampleoverdayformean',y=0.75,loc='center')i+=1plt.show()i=1cols=[0,1,3,4,5,6]plt.figure(figsize=(20,10))forcolincols:plt.subplot(len(cols),1,i)plt.plot(df.resample('H').mean().values[:,col])plt.title(df.columns[col]+'dataresampleoverhourformean',y=0.75,loc='left')i+=1plt.show()12.1基于LSTM方法的家庭用電量預測各列數(shù)據(jù)的月均值、日均值、小時均值分別如圖所示。12.1基于LSTM方法的家庭用電量預測在使用LSTM模型進行預測之前,考慮特征之間的相關(guān)性是非常重要的。特征之間的相關(guān)性可能會影響模型的性能和預測結(jié)果,因此需要進行一些數(shù)據(jù)分析和處理來確保模型的有效性和穩(wěn)定性。在使用LSTM模型時,需要對數(shù)據(jù)集中的特征進行選擇。特征選擇的目標是保留重要的特征,并且避免高度相關(guān)的特征,因為這樣的特征可能會增加模型的復雜性。通常可以使用相關(guān)性分析等方法來幫助選擇高度相關(guān)的特征,相應的語句為df.corr()。12.1基于LSTM方法的家庭用電量預測3)LSTM數(shù)據(jù)準備本案例利用LSTM模型來預測Global_active_power這一變量。為了減少計算時間,并快速得到結(jié)果來測試模型,對每小時的數(shù)據(jù)進行重抽樣,將數(shù)據(jù)大小從2075259個減少到34589個(以分鐘為單位)。因此,數(shù)據(jù)包含了當前時間(以小時為單位)的7個輸入變量和1個“Global_active_power”輸出變量。將數(shù)據(jù)集劃分為訓練集和測試集,此處選擇了34589個數(shù)據(jù)中的4000個數(shù)據(jù)進行訓練,其余的將用于測試模型。代碼如下。deflstm(df):df=df[['Global_active_power','Global_reactive_power','Voltage','Global_intensity','Sub_metering_2','Sub_metering_1','Sub_metering_3']]df_resample=df.resample('h').mean()values=df_resample.valuesscaler=MinMaxScaler(feature_range=(0,1))scaled=scaler.fit_transform(values)12.1基于LSTM方法的家庭用電量預測reframed=series_to_supervised(scaled,1,1)r=list(range(df_resample.shape[1]+1,2*df_resample.shape[1]))reframed.drop(reframed.columns[r],axis=1,inplace=True)values=reframed.valuesn_train_time=4000train=values[:n_train_time,:]test=values[n_train_time:,:]train_x,train_y=train[:,:-1],train[:,-1]test_x,test_y=test[:,:-1],test[:,-1]train_x=train_x.reshape((train_x.shape[0],1,train_x.shape[1]))test_x=test_x.reshape((test_x.shape[0],1,test_x.shape[1]))12.1基于LSTM方法的家庭用電量預測上述代碼中使用MinMaxScaler函數(shù)進行歸一化處理,將數(shù)據(jù)映射到[0,1]區(qū)間,并使用fit_transform函數(shù)對values進行歸一化處理。接下來,使用series_to_supervised函數(shù)將原始數(shù)據(jù)進行滯后期處理,將滯后一期的數(shù)據(jù)作為特征來預測當前一期的Global_active_power。series_to_supervised函數(shù)的代碼如下。defseries_to_supervised(data,n_in=1,n_out=1,dropnan=True):n_vars=1iftype(data)islistelsedata.shape[1]dff=pd.DataFrame(data)cols,names=list(),list()foriinrange(n_in,0,-1):cols.append(dff.shift(-i))names+=[('var%d(t-%d)'%(j+1,i))forjinrange(n_vars)]foriinrange(0,n_out):12.1基于LSTM方法的家庭用電量預測cols.append(dff.shift(-i))ifi==0:names+=[('var%d(t)'%(j+1))forjinrange(n_vars)]else:names+=[('var%d(t+%d)'%(j+1))forjinrange(n_vars)]agg=pd.concat(cols,axis=1)agg.columns=namesifdropnan:agg.dropna(inplace=True)returnagg12.1基于LSTM方法的家庭用電量預測4)LSTM模型建立和擬合首先創(chuàng)建一個Sequential函數(shù),該函數(shù)允許將各個神經(jīng)網(wǎng)絡層按順序添加。然后依次添加具有100個神經(jīng)元的LSTM層、Dropout層(用于在訓練過程中隨機禁用一部分神經(jīng)元,以減少過擬合)、Dense層(具有一個神經(jīng)元,用于輸出預測結(jié)果Global_active_power)。model=Sequential()model.add(LSTM(100,input_shape=(train_x.shape[1],train_x.shape[2])))model.add(Dropout(0.1))model.add(Dense(1))pile(loss='mean_squared_error',optimizer='adam')12.1基于LSTM方法的家庭用電量預測5)模型訓練將這樣一個LSTM模型訓練50個epoch,batch_size為70。即在訓練過程中,模型將在整個數(shù)據(jù)集上迭代訓練50次,并且在每次迭代中,都會根據(jù)70個數(shù)據(jù)樣本(數(shù)據(jù)點)更新其權(quán)重。訓練過程和損失函數(shù)的圖形繪制代碼如下。history=model.fit(train_x,train_y,epochs=50,batch_size=70,validation_data=(test_x,test_y),verbose=2,shuffle=False)plt.plot(history.history['loss'])plt.plot(history.history['val_loss'])plt.title('modelloss')plt.ylabel('loss')plt.xlabel('epoch')plt.legend(['train','test'],loc='upperright')plt.show()12.1基于LSTM方法的家庭用電量預測模型在訓練集和測試集上的損失變化情況如圖所示,可以看出訓練集和測試集上的誤差都呈現(xiàn)了收斂的狀態(tài)。size=df_resample.shape[1]yhat=model.predict(test_x)test_x=test_x.reshape((test_x.shape[0],size))inv_yhat=np.concatenate((yhat,test_x[:,1-size:]),axis=1)inv_yhat=scaler.inverse_transform(inv_yhat)inv_yhat=inv_yhat[:,0]test_y=test_y.reshape((len(test_y),1))inv_y=np.concatenate((test_y,test_x[:,1-size:]),axis=1)inv_y=scaler.inverse_transform(inv_y)inv_y=inv_y[:,0]rmse=np.sqrt(mean_squared_error(inv_y,inv_yhat))print('TestRMSE:%.3f'%rmse)print(model.summary())12.1基于LSTM方法的家庭用電量預測由于數(shù)據(jù)進行了歸一化操作,因此需要將數(shù)據(jù)還原后重新計算均方根誤差。對模型預測結(jié)果進行逆處理,將預測值恢復到原始的數(shù)據(jù)范圍。通過這些步驟,可以獲得模型在測試集上的實際預測結(jié)果,并進行后續(xù)的分析和比較。代碼如下。12.1基于LSTM方法的家庭用電量預測6)訓練結(jié)果與分析模型訓練完成后,可以對結(jié)果進行可視化,對比分析預測值與真實值的差異情況,此處分別比較1~500小時時段和20000~21000小時時段的預測結(jié)果,可視化代碼如下。aa=[xforxinrange(500)]plt.figure(figsize=(25,10))plt.plot(aa,inv_y[:500],marker='.',label="actual")plt.plot(aa,inv_yhat[:500],'r',label="prediction")plt.ylabel(df.columns[0],size=15)plt.xlabel('Timestepforfirst500hours',size=15)plt.legend(fontsize=15)plt.show()aa=[xforxinrange(1000)]plt.figure(figsize=(25,10))plt.plot(aa,inv_y[20000:21000],marker='.',label="actual")plt.plot(aa,inv_yhat[20000:21000],'r',label="prediction")plt.ylabel(df.columns[0],size=15)plt.xlabel('Timestepfor1000hoursfrom20,000to21,000',size=15)plt.legend(fontsize=15)plt.show()12.1基于LSTM方法的家庭用電量預測Global_active_power在1~500小時時段和20000~21000小時時段的預測值與真實值對比分別如圖所示。12.2基于Stacking融合方法的電網(wǎng)負荷預測Stacking融合方法單個模型難以擬合復雜數(shù)據(jù),且抗干擾能力較低,而集成多個模型可以結(jié)合不同模型的優(yōu)點,提高泛化能力。集成學習主要有兩種方法:Boosting和Bagging。Boosting采用串行方式,逐步優(yōu)化基學習器以構(gòu)造強學習器;Bagging則構(gòu)造多個獨立基學習器,并通過選舉或加權(quán)方式提升整體性能。Stacking融合方法結(jié)合了Boosting和Bagging的特點,首先利用多個基學習器學習原始數(shù)據(jù),再用第二層模型擬合這些學習器的輸出。Stacking又稱堆疊泛化,通過多個基礎(chǔ)模型的預測結(jié)果構(gòu)建元模型,生成最終預測,提高模型的綜合性能。12.2基于Stacking融合方法的電網(wǎng)負荷預測Stacking模型的應用步驟如下。步驟1:數(shù)據(jù)集劃分。把原始數(shù)據(jù)集劃分成訓練集與測試集,訓練集部分用來訓練Stacking模型,測試集部分用來測試Stacking模型。步驟2:基礎(chǔ)模型訓練。Stacking模型是基于K折交叉驗證的,把訓練集分成K個部分(K折),訓練K次,每一次選取一個沒有選取過的部分作為驗證集,通過基礎(chǔ)模型得到K個預測結(jié)果,這些預測結(jié)果合并在一起變成一個新的訓練集?;A(chǔ)模型1的訓練過程如圖所示。12.2基于Stacking融合方法的電網(wǎng)負荷預測步驟3:元模型訓練。將N個基礎(chǔ)模型的輸出值按照列的方式進行堆疊,就形成了新的樣本數(shù)據(jù),將新的樣本數(shù)據(jù)作為特征,新數(shù)據(jù)的標簽仍然為原始數(shù)據(jù)的標簽,將新數(shù)據(jù)的和交給元模型進行訓練,這個模型就融合了前一輪的N個模型結(jié)果。步驟4:測試集結(jié)果輸出。在每個基礎(chǔ)模型訓練完成后,使用訓練后的模型對測試集進行預測(這一步在步驟

2之后完成),這樣每個基礎(chǔ)模型均產(chǎn)生一個測試集的預測結(jié)果。同樣按照列的方式進行堆疊,將測試集的真實標簽作為標簽,使用步驟

3的元模型訓練Stacking模型,輸出測試集的預測結(jié)果,從而驗證Stacking模型的學習效果。12.2基于Stacking融合方法的電網(wǎng)負荷預測電網(wǎng)負荷數(shù)據(jù)集案例數(shù)據(jù)集為西班牙2015年—2018年的電網(wǎng)負荷數(shù)據(jù),其中包含每小時的電網(wǎng)負荷數(shù)據(jù),共35065條記錄,可用于電網(wǎng)負荷的預測,數(shù)據(jù)取自Kaggle。數(shù)據(jù)集主要包含“generationbiomass”“generationfossilbrowncoal/lignite”“generationfossilgas”“generationfossilhardcoal”“generationfossiloil”“generationhydropumpedstorageconsumption”“generationhydrorun-of-riverandpoundage”“generationhydrowaterreservoir”“generationnuclear”“generationother”“generationotherrenewable”“generationsolar”“generationwaste”“generationwindonshore”共14個輸入變量,輸出變量為“totalloadactual”?;赟tacking融合方法的電網(wǎng)負荷預測Stacking模型的應用與實現(xiàn)1)數(shù)據(jù)預處理首先,導入pandas庫、sklearn庫相關(guān)模塊,其中MinMaxScaler和StandardScaler是從sklearn庫導入的類,用于特征縮放。使用pandas在讀取名為“energy_dataset.csv”的CSV文件,df.dropna用于刪除數(shù)據(jù)集中包含空值的行。split_rate=0.8說明數(shù)據(jù)集劃分比例為0.8,意味著80%的數(shù)據(jù)將用于訓練,20%的數(shù)據(jù)將用于測試。split_point用于計算將數(shù)據(jù)集分成訓練集和測試集的索引點。它使用split_rate來確定用于訓練的數(shù)據(jù)比例。在劃分數(shù)據(jù)集后,從訓練集和測試集中分離出特征和標簽。代碼如下。12.2基于Stacking融合方法的電網(wǎng)負荷預測importpandasaspdfromsklearn.preprocessingimportMinMaxScalerfromsklearn.preprocessingimportStandardScalerdf=pd.read_csv('energy_dataset.csv',encoding='utf-8')df=df.dropna(subset=['totalloadactual','generationbiomass','generationfossilbrowncoal/lignite','generationfossilgas','generationfossilhardcoal','generationfossiloil','generationhydropumpedstorageconsumption','generationhydrorun-of-riverandpoundage','generationhydrowaterreservoir','generationnuclear','generationother','generationotherrenewable','generationsolar','generationwaste','generationwindonshore'])label_df=dfencoder=StandardScaler()dataset=label_dfraw_data=dataset.copy()split_rate=0.8split_point=int(len(raw_data)*split_rate)train_data=raw_data[:split_point]test_data=raw_data[split_point:]feature=['generationbiomass','generationfossilbrowncoal/lignite','generationfossilgas','generationfossilhardcoal','generationfossiloil','generationhydropumpedstorageconsumption','generationhydrorun-of-riverandpoundage','generationhydrowaterreservoir','generationnuclear','generationother','generationotherrenewable','generationsolar','generationwaste','generationwindonshore',]predict_class="totalloadactual"12.2基于Stacking融合方法的電網(wǎng)負荷預測然后,根據(jù)方差閾值(0.5)進行特征選擇。創(chuàng)建VarianceThreshold對象variance_selector并使用訓練集中的特征進行擬合。使用get_support()方法獲取經(jīng)過方差閾值篩選后的特征列,更新feature變量,將其設置為經(jīng)過方差閾值篩選后的特征,將訓練集中的特征和標簽分開。接著,初始化兩個MinMaxScaler對象feature_scaler和label_scaler,用于對特征和標簽進行歸一化處理。對訓練集中的特征和標簽執(zhí)行fit_transform方法,最后,使用feature_scaler對象的transform方法對測試集中的特征進行歸一化處理。代碼如下。fromsklearn.feature_selectionimportVarianceThresholdthreshold=0.5variance_selector=VarianceThreshold(threshold=threshold)variance_selector.fit(train_data[feature])variance_support=variance_selector.get_support()variance_feature=train_data[feature].loc[:,variance_support].columns.tolist()12.2基于Stacking融合方法的電網(wǎng)負荷預測feature=variance_featuretrain_features=train_data[feature]train_labels=train_data[predict_class]test_features=test_data[feature]test_labels=test_data[predict_class]feature_scaler=MinMaxScaler()label_scaler=MinMaxScaler()train_features_normalized=feature_scaler.fit_transform(train_features)train_labels_normalized=label_scaler.fit_transform(train_labels.values.reshape(-1,1))test_features_normalized=feature_scaler.transform(test_features)test_labels_normalized=label_scaler.transform(test_labels.values.reshape(-1,1))12.2基于Stacking融合方法的電網(wǎng)負荷預測2)建立基礎(chǔ)模型首先從torch庫、sklearn庫等庫中導入所需的模塊,然后定義LSTMModel類和PyTorchRegressor類,LSTMModel類是一個自定義的PyTorch模型類,用于定義一個包含3個LSTM層和1個Dense層的循環(huán)神經(jīng)網(wǎng)絡模型。構(gòu)造函數(shù)__init__中初始化了3個LSTM層和1個Dense層,每個LSTM層的輸入維度和隱藏層維度逐漸減小,這個模型用于接收輸入序列數(shù)據(jù)并輸出回歸值。forward方法定義了模型的前向傳播邏輯,首先初始化LSTM層的初始隱藏狀態(tài)和神經(jīng)元狀態(tài)(這里都初始化為0),然后依次經(jīng)過3個LSTM層,最后通過Dense層將最終時間步的輸出轉(zhuǎn)換為回歸值。12.2基于Stacking融合方法的電網(wǎng)負荷預測28classLSTMModel(nn.Module):def__init__(self,input_dim):super(LSTMModel,self).__init__()self.lstm1=nn.LSTM(input_dim,100,batch_first=True)self.lstm2=nn.LSTM(100,50,batch_first=True)self.lstm3=nn.LSTM(50,25,batch_first=True)self.fc=nn.Linear(25,1)defforward(self,x):h_0=torch.zeros(1,x.size(0),100)c_0=torch.zeros(1,x.size(0),100)out,_=self.lstm1(x,(h_0,c_0))h_1=torch.zeros(1,x.size(0),50)c_1=torch.zeros(1,x.size(0),50)out,_=self.lstm2(out,(h_1,c_1))h_2=torch.zeros(1,x.size(0),25)c_2=torch.zeros(1,x.size(0),25)out,_=self.lstm3(out,(h_2,c_2))out=self.fc(out[:,-1,:])returnout12.2基于Stacking融合方法的電網(wǎng)負荷預測PyTorchRegressor類是一個自定義的回歸器類,它繼承自sklearn庫中的BaseEstimator類和RegressorMixin類,以便與sklearn庫的模型接口兼容。fit方法用于訓練模型,它接收輸入特征x和目標標簽y,首先將它們轉(zhuǎn)換為PyTorch張量(x_tensor和y_tensor),然后進行多輪訓練。在每個訓練輪次中,模型首先前向傳播,計算損失,然后反向傳播和優(yōu)化參數(shù)。predict方法用于進行模型預測,它首先將輸入特征x轉(zhuǎn)換為PyTorch張量,然后使用訓練好的模型進行前向傳播,得到模型的預測輸出。相關(guān)代碼如下。classPyTorchRegressor(BaseEstimator,RegressorMixin):def__init__(self,model,epochs=100,batch_size=512):self.model=modelself.epochs=epochsself.batch_size=batch_sizeself.optimizer=torch.optim.Adam(self.model.parameters())self.criterion=nn.MSELoss()

基于Stacking融合方法的電網(wǎng)負荷預測deffit(self,x,y):x_tensor=torch.tensor(x,dtype=torch.float32).unsqueeze(1)y_tensor=torch.tensor(y,dtype=torch.float32).view(-1,1)forepochinrange(self.epochs):self.model.train()self.optimizer.zero_grad()outputs=self.model(x_tensor)loss=self.criterion(outputs,y_tensor)print(f"Thisisepoch{epoch}/{self.epochs},Lossis{loss.item()}")loss.backward()self.optimizer.step()returnselfdefpredict(self,x):self.model.eval()withtorch.no_grad():x_tensor=torch.tensor(x,dtype=torch.float32).unsqueeze(1)outputs=self.model(x_tensor)returnoutputs.numpy().flatten()12.2基于Stacking融合方法的電網(wǎng)負荷預測3)建立Stacking模型首先初始化基礎(chǔ)模型,包括三個模型:XGBoost模型、決策樹模型及上文建立的LSTM模型,這些模型將會用來進行預測。使用線性回歸模型(LinearRegression)作為元模型,元模型用來組合基礎(chǔ)模型的預測結(jié)果。然后創(chuàng)建堆疊回歸模型(StackingRegressor),堆疊回歸模型會訓練基礎(chǔ)模型,并使用基礎(chǔ)模型的預測結(jié)果來訓練元模型。這里使用訓練數(shù)據(jù)訓練堆疊回歸模型,其中train_features_normalized是經(jīng)過歸一化處理的訓練特征數(shù)據(jù),train_labels_normalized.ravel()是經(jīng)過歸一化處理并展平的訓練標簽數(shù)據(jù)。最后使用K折交叉驗證來預測目標值。cross_val_predict函數(shù)會對模型進行K折交叉驗證,返回K折交叉驗證的預測結(jié)果。代碼如下。12.2基于Stacking融合方法的電網(wǎng)負荷預測lstm_model=LSTMModel(train_features.shape[1])base_learners=[('xgb',xgb.XGBRegressor(n_estimators=500,max_depth=7,learning_rate=0.005)),('dt',DecisionTreeRegressor(max_depth=10,min_samples_split=2,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論