private Serializable weightedAverage(final List<Object> slaveValues, final Collection<? extends StringAnalyzerResult> results, final String columnName, final String measureName) { final AverageBuilder averageBuilder = new AverageBuilder(); for (final StringAnalyzerResult analyzerResult : results) { final Crosstab<?> crosstab = analyzerResult.getCrosstab(); final CrosstabNavigator<?> nav = crosstab.where(StringAnalyzer.DIMENSION_COLUMN, columnName); final Number rowCount = (Number) nav.where(StringAnalyzer.DIMENSION_MEASURES, StringAnalyzer.MEASURE_ROW_COUNT).get(); final Number averageMeasureValue = (Number) nav.where(StringAnalyzer.DIMENSION_MEASURES, measureName).get(); averageBuilder.addValue(averageMeasureValue, rowCount.intValue()); } return averageBuilder.getAverage(); }
@Override public CrosstabResult getResult() { final CrosstabDimension columnDimension = new CrosstabDimension("Column"); final CrosstabDimension weekdayDimension = new CrosstabDimension("Weekday"); weekdayDimension.addCategory("Sunday").addCategory("Monday").addCategory("Tuesday").addCategory("Wednesday") .addCategory("Thursday").addCategory("Friday").addCategory("Saturday"); final Crosstab<Integer> crosstab = new Crosstab<>(Integer.class, columnDimension, weekdayDimension); for (final InputColumn<Date> col : dateColumns) { columnDimension.addCategory(col.getName()); final CrosstabNavigator<Integer> nav = crosstab.where(columnDimension, col.getName()); final Map<Integer, AtomicInteger> countMap = distributionMap.get(col); nav.where(weekdayDimension, "Sunday").put(countMap.get(Calendar.SUNDAY).get()); nav.where(weekdayDimension, "Monday").put(countMap.get(Calendar.MONDAY).get()); nav.where(weekdayDimension, "Tuesday").put(countMap.get(Calendar.TUESDAY).get()); nav.where(weekdayDimension, "Wednesday").put(countMap.get(Calendar.WEDNESDAY).get()); nav.where(weekdayDimension, "Thursday").put(countMap.get(Calendar.THURSDAY).get()); nav.where(weekdayDimension, "Friday").put(countMap.get(Calendar.FRIDAY).get()); nav.where(weekdayDimension, "Saturday").put(countMap.get(Calendar.SATURDAY).get()); } return new CrosstabResult(crosstab); }
private void addAttachment(final CrosstabNavigator<Number> nav, final RowAnnotation annotation, final InputColumn<?> column) { nav.attach(AnnotatedRowsResult.createIfSampleRowsAvailable(annotation, _annotationFactory, column)); } }
private static void sumUpData(final CrosstabNavigator<Number> mainNavigator, final CrosstabNavigator<Number> nav, final CrosstabDimension dimension, final String category) { final CrosstabNavigator<Number> where = nav.where(dimension, category); final CrosstabNavigator<Number> whereToPut = mainNavigator.where(dimension, category); final Number categoryValue = where.safeGet(null); if (categoryValue != null) { final Number oldValue = whereToPut.safeGet(null); if (oldValue != null) { final Number newValue = sum(oldValue, categoryValue); whereToPut.put(newValue); } else { whereToPut.put(categoryValue); } } }
private Crosstab<Serializable> createCrosstab(final DefaultPatternFinder patternFinder) { final Crosstab<Serializable> crosstab = createCrosstab(); final Set<Entry<TokenPattern, RowAnnotation>> entrySet = patternFinder.getAnnotations().entrySet(); // sort the entries so that the ones with the highest amount of // matches are at the top final Set<Entry<TokenPattern, RowAnnotation>> sortedEntrySet = new TreeSet<>((o1, o2) -> { int result = o2.getValue().getRowCount() - o1.getValue().getRowCount(); if (result == 0) { result = o1.getKey().toSymbolicString().compareTo(o2.getKey().toSymbolicString()); } return result; }); sortedEntrySet.addAll(entrySet); for (final Entry<TokenPattern, RowAnnotation> entry : sortedEntrySet) { final TokenPattern pattern = entry.getKey(); final CrosstabNavigator<Serializable> nav = crosstab.navigate(); nav.where(DIMENSION_NAME_PATTERN, pattern.toSymbolicString()); nav.where(DIMENSION_NAME_MEASURES, MEASURE_MATCH_COUNT); final RowAnnotation annotation = entry.getValue(); final int size = annotation.getRowCount(); nav.put(size, true); nav.attach(AnnotatedRowsResult.createIfSampleRowsAvailable(annotation, _rowAnnotationFactory, column)); nav.where(DIMENSION_NAME_MEASURES, MEASURE_SAMPLE); nav.put(pattern.getSampleString(), true); } return crosstab; }
crosstab.where(PatternFinderAnalyzer.DIMENSION_NAME_PATTERN, pattern); final Number matchCount = (Number) navigator .where(PatternFinderAnalyzer.DIMENSION_NAME_MEASURES, PatternFinderAnalyzer.MEASURE_MATCH_COUNT) .get(); final String sample = (String) navigator .where(PatternFinderAnalyzer.DIMENSION_NAME_MEASURES, PatternFinderAnalyzer.MEASURE_SAMPLE) .get(); nav.where(PatternFinderAnalyzer.DIMENSION_NAME_PATTERN, pattern.toSymbolicString()); nav.where(PatternFinderAnalyzer.DIMENSION_NAME_MEASURES, PatternFinderAnalyzer.MEASURE_MATCH_COUNT); final AtomicInteger count = entry.getValue(); nav.put(count, true); nav.where(PatternFinderAnalyzer.DIMENSION_NAME_MEASURES, PatternFinderAnalyzer.MEASURE_SAMPLE); final String sample = patternFinder.getSample(pattern); nav.put(sample, true);
entries.addAll(valueCombinations.entrySet()); final CrosstabNavigator<Number> nav = new CrosstabNavigator<>(valueCombinationCrosstab); final CrosstabDimension measureDimension = valueCombinationCrosstab.getDimension(BooleanAnalyzer.DIMENSION_MEASURE); nav.where(columnDimension, columnDimCategories.get(i)); nav.where(measureDimension, measureName); nav.put(values[i]);
public CrosstabNavigator<E> where(final CrosstabDimension dimension, final String isCategory) { return navigate().where(dimension, isCategory); }
final Crosstab<Number> partialCrosstab) { final CrosstabNavigator<Number> nav = new CrosstabNavigator<>(partialCrosstab); final CrosstabDimension columnDimension = partialCrosstab.getDimension(BooleanAnalyzer.DIMENSION_COLUMN); final CrosstabDimension measureDimension = partialCrosstab.getDimension(BooleanAnalyzer.DIMENSION_MEASURE); final Number[] values = new Number[columnDimCategories.size() - 1]; for (int i = 0; i < columnDimCategories.size() - 1; i++) { nav.where(columnDimension, columnDimCategories.get(i)); final CrosstabNavigator<Number> where = nav.where(measureDimension, measureCategory); final Number value = where.safeGet(null); if (!columnDimCategories.get(0).equals(BooleanAnalyzer.VALUE_COMBINATION_COLUMN_FREQUENCY)) { values[i] = value; nav.where(columnDimension, BooleanAnalyzer.VALUE_COMBINATION_COLUMN_FREQUENCY); final Number frequency = where.safeGet(null); final Number frequencyVal = frequency != null ? frequency : 0; final ValueCombination<Number> valComb = new ValueCombination<>(values);
/** * Add the values of partial crosstab to the main crosstab * * @param mainCrosstab * - main crosstab * @param partialCrosstab * - partial crosstab */ public static void addData(final Crosstab<Number> mainCrosstab, final Crosstab<Number> partialCrosstab, final CrosstabDimension columnDimension, final CrosstabDimension measureDimension) { if (partialCrosstab != null) { final CrosstabNavigator<Number> mainNavigator = new CrosstabNavigator<>(mainCrosstab); final CrosstabNavigator<Number> nav = new CrosstabNavigator<>(partialCrosstab); for (final String columnCategory : columnDimension.getCategories()) { // just navigate through the dimensions because is the column // dimension nav.where(columnDimension, columnCategory); mainNavigator.where(columnDimension, columnCategory); // navigate and sum up data final List<String> categories = measureDimension.getCategories(); for (final String measureCategory : categories) { sumUpData(mainNavigator, nav, measureDimension, measureCategory); } } } }
public void put(final E value) throws IllegalArgumentException, NullPointerException { put(value, false); }
final String category = navigator.getCategory(dimension); final Object value = navigator.get(); final ResultProducer resultProducer = navigator.explore(); callback.valueCell(value, resultProducer);
/** * Gets the value associated with the navigated position in the crosstab in * a safe manner, where any issues in the navigation will not be thrown as * an exception, but the parameter value will be returned instead. * * @param valueIfError * @return */ public E safeGet(final E valueIfError) { try { return get(); } catch (final Exception e) { return valueIfError; } }
public CrosstabNavigator<E> navigate() { return new CrosstabNavigator<>(this); }
public CrosstabNavigator<E> where(final String dimension, final String isCategory) { return navigate().where(dimension, isCategory); }
@Metric(order = 1, value = "Row count") public Number getRowCount() { final CrosstabDimension columnDimension = _columnStatisticsCrosstab.getDimension(BooleanAnalyzer.DIMENSION_COLUMN); return _columnStatisticsCrosstab.where(BooleanAnalyzer.DIMENSION_MEASURE, BooleanAnalyzer.MEASURE_ROW_COUNT) .where(columnDimension, columnDimension.getCategories().get(0)).get(); }