滚动平均值计算降雨强度
我有一些真实的降雨数据,记录为日期和时间,以及翻斗式雨量计上的累积提示数。翻斗代表0.5毫米的降雨量。 我想循环浏览文件并确定强度的变化(降雨量/时间) 所以我需要多个固定时间范围内的滚动平均值: 所以我想累积降雨量,直到累积 5 分钟的降雨量并确定强度(以毫米/小时为单位)。因此,如果 5 分钟内记录 3 毫米,则等于 3/5*60 = 36 毫米/小时。 10 分钟内的相同降雨量将为 18 毫米/小时...
因此,如果我有几个小时的降雨量,我可能需要以几个标准间隔进行检查,例如:5、10、15、20、25、30、45、60 分钟ETC... 此外,数据以相反的顺序记录在原始文件中,因此最早的时间位于文件的末尾,后面的和最后的时间步首先出现在标题之后: 看起来像...(这里 975 - 961 = 14 个提示 = 7 毫米的降雨量)平均强度 1.4 毫米/小时 但在 16:27 和 16:34 之间 967-961 = 6 个提示 = 7 分钟内 3 毫米 = 27.71 毫米/小时
7424 Figtree (O'Briens Rd)
DATE :hh:mm Accum Tips
8/11/2011 20:33 975
8/11/2011 20:14 974
8/11/2011 20:04 973
8/11/2011 20:00 972
8/11/2011 19:35 971
8/11/2011 18:29 969
8/11/2011 16:44 968
8/11/2011 16:34 967
8/11/2011 16:33 966
8/11/2011 16:32 965
8/11/2011 16:28 963
8/11/2011 16:27 962
8/11/2011 15:30 961
有什么建议吗?
I have some real rainfall data recorded as the date and time, and the accumulated number of tips on a tipping bucket rain-gauge. The tipping bucket represents 0.5mm of rainfall.
I want to cycle through the file and determine the variation in intensity (rainfall/time)
So I need a rolling average over multiple fixed time frames:
So I want to accumulate rainfall, until 5minutes of rain is accumulated and determine the intensity in mm/hour. So if 3mm is recorded in 5min it is equal to 3/5*60 = 36mm/hr.
the same rainfall over 10 minutes would be 18mm/hr...
So if I have rainfall over several hours I may need to review at several standard intervals of say: 5, 10,15,20,25,30,45,60 minutes etc...
Also the data is recorded in reverse order in the raw file, so the earliest time is at the end of the file and the later and last time step appears first after a header:
Looks like... (here 975 - 961 = 14 tips = 7mm of rainfall) average intensity 1.4mm/hr
But between 16:27 and 16:34 967-961 = 6 tips = 3mm in 7 min = 27.71mm/hour
7424 Figtree (O'Briens Rd)
DATE :hh:mm Accum Tips
8/11/2011 20:33 975
8/11/2011 20:14 974
8/11/2011 20:04 973
8/11/2011 20:00 972
8/11/2011 19:35 971
8/11/2011 18:29 969
8/11/2011 16:44 968
8/11/2011 16:34 967
8/11/2011 16:33 966
8/11/2011 16:32 965
8/11/2011 16:28 963
8/11/2011 16:27 962
8/11/2011 15:30 961
Any suggestions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我不完全确定你有什么问题。
你知道如何读取文件吗?你可以这样做:
由于你的数据是累积的,你需要减去每两个条目,这就是
python 的列表推导式非常好。
现在我们需要循环查看过去 x 分钟内有多少条目。
I am not entirely sure what it is that you have a question about.
Do you know how to read out the file? You can do something like:
Since your data is cumulative, you need to subtract each two entries, this is where
python's list comprehensions are really nice.
Now we need to loop through and see how many entries are within the last x minutes.
由于时间戳不是定期出现的,因此您应该使用插值来获得最准确的结果。这也将使滚动平均值变得更容易。我在这个答案中使用
Interpolate
类下面的代码。现在只需选择间隔并计算每个间隔端点之间的差异即可。让我们为此创建一个生成器函数:
下面我以 10 分钟的间隔打印前一小时每小时的提示数:
编辑:使
totime
返回一个 int 并创建了rolling_avg
生成器。Since the time stamps do not come at regular intervals, you should use interpolating to get the most accurate results. This will make the rolling average easier too. I'm using the
Interpolate
class in this answer in the below code.Now it's just a matter of choosing your intervals and computing the difference between the endpoints of each interval. Let's create a generator function for that:
Below I'm printing the number of tips per hour in the previous hour with 10 minute intervals:
EDIT: Made
totime
return an int and created therolling_avg
generator.