RapidMiner

Problem with the Execute-Script-Operator

Hey,

I'm trying to generate an attribute Y in a moving sum from another attribute X:

Y(1) = X(1)

for i = 2 ... length(X) {

Y(i) = X(i) + Y(i-1)

}

The Result should look like this:









X Y
1 1
0 1
0 1
1 2
0 2


I do not found a possibility to do this in Rapidminer and therefore I used the Execute-Script-Operator. Unfortunately I have nearly no experience in Java/Groovy Smiley Sad The problem with my script is that it overwrites my input attribute X. I would be very grateful if someone have a look on the code below.

Greetings from Germany


import com.rapidminer.example.table.NumericalAttribute;
import com.rapidminer.tools.Ontology;

ExampleSet input= input[0];
Attributes all_attributes = input.getAttributes();
Attribute bool_attrib = all_attributes.get("X");
Attribute target = AttributeFactory.createAttribute("Y", Ontology.INTEGER)

target.setTableIndex(bool_attrib.getTableIndex());
all_attributes.addRegular(target);
ExampleTable bool_tbl = input.getExampleTable();

for (int i = 0; i < bool_tbl.size(); i++) {

DataRow tmp_DataRow = bool_tbl.getDataRow(i);
if (i == 0)
{
tmp_DataRow.set(target, tmp_DataRow.get(bool_attrib));
}

if (i != 0)
{
tmp_DataRow.set(target, tmp_DataRow.get(bool_attrib) + bool_tbl.getDataRow(i-1).get(target));
}
}
return (input);
5 REPLIES
RM Partner
RM Partner

Re: Problem with the Execute-Script-Operator

Hi,

what you need is the Integrate operator from the Value Series extension. This will get the job done without any coding Smiley Happy

Best regards,
Marius

Marius Helf
LinkedInTwitter
Contributor II jhiller
Contributor II

Re: Problem with the Execute-Script-Operator

Hi Thrhw31,

 

I have the same issue in another context.

In my for loop (for exploring the examples) I'm taking the text from a column into a string-variable. Then I count the occurences of a specific character and want wo write the result in a new column. Unfortunately the values of my source-column are overwritten.

 

Have you got a solution for that issue?

 

My code:

import com.rapidminer.tools.Ontology

ExampleSet inputExampleSet = input[0];

Attributes inputAttributes = inputExampleSet.getAttributes();
Attribute sourceAttribute = inputAttributes.get("ai_description");
Attribute targetAttribute = AttributeFactory.createAttribute("ai_description_numberOfBulletp", Ontology.INTEGER);

targetAttribute.setTableIndex(sourceAttribute.getTableIndex());
inputAttributes.addRegular(targetAttribute);

for (Example actExample : inputExampleSet) {
	int counter = 0;
	String actValue = actExample.getNominalValue(sourceAttribute);
	for( int i=0; i<actValue.length(); i++ ) {
    		if(actValue.charAt(i) == '•') {
			counter++;
    		}
    		
    }
    actExample.setValue(targetAttribute, counter);
}

return(inputExampleSet);

 

Regards

Johannes

 

Contributor II jhiller
Contributor II

Re: Problem with the Execute-Script-Operator

Hi again,

 

i think the sourceAttribute is overwritten by that line:

    actExample.setValue(targetAttribute, counter);

Has anyone an idea to do that in a better way?

 

Regards

Johannes

Highlighted
RM Staff
RM Staff
Solution

Re: Problem with the Execute-Script-Operator

Hi,

 

here is your fixed script:

 

import com.rapidminer.tools.Ontology

ExampleSet inputExampleSet = input[0];

Attributes inputAttributes = inputExampleSet.getAttributes();
Attribute sourceAttribute = inputAttributes.get("ai_description");
Attribute targetAttribute = AttributeFactory.createAttribute("ai_description_numberOfBulletp", Ontology.INTEGER);

inputAttributes.addRegular(targetAttribute);
inputExampleSet.getExampleTable().addAttribute(targetAttribute);

for (Example actExample : inputExampleSet) {
	int counter = 0;
	String actValue = actExample.getNominalValue(sourceAttribute);
	for( int i=0; i<actValue.length(); i++ ) {
    		if(actValue.charAt(i) == '•') {
			counter++;
    		}
    		
    }
    actExample.setValue(targetAttribute, counter);
}

return(inputExampleSet);

You just need to call "inputExampleSet.getExampleTable().addAttribute(targetAttribute);" after adding a new attribute to the Attributes.

 

Regards,

Marco

 

_________________________________________________________
Team Lead Software Engineering | RapidMiner GmbH
Contributor II jhiller
Contributor II

Re: Problem with the Execute-Script-Operator

Solved!

 

Thanks a lot!

Polls
How can RapidMiner increase participation in our new competitions?
Twitter Feed