Example #1
0
        public static Clusterer CreateClusterer(CancellationToken cancellationToken, ClusteringSpec clusteringSpec, ReportResults reportResults)
        {
            var pivotedPropertySet = new PivotedProperties(reportResults.ItemProperties);

            pivotedPropertySet = pivotedPropertySet.ChangeSeriesGroups(pivotedPropertySet.CreateSeriesGroups()).ReorderItemProperties();
            var clusteredProperties = ClusteredProperties.FromClusteringSpec(clusteringSpec, pivotedPropertySet);

            if (!clusteredProperties.RowValues.Any() && !clusteredProperties.ColumnValues.Any())
            {
                clusteringSpec = ClusteringSpec.GetDefaultClusteringSpec(cancellationToken, reportResults, pivotedPropertySet);
                if (clusteringSpec == null)
                {
                    return(null);
                }
                clusteredProperties = ClusteredProperties.FromClusteringSpec(clusteringSpec, pivotedPropertySet);
            }

            return(new Clusterer(cancellationToken, reportResults.RowItems, clusteredProperties, ClusterMetricType.FromName(clusteringSpec.DistanceMetric) ?? ClusterMetricType.DEFAULT));
        }
Example #2
0
        public static ClusteredProperties FromClusteringSpec(ClusteringSpec clusteringSpec, PivotedProperties pivotedProperties)
        {
            var allRoles      = clusteringSpec.ToValueTransformDictionary();
            var rowTransforms = new Dictionary <string, ClusterRole.Transform>();
            var rowHeaders    = new List <DataPropertyDescriptor>();

            foreach (var property in pivotedProperties.UngroupedProperties)
            {
                var columnRef = ClusteringSpec.ColumnRef.FromPropertyDescriptor(property);
                if (columnRef != null && allRoles.TryGetValue(columnRef, out ClusterRole role))
                {
                    if (role == ClusterRole.ROWHEADER)
                    {
                        rowHeaders.Add(property);
                    }
                    else if (role is ClusterRole.Transform transform)
                    {
                        rowTransforms.Add(property.Name, transform);
                    }
                }
            }
            var columnRoles = new Dictionary <object, ClusterRole>();

            foreach (var group in pivotedProperties.SeriesGroups)
            {
                foreach (var series in group.SeriesList)
                {
                    var columnRef = ToColumnRef(series);
                    if (columnRef != null && allRoles.TryGetValue(columnRef, out ClusterRole role))
                    {
                        if (role == ClusterRole.COLUMNHEADER || role is ClusterRole.Transform)
                        {
                            columnRoles.Add(series.SeriesId, role);
                        }
                    }
                }
            }
            return(new ClusteredProperties(pivotedProperties, rowHeaders, rowTransforms, columnRoles));
        }
Example #3
0
        public static ClusteringSpec ReadXml(XmlReader reader)
        {
            var xElement = (XElement)XNode.ReadFrom(reader);
            var values   = new List <ValueSpec>();

            foreach (var elValue in xElement.Elements(EL_VALUE))
            {
                var role = elValue.Attribute(ATTR_ROLE)?.Value;
                if (role == null)
                {
                    continue;
                }

                ColumnRef columnRef = null;
                var       columnid  = elValue.Attribute(ATTR_COLUMN_ID)?.Value;
                if (columnid != null)
                {
                    columnRef = new ColumnRef(new ColumnId(columnid));
                }
                else
                {
                    columnRef = new ColumnRef(PropertyPath.Parse(elValue.Attribute(ATTR_PROPERTY_PATH)?.Value));
                }
                values.Add(new ValueSpec(columnRef, role));
            }

            var spec = new ClusteringSpec(values);
            var attrDistanceMetric = xElement.Attribute(ATTR_DISTANCE_METRIC);

            if (attrDistanceMetric != null)
            {
                spec = spec.ChangeDistanceMetric(attrDistanceMetric.Value);
            }

            return(spec);
        }
Example #4
0
 public static ReportResults PerformClustering(CancellationToken cancellationToken, ClusteringSpec clusteringSpec, ReportResults reportResults)
 {
     return(CreateClusterer(cancellationToken, clusteringSpec, reportResults)?.GetClusteredResults());
 }
Example #5
0
 protected bool Equals(ClusteringSpec other)
 {
     return(Equals(Values, other.Values) && DistanceMetric == other.DistanceMetric);
 }