📄 selectoperator.java
字号:
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package eti.bi.alphaminer.patch.standard.operation.operator;
import java.io.File;
import java.util.Vector;
import weka.filters.unsupervised.instance.RemoveRange;
import weka.filters.unsupervised.instance.RemoveWithValues;
import com.prudsys.pdm.Core.CategoricalAttribute;
import com.prudsys.pdm.Core.MiningAttribute;
import com.prudsys.pdm.Core.MiningDataSpecification;
import com.prudsys.pdm.Core.MiningException;
import com.prudsys.pdm.Input.MiningStoredData;
import eti.bi.alphaminer.core.handler.ICaseHandler;
import eti.bi.alphaminer.core.transform.DataTransformAction;
import eti.bi.alphaminer.core.transform.WekaTransformAction;
import eti.bi.alphaminer.operation.operator.INodeInfo;
import eti.bi.alphaminer.operation.operator.Operator;
import eti.bi.alphaminer.operation.operator.TransformOperator;
import eti.bi.alphaminer.vo.BIData;
import eti.bi.alphaminer.vo.BIObject;
import eti.bi.alphaminer.vo.IBIData;
import eti.bi.alphaminer.vo.IOperatorNode;
import eti.bi.common.Locale.Resource;
import eti.bi.exception.AppException;
import eti.bi.exception.SysException;
import eti.bi.util.ValueValidator;
/**
* SamplingOperator is a kind of Operator
*/
public class SelectOperator extends TransformOperator {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* @param a_CaseID
* @param a_CaseWindow
* @param aOperatorInfo
*/
public SelectOperator(String a_CaseID, INodeInfo aNodeInfo, ICaseHandler aCaseHandler) {
super(a_CaseID, aNodeInfo, aCaseHandler);
// TODO Auto-generated constructor stub
}
public final static int BY_RANGE = 0;
public final static int BY_VALUE = 1;
private final static String CATEG = "Categorical";
private final static String NUM = "Numeric";
private int m_Mode = BY_RANGE;
private boolean m_InvertSelection = true;
/**
* Set node id and update operator text of the Select at the same time.
* @param a_NodeID ID of the node
*/
public void setNodeID(String a_NodeID) {
setLabel(getDescription() + " [" + a_NodeID + "]");
super.setNodeID(a_NodeID);
}
/**
* Set node id and update operator text of the Select at the same time.
* @param a_NodeID ID of the node
*/
public void setDescription(String a_Description) {
m_Description = a_Description;
setLabel(m_Description + " [" + m_NodeID + "]");
}
/* (non-Javadoc)
* @see eti.bi.alphaminer.ui.operator.Operator#hasResult()
*/
public boolean hasResult() {
/* Normally the operator has to check if the output data object and/or the output
* model object are exist by calling m_OutputBIObject.hasResult(int) by passing BIObject.DATA
* and BIObject.MODEL respectively. You may check both existance or either one by simple modifying
* the logic below.
*/
if (m_OutputBIObject != null)
{
return (m_OutputBIObject.hasResult(BIObject.DATA));
}else
{
return false;
} }
/* (non-Javadoc)
* @see eti.bi.alphaminer.ui.operator.Operator#execute(eti.bi.alphaminer.vo.OperatorNode, java.util.Vector)
*/
@SuppressWarnings("unchecked")
public void execute(IOperatorNode a_OperatorNode, Vector a_Parents)
throws MiningException, SysException, AppException
{
/* Get input bi object from parent node */
Operator parentOp = (Operator)a_Parents.elementAt(0);
setInputBIObject(parentOp.getOutputBIObject());
IBIData aInputBIData = getInputBIObject().getBIData();
/* Get parameter from user input */
validateParameters(aInputBIData.getMetaData(),a_OperatorNode, aInputBIData.getMiningStoredData());
String value = (String) a_OperatorNode.getParameterValue("mode");
if(value !=null && ValueValidator.isNumeric(value)){
m_Mode = Integer.parseInt(value );
}
/* Prepare output mining data */
BIData aOutputBIData = new BIData(getCaseID(), getNodeID());
/* Execute transform */
// MiningTransformationFactory mtf = new MiningTransformationFactory();
Vector transformActionHistory = aInputBIData.getTransformActionHistory();
DataTransformAction aTransformAction =null;
MiningStoredData aOutputMiningStoredData = null;
File tempFile = aOutputBIData.getTempFile();
switch (m_Mode){
case BY_RANGE:
RemoveRange removeRange = prepareRemoveRange(aInputBIData.getMetaData(),a_OperatorNode);
aTransformAction = new WekaTransformAction(m_CaseID, m_NodeID, tempFile.getAbsolutePath(), removeRange);
aOutputMiningStoredData = aTransformAction.transform(aInputBIData.getMiningStoredData());
break;
case BY_VALUE:
RemoveWithValues removeWithValues = prepareRemoveWithValues(aInputBIData.getMetaData(),a_OperatorNode);
aTransformAction = new WekaTransformAction(m_CaseID, m_NodeID, tempFile.getAbsolutePath(), removeWithValues);
aOutputMiningStoredData = aTransformAction.transform(aInputBIData.getMiningStoredData());
// For by value selection, it have to be applied in scoring and assessment data
transformActionHistory.add(aTransformAction);
break;
}
//if (removeWithValues.)
/* Set Output Mining Data */
aOutputBIData.setMiningStoredData(aOutputMiningStoredData);
aOutputBIData.copyTransformActionHistory(aInputBIData.getTransformActionHistory());
// aOutputBIData.addTransformActionHistory(aTransformAction);
// aOutputBIData.setTargetAttribute(aInputBIData.getTargetAttribute());
aOutputBIData.copyTargetAttribute(aInputBIData.getTargetAttribute());
m_OutputBIObject.setBIData(aOutputBIData);
/* Set run time parameter value to the node object, and it would be saved to the BIML for later retrival */
//a_OperatorNode.setParameterValue("Temporary data", aOutputBIData.getTempBIDataPath());
/* Write the output BIData or BIModel to temp space for operations to retrieve */
//aOutputBIData.writeTempBIData();
}
public RemoveWithValues prepareRemoveWithValues(MiningDataSpecification a_MetaData, IOperatorNode a_Node) throws MiningException
{
RemoveWithValues removeWithValues = new RemoveWithValues();
@SuppressWarnings("unused") MiningAttribute[] attr = a_MetaData.getAttributesArray();
String value = null;
MiningAttribute mAtt = null;
String sourceName = null;
int attrIndex = -1;
double splitPoint = -1;
boolean matchMissingValues = false;
// boolean invertSelection = true;
String selection = null;;
sourceName = (String) a_Node.getParameterValue("target");
mAtt = a_MetaData.getMiningAttribute(sourceName);
attrIndex = a_MetaData.getAttributeIndex(mAtt)+1;
value = (String) a_Node.getParameterValue("missingValue");
if(value.equalsIgnoreCase("true"))
matchMissingValues = true;
value = (String) a_Node.getParameterValue("keep");
if(value.equals("false")){
m_InvertSelection = false;
matchMissingValues = !matchMissingValues;
}else if (value.equals("true")){
m_InvertSelection = true;
}
if (mAtt instanceof CategoricalAttribute) {
value = (String) a_Node.getParameterValue("selection");
selection = parseSelection(value);
}else {
value = (String) a_Node.getParameterValue("smallerThan");
splitPoint = Double.parseDouble(value);
}
removeWithValues.setAttributeIndex(Integer.toString(attrIndex));
removeWithValues.setInvertSelection(m_InvertSelection);
removeWithValues.setMatchMissingValues(!matchMissingValues);
if (mAtt instanceof CategoricalAttribute) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -