增量計算我有一個數據集,包含過去三年不同水錶每小時的觀測結果。
問題是觀察結果顯示的是水錶站,而不是用水量。
我想計算/顯示每個水錶每小時的增量變化。 我該如何處理呢?
我想用這個數據集進行的一些分析是確定水錶是否在某一時刻出現負使用情況(表明水流方向錯誤),或者水錶是否必須有較大的增量來表明洩漏。
我的工作場所開始致力於數據質量,因此除了上述內容之外,我還想查看時間戳是否一致或時間戳是否發生變化(如果特定儀表的觀察結果沒有在同一分鐘返回) -每小時編號)。
我期待探索的一種分析工具是過程質量
數據探索和可視化質量和工藝工程回复:Delta 計算謝謝。 我明天可以試試。
但這能夠區分每個獨特的儀表嗎?
(我現在有22個,以後會擴展到幾千個)。
我有行:MeterNumber;約會時間;計數器值;
計量軟件導出的數據默認按日期時間排序 (2023-09-17 13:09)
回复:Delta 計算不要害怕,
if(:meter != lag(:meter,1)
將確保這一點 - 但您必須相應地對數據進行排序:
在左側的儀表中,選擇儀表和時間列,然後:

回复:Delta 計算為了方便任務:
這絕對是一個應該包含在其中的案例標準化圖形用戶界面

回复:Delta 計算我不知道輸入文件類型是什麼,但如果是 Excel 文件或 .csv 文件,則您的日期時間值應作為 JMP 日期/時間值讀入 JMP。如果沒有,您應該花時間轉換它們。
下面是一個簡單的示例,可以幫助您計算使用情況數據
Names Default To Here( 1 );
dt = Current Data Table();
// Sort the data if not already sorted
dt << sort( by( :MeterNumber, :DateTime ), Replace table( 1 ) );
// Create the new Usage column
dt << New Column( "Usage",
formula(
//As Constant( Usage = 0 );
If( :MeterNumber != Lag( :MeterNumber ),
usage = 0,
:Usage = :CounterValue - Lag( :CounterValue )
);
)
);
回复:Delta 計算您還可以使用移動平均線()從上一行獲取值(可以使使用組列時更容易)
Names Default To Here(1);
// sample data
dt = New Table("Untitled",
Add Rows(6),
Compress File When Saved(1),
New Column("Meter", Character, "Nominal", Set Values({"A", "A", "A", "B", "B", "B"})),
New Column("Time", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 1, 2, 3])),
New Column("Value", Numeric, "Continuous", Format("Best", 12), Set Values([1, 0, 2, 0, 1, 2]))
);
// Data should be sorted by time
dt << New Column("D", Numeric, Continuous, Formula(
:Value - (Col Moving Average(:Value, 1, 1, 0, Meter) * 2 - :Value)
// 2 * :Value - (Col Moving Average(:Value, 1, 1, 0, Meter) * 2
));回复:Delta 計算您可以按米和時間對數據進行排序,然後使用落後功能 (滯後(:列,1) = 前一行的值)計算消耗量:
new table("test",add rows(100),
new column ("meter", Nominal, Set Each value (Step(row(),10*(0::11)+1,(0::11)))),
new column ("time",Format( "m/d/y h:m"), set each value(Date DMY( 17, 9, 2023 )+mod(row()-1,10)*3600)),
new column ("reading"));
new column("consumption", set each value(if(row()==1 |:meter != lag(:meter,1),0,random uniform(0,10))));
for each row( if(row()==1 |meter != lag(:meter,1), :reading =random uniform(0,10000),: reading = lag(:reading,1)+ :consumption));
new column("consumption-calc",Formula( if(row()==1 |:meter != lag(:meter,1),0, :reading - lag(:reading,1))));
回复:Delta 計算涼爽的!
更加堅固和緊湊:)
回复:Delta 計算好建議。 明天我將開始新的一天,花一些時間處理日期時間格式。
我很難獲取您的示例和前一個示例的語法。
我希望我可以在 JMP 中使用 R /dplyr 庫? 我想我可以寫一些有用的東西回复:Delta 計算我有這個 R 代碼應該可以解決問題。
圖書館(dplyr)
你的數據 <- 你的數據 %>%
安排(儀表名稱,日期時間)%>%
group_by(儀表名稱) %>%
突變(DeltaMeterValue = MeterValue - 滯後(MeterValue,默認=第一個(MeterValue)))%>%
取消分組()
回复:Delta 計算您可以將 R 與 JMP 結合使用,但該解決方案看起來與使用 R 的解決方案非常相似落後()在 JMP 中(您也可以使用差異() )。 我使用 Col Moving Average 的解決方案更難以理解,但其想法是使用 Col Moving Average 來獲取上一行的值。
腳本編寫指南 > 擴展 JMP > 使用 R
JSL 語法參考 > JSL 函數、運算符和消息 > R 集成函數
回复:Delta 計算當我嘗試使用這裡的任何解決方案時,我只得到第一個日期(=0)而不是其餘的 - 我嘗試以不同的方式排序以查看它是否在這裡我做錯了什麼

回复:Delta 計算您的列名稱似乎錯誤,首先修復公式中的列名稱
回复:Delta 計算啊,我看到拼寫錯誤了。
回覆:Delta 計算計算組內增量的內建函數會很好。
我讓它工作了,但我確實很難理解腳本語言,我嘗試從頭開始拖放公式,但我根本無法將所有部分正確放置,因為它們在您給我的腳本中
回覆:Delta 計算有 col 移動平均函數的描述嗎?
當我查看支援頁面時,描述沒有說明它需要多少個值。
移動平均線
傳回基於目前行的給定間隔內的移動平均值。 缺失值將被忽略
回覆:Delta 計算有一種方法可以互動地執行此操作。 右鍵單擊分組列並將其設為新公式的分組依據列(資料必須按組排序,很可能按時間或類似的內容排序)

接下來右鍵單擊您的計算/值列並轉到行->差異

這樣你就得到一個像這樣的公式

回覆:Delta 計算我確實在我的一篇文章中提供了文檔的連結: JSL 語法參考 > JSL 函數、運算子和訊息 > 統計函數 - Col 移動平均。 在我看來,Col Moving Average 的文檔不是很清楚,通常我必須進行一些小測試才能使其正常工作(並記住它是如何工作的)。

尋找一些文件的其他位置(有時不同...)是 JMP 幫助選單中的腳本索引

回覆:Delta 計算我會嘗試上傳新版本標準化圖形使用者介面。
新版本有一個選項來計算與前一行的差異 - 基於以下技巧: @jthi此處提供。
Jarmo 的程式碼(透過 Col Moving Average)比透過右鍵點擊新公式列選單所獲得的程式碼好得多:)
更新後,它將如下所示。
新:“N-1”
