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