
prerna.reactor.frame.py.HistogramReactor Maven / Gradle / Ivy
The newest version!
package prerna.reactor.frame.py;
import java.util.List;
import prerna.ds.py.PandasFrame;
import prerna.ds.py.PyTranslator;
import prerna.reactor.frame.AbstractFrameReactor;
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;
public class HistogramReactor extends AbstractFrameReactor {
/**
* This reactor gets a histogram
* The inputs to the reactor are:
* 1) the column to base the histogram on
* 2) the number of breaks
* 3) the panel id - defaults to zero if nothing is entered
*/
public HistogramReactor() {
this.keysToGet = new String[]{ReactorKeysEnum.COLUMN.getKey(), ReactorKeysEnum.BREAKS.getKey(), ReactorKeysEnum.PANEL.getKey()};
}
@Override
public NounMetadata execute() {
// get frame
PandasFrame frame = (PandasFrame) getFrame();
//get frame name
String table = frame.getName();
//get inputs
String column = getColumn();
//clean column name
if (column.contains("__")) {
column = column.split("__")[1];
}
//get number of breaks as an integer
int numBreaks = getNumBreaks();
//need to retrieve panel id to use in the task options
String panelId = getPanelId();
//build the py script to execute
return getHistogram(frame, table, column, panelId, numBreaks);
}
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
///////////////////////// MAKE HISTOGRAM ////////////////////////////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//method to make the histogram - now we can easily use the histogram code from other reactors
protected NounMetadata getHistogram(PandasFrame frame, String table, String column, String panelId, int numBreaks) {
PyTranslator pyT = this.insight.getPyTranslator();
StringBuilder script = new StringBuilder();
script.append("hist,bins = ");
StringBuilder formatHist = new StringBuilder();
StringBuilder formatBins = new StringBuilder();
boolean format = false;
String colSelector = table + "['" + column + "']";
if(numBreaks > 1) {
// np.histogram( FRAME940921[~np.isnan(FRAME940921['MovieBudget'])]['MovieBudget'], bins=5)
script.append("np.histogram(").append(table).append("[~np.isnan(").append(colSelector).append(")]['").append(column).append("'], bins=").append(numBreaks).append(")");
} else {
// np.histogram( FRAME940921[~np.isnan(FRAME940921['MovieBudget'])]['MovieBudget'], bins='auto')
script.append("np.histogram(").append(table).append("[~np.isnan(").append(colSelector).append(")]['").append(column).append("'], bins='auto')");
formatHist.append("hist = list(map(int, hist))");
formatBins.append("bins = list(bins)");
format = true;
}
insight.getPyTranslator().runPyAndReturnOutput("import numpy as np", script.toString());
if (format) {
insight.getPyTranslator().runPyAndReturnOutput(formatHist.toString(), formatBins.toString());
}
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy