查找每日值模式的公式你好,
我有一個數據表,其中有多個樣本跟踪這些樣本中不同系統集合的不同參數(1 個樣本將有 1 個系統,但另一個樣本也可能具有相同的系統)。 每個樣本在接近結束時都有不同的狀態。 這些狀態是我試圖預測的。 我使用單獨的數據表中的一些不同樣本創建了一個決策樹算法,然後將其添加到該數據表中。 這個決策樹試圖做的是預測系統在不同時間點的狀態。 然後,我將根據這些時間點的系統已知狀態測量這些預測狀態(該算法是用不同的樣本創建的,因此這是“新”數據)
現在您可以想像,在一天的過程中,這個公式可能會發送成百上千個不同的預測,但並非所有預測都是正確的,所以我想要一個可以按樣本數和日期查看所有這些預測的列公式,並輸出最常預測的設備狀態(Mode)
換句話說,我想要一列計算每個數據樣本的每一天的模式警報評級,並將預測的警報評級輸出到這些行中的每一行
在我附上的示例數據表中,我想要一個公式,可以自動化標題為“當天的警報預測”的列,我不介意使用 LogTime 列或自啟動以來的時間列來創建它的每日預測。
謝謝你的幫助
回复:查找每日值模式的公式非常感謝,我一直在努力弄清楚如何做到這一點。
我將更多地了解它的工作原理,以便我可以針對我擁有的其他項目進行調整。 我必須稍微調整一下才能讓它在我的數據集上工作,所以我已經開始理解它了,這很好。 但還有更多需要學習
再次感謝你的幫助
回复:查找每日值模式的公式請記住,這是針對您的情況的,應該這樣做。 您可以使用“幫助 > 腳本索引”和編輯器工具提示來幫助了解它的工作原理。
NamesDefaultToHere(1);
// Starting table
dt = DataTable("Example Datatable for Summarising Alert Ratings.jmp");
// Add required columns
dt << NewColumn("Date", Character, Formula(Short Date( :Logtime )));
dt << NewColumn("Group", Character, Formula((:System || " ") || :Date));
// Find the mode of :Decision Tree Prediction for each level in :Group, and fill in 'modeVals'
vals = Column(dt, "Decision Tree Prediction") << getValues;
gVals = Column(dt, "Group") << getValues;
levs = AssociativeArray(gVals) << getKeys;
modes = J(NItems(levs), 1, .);
modeVals = J(NRow(dt), 1, .);
for(i=1, i<=NItems(levs), i++,
rows = Loc(AsList(gVals), levels[i]);
modes[i] = Mode(vals[rows]);
modeVals[rows] = modes[i];
);
// Build the final column in dt using 'modeVals'
vl = Column(dt, "Decision Tree Prediction") << getProperty("Value Labels");
nc = dt << NewColumn("Modes for Decision Tree Prediction", Numeric, Nominal, Values(modeVals));
nc << valueLabels(Arg(vl, 1));
回复:查找每日值模式的公式短日期* 抱歉,不是短代碼
回复:查找每日值模式的公式如此有效的邏輯如下所示:
對於每個 Sample -> 將它們拆分為天數(可以使用 datetime 列或我已經創建的列,該列對於每一行都有自該特定樣本開始以來的天數。 是的,謝謝,使用簡碼可能是一種使日期分組更容易的方法)
然後對於每個樣本,查看預測警報狀態的列,然後對於該樣本的每一天,查看所做的每個預測並找到它的模式值(這是序數)。 然後獲取該輸出模式值並將其重新插入到該樣本當天的新列每一行的數據表中(因此我最初希望將其作為公式)。 我認為當您閱讀本文查看數據表時會更清楚
這有助於更有意義嗎?
回复:查找每日值模式的公式如果我理解正確,您想為“System”的每個值定義一個組,並結合“Logtime”的“日期部分”(可能使用“ShortDate()”函數將其放入新列)。
如果是這種情況,您可以將上面的代碼概括為使用多個“by”變量,否則(可能更簡單)只需將兩個字符列連接在一起並使用它來定義組。 最後,正如您所指出的,當“gVals”是字符時,您需要調整代碼以使其工作。 也許:
NamesDefaultToHere(1);
ClearLog();
// Given a set of values ('vals') and group membership ('gVals'),
// returns the distinct levels in 'gVals' and the mode of each group
modeWithBy =
Function({vals, gVals}, {Default Local},
levs = AssociativeArray(gVals) << getKeys;
modes = {};
for(i=1, i<=NItems(levs), i++, InsertInto(modes, Mode(vals[Loc(AsList(gVals), levs[i])])));
EvalList({levs, modes});
);
l = [1, 2, 1, 1, 2, 2, 3];
g = {"1", "1", "1", "1", "2", "2", "2"};
Print(modeWithBy(l, g));
回复:查找每日值模式的公式
@ian_jmp寫道:
如果兩列都是數字,你可以這樣做:
NamesDefaultToHere(1);
ClearLog();
// Given a set of values ('vals') and group membership ('gVals'),
// returns the distinct levels in 'gVals' and the mode of each group
modeWithBy =
Function({vals, gVals}, {Default Local},
levs = AssociativeArray(gVals) << getKeys;
modes = J(NItems(levs), 1, .);
for(i=1, i<=NItems(levs), i++, modes[i] = Mode(vals[Loc(AsList(gVals), levs[i])]));
EvalList({levs, modes});
);
l = [1, 2, 1, 1, 2, 2, 3];
g = [1, 1, 1, 1, 2, 2, 2];
Print(modeWithBy(l, g));
“Sample”組可以是連續的,但它絕對是一個名義數據集。 如果不使用值標籤,組 System 就無法連續,它也是一個標稱數據集。 那麼這將如何與組織它以找到所有組(系統和样本)的模式有關,然後將數據組織成每天為它們的每個組合的基礎
此外,我希望將這些值合併回數據表中,以便您可以查看每天預測的警報是什麼
謝謝你的幫助
回复:查找每日值模式的公式“Sample”組可以是連續的,但它絕對是一個名義數據集。 如果不使用值標籤,組 System 就無法連續,它也是一個標稱數據集。 那麼這將如何與組織它以找到所有組(系統和样本)的模式有關,然後將數據組織成每天為它們的每個組合的基礎
此外,我希望將這些值合併回數據表中,以便您可以查看每天預測的警報是什麼
謝謝你的幫助
回复:查找每日值模式的公式如果兩列都是數字,你可以這樣做:
NamesDefaultToHere(1);
ClearLog();
// Given a set of values ('vals') and group membership ('gVals'),
// returns the distinct levels in 'gVals' and the mode of each group
modeWithBy =
Function({vals, gVals}, {Default Local},
levs = AssociativeArray(gVals) << getKeys;
modes = J(NItems(levs), 1, .);
for(i=1, i<=NItems(levs), i++, modes[i] = Mode(vals[Loc(AsList(gVals), levs[i])]));
EvalList({levs, modes});
);
l = [1, 2, 1, 1, 2, 2, 3];
g = [1, 1, 1, 1, 2, 2, 2];
Print(modeWithBy(l, g));回复:查找每日值模式的公式最初我想要一個公式,但我絕對理解你的觀點並認為總體而言更有效的解決方案肯定是最好的。 所以是的,一個腳本會非常有用,謝謝
回复:查找每日值模式的公式解決方案是否必須是公式,或者是否可以接受進行計算並將結果連接回原始表的腳本? 我問的原因是,我相信使用公式的效率會低很多倍,因為每行都會進行所有復制工作。