
prerna.reactor.frame.r.analytics.RunAssociatedLearningReactor Maven / Gradle / Ivy
The newest version!
package prerna.reactor.frame.r.analytics;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import prerna.ds.OwlTemporalEngineMeta;
import prerna.ds.r.RDataTable;
import prerna.ds.r.RSyntaxHelper;
import prerna.query.interpreters.RInterpreter;
import prerna.query.querystruct.SelectQueryStruct;
import prerna.query.querystruct.selectors.QueryColumnSelector;
import prerna.query.querystruct.transform.QSAliasToPhysicalConverter;
import prerna.reactor.frame.r.AbstractRFrameReactor;
import prerna.reactor.task.constant.ConstantTaskCreationHelper;
import prerna.sablecc2.om.GenRowStruct;
import prerna.sablecc2.om.PixelDataType;
import prerna.sablecc2.om.PixelOperationType;
import prerna.sablecc2.om.ReactorKeysEnum;
import prerna.sablecc2.om.nounmeta.NounMetadata;
import prerna.sablecc2.om.task.ITask;
import prerna.util.Utility;
import prerna.util.usertracking.AnalyticsTrackerHelper;
import prerna.util.usertracking.UserTrackerFactory;
public class RunAssociatedLearningReactor extends AbstractRFrameReactor {
/**
* RunAssociatedLearning(ruleSide=["Outcome"], column=["Nominated"] ,
* values=["Y"] , attributes=["Genre" , "Nominated" ,"Rating"], conf =
* [0.5],support = [0.005],lift=[1], panel=[0]);
*/
private static final String RULE_SIDE = "ruleSide";
private static final String CONFIDENCE = "conf";
private static final String SUPPORT = "support";
private static final String LIFT = "lift";
public RunAssociatedLearningReactor() {
this.keysToGet = new String[] { RULE_SIDE, ReactorKeysEnum.COLUMN.getKey(), ReactorKeysEnum.VALUES.getKey(),
ReactorKeysEnum.ATTRIBUTES.getKey(), CONFIDENCE, SUPPORT, LIFT, ReactorKeysEnum.PANEL.getKey() };
}
@Override
public NounMetadata execute() {
init();
String[] packages = new String[] { "data.table", "dplyr", "arules", "stringr" };
this.rJavaTranslator.checkPackages(packages);
RDataTable frame = (RDataTable) getFrame();
String frameName = frame.getName();
List colNames = Arrays.asList(frame.getColumnNames());
boolean implicitFilter = false;
String dtNameIF = "dtFiltered" + Utility.getRandomString(6);
OwlTemporalEngineMeta meta = this.getFrame().getMetaData();
// get inputs from pixel command
String panelId = getPanelId();
String column = getInputString(ReactorKeysEnum.COLUMN.getKey());
List values = getInputList(ReactorKeysEnum.VALUES.getKey());
List attrs = getInputList(ReactorKeysEnum.ATTRIBUTES.getKey());
String ruleSide = getInputString(RULE_SIDE).toLowerCase();
double conf = getInputDouble(CONFIDENCE);
double supp = getInputDouble(SUPPORT);
double lift = getInputDouble(LIFT);
// make sure that column exists
if (!colNames.contains(column)) {
throw new IllegalArgumentException("Please select a valid column name");
}
// ensure the rule column is in the attrs
if (!attrs.contains(column)) {
attrs.add(column);
}
// check if there are filters on the frame. if so then need to run
// algorithm on subsetted data
if (!frame.getFrameFilters().isEmpty()) {
// create a new qs to retrieve filtered frame
SelectQueryStruct qs = new SelectQueryStruct();
qs.addSelector(new QueryColumnSelector(column));
qs.setImplicitFilters(frame.getFrameFilters());
qs = QSAliasToPhysicalConverter.getPhysicalQs(qs, meta);
RInterpreter interp = new RInterpreter();
interp.setQueryStruct(qs);
interp.setDataTableName(frameName);
interp.setColDataTypes(meta.getHeaderToTypeMap());
String query = interp.composeQuery();
this.rJavaTranslator.runR(dtNameIF + "<- {" + query + "}");
implicitFilter = true;
// cleanup the temp r variable in the query var
this.rJavaTranslator.runR("rm(" + query.split(" <-")[0] + ");gc();");
}
String targetDt = implicitFilter ? dtNameIF : frameName;
String resultsFrame = runAssociatedRulesRScript(targetDt, ruleSide, column, values, attrs, supp, conf, lift);
int ruleslength = this.rJavaTranslator.getInt("nrow(" + resultsFrame + ")");
String[] rulesDtColNames = this.rJavaTranslator.getColumns(resultsFrame);
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy