Пример #1
0
        private IEnumerable <User> IdentifyByDistribution(long clusterId, List <User> clusterUsers, string distributionAttribute)
        {
            var rarityMeasurementPerValue = new Dictionary <long, double>();

            //count how many users posses each value of the given attribute
            foreach (var user in clusterUsers)
            {
                var value = user.Attributes[distributionAttribute];
                if (rarityMeasurementPerValue.ContainsKey(value))
                {
                    rarityMeasurementPerValue[value]++;
                }
                else
                {
                    rarityMeasurementPerValue[value] = 1;
                }
            }

            //saving how many users in the cluster posses each value of the attribute
            //as in: for each <clusterId,AttributeName> save the value of <AttributeValue,NumberOfUsers>
            if (clusterUsers.Any())
            {
                var kvpkey = new RarityKeyObject
                {
                    ClusterId     = clusterId.ToString(),
                    AttributeName = distributionAttribute
                };

                var kvpValue = new RarityValueObject();
                foreach (var key in rarityMeasurementPerValue.Keys)
                {
                    kvpValue[key] = (long)rarityMeasurementPerValue[key];
                }

                _attributesRarityMeasurement[kvpkey] = kvpValue;
            }

            //conversion to percentages
            var valuesCount = rarityMeasurementPerValue.Count;

            foreach (var key in rarityMeasurementPerValue.Keys.ToList())
            {
                rarityMeasurementPerValue[key] = (rarityMeasurementPerValue[key] / valuesCount) * 100;
            }

            return((from user in clusterUsers
                    from key in rarityMeasurementPerValue.Keys
                    where user.Attributes[distributionAttribute] == key && rarityMeasurementPerValue[key] <= _threshold
                    select user).ToList());
        }
Пример #2
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var obj = JsonConvert.DeserializeObject <Dictionary <string, Dictionary <long, long> > >(reader.Value as string);
            var parsedDictionary = new Dictionary <RarityKeyObject, RarityValueObject>();

            foreach (var objKey in obj.Keys)
            {
                var splited      = objKey.Split(' ');
                var rarityKeyObj = new RarityKeyObject();
                rarityKeyObj.ClusterId     = splited[0];
                rarityKeyObj.AttributeName = splited[1];

                parsedDictionary[rarityKeyObj] = new RarityValueObject();
                parsedDictionary[rarityKeyObj].UsersPerValue = obj[objKey];
            }

            return(parsedDictionary);
        }