首页 > 解决方案 > 计算 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))

不太清楚如何解决这个问题!非常感谢任何帮助或指针!

标签: pythonaverage

解决方案


您可以使用 pandas 数据框来存储每个实例的功率输出。

考虑到您每 30 秒收到一个值,您可以将它们全部存储在数据框中。

然后使用 python 中的滚动函数计算 40 个数据点的移动平均值。

取滚动函数后得到的最大值,这将是您的最终结果。

请参阅此文档:https ://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rolling.html


推荐阅读