デルタ計算過去 3 年間のさまざまな水道メーターを 1 時間ごとに観測したデータセットがあります。
問題は、観測結果がメータースタンドを示しており、水の使用量を示していないことです。
各水道メーターの時間ごとのデルタ変化を計算/表示したいと考えています。 どのようにアプローチすればよいでしょうか?
このデータセットを使用して実行したい分析の一部は、メーターがある時点でマイナスの使用状況 (水が逆流していることを示している) があるかどうか、またはメーターが漏れを示しているデルタが大きいかどうかを確認することです。
私の職場ではデータ品質に取り組み始めているので、上記に加えて、タイムスタンプが一貫しているかどうか、タイムスタンプに変化があるかどうか(特定のメーターの観測値が同じ分に返されないかどうか)なども確認したいと考えています。 -毎時番号)。
私が検討するのを楽しみにしている分析ツールの 1 つは、プロセスの品質です。
データの探索と視覚化品質およびプロセスエンジニアリングRe: デルタ計算ありがとう。 明日試してみることができます。
しかし、これでそれぞれの固有のメーターを区別できるでしょうか?
(現時点では 22 個ですが、後で数千個に拡張されます)。
次の行があります。日付時刻;カウンタ値;
計測ソフトウェアからエクスポートされたデータは、デフォルトでは日時順に並べられます (2023-09-17 13:09)
Re: デルタ計算恐れるな、
if(:meter != lag(:meter,1)
それは確実ですが、それに応じてデータを並べ替える必要があります。
メーターを左側にして、メーターと時間の列を選択し、次の操作を行います。

Re: デルタ計算タスクを容易にするには:
これは間違いなく、正規化GUI 

Re: デルタ計算入力ファイルの種類が何であるかはわかりませんが、Excel ファイルまたは .csv ファイルの場合、DateTime 値は 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 )
);
)
);
Re: デルタ計算も使用できます列移動平均()前の行から値を取得します (グループ列を操作するときに簡単になります)
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
));Re: デルタ計算データをメートルと時間で並べ替えてから、遅れ関数 (ラグ (:列, 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))));
Re: デルタ計算いいね!
はるかに堅牢でコンパクトです:)
Re: デルタ計算いいアドバイス。 明日は日時の書式設定に時間をかけて一日を始めます。
あなたの例と前の例の構文を取得するのは少し困難です。
JMP で R /dplyr ライブラリを使用できることを期待していますか? 何か効果的なものが書けると思いますRe: デルタ計算私はこの R コードを持っています。これはうまくいくはずです。
ライブラリ(dplyr)
your_data <- your_data %>%
配置(メーター名, 日付時刻) %>%
group_by(メーター名) %>%
mutate(DeltaMeterValue = MeterValue - lag(MeterValue, デフォルト = first(MeterValue))) %>%
グループ解除()
Re: デルタ計算JMP で R を使用することもできますが、そのソリューションは、R を使用したソリューションとかなり似ています。遅れ() JMP で (次を使用することもできます)差分() )。 列移動平均を使用した私のソリューションは理解するのがさらに困難ですが、アイデアは列移動平均を使用して前の行の値を取得することです。
スクリプトガイド > JMP の拡張 > R の操作
JSL 構文リファレンス > JSL 関数、演算子、およびメッセージ > R 統合関数
Re: デルタ計算ここの解決策のいずれかを使用しようとすると、最初の日付 (=0) のみが取得され、残りは取得されません - ここにあるかどうかを確認するためにさまざまな方法で並べ替えようとしましたが、何か間違っています。

Re: デルタ計算列名が間違っているようです。まず数式内の列名を修正してください。
Re: デルタ計算ああ、スペルミスが見えました。
Re: デルタ計算グループ内のデルタを計算する組み込み関数があればよいでしょう。
動作するようになりましたが、スクリプト言語を理解するのが難しく、ドラッグアンドドロップで数式を最初から作成しようとしましたが、ここで提供されたスクリプトにあるようにすべての部品を正しく配置することができません
Re: デルタ計算列移動平均関数の説明はありますか?
サポートページを見ると、必要な値の数については何も書かれていません。
列移動平均
現在の行に基づいて、指定された間隔の移動平均を返します。 欠損値は無視されます
Re: デルタ計算これを対話的に行う方法があります。 グループ化列を右クリックし、新しい数式のグループ化列にします (データはグループごとに並べ替える必要があり、おそらく時間などで並べ替える必要があります)。

次に、計算/値列を右クリックし、「行」->「差異」に移動します。

これにより、次のような式が得られます

Re: デルタ計算私の投稿の 1 つでドキュメントへのリンクを提供しました。 JSL 構文リファレンス > JSL 関数、演算子、およびメッセージ > 統計関数 - 列移動平均。 私の意見では、Col Moving Average のドキュメントはあまり明確ではなく、通常はそれを適切に動作させる (そしてその動作方法を覚えておく) ためにいくつかの小さなテストを行う必要があります。

ドキュメントを見つけるための他の場所 (異なる場合もあります...) は、JMP のヘルプ メニューの Scripting Index です。

Re: デルタ計算新しいバージョンをアップロードしてみます正規化GUI 。
新しいバージョンには、次のトリックに基づいて、前の行との差を計算するオプションがあります。 @jthiここで提供されます。
Jarmo のコード (Col Moving Average 経由) は、右クリックの新しい数式列メニューから得られるコードよりもはるかに優れています 
アップデート後はこんな感じになります。
新:「N-1」
