Python 月次・年次データ集計(雨量)
日雨量を月・年毎に合計したもの。 各月の雨量の単位は mm/momth (月累計雨量)、 各年の雨量の単位は mm/year(年累計雨量)である。
#============================== # Rainfall # Dayly => Monthly, Yearly data #============================== import pandas as pd import numpy as np import datetime def rdata(): fnameR='xls_rdata_20190630.xlsx' # input file name sname='daily' df=pd.read_excel(fnameR, sheet_name=sname,header=0, index_col=0) # read excel data df.index = pd.to_datetime(df.index, format='%Y/%m/%d') return df def cal_y(rf,lyyy): rfy=np.zeros(len(lyyy),dtype=np.float) for i,ss in enumerate(lyyy): rfy[i]=rf[ss].sum() # yearly rainfall return rfy def cal_m(rf,lyyy,lmmm): rfm=np.zeros((len(lyyy),len(lmmm)+1),dtype=np.float) for i,yy in enumerate(lyyy): for j,mm in enumerate(lmmm): ss=yy+'/'+mm try: rfm[i,j]=rf[ss].sum() # monthly rainfall except KeyError: rfm[i,j]=np.nan rfm[i,-1]=np.sum(rfm[i,:]) return rfm def rf_year(lyy,la,df0): rfy=np.zeros((len(lyy),len(la)),dtype=np.float64) for i,ss in enumerate(la): rf=pd.Series(df0[ss], index=df0.index) rfy[:,i]=cal_y(rf,lyy) ss='{0:4s}'.format('Year') for k in [1,2,3,4,5,6,7]: ss=ss+',{0:>8s}'.format('Area-'+str(k)) ss=ss+',{0:>8s}'.format('Dam') ss=ss+',{0:>8s}'.format('Teromu') print(ss) for j,yy in enumerate(lyy): ss='{0:4s}'.format(yy) for i in range(len(la)): ss=ss+',{0:8.0f}'.format(rfy[j,i]) print(ss) ss='{0:4s}'.format('Ave.') for i in range(len(la)): ss=ss+',{0:8.0f}'.format(np.mean(rfy[:,i])) print(ss) def rf_mon(lyy,lmm,rf): rfm=cal_m(rf,lyy,lmm) ss='{0:4s}'.format('Year') for m in ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aig','Sep','Oct','Nov','Dec','Sum']: ss=ss+',{0:>6s}'.format(m) print(ss) for i,yy in enumerate(lyy): ss='{0:4s}'.format(yy) for j in range(len(lmm)+1): ss=ss+',{0:6.0f}'.format(rfm[i,j]) print(ss) ss='{0:4s}'.format('Ave.') for j in range(len(lmm)+1): ss=ss+',{0:6.0f}'.format(np.nanmean(rfm[:,j])) print(ss) def main(): df0=rdata() # daily rainfall at each area (2000.03-2019.06) lyy=['2001','2002','2003','2004','2005','2006','2007','2008','2009', '2010','2011','2012','2013','2014','2015','2016','2017','2018'] la=['area1','area2','area3','area4','area5','area6','area7','Dam','Teromu'] rf_year(lyy,la,df0) lyy=['2000','2001','2002','2003','2004','2005','2006','2007','2008','2009', '2010','2011','2012','2013','2014','2015','2016','2017','2018','2019'] lmm=['01','02','03','04','05','06','07','08','09','10','11','12'] print('* Monthly rainfall at Dam') rf=pd.Series(df0['Dam'], index=df0.index) rf_mon(lyy,lmm,rf) print('* Monthly rainfall at Teromu') rf=pd.Series(df0['Teromu'], index=df0.index) rf_mon(lyy,lmm,rf) #============== # Execution #============== if __name__ == '__main__': main()
以 上