python - 计算 20 分钟平均值和最佳 20 分钟平均值
问题描述
我正在尝试通过一个项目来学习 Python,我正在从自行车功率计读取数据。现在我只是计算从开始到结束的平均功率,将每个功率读数添加到总和变量中,然后除以读数的数量。
我想计算 20 分钟的平均功率,如果可能,在前 20 分钟后每 30 秒继续计算 20 分钟的平均值,与上一个值进行比较,如果它高于上一个值,则将其存储,所以在最后,我可以拥有比一小时锻炼期间更高的 20 分钟平均力量,例如,无论那一小时发生在哪里。
来自功率计的数据是基于事件的,据我所知,这不是定期间隔,而是每秒一次或更快。到目前为止,这是我的代码的基础:
def average_power(power, count):
global PM1_sumwatt
global PM1_avgwatt
PM1_sumwatt = PM1_sumwatt + power
PM1_avgwatt = PM1_sumwatt / count
PM1_avgLog = open(PM1_avgFile, 'w')
PM1_avgLog.write("<div id=\"pwr\"> %d W</div>" % (PM1_avgwatt))
PM1_avgLog.close()
def power_data(eventCount, pedalDiff, pedalPowerRatio, cadence, accumPower, instantPower):
global PM1_avgcount
if WCORRECT1: calibpower = instantPower+(CF1w)
else: calibpower = instantPower*(CF1x)
power_meter.update(int(calibpower))
PM1_avgcount = PM1_avgcount + 1
average_power(int(calibpower), PM1_avgcount)
power = BicyclePower(readnode, network, callbacks = {'onDevicePaired': device_found,
'onPowerData': power_data})
# Starting PM readings
power.open(ChannelID(PM1, 11, 0))
不太清楚如何解决这个问题!非常感谢任何帮助或指针!
解决方案
您可以使用 pandas 数据框来存储每个实例的功率输出。
考虑到您每 30 秒收到一个值,您可以将它们全部存储在数据框中。
然后使用 python 中的滚动函数计算 40 个数据点的移动平均值。
取滚动函数后得到的最大值,这将是您的最终结果。
请参阅此文档:https ://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rolling.html
推荐阅读
- java - 在 Spring Boot 中从 JWT 安全检查中排除 URL
- javascript - How to pass custom attributes onClick in React
- html - How do I implement draw with p5,js and instance Containers
- python - 通过云功能运行时在 Firestore 中出现问题
- r - 将 .Rmd 文件转换为 .pdf 文件的最佳方法
- typescript - 如何开玩笑地模拟函数声明?我在模拟声明为函数声明的函数时遇到 Typescript 错误
- c# - 如何获取用户的组名是使用 Microsoft Graph API 的成员?
- wxpython - Ubuntu 18.04的Python 3.6的虚拟环境无法安装wxPython 4.1.0
- jquery - 使用 jQuery 向 Spring Boot 发送 PUT AJAX 请求时不允许出现错误 405 方法?
- java - 我正在使用这个 cron "0 0 9 * * ?" 每天早上 9 点调度任务的表达式,