|
Медиана, 25 и 75 перцентили по таблице значений | ☑ | ||
---|---|---|---|---|
0
ANL
28.09.18
✎
09:43
|
Добрый день,
Кто-нибудь знает ответ, как в 1С посчитать по ТЗ, в которой содержатся стоимости и время получения этих стоимостей, медиану и перцентили? Медиану еще как-то считали запросом, а перцентили (квартили) нет. Все что нашел - советы "передать в ексель, посчитать, забрать результат" - но это я сам вряд ли реализую, только если у кого-то есть готовое решение. Или все-таки средствами 1с можно реализовать? |
|||
1
Лодырь
28.09.18
✎
09:46
|
Можно.
|
|||
2
ANL
28.09.18
✎
09:48
|
Если знаете, посоветуйте, где посмотреть реализацию?
|
|||
3
МихаилМ
28.09.18
✎
09:49
|
ищите в "анализ данных общая статистика"
|
|||
4
Лодырь
28.09.18
✎
09:51
|
(3) Это даст только медиану. Там вроде квантилей нет.
|
|||
5
ANL
28.09.18
✎
09:51
|
Смотрел, там медиана есть а перцентилей не нашел
|
|||
6
Armando
28.09.18
✎
09:53
|
В 1С есть объект Анализ данных. Посмотри, может он это умеет
|
|||
7
Лодырь
28.09.18
✎
09:54
|
Можете реализовать сами, путем соединения таблицы с самой собой и вычисления количества записей больше(меньше) по некому порядку. Ну а потом дело техники, отобрать нужные.
|
|||
8
s03
28.09.18
✎
09:56
|
(0) как вариант - загнать в Excel, там обработать имеющейся тама формулой и получить от туда результат.
Так однажды пришлось формулой расчета аннуитета пользоваться |
|||
9
ANL
28.09.18
✎
10:01
|
(8) А есть пример как загнать/посчитать/получить результат? Чтобы просто формулу поменять и заработало :)
|
|||
10
s03
28.09.18
✎
10:03
|
(9) примера под руками сейчас нет, это лет 10 назад было ((( но как вставить формулу в Excel пример найти очень просто, расчет тама квантилей и/или перцентили тоже
|
|||
11
Михаил Козлов
28.09.18
✎
10:09
|
(4) Странно: медиана это 0,5-квантиль. Если можно медиану запросом, то почему бы нельзя любой квантиль?
|
|||
12
МихаилМ
28.09.18
✎
10:14
|
алгоритм :
1) сверните копию тз по группировкам , чтобы узнать кол-во элементов в группировке. 2) отсортируйте тз по полям группировкам 3) в группированной тз добавьте колонки начало группировки медиана и перцентили 5) расчет по группированной тз начала группировки в отсортированной тз 6) расчет перцентилей. |
|||
13
ANL
28.09.18
✎
10:22
|
(7) Вот так вот?
ВЫБРАТЬ ПЕРВЫЕ 1 ДоляЦенОтносительноТекущей.Цена ИЗ (ВЫБРАТЬ КоличествоЦенОтносительноТекущей.Цена КАК Цена, КоличествоЦенОтносительноТекущей.МеньшеИлиРавно / КоличествоЦенОтносительноТекущей.Всего КАК ПроцентМеньшеИлиРавно, КоличествоЦенОтносительноТекущей.Больше / КоличествоЦенОтносительноТекущей.Всего КАК ПроцентБольше ИЗ (ВЫБРАТЬ ТаблицаЦен.Цена КАК Цена, СУММА(ВЫБОР КОГДА ТаблицаЦен.Цена <= ТаблицаЦенКопия.Цена ТОГДА 1 ИНАЧЕ 0 КОНЕЦ) КАК МеньшеИлиРавно, СУММА(ВЫБОР КОГДА ТаблицаЦен.Цена > ТаблицаЦенКопия.Цена ТОГДА 1 ИНАЧЕ 0 КОНЕЦ) КАК Больше, СУММА(1) КАК Всего ИЗ РегистрСведений.ЦеныНаУслуги КАК ТаблицаЦен ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНаУслуги КАК ТаблицаЦенКопия ПО (ИСТИНА) СГРУППИРОВАТЬ ПО ТаблицаЦен.Цена) КАК КоличествоЦенОтносительноТекущей) КАК ДоляЦенОтносительноТекущей ГДЕ ДоляЦенОтносительноТекущей.ПроцентМеньшеИлиРавно <= 0.25 УПОРЯДОЧИТЬ ПО ДоляЦенОтносительноТекущей.ПроцентМеньшеИлиРавно УБЫВ |
|||
14
ANL
28.09.18
✎
10:24
|
(13) Это 25 перцентиль
|
|||
15
ANL
28.09.18
✎
10:32
|
(12) У меня просто нету ни каких группировок. Просто цены
|
|||
16
kittystark
28.09.18
✎
10:38
|
а зачем тогда время в (0) упоминается ?
|
|||
17
МихаилМ
28.09.18
✎
10:39
|
(15)
время получения стоимостей для чего ? значит у Вас одна группировка отсортируйте ТЗ и найдите нужные строки |
|||
18
ANL
28.09.18
✎
10:44
|
(17) Прошу прощения, запутал вас временем. На самом деле можно считать что есть просто Цена. Тогда запрос как я написал в (13) подойдёт? Я просто с сортировкой не до конца понял как сделать.
|
|||
19
kittystark
28.09.18
✎
10:46
|
а что будет если некоторые значения цен не уникальны, а встречаются по несколько раз? вплоть до сотен или даже тысяч раз ?
может в запрос стоит добавить РАЗЛИЧНЫЕ ? |
|||
20
kittystark
28.09.18
✎
10:48
|
или так и надо, чтоб с частотами/весом не равным единицы было?
|
|||
21
МихаилМ
28.09.18
✎
10:49
|
(18) нет. тк не правильное понимание перцентиля.
если запросом, то как в (12) + почитайте про нумерацию строк в запросе. |
|||
22
ANL
28.09.18
✎
10:54
|
Добавлю информации о предметной области. В таблице хранятся минимальные цены на туры в отели (в рамках этой темы я рассматриваю задачу упрощенно для одного отеля). Соответственно сегодня минимальная цена на туры в этот отель 125 т.р., завтра тоже 125 т.р., послезавтра 127 т.р. Если далее я беру месяц/квартал/год и хочу получить ответ на вопрос: "Ниже какого значения цены цена на тур не опускается в 75% случаев?", то это будет 25 перцентиль по выборке отсортированной по возрастанию.
(19) Если удалить дубли, будет искажение ответа на вопрос, я думаю. (21) Может мне тогда не перцентиль считать надо под эту задачу? |
|||
23
kittystark
28.09.18
✎
12:52
|
вот набросал
Функция ПолучитьЗначенияКвантиля( ТЗ, НазваниеКолонкиЗначений, квантиль = 0.25 ) Если НЕ ЗначениеЗаполнено(ТЗ) тогда сообщить("Передана пустая таблица значений!!!"); Возврат Неопределено; КонецЕсли; Если НЕ ЗначениеЗаполнено( квантиль ) ИЛИ квантиль < 0 ИЛИ квантиль > 1 Тогда сообщить("Значение квантиля должно быть от 0 до 1 !!!"); Возврат Неопределено; КонецЕсли; КопияТЗ = ТЗ.Выгрузить(); КопияТЗ.Сортировать(НазваниеКолонкиЗначений); Н = КопияТЗ.Количество()-1; Если квантиль = 1 тогда Возврат КопияТЗ[Н][НазваниеКолонкиЗначений]; КонецЕсли; К = Цел( квантиль * (Н-1) ); Если К + 1 < квантиль * Н тогда Возврат КопияТЗ[К+1][НазваниеКолонкиЗначений]; КонецЕсли; Если К + 1 = квантиль * Н тогда Возврат (КопияТЗ[К][НазваниеКолонкиЗначений] + КопияТЗ[К+1][НазваниеКолонкиЗначений])/2; КонецЕсли; Если К + 1 > квантиль * Н тогда Возврат КопияТЗ[К][НазваниеКолонкиЗначений]; КонецЕсли; КонецФункции |
|||
24
ANL
28.09.18
✎
13:06
|
Т.е. взять квантиль*Н -ую по возрастанию строку ТЗ? Теперь сам не пойму, что меня в начале поставило в тупик. Спасибо :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |