ЭлементыДендрограммы

Типы · DendrogramItemCollection

Коллекция элементов дендрограммы.

Полное описание, параметры и ограничения

ЭлементыДендрограммы (DendrogramItemCollection)

ЭлементыДендрограммы (DendrogramItemCollection)

Доступен, начиная с версии 8.1.

Элементы коллекции:
ЭлементДендрограммы
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.
Возможно обращение к элементу коллекции посредством оператора [...]. В качестве аргумента передается индекс точки (нумерация с 0).

Методы:
Вставить (Insert)
Добавить (Add)
Индекс (IndexOf)
Количество (Count)
Очистить (Clear)
Получить (Get)
Сдвинуть (Move)
Удалить (Delete)

Описание:

Коллекция элементов дендрограммы.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.

См. также:
ТочкаДиаграммыГанта, свойство Точки
ДиаграммаГанта, свойство Точки
Дендрограмма, свойство Элементы

Использование в версии:

Доступен, начиная с версии 8.1.

Методическая информация

Практические примеры

Изменить порядок и удалить связь только в собственной копии дерева

Копируем настоящий результат в памяти. Порядок связей и временное удаление исследуем без искажения исходного отчёта и без заявления, что изменённый лес является новым результатом анализа.

Где и как запускать

Полный модуль своей управляемой формы в толстом клиенте Windows. Собственный кластерный расчёт, поиск настоящей диаграммы отчёта и собственное поле дендрограммы.

Подготовка

  1. Используйте отдельную учебную базу 8.5.1.1343 и толстый управляемый клиент Windows. Создайте внешнюю обработку с пустой управляемой основной формой.

  2. Создайте только команду Выполнить и её кнопку. Назначьте обработчик Выполнить(Команда), а событию ПриСозданииНаСервере — одноимённый обработчик из полного модуля.

  3. Не создавайте вручную реквизит УчебноеДерево и поле ПолеУчебногоДерева: они создаются серверной процедурой. Каждый урок запускайте в своей копии формы.

  4. Клиентский построитель отчёта анализа данных недоступен в тонком/веб-клиенте. Самостоятельное перенесение этого полного опыта на сервер тоже не подходит.

  5. Шесть точек с собственными кодами guide-point-1…6 создаются в памяти: три около (0,0), три около (10,10). Это не координаты людей, адреса клиентов или рабочие платежи.

  6. Алгоритм ДальняяСвязь формирует собственный кластерный отчёт. Код ищет настоящий рисунок типа Дендрограмма и проверяет его тип до обращения к связям. Отсутствие рисунка — явная ошибка подготовки, не выдуманный успех.

  7. Рабочие документы, файлы, сеть и печать не используются. Запуск в 1С и фактический вид диаграммы не проверены: выполните контрольные шаги на собственном стенде.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Реквизиты = Новый Массив;
    Реквизиты.Добавить(Новый РеквизитФормы("УчебноеДерево", Новый ОписаниеТипов("Дендрограмма")));
    ЭтаФорма.ИзменитьРеквизиты(Реквизиты);
    ЭтаФорма.УчебноеДерево = Новый Дендрограмма;
    Поле = Элементы.Добавить("ПолеУчебногоДерева", Тип("ПолеФормы"));
    Поле.Вид = ВидПоляФормы.ПолеДендрограммы;
    Поле.ПутьКДанным = "УчебноеДерево";
    Поле.Заголовок = "Кластеры шести собственных точек";
КонецПроцедуры

&НаКлиенте
Процедура Выполнить(Команда)
    Точки = Новый ТаблицаЗначений;
    Точки.Колонки.Добавить("Код", Новый ОписаниеТипов("Строка"));
    Точки.Колонки.Добавить("X", Новый ОписаниеТипов("Число"));
    Точки.Колонки.Добавить("Y", Новый ОписаниеТипов("Число"));
    Координаты = Новый Массив;
    Координаты.Добавить(Новый Структура("X,Y", 0, 0));
    Координаты.Добавить(Новый Структура("X,Y", 0, 1));
    Координаты.Добавить(Новый Структура("X,Y", 1, 0));
    Координаты.Добавить(Новый Структура("X,Y", 10, 10));
    Координаты.Добавить(Новый Структура("X,Y", 10, 11));
    Координаты.Добавить(Новый Структура("X,Y", 11, 10));
    Для Индекс = 0 По 5 Цикл
        Точка = Точки.Добавить();
        Точка.Код = "guide-point-" + Строка(Индекс + 1);
        Точка.X = Координаты[Индекс].X;
        Точка.Y = Координаты[Индекс].Y;
    КонецЦикла;
    Построитель = Новый ПостроительОтчетаАнализаДанных;
    Построитель.ТипАнализа = Тип("АнализДанныхКластеризация");
    Построитель.ИсточникДанных = Точки;
    Построитель.ОтображатьСостояние = Ложь;
    Построитель.ОбрабатыватьПрерываниеПользователя = Истина;
    Колонки = Построитель.НастройкаКолонок;
    Ключ = Колонки.Найти("Код");
    X = Колонки.Найти("X");
    Y = Колонки.Найти("Y");
    Если Ключ = Неопределено ИЛИ X = Неопределено ИЛИ Y = Неопределено Тогда
        ВызватьИсключение "Нет трёх настроек собственных колонок";
    КонецЕсли;
    Ключ.ТипКолонки = ТипКолонкиАнализаДанныхКластеризация.Ключ;
    Ключ.ВидДанных = ВидДанныхАнализа.Дискретные;
    X.ТипКолонки = ТипКолонкиАнализаДанныхКластеризация.Входная;
    X.ВидДанных = ВидДанныхАнализа.Непрерывные;
    Y.ТипКолонки = ТипКолонкиАнализаДанныхКластеризация.Входная;
    Y.ВидДанных = ВидДанныхАнализа.Непрерывные;
    Количество = ПараметрУчебногоАнализа(Построитель.Параметры, "КоличествоКластеров", "ClusterCount");
    Если НЕ Количество.ТипЗначения.СодержитТип(Тип("Число")) Тогда
        ВызватьИсключение "У параметра количества ожидается числовой тип";
    КонецЕсли;
    Количество.Значение = 2;
    Метод = ПараметрУчебногоАнализа(Построитель.Параметры, "МетодКластеризации", "ClusterizationMethod");
    Метод.Значение = МетодКластеризации.ДальняяСвязь;
    Заполнение = ПараметрУчебногоАнализа(Построитель.Параметры, "ТипЗаполненияТаблицы", "TableFillType");
    Заполнение.Значение = ТипЗаполненияТаблицыРезультатаАнализаДанных.ВсеПоля;
    Сообщить("Параметр: " + Количество.Имя + "; заголовок: " + Количество.Заголовок);
    Сообщить(Количество.Значение = 2);
    Сообщить(Ключ.Имя = "Код");
    Сообщить("Тип дополнительных параметров X: " + Строка(ТипЗнч(X.ДополнительныеПараметры)));
    Сообщить(Колонки.Количество() = 3);
    Сообщить(Колонки.Получить(Колонки.Индекс(Ключ)) = Ключ);
    Построитель.Выполнить();
    Результат = Построитель.Результат;
    Если ТипЗнч(Результат) <> Тип("РезультатАнализаДанныхКластеризация") Тогда
        ВызватьИсключение "Ожидался результат кластеризации";
    КонецЕсли;
    Сообщить(Результат.КоличествоОбъектов = 6);
    Сообщить(Результат.Кластеры.Количество() = 2);
    Сообщить(Результат.ОбъектыКластеризации.Количество() = 6);
    Сообщить(Результат.ТаблицаКластеризации.Количество() = 6);
    ВсегоВКластерах = 0;
    Для Каждого Кластер Из Результат.Кластеры Цикл
        ВсегоВКластерах = ВсегоВКластерах + Кластер.КоличествоОбъектов;
        Сообщить(СтрШаблон("Размер группы=%1; координат центра=%2", Кластер.КоличествоОбъектов, Кластер.ЦентрТяжести.Количество()));
        Сообщить("Тип значений прогноза: " + Строка(ТипЗнч(Кластер.ЗначенияПолейПрогноза)));
    КонецЦикла;
    Сообщить(ВсегоВКластерах = 6);
    Сообщить("Строк таблицы связей: " + Строка(Результат.ТаблицаСвязей.Количество()));
    Сообщить("Строк матрицы расстояний: " + Строка(Результат.МежкластерныеРасстояния.Количество()));
    Сообщить(ТипЗнч(Результат.НастройкаКолонок) = Тип("КолонкиАнализаДанных"));
    Сообщить(ТипЗнч(Результат.Параметры) = Тип("ПараметрыАнализаДанных"));
    Документ = Новый ТабличныйДокумент;
    Построитель.Вывести(Документ);
    Дерево = Неопределено;
    Для Каждого Рисунок Из Документ.Рисунки Цикл
        Если Рисунок.ТипРисунка = ТипРисункаТабличногоДокумента.Дендрограмма Тогда
            Дерево = Рисунок.Объект;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Если Дерево = Неопределено Тогда
        ВызватьИсключение "В собственном кластерном отчёте не найдена дендрограмма. Проверьте толстый клиент, метод ДальняяСвязь и автоматически формируемый макет";
    КонецЕсли;
    Если ТипЗнч(Дерево) <> Тип("Дендрограмма") Тогда
        ВызватьИсключение "В собственном рисунке ожидалась Дендрограмма";
    КонецЕсли;
    Если Дерево.Элементы.Количество() < 2 Или Дерево.Связи.Количество() = 0 Тогда
        ВызватьИсключение "Для опыта нужна настоящая диаграмма минимум с двумя элементами и связями";
    КонецЕсли;
    ДоЭлементов = Дерево.Элементы.Количество();
    ДоСвязей = Дерево.Связи.Количество();
    Копия = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(Дерево));
    Если ТипЗнч(Копия) <> Тип("Дендрограмма") Тогда
        ВызватьИсключение "Внутреннее восстановление не вернуло Дендрограмма";
    КонецЕсли;
    Если Копия.Элементы.Количество() <> ДоЭлементов Или Копия.Связи.Количество() <> ДоСвязей Тогда
        ВызватьИсключение "Копия собственного дерева не сохранила размеры коллекций";
    КонецЕсли;
    Если Копия.Связи.Количество() < 2 Тогда
        ВызватьИсключение "Для перемещения своей связи нужно не меньше двух записей";
    КонецЕсли;
    Связь = Копия.Связи.Получить(0);
    Сообщить(Копия.Связи.Индекс(Связь) = 0);
    ПервыйКонец = Связь.ПервыйЭлемент;
    ВторойКонец = Связь.ВторойЭлемент;
    Копия.Связи.Сдвинуть(Связь, 1);
    Сообщить(Копия.Связи.Индекс(Связь) = 1);
    Сообщить(Копия.Связи.Получить(1) = Связь);
    Сообщить(Связь.ПервыйЭлемент = ПервыйКонец И Связь.ВторойЭлемент = ВторойКонец);
    Копия.Связи.Удалить(Связь);
    Сообщить(Копия.Связи.Количество() = ДоСвязей - 1);
    Копия.Связи.Очистить();
    Сообщить(Копия.Связи.Количество() = 0);
    Сообщить(Копия.Элементы.Количество() = ДоЭлементов);
    ЭтаФорма.УчебноеДерево = Дерево;
    Сообщить(Дерево.Элементы.Количество() = ДоЭлементов);
    Сообщить(Дерево.Связи.Количество() = ДоСвязей);
    Документ.Показать("Отчёт по шести собственным точкам; рабочие данные не использовались");
