尾隨累計和公式我的配方奶粉需求可能非常簡單。 我有一個溫度數據集,需要計算過去 120 天的追踪累積總和(稱為“溫度加熱週”,因為我將通過除以 7 將該總和轉換為周)。 我知道如何獲取追踪平均值,也知道如何獲取累計總和,但是是否有可能獲得追踪 120 天的累計總和? 在這種情況下,當溫度超過31.3℃時,給出0.25的“分數”(公式參見“DH-6小時”欄)。 基本上,我想要 120 天窗口內這些 0.25 值的累積總和,但我只知道如何按日期/月/年等進行分區(例如,請參閱“#DHWs”腳本),而不是按實際窗口進行分區的時間。 我堅信這一定是可行的!
高級統計建模自動化和腳本編寫消費者和市場研究預測建模和機器學習質量和工藝工程回复:尾隨累積和公式下面是一個可用於調試的新公式。它將為您最後放入 If() 語句中的任何行號創建數據表。如果您不想創建數據表,只需將您要查找的行號更改為-1。永遠不會有 -1 行,因此不會創建表。不管怎樣,看看你是否能看到發生了什麼以及哪裡發生了錯誤。
確保表排序正確,並且從表中刪除任何不想處理的行。該腳本不支持排除行。
If( Row() == 1,
holdMatrix = [];
dateMatrix = [];
rowMatrix = [];
);
If( Is Missing( :Name( "Date Time (UTC)" ) ) == 0,
If(
Is Missing( :Name( " Sea Surface Temperature (deg C)" ) ) == 1, holdMatrix = holdMatrix || 0,
:Name( " Sea Surface Temperature (deg C)" ) > 31.3, holdMatrix = holdMatrix || :time difference 2,
:Name( " Sea Surface Temperature (deg C)" ) <= 31.3, holdMatrix = holdMatrix || 0
);
dateMatrix = dateMatrix || Informat( :date, "m/d/y" );
rowMatrix = rowMatrix || Row();
If( N Cols( dateMatrix ) & N Cols( holdMatrix ) != 0,
While(
dateMatrix[N Cols( dateMatrix )] > dateMatrix[1] + In Days( 120 ) & N Cols( holdMatrix ) > 0 &
N Cols( dateMatrix ) > 0,
dateMatrix[1] = [];
holdMatrix[1] = [];
rowMatrix[1] = [];
);
If( N Cols( dateMatrix ) & N Cols( holdMatrix ) != 0,
x = Sum( holdMatrix ),
x = .
);
,
x = .
);
,
x = .
);
If( Row() == 22159,
New Table( "row" || Char( Row() ),
New Column( "RowNum", set values( rowMatrix ) ),
New Column( "Values", set values( holdMatrix ) ),
New Column( "dates", set values( dateMatrix ), Format( "m/d/y" ) )
)
);
(x / 24) / 7;
回复:尾隨累積和公式如果將以下內容添加到公式中
If( Row() == ????,
new table("row" || char(row()),new column("Values", set values(holdMatrix)),<BR /> new column("dates", set values(dateMatrix), format("m/d/y")));
);
(x / 24) / 7;
並更換 ????通過您認為數據變得有趣的行號,您將看到一個數據表,其中包含添加到值中的所有值以及收集值的日期。這可能會給您提供有關正在發生的事情的線索。
回复:尾隨累積和公式感謝您的堅持! 這確實是一個問題,現在數據更有意義。 2018 年 10 月至 2019 年 6 月期間仍然存在一個問題:儘管氣溫從未升至 31.3℃ 以上,但該值從未降至 0,即使到 2019 年 6 月(遠超過 120 天)也是如此。 你能說出那裡可能發生了什麼嗎?
回复:尾隨累積和公式我發現之前的公式有問題。缺失值導致了問題。此外,數據需要按日期升序排列。所以請在應用公式之前對錶格進行排序
If( Row() == 1,
holdMatrix = [];
dateMatrix = [];
);
If( Is Missing( :Name( "Date Time (UTC)" ) ) == 0,
If(
Is Missing( :Name( " Sea Surface Temperature (deg C)" ) ) == 1, holdMatrix = holdMatrix || 0,
:Name( " Sea Surface Temperature (deg C)" ) > 31.3, holdMatrix = holdMatrix || :time difference 2,
:Name( " Sea Surface Temperature (deg C)" ) <= 31.3, holdMatrix = holdMatrix || 0
);
dateMatrix = dateMatrix || Informat( :date, "m/d/y" );
If( N Cols( dateMatrix ) & N Cols( holdMatrix ) != 0,
While( dateMatrix[N Cols( dateMatrix )] > dateMatrix[1] + In Days( 120 ) & N Cols( holdMatrix ) > 0 & N Cols( dateMatrix ) > 0,
dateMatrix[1] = [];
holdMatrix[1] = [];
);
If( N Cols( dateMatrix ) & N Cols( holdMatrix ) != 0,
x = Sum( holdMatrix ),
x = .
);
,
x = .
);
,
x = .
);
(x / 24) / 7;
回复:尾隨累積和公式仍然有一些奇怪的事情發生。 如果您查看此數據表,您會在“#DHWs(過去 120 天)”列中找到您的公式(儘管略有修改)。 有些時期的 4-6 個月內氣溫沒有超過 31.3C,但該值從未減弱(例如 2014 年 10 月至 2015 年 5 月)。 如果 120 天內氣溫沒有高於 31.3C,“#DHWs”應降至 0。 我覺得你的公式應該這樣做。 不知道是不是一年到一年穿越的問題? 也許我可以將“Day”從 1 重新編碼到 20,000?
回复:尾隨累積和公式如果您只想要總和,則不要將總和除以任何值
If( Row() == 1,
holdMatrix = [];
dateMatrix = [];
);
If( :Name( " Sea Surface Temperature (deg C)" ) > 31.3,
holdMatrix = holdMatrix || 0.25;
dateMatrix = dateMatrix || Informat( :date, "m/d/y" );
);
If( N Cols( dateMatrix ) != 0,
While( dateMatrix[N Cols( dateMatrix )] > dateMatrix[1] + In Days( 120 ),
holdMatrix[1] = [];
dateMatrix[1] = [];
);
x = Sum( holdMatrix ) ;
,
x = .
);
x;
回复:尾隨累積和公式吉姆,感謝您再次查看我的問題,儘管您的新公式得出的值似乎太低(儘管該公式似乎有意義)。 但也許我應該以不同的方式表述我的需求,在這種情況下可能有一個更簡單(或至少更直接的解決方案):我想知道過去 120 天內溫度超過的總小時數31.3C。 這通常相當於 3 小時的時間段,因為溫度僅每三個小時測量一次(在大多數情況下),因此它基本上是一系列 3 的總和(請參閱附表中的“DHH”列)。 因此,在最溫暖的月份,該值可能會達到數百。 所以基本上,我需要 DHH 列的尾隨 120 天總和,但考慮到每天測量次數不同的問題,這很棘手!
回复:尾隨累積和公式我不太確定您正在使用什麼除數,但我使用了數據矩陣範圍內的小時數。這是我想出的公式
If( Row() == 1,
holdMatrix = [];
dateMatrix = [];
);
If( :Name( " Sea Surface Temperature (deg C)" ) > 31.3,
holdMatrix = holdMatrix || 0.25;
dateMatrix = dateMatrix || Informat( :date, "m/d/y" );
);
If( N Cols( dateMatrix ) != 0,
While( dateMatrix[N Cols( dateMatrix )] > dateMatrix[1] + In Days( 120 ),
holdMatrix[1] = [];
dateMatrix[1] = [];
);
x = Sum( holdMatrix ) / ((dateMatrix[N Cols( dateMatrix )] - dateMatrix[1]) / In Hours( 1 ));
,
x = .
);
x;
回复:尾隨累積和公式我有一個問題是由數據集中的一個惱人的怪癖引起的:我需要評估過去 120 天期間以小時為單位(而不是我之前提到的以周為單位)的累積總和。 但時間間隔不一致(見附表)。 大多數情況下,每天測量 8 次,但有時會更少。 基本上,任何時候溫度>31.3,我都想將時間差添加到列中。 使用“dif”函數這很容易。 然而,我遇到的困難是如何將“120 天”添加到矩陣公式中。 因此,在附表中,我想要計算過去 120 天期間“DHH”的累積總和。 我不需要公式中的“行”數,而是需要它來跟踪日期。 那可能嗎?
回复:尾隨累積和公式偉大的! 這就成功了。 我只是修改它以反映每天有八次測量時間的事實(即每一行不是唯一的一天,因此我在評估中乘以 121 x 8 = 968)。 這些數據是有意義的,因為該值在我之前計算的年度最大值處達到最大值,然後才下降。 非常感謝。 我希望公式編輯器中有一個尾隨累積和,它具有與列移動平均值(我一直使用的)類似的輸入:之前的權重和 N。 也許我會把它添加到願望清單中。
回复:尾隨累積和公式如果我正確地解釋了你想要的內容,我相信下面的公式將計算運行 120 尾隨累積和
If( Row() == 1,
holdMatrix = []
);
If( :Name( " Sea Surface Temperature (deg C)" ) > 31.3,
holdMatrix = holdMatrix || Matrix( 0.25 ),
holdMatrix = holdMatrix || Matrix( . )
);
If( N Cols( holdMatrix ) == 121,
holdMatrix[1] = []
);
Sum( holdMatrix ) / 7;