package quickml.supervised.crossValidation.utils; import org.joda.time.DateTime; import quickml.data.instances.InstanceWithAttributesMap; import quickml.supervised.Utils; import java.util.Map; public class MeanNormalizedDateTimeExtractor<T extends InstanceWithAttributesMap> implements DateTimeExtractor<T> { private Map<String, Utils.MeanStdMaxMin> meanStdMaxMinMap; public MeanNormalizedDateTimeExtractor(Map<String, Utils.MeanStdMaxMin> meanStdMaxMinMap) { this.meanStdMaxMinMap = meanStdMaxMinMap; } @Override public DateTime extractDateTime(T instance) { int year = attrVal(instance, "timeOfArrival-year"); int month = attrVal(instance,"timeOfArrival-monthOfYear"); int day = attrVal(instance,"timeOfArrival-dayOfMonth"); int hour = attrVal(instance, "timeOfArrival-hourOfDay"); int minute = attrVal(instance, "timeOfArrival-minuteOfHour"); return new DateTime(year, month, day, hour, minute, 0, 0); } private int attrVal(T instance, String attrName) { int normalizedVal = instance.getAttributes().containsKey(attrName) ? ((Number) instance.getAttributes().get(attrName)).intValue() : 1; double mean = meanStdMaxMinMap.get(attrName).getMean(); double std = meanStdMaxMinMap.get(attrName).getNonZeroStd(); return (int)(normalizedVal*std + mean); } }