КонецПроцедуры

&НаКлиенте
Функция ПараметрУчебногоАнализа(Параметры, Русское, Английское)
    Параметр = Параметры.Найти(Русское);
    Если Параметр = Неопределено Тогда
        Параметр = Параметры.Найти(Английское);
    КонецЕсли;
    Если Параметр = Неопределено Тогда
        ВызватьИсключение "Нет документированного параметра " + Русское;
    КонецЕсли;
    Возврат Параметр;
КонецФункции

Разбор по шагам

  1. Внутренний формат используется только между двумя операциями в памяти. Содержимое собственной диаграммы не печатается как служебная строка и не отправляется в сеть.

  2. Проверить тип и размеры восстановленной копии. Для перемещения первой связи на следующую позицию нужны как минимум две связи.

  3. Получить(0) и Индекс возвращают запись и её положение. Сдвинуть меняет порядок коллекции, не заменяя readonly-концы связи.

  4. Удалить одну связь в копии и проверить уменьшение на 1. Такая структура уже не обязана быть полным деревом исходного кластерного анализа.

  5. Очистить только связи копии: элементы остаются. В интерфейс вывести исходное Дерево, не испорченную учебную копию.

Как проверить результат

  1. Дополнительные девять проверок Истина: позиции, идентичность, неизменные концы, уменьшение, пустые связи, сохранённые элементы копии и обе исходные коллекции.

  2. После опыта собственный исходный отчёт и поле продолжают показывать настоящее дерево; очистка Копия.Связи не очищает Дерево.Связи.

