BigML.Utils.convertDistributionMapToSortedArray C# (CSharp) Method

convertDistributionMapToSortedArray() public static method

We switch the Array to a Map structure in order to be more easily manipulated
public static convertDistributionMapToSortedArray ( double>.IDictionary distribution ) : JsonArray
distribution double>.IDictionary current distribution as an JsonArray instance
return JsonArray
        public static JsonArray convertDistributionMapToSortedArray(IDictionary<object, double> distribution)
        {
            JsonArray newDistribution = new JsonArray();

            string opType = BigML.OpType.Numeric.ToString();

            foreach (object key in distribution.Keys)
            {
                JsonArray element = new JsonArray();
                element.Add((JsonValue) key);
                element.Add(distribution[key]);
                newDistribution.Add(element);

                if (isNumericType(key))
                {
                    opType = BigML.OpType.Numeric.ToString();
                }
                else if (key is string)
                {
                    opType = BigML.OpType.Text.ToString();
                }
            }

            /*
            if (distribution != null && distribution.Count > 0)
            {

                //TODO: SORT newDistribution
                foreach (JsonValue element in newDistribution)
                {
                    foreach (JsonValue element1 in newDistribution)
                    {
                        if (element == element1)
                        {
                            continue;
                        }

                        if (OpType.Numeric.Equals(opType))
                        {
                            if ( ((double) element[0]) > ((double) element1[0]) )
                            {

                            }
                        }
                        else if (OpType.Text.Equals(opType))
                        {
                            if ( ((double)element[0]) > ((double)element1[0]) )
                            {

                            }
                        }
                        else
                        { // OPTYPE_DATETIME
                          // TODO: implement this
                            throw new Exception("Not supported");
                        }
                    }
                }
            }*/

            return newDistribution;
        }

Usage Example

Example #1
0
        /// <summary>
        /// Returns a distribution formed by grouping the distributions of each predicted node.
        /// </summary>
        protected internal Dictionary <string, object> getGroupedDistribution(MultiVote multiVoteInstance)
        {
            Dictionary <object, double> joinedDist = new Dictionary <object, double>();
            string distributionUnit = "counts";
            Dictionary <object, double> predictionDist;
            object distribution;

            foreach (Dictionary <object, object> prediction in multiVoteInstance.Predictions)
            {
                // Equivalent to:
                //  JSONArray predictionDist = (JSONArray) prediction.get("distribution");
                predictionDist = null;
                distribution   = prediction["distribution"];

                if (distribution is IDictionary)
                {
                    predictionDist = (Dictionary <object, double>)distribution;
                }
                else if ((distribution == null) || (!(distribution is JsonArray)))
                {
                    predictionDist = new Dictionary <object, double>();
                }
                else
                {
                    predictionDist = Utils.convertDistributionArrayToMap((JsonArray)distribution);
                }

                // Equivalent to:
                //  joinedDist = Utils.mergeDistributions(joinedDist, Utils.convertDistributionArrayToMap(predictionDist));
                joinedDist = Utils.mergeDistributions(joinedDist, predictionDist);

                if ("counts".Equals(distributionUnit) && joinedDist.Count > BINS_LIMIT)
                {
                    distributionUnit = "bins";
                }

                joinedDist = Utils.mergeBins(joinedDist, BINS_LIMIT);
            }

            Dictionary <string, object> distributionInfo = new Dictionary <string, object>();

            distributionInfo["distribution"]     = Utils.convertDistributionMapToSortedArray(joinedDist);
            distributionInfo["distributionUnit"] = distributionUnit;

            return(distributionInfo);
        }