Python IBM data sci关于查找平均值的if/else问题

Python IBM data sci关于查找平均值的if/else问题,python,mean,Python,Mean,您的任务是完成getNAvg函数,该函数为沉淀数据计算N天的简单移动平均值,其中N是一个参数。函数应该返回给定数据的移动平均值列表 一系列k日移动平均线的公式-假设这是您提供的文件“weather data.txt”: time, temperature 1, 20 2, 25 3, 30 4, 25 5, 30 为什么文件看起来像这样 ->因为从函数中我们可以看到第一行包含一个标题(#忽略标题)和lineData=float(line.split(',')[1])用逗号分割文件,并取第二列(

您的任务是完成getNAvg函数,该函数为沉淀数据计算N天的简单移动平均值,其中N是一个参数。函数应该返回给定数据的移动平均值列表

一系列k日移动平均线的公式-假设这是您提供的文件“weather data.txt”:

time, temperature
1, 20
2, 25
3, 30
4, 25
5, 30
为什么文件看起来像这样

->因为从函数中我们可以看到第一行包含一个标题(#忽略标题)和
lineData=float(line.split(',')[1])
用逗号分割文件,并取第二列(我称之为文件中的温度)

首先,让我们以这个特定文件为例来了解函数的作用

使用上面的文件调用函数,让我们检查结果

file = "path/to/weather-data.txt"
print(getNAvg(file,3)
# [25.0, 26.666666666666668, 28.333333333333336]
这张照片向我们展示了什么? 这是移动平均线的列表。输出列表中的第一个元素是时间1-3的平均温度,第二个元素是时间2-4的平均温度,第三个元素是时间3-5的平均温度


现在让我们来回答你的问题:

问题1

mean = [0] # running avg
print(mean)
#[0]
将只使用一个元素->零值元素初始化列表。 这个列表将在稍后的if-else语句中使用,以填充我们寻找的移动平均线-我们稍后将详细讨论

问题2


            if (row<=N): 
                lastN.append(lineData)
                mean[0] = (lineData + mean[0]*(row-1))/row
            else:
                mean.append( mean[row - N -1]+ (lineData - lastN[0])/N)
                lastN = lastN[1:]
                lastN.append(lineData)

            row = row +1            
        return mean
这意味着

#lastN = [20]
#mean[0] = (20 + 0 * (1-1)) / 1 = [20]
  • 第二行数据
    row=2,lineData=25仍然
    row仍然
    row现在
    row>3
这意味着我们的例子

#mean.append( mean[4 -3 -1] + ((25 - 20) / 3)) = mean.append( mean[0] + 1.66666) => [25, 26.666666]
#lastN = [25,30] 
#lastN.append(lineData) => [25,30,25]
  • 第五行数据
    行=5,行数据=30
    =>类似于步骤4
现在终于


我们看到的结果列表正是我们之前看到的:[25,26.666666,28.333333]-N=3的移动平均线列表

我发现改变这一点稍微不那么令人困惑:

 if (row<=N): 
            lastN.append(lineData)
            mean[0] = (lineData + mean[0]*(row-1))/row
if(第行)
#lastN = [20,25,30]
#mean[0] = (30 + 22.5 * (3-1)) / 3 = [25]
mean.append( mean[row - N -1]+ (lineData - lastN[0])/N)
lastN = lastN[1:]
lastN.append(lineData)
#mean.append( mean[4 -3 -1] + ((25 - 20) / 3)) = mean.append( mean[0] + 1.66666) => [25, 26.666666]
#lastN = [25,30] 
#lastN.append(lineData) => [25,30,25]
# mean.append( mean[5 -3 -1] + ((30 - 25) / 3)) = mean.append( mean[1] + 1.66666) => [25, 26.666666, 28.333333]
#lastN = [30,25] 
#lastN.append(lineData) => [30,25,30]
 if (row<=N): 
            lastN.append(lineData)
            mean[0] = (lineData + mean[0]*(row-1))/row
 if (row<=N): 
            lastN.append(lineData)
            mean[0] = sum(lastN)/len(lastN)