Ожидаемый результат

Методы коллекции применены к действительным связанным объектам с проверкой независимости источника и копии.

На что обратить внимание

  1. Дерево и Копия должны быть разными экземплярами, не двумя переменными одной ссылки. Внутреннее восстановление проверяется до мутаций.

  2. Порядок записи в Связи не является порядком объединения кластеров для иной модели. Не объявляйте перемещение новым анализом.

  3. Копия без связей сохранена только для упражнения и не используется для вывода успешного дерева.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Нормировать расстояния только в копии для собственного сравнения

В собственном дереве ищем максимальное фактическое расстояние. Копия показывает относительную шкалу 0–1, не выдавая её за заново рассчитанную модель.

Где и как запускать

Полный модуль своей управляемой формы в толстом клиенте Windows. Собственный кластерный расчёт, поиск настоящей диаграммы отчёта и собственное поле дендрограммы.

Подготовка

  1. Используйте отдельную учебную базу 8.5.1.1343 и толстый управляемый клиент Windows. Создайте внешнюю обработку с пустой управляемой основной формой.

  2. Создайте только команду Выполнить и её кнопку. Назначьте обработчик Выполнить(Команда), а событию ПриСозданииНаСервере — одноимённый обработчик из полного модуля.

  3. Не создавайте вручную реквизит УчебноеДерево и поле ПолеУчебногоДерева: они создаются серверной процедурой. Каждый урок запускайте в своей копии формы.

  4. Клиентский построитель отчёта анализа данных недоступен в тонком/веб-клиенте. Самостоятельное перенесение этого полного опыта на сервер тоже не подходит.

  5. Шесть точек с собственными кодами guide-point-1…6 создаются в памяти: три около (0,0), три около (10,10). Это не координаты людей, адреса клиентов или рабочие платежи.

  6. Алгоритм ДальняяСвязь формирует собственный кластерный отчёт. Код ищет настоящий рисунок типа Дендрограмма и проверяет его тип до обращения к связям. Отсутствие рисунка — явная ошибка подготовки, не выдуманный успех.

  7. Рабочие документы, файлы, сеть и печать не используются. Запуск в 1С и фактический вид диаграммы не проверены: выполните контрольные шаги на собственном стенде.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Реквизиты = Новый Массив;
    Реквизиты.Добавить(Новый РеквизитФормы("УчебноеДерево", Новый ОписаниеТипов("Дендрограмма")));
    ЭтаФорма.ИзменитьРеквизиты(Реквизиты);
    ЭтаФорма.УчебноеДерево = Новый Дендрограмма;
    Поле = Элементы.Добавить("ПолеУчебногоДерева", Тип("ПолеФормы"));
    Поле.Вид = ВидПоляФормы.ПолеДендрограммы;
    Поле.ПутьКДанным = "УчебноеДерево";
    Поле.Заголовок = "Кластеры шести собственных точек";
