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()); }
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); }