日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

场次降雨数据划分

發布時間:2024/5/8 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 场次降雨数据划分 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????降雨是有可能斷斷續續的。從水文的角度出發,若降雨的時間間隔較短,可以作為一次降雨過程;若時間間隔較長,則應劃分為不同的降雨場次。通常可以采用時間間隔為n h以劃分場次降雨的標準(如n取值為6h),即在連續6h以上內均未監測到降雨數值,則視為兩次降雨過程,出現的降雨間隔不足6h的,為同一場降雨。 根據雨量計監測獲取的分鐘級或5分鐘級數據,按照上述思路,通過pandas做場次降雨數據劃分和降雨相關特征分析。

1.導入庫,獲取數據

import os import datetime import numpy as np import pandas as pd#設置數據所在路徑 path = r'rain' raindatas = os.listdir(path) #假設原始降雨數據以csv格式存儲 raindata = [f for f in raindatas if '.csv' in f] #用pandas讀取數據 df = pd.read_csv(raindata[0], parse_dates=[0], index_col=0)

2.場次降雨劃分函數:去掉0值后,找出連續兩個值之間的時間差是否大于設置的劃分標準

#按n小時劃分場次降雨 def timeSpilt(df, n=6):#去掉0值df_noZero = df[df != 0]df = df_noZero.dropna()#獲取時間索引timeStamp = df.index#初始化列表,用于保存生成的降雨開始和結束時間點rainRng = []#設置開始時間節點列表(第一個數即為第一場降雨的開始時間節點)timeNode = [timeStamp[0], ]for i in xrange(1, len(timeStamp)):#計算連續兩個時間點的時間差(下一場開始-上一場結束)diff = (timeStamp[i] - timeStamp[i-1])/np.timedelta64(1, 's')if diff >= n*60*60:#添加開始時間節點(即開始時間節點列表timeNode的最后一項)和結束時間節點rainRng.append([timeNode[-1], timeStamp[i-1]])#添加下一場開始降雨時間節點timeNode.append(timeStamp[i])return rainRng

3.處理數據函數:由于數據缺失或者原始數據沒有保存0值數據,故加上0值,為以后求取總降雨量和其他降雨特征做準備

#生成連續時間的降雨數據;未監測的時間點填充0 def zeroData(df): index = df.index#得到開始和結束時間start, end = index[0], index[-1]#原始數據為分鐘級數據 rng = pd.date_range(start, end, freq='T')#生成0值zeroList = [0 for i in xrange(len(rng))]df_allZero = pd.Series(zeroList, index=rng)#填充nan為0df_Zero = df_allZero.add(df ,fill_value=0)return df_Zero

4.處理降雨數據,提取降雨特征值

#處理降雨數據,提取場次降雨特征值 def rainInfo(rainRng, df_Zero):#初始化字典,用于保存生成的場次降雨特征值rf = {}#場次降雨特征值的字段名(開始時間,結束時間,總降雨量,持續時間、最大值,最大5分鐘累積值,最大10分鐘累積值,平均強度)names = ['start','end','sum','duration','max','max5','max10','Intensity']#字典keys缺省處理for name in names:rf.setdefault(name, [])#對各場次降雨進行遍歷for i in xrange(len(rainRng)):start, end = rainRng[i]df_need =df_Zero[start:end]#總降雨量rainsum = float(df_need.sum())#選取降雨量大于10mm的降雨量if rainsum > 10:#降雨歷時duration = (end - start)/(np.timedelta64(1, 's')*60)rf['duration'].append(duration) rf['start'].append(start)rf['end'].append(end)#場次降雨總量rf['sum'].append(rainsum)#最大值rf['max'].append(df_need.max())#5分鐘累積最大值rf['max5'].append(pd.rolling_sum(df_need,5).max())rf['max10'].append(pd.rolling_sum(df_need,10).max())Inten = rainsum*60/durationrf['Intensity'].append(Inten)#數據轉為為DataFrame df = pd.DataFrame(rf)return df

5.劃分降雨,并計算場次降雨特征值

if __name__ == '__main__':#劃分場次降雨rainRng = timeSpilt(df)df_zero = zeroData(df)df_info = rainInfo(rainRng, df_zero)#保存數據df_info.to_csv(r'jiegou.csv')

總結

以上是生活随笔為你收集整理的场次降雨数据划分的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。