КонецПроцедуры

&НаКлиенте
Процедура Выполнить(Команда)
    Точки = Новый ТаблицаЗначений;
    Точки.Колонки.Добавить("Код", Новый ОписаниеТипов("Строка"));
    Точки.Колонки.Добавить("X", Новый ОписаниеТипов("Число"));
    Точки.Колонки.Добавить("Y", Новый ОписаниеТипов("Число"));
    Координаты = Новый Массив;
    Координаты.Добавить(Новый Структура("X,Y", 0, 0));
    Координаты.Добавить(Новый Структура("X,Y", 0, 1));
    Координаты.Добавить(Новый Структура("X,Y", 1, 0));
    Координаты.Добавить(Новый Структура("X,Y", 10, 10));
    Координаты.Добавить(Новый Структура("X,Y", 10, 11));
    Координаты.Добавить(Новый Структура("X,Y", 11, 10));
    Для Индекс = 0 По 5 Цикл
        Точка = Точки.Добавить();
        Точка.Код = "guide-point-" + Строка(Индекс + 1);
        Точка.X = Координаты[Индекс].X;
        Точка.Y = Координаты[Индекс].Y;
    КонецЦикла;
    Построитель = Новый ПостроительОтчетаАнализаДанных;
    Построитель.ТипАнализа = Тип("АнализДанныхКластеризация");
    Построитель.ИсточникДанных = Точки;
    Построитель.ОтображатьСостояние = Ложь;
    Построитель.ОбрабатыватьПрерываниеПользователя = Истина;
    Колонки = Построитель.НастройкаКолонок;
    Ключ = Колонки.Найти("Код");
    X = Колонки.Найти("X");
    Y = Колонки.Найти("Y");
    Если Ключ = Неопределено ИЛИ X = Неопределено ИЛИ Y = Неопределено Тогда
        ВызватьИсключение "Нет трёх настроек собственных колонок";
    КонецЕсли;
    Ключ.ТипКолонки = ТипКолонкиАнализаДанныхКластеризация.Ключ;
    Ключ.ВидДанных = ВидДанныхАнализа.Дискретные;
    X.ТипКолонки = ТипКолонкиАнализаДанныхКластеризация.Входная;
    X.ВидДанных = ВидДанныхАнализа.Непрерывные;
    Y.ТипКолонки = ТипКолонкиАнализаДанныхКластеризация.Входная;
    Y.ВидДанных = ВидДанныхАнализа.Непрерывные;
    Количество = ПараметрУчебногоАнализа(Построитель.Параметры, "КоличествоКластеров", "ClusterCount");
    Если НЕ Количество.ТипЗначения.СодержитТип(Тип("Число")) Тогда
        ВызватьИсключение "У параметра количества ожидается числовой тип";
    КонецЕсли;
    Количество.Значение = 2;
    Метод = ПараметрУчебногоАнализа(Построитель.Параметры, "МетодКластеризации", "ClusterizationMethod");
    Метод.Значение = МетодКластеризации.ДальняяСвязь;
    Заполнение = ПараметрУчебногоАнализа(Построитель.Параметры, "ТипЗаполненияТаблицы", "TableFillType");
    Заполнение.Значение = ТипЗаполненияТаблицыРезультатаАнализаДанных.ВсеПоля;
    Сообщить("Параметр: " + Количество.Имя + "; заголовок: " + Количество.Заголовок);
    Сообщить(Количество.Значение = 2);
    Сообщить(Ключ.Имя = "Код");
    Сообщить("Тип дополнительных параметров X: " + Строка(ТипЗнч(X.ДополнительныеПараметры)));
    Сообщить(Колонки.Количество() = 3);
    Сообщить(Колонки.Получить(Колонки.Индекс(Ключ)) = Ключ);
    Построитель.Выполнить();
    Результат = Построитель.Результат;
    Если ТипЗнч(Результат) <> Тип("РезультатАнализаДанныхКластеризация") Тогда
        ВызватьИсключение "Ожидался результат кластеризации";
    КонецЕсли;
    Сообщить(Результат.КоличествоОбъектов = 6);
    Сообщить(Результат.Кластеры.Количество() = 2);
    Сообщить(Результат.ОбъектыКластеризации.Количество() = 6);
    Сообщить(Результат.ТаблицаКластеризации.Количество() = 6);
    ВсегоВКластерах = 0;
    Для Каждого Кластер Из Результат.Кластеры Цикл
        ВсегоВКластерах = ВсегоВКластерах + Кластер.КоличествоОбъектов;
        Сообщить(СтрШаблон("Размер группы=%1; координат центра=%2", Кластер.КоличествоОбъектов, Кластер.ЦентрТяжести.Количество()));
        Сообщить("Тип значений прогноза: " + Строка(ТипЗнч(Кластер.ЗначенияПолейПрогноза)));
    КонецЦикла;
    Сообщить(ВсегоВКластерах = 6);
    Сообщить("Строк таблицы связей: " + Строка(Результат.ТаблицаСвязей.Количество()));
    Сообщить("Строк матрицы расстояний: " + Строка(Результат.МежкластерныеРасстояния.Количество()));
    Сообщить(ТипЗнч(Результат.НастройкаКолонок) = Тип("КолонкиАнализаДанных"));
    Сообщить(ТипЗнч(Результат.Параметры) = Тип("ПараметрыАнализаДанных"));
    Документ = Новый ТабличныйДокумент;
    Построитель.Вывести(Документ);
    Дерево = Неопределено;
    Для Каждого Рисунок Из Документ.Рисунки Цикл
        Если Рисунок.ТипРисунка = ТипРисункаТабличногоДокумента.Дендрограмма Тогда
            Дерево = Рисунок.Объект;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Если Дерево = Неопределено Тогда
        ВызватьИсключение "В собственном кластерном отчёте не найдена дендрограмма. Проверьте толстый клиент, метод ДальняяСвязь и автоматически формируемый макет";
    КонецЕсли;
    Если ТипЗнч(Дерево) <> Тип("Дендрограмма") Тогда
        ВызватьИсключение "В собственном рисунке ожидалась Дендрограмма";
    КонецЕсли;
    Если Дерево.Элементы.Количество() < 2 Или Дерево.Связи.Количество() = 0 Тогда
        ВызватьИсключение "Для опыта нужна настоящая диаграмма минимум с двумя элементами и связями";
    КонецЕсли;
    ДоЭлементов = Дерево.Элементы.Количество();
    ДоСвязей = Дерево.Связи.Количество();
    Копия = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(Дерево));
    Если ТипЗнч(Копия) <> Тип("Дендрограмма") Тогда
        ВызватьИсключение "Внутреннее восстановление не вернуло Дендрограмма";
    КонецЕсли;
    Если Копия.Элементы.Количество() <> ДоЭлементов Или Копия.Связи.Количество() <> ДоСвязей Тогда
        ВызватьИсключение "Копия собственного дерева не сохранила размеры коллекций";
    КонецЕсли;
    Максимум = 0;
    Для Каждого Связь Из Копия.Связи Цикл
        Если ТипЗнч(Связь.Расстояние) <> Тип("Число") Тогда
            ВызватьИсключение "Для нормирования нужны числовые расстояния";
        КонецЕсли;
        Если Связь.Расстояние < 0 Тогда
            ВызватьИсключение "Этот учебный опыт допускает только неотрицательные расстояния";
        КонецЕсли;
        Если Связь.Расстояние > Максимум Тогда
            Максимум = Связь.Расстояние;
        КонецЕсли;
    КонецЦикла;
    Если Максимум = 0 Тогда
        ВызватьИсключение "Нельзя нормировать свои расстояния делением на нулевой максимум";
    КонецЕсли;
    Для Каждого Связь Из Копия.Связи Цикл
        Исходное = Связь.Расстояние;
        Связь.Расстояние = Исходное / Максимум;
        Если Связь.Расстояние < 0 Или Связь.Расстояние > 1 Тогда
            ВызватьИсключение "Нормированное значение вышло за собственный диапазон 0–1";
        КонецЕсли;
    КонецЦикла;
    Копия.ОбластьЗаголовка.Текст = "Относительная шкала собственного дерева, не новый анализ";
    Копия.ОбластьПостроения.ФорматШкалыЗначений = "ЧДЦ=3;ЧГ=0";
    ЭтаФорма.УчебноеДерево = Копия;
    Сообщить(Копия.Элементы.Количество() = ДоЭлементов);
    Сообщить(Копия.Связи.Количество() = ДоСвязей);
    Сообщить(Дерево.Элементы.Количество() = ДоЭлементов);
    Сообщить(Дерево.Связи.Количество() = ДоСвязей);
    Документ.Показать("Исходные расстояния собственных точек; в форме отдельная нормированная копия");
КонецПроцедуры

&НаКлиенте
Функция ПараметрУчебногоАнализа(Параметры, Русское, Английское)
    Параметр = Параметры.Найти(Русское);
    Если Параметр = Неопределено Тогда
        Параметр = Параметры.Найти(Английское);
    КонецЕсли;
    Если Параметр = Неопределено Тогда
        ВызватьИсключение "Нет документированного параметра " + Русское;
    КонецЕсли;
    Возврат Параметр;
КонецФункции

Разбор по шагам

  1. Копировать настоящую диаграмму внутренним восстановлением и проверить, что размеры коллекций сохранились.

  2. Пройти фактические расстояния собственной копии. Отклонить нечисто числовые/отрицательные значения, поскольку выбранное нормирование рассчитано на неотрицательную шкалу.

  3. Найти максимум до изменения хотя бы одной связи. Если все расстояния 0, остановиться до деления.

  4. Во втором обходе разделить каждое расстояние на найденный максимум. Это изменение представления отдельной копии, а не вызов нового анализа данных.

  5. Показать нормированную копию в своём поле с предупреждением в заголовке. Исходный ТабличныйДокумент оставить с исходными расстояниями.

Как проверить результат

  1. Дополнительные четыре проверки Истина: обе коллекции копии и обе коллекции исходного дерева сохранили размеры; нормированные значения проходят диапазон 0–1.

  2. В отладчике сравните фактические Расстояние исходной и скопированной первой связи. Для собственного массива 0, 2, 5 нормирование максимумом 5 означает 0, 0.4, 1; эти числа не объявляются фактическими расстояниями вашего рассчитанного дерева.

Ожидаемый результат

Математическое преобразование отделено от результата кластеризации и выполняется с проверенными границами только в копии.

На что обратить внимание

  1. Увеличение или нормирование расстояний вручную не создаёт доказанный новый результат кластерного анализа.

  2. Диапазон шкалы 0–1 не является вероятностью покупки, точностью модели или процентом сходства клиентов.

  3. Копия и исходник используются отдельно. Строковое служебное представление не выводится пользователю и не сохраняется на диск.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.