private string _GetResultForA2() { var result = "<h2>Подробная характеристика кластеров</h2>"; result += "<p><em>Собранность кластера означает, что значения объектов не выходят за пределы удвоенного среднеквадратического отклонения.</em></p>"; var clastResult = _result.GetResult(); var scale = FuzzyScaleRepository.ForA2(); result += "<ul>"; var clasters = clastResult.Select(i => i.Value.Claster).Distinct().ToList(); foreach (var claster in clasters) { var clastName = ClasterHelper.GetFullName(claster); var clastNum = clastResult.Count(i => i.Value.Claster == claster); var clastValue = clastResult.Where(i => i.Value.Claster == claster).Select(i => (double)i.Value.Points).ToList().StdDev(); var scaleValue = scale.GetAccessory((decimal)clastValue); var clastValueResult = (scaleValue.Name == "P21") ? "собранный" : "разрозненный"; result += $"<li><strong>Кластер {clastName}</strong>. Элементов: {clastNum}, {clastValueResult} (степень истинности {scaleValue.Value:0.00}).</li>"; } result += "</ul>"; return(result); }
private string _GetInitialSummary() { string result = ""; var clastResult = _result.GetResult(); var objects = clastResult.Count; var clasters = clastResult.Select(i => i.Value.Claster).Distinct().Count(); result += $"<p>Всего было кластеризовано {objects} объект(ов) на {clasters} кластер(ов).</p>"; var objectsInClasters = clastResult.Select(i => i.Value.Claster).GroupBy(i => i, (i, j) => new { Claster = i, Count = j.Count() }).ToList(); var minObjects = objectsInClasters.Min(i => i.Count); var maxObjects = objectsInClasters.Max(i => i.Count); if (objectsInClasters.First(i => i.Count == minObjects) == objectsInClasters.Last(i => i.Count == minObjects)) { // минимальный кластер один var claster = objectsInClasters.First(i => i.Count == minObjects); result += $"<p>Кластер с наименьшим числом элементов: {ClasterHelper.GetFullName(claster.Claster)}. Число элементов: {claster.Count}.</p>"; } if (objectsInClasters.First(i => i.Count == maxObjects) == objectsInClasters.Last(i => i.Count == maxObjects)) { // максимальный кластер один var claster = objectsInClasters.First(i => i.Count == maxObjects); result += $"<p>Кластер с наибольшим числом элементов: {ClasterHelper.GetFullName(claster.Claster)}. Число элементов: {claster.Count}.</p>"; } var clasterList = clastResult.Select(i => i.Value.Claster).Distinct(); foreach (var claster in clasterList) { var objInCluster = clastResult.Where(i => i.Value.Claster == claster).ToList(); var clName = ClasterHelper.GetFullName(claster); var percentCnt = objectsInClasters.First(i => i.Claster == claster).Count * 100 / objects; var avgVal = objInCluster.Average(i => i.Value.Points); var minVal = objInCluster.Min(i => i.Value.Points); var maxVal = objInCluster.Max(i => i.Value.Points); result += $"<h3>Кластер {clName}</h3>"; result += $"<p>Кластер {clName} содержит {percentCnt}% исследуемых объектов.</p>"; result += $"<p>Характеристика признаков, по которым проводилась кластеризация, в кластере {clName}.</p>" + $"<p><strong>Уровень разработки:</strong><ul>" + $"<li>Среднее значение = {avgVal}</li>" + $"<li>Минимальное значение = {minVal}</li>" + $"<li>Максимальное значение = {maxVal}</li>" + $"</ul></p>"; } return(result); }