增量计算我有一个数据集,包含过去三年不同水表每小时的观测结果。
问题是观察结果显示的是水表站,而不是用水量。
我想计算/显示每个水表每小时的增量变化。 我该如何处理呢?
我想用这个数据集进行的一些分析是确定水表是否在某一时刻出现负使用情况(表明水流方向错误),或者水表是否必须有较大的增量来表明泄漏。
我的工作场所开始致力于数据质量,因此除了上述内容之外,我还想查看时间戳是否一致或时间戳是否发生变化(如果特定仪表的观察结果没有在同一分钟返回) -每小时编号)。
我期待探索的一种分析工具是过程质量
数据探索和可视化质量和工艺工程回复: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”
