public static Crosstab<Serializable> createCrosstab() { final CrosstabDimension measuresDimension = new CrosstabDimension(DIMENSION_NAME_MEASURES); measuresDimension.addCategory(MEASURE_MATCH_COUNT); measuresDimension.addCategory(MEASURE_SAMPLE); final CrosstabDimension patternDimension = new CrosstabDimension(DIMENSION_NAME_PATTERN); return new Crosstab<>(Serializable.class, measuresDimension, patternDimension); }
@Override public Iterator<String> iterator() { return getCategories().iterator(); }
private void navigateOnAxis(final List<CrosstabDimension> dimensionsOnAxis, final int cellIndex, final int cellCount, final CrosstabNavigator<?> navigator) { int colspan = cellCount; int category = 0; int localIndex = cellIndex; for (int k = 0; k < dimensionsOnAxis.size(); k++) { final CrosstabDimension dimension = dimensionsOnAxis.get(k); final int categoryCount = dimension.getCategoryCount(); final int offset = category * colspan; colspan = colspan / categoryCount; localIndex = localIndex - offset; category = localIndex / colspan; final String categoryName = dimension.getCategories().get(category); navigator.where(dimension, categoryName); } } }
private String getKey(final String[] categories) throws IllegalArgumentException, NullPointerException { if (categories.length != dimensions.size()) { throw new IllegalArgumentException( "Not all dimensions have been specified (differences in size of parameter and Crosstab's dimensions)"); } for (int i = 0; i < categories.length; i++) { if (categories[i] == null) { final CrosstabDimension dimension = dimensions.get(i); throw new NullPointerException( "Not all dimensions have been specified ('" + dimension.getName() + "' is null)"); } } final StringBuilder sb = new StringBuilder(); for (int i = 0; i < categories.length; i++) { final CrosstabDimension dimension = dimensions.get(i); final String category = categories[i]; if (!dimension.containsCategory(category)) { throw new IllegalArgumentException( "Unknown category [" + category + "] for dimension [" + dimension.getName() + "]"); } if (i != 0) { sb.append('^'); } sb.append(category); } return sb.toString(); }
@Override protected Crosstab<Serializable> createMasterCrosstab(final Collection<? extends CrosstabResult> results) { final CrosstabResult firstResult = results.iterator().next(); final Class<?> valueClass = firstResult.getCrosstab().getValueClass(); final Set<String> categories1 = createColumnDimensionCategorySet(); final Set<String> categories2 = createMeasureDimensionCategorySet(); for (final CrosstabResult crosstabResult : results) { final Crosstab<?> crosstab = crosstabResult.getCrosstab(); categories1.addAll(crosstab.getDimension(0).getCategories()); categories2.addAll(crosstab.getDimension(1).getCategories()); } final CrosstabDimension dimension1 = new CrosstabDimension(firstResult.getCrosstab().getDimension(0).getName()); dimension1.addCategories(categories1); final CrosstabDimension dimension2 = new CrosstabDimension(firstResult.getCrosstab().getDimension(1).getName()); dimension2.addCategories(categories2); @SuppressWarnings({ "unchecked", "rawtypes" }) final Crosstab<Serializable> crosstab = new Crosstab(valueClass, dimension1, dimension2); return crosstab; }
final CrosstabDimension columnDimension = valueCombinationCrosstab.getDimension(BooleanAnalyzer.DIMENSION_COLUMN); final List<String> columnDimCategories = columnDimension.getCategories(); int row = 0; for (final Entry<ValueCombination<Number>, Number> entry : entries) { measureName = BooleanAnalyzer.DIMENSION_COMBINATION_PREFIX + row; measureDimension.addCategory(measureName);
public void makeVertical(final CrosstabDimension dimension) { if (horizontalDimensions.contains(dimension)) { horizontalDimensions.remove(dimension); horizontalCells = horizontalCells / dimension.getCategoryCount(); } if (!verticalDimensions.contains(dimension)) { verticalDimensions.add(dimension); verticalCells = verticalCells * dimension.getCategoryCount(); } }
public Crosstab(final Class<E> valueClass, final String... dimensionNames) { this.valueClass = valueClass; dimensions = new ArrayList<>(); for (final String name : dimensionNames) { dimensions.add(new CrosstabDimension(name)); } }
public void addCategories(final Collection<String> categories) { for (final String category : categories) { addCategory(category); } }
if (measureDimension.containsCategory(parameter)) { return _valueCombinationCrosstab.where(measureDimension, parameter) .where(BooleanAnalyzer.DIMENSION_COLUMN, BooleanAnalyzer.VALUE_COMBINATION_COLUMN_FREQUENCY).get(); _valueCombinationCrosstab.getDimension(BooleanAnalyzer.DIMENSION_COLUMN).getCategories(); if (bools.length != columnCategories.size() - 1) { _valueCombinationCrosstab.getDimension(BooleanAnalyzer.DIMENSION_MEASURE).getCategories(); for (final String category : measureCategories) { final CrosstabNavigator<Number> nav =
public String[] getDimensionNames() { final int size = dimensions.size(); final String[] result = new String[size]; for (int i = 0; i < size; i++) { result[i] = dimensions.get(i).getName(); } return result; }
public void makeHorizontal(final CrosstabDimension dimension) { if (verticalDimensions.contains(dimension)) { verticalDimensions.remove(dimension); verticalCells = verticalCells / dimension.getCategoryCount(); } if (!horizontalDimensions.contains(dimension)) { horizontalDimensions.add(dimension); horizontalCells = horizontalCells * dimension.getCategoryCount(); } }
/** * * @param crosstabDimensions * @param partialCrosstab * @throws IllegalStateException */ public void createDimensionsValueCombinationCrosstab(final List<CrosstabDimension> crosstabDimensions, final Crosstab<Number> partialCrosstab) throws IllegalStateException { if (partialCrosstab != null) { final CrosstabDimension columnDimension = partialCrosstab.getDimension(BooleanAnalyzer.DIMENSION_COLUMN); if (crosstabDimensions.size() == 0) { crosstabDimensions.add(columnDimension); // the Value Combination crosstab gets an empty measure // dimension because the measure categories need to be recreated // based on the value combinations found final CrosstabDimension measureDimension = new CrosstabDimension(BooleanAnalyzer.DIMENSION_MEASURE); crosstabDimensions.add(measureDimension); } else { // trying to be smart if (!CrosstabReducerHelper.dimensionExits(crosstabDimensions, columnDimension)) { throw new IllegalStateException( "The crosstabs do not have the same categories in dimension Column"); } } } }
/** * Puts the given value to the navigated position in the crosstab. * * @param value * the value to put. * @param createCategories * if true, the chosen categories will automatically be created * if they do not already exists in the dimensions of the * crosstab. * @throws IllegalArgumentException * if the position or value is invalid, typically because one or * more dimensions lacks a specified category or the value type * is not acceptable (typically because of class casting issues) * @throws NullPointerException * if some of the specified categories are null */ public void put(final E value, final boolean createCategories) throws IllegalArgumentException, NullPointerException { if (createCategories) { for (int i = 0; i < categories.length; i++) { final String category = categories[i]; final CrosstabDimension dimension = crosstab.getDimension(i); dimension.addCategory(category); } } crosstab.putValue(value, categories); }
public int getDimensionIndex(final String dimensionName) { if (dimensionName != null) { final int size = dimensions.size(); for (int i = 0; i < size; i++) { if (dimensionName.equals(dimensions.get(i).getName())) { return i; } } } throw new IllegalArgumentException("No such dimension: " + dimensionName); }
@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 int getWidth(final CrosstabDimension verticalDimension) { final List<String> categories = verticalDimension.getCategories(); int longestCategory = 0; for (final String category : categories) { longestCategory = Math.max(longestCategory, category.length()); } return longestCategory; }
for (int i = 0; i < horizontalDimensions.size(); i++) { final CrosstabDimension dimension = horizontalDimensions.get(i); if (dimension.getCategoryCount() > 0) { callback.beginRow(); colspan = colspan / dimension.getCategoryCount(); for (int j = 0; j < repeatHeaders; j++) { for (final String category : dimension.getCategories()) { callback.horizontalHeaderCell(category, dimension, colspan); repeatHeaders = repeatHeaders * dimension.getCategoryCount(); callback.endRow(); for (int j = 0; j < verticalDimensions.size(); j++) { final CrosstabDimension dimension = verticalDimensions.get(j); rowspan = rowspan / dimension.getCategoryCount();
@Metric(order = 5, value = "Total combination count") public int getTotalCombinationCount() { if (_valueCombinationCrosstab == null) { return 0; } return _valueCombinationCrosstab.getDimension(BooleanAnalyzer.DIMENSION_MEASURE).getCategoryCount(); }
public CrosstabNavigator<E> where(final CrosstabDimension dimension, final String isCategory) { return where(dimension.getName(), isCategory); }