Обсуждение модуля:Statistical: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Содержимое удалено Содержимое добавлено
Строка 105: Строка 105:
* Я бы предпочёл вариант с исправлением интерполяции monotone, но это нужно где-то внутри Vega 2 ковыряться. Полгода назад пытался разобраться, где же проблема, но так и не нашёл. Например, в [https://vega.github.io/editor/#/url/vega-lite/N4KABGBEAkDODGALApgWwIaQFxUQFzwAdYsB6UgN2QHN0A6agSz0QFcAjOxge1IRQyUa6ALQAbZskoAmOgCtY3AHaQANOCgATZAgBOjQnh4qckAArdCrMeiPKw3KrrBHUyOmo2RNtzDlAQEJAU6GKsOthgANoagWDAkACeyOi6kQCMAJwADADsqpCElta2xpEArOkAHOnlAL7qcRAJyamR0tnp6QVFVjZ2JmAAzOnZmeUAbA2xgS0paTgd6fmFxf1lixM50tJ1MwC6GtNBGLoA1pEBgZB4iYTIkZASSg+N14xKeMi6Rf0PpqhlNw8MoHkc3pBkEp4NxNB9qJcZpAAB6IppQABmjGQYk0j1aaTecRud3+UC+qCKulCnnRkHQyMYsDR6Mx3F0GDwjwApABNSAzCB7OLHa6JFnErE4vGmXolAa0pok+6PACOrHQn2YpSoApFRxAdSAA Vega-Lite] всё хорошо, а в Vega 2 ([https://gist.github.com/putnik/fa81f34f7cddf3b435f55803b541908c код], [https://vega.github.io/vega-editor/?mode=vega редактор]) при таких же значениях проблема. — [[u:putnik|putnik]] 20:49, 21 августа 2018 (UTC)
* Я бы предпочёл вариант с исправлением интерполяции monotone, но это нужно где-то внутри Vega 2 ковыряться. Полгода назад пытался разобраться, где же проблема, но так и не нашёл. Например, в [https://vega.github.io/editor/#/url/vega-lite/N4KABGBEAkDODGALApgWwIaQFxUQFzwAdYsB6UgN2QHN0A6agSz0QFcAjOxge1IRQyUa6ALQAbZskoAmOgCtY3AHaQANOCgATZAgBOjQnh4qckAArdCrMeiPKw3KrrBHUyOmo2RNtzDlAQEJAU6GKsOthgANoagWDAkACeyOi6kQCMAJwADADsqpCElta2xpEArOkAHOnlAL7qcRAJyamR0tnp6QVFVjZ2JmAAzOnZmeUAbA2xgS0paTgd6fmFxf1lixM50tJ1MwC6GtNBGLoA1pEBgZB4iYTIkZASSg+N14xKeMi6Rf0PpqhlNw8MoHkc3pBkEp4NxNB9qJcZpAAB6IppQABmjGQYk0j1aaTecRud3+UC+qCKulCnnRkHQyMYsDR6Mx3F0GDwjwApABNSAzCB7OLHa6JFnErE4vGmXolAa0pok+6PACOrHQn2YpSoApFRxAdSAA Vega-Lite] всё хорошо, а в Vega 2 ([https://gist.github.com/putnik/fa81f34f7cddf3b435f55803b541908c код], [https://vega.github.io/vega-editor/?mode=vega редактор]) при таких же значениях проблема. — [[u:putnik|putnik]] 20:49, 21 августа 2018 (UTC)
** Это конечно было бы здорово, но там же разобраться невозможно. Я пытался что-то понять, вроде бы кривые рисует [https://github.com/d3/d3-shape/blob/master/src/curve/monotone.js вот эта функция]? Но анекдот в том, что она их рисует правильно. Откуда берется глюк не понятно. [[У:Землеройкин|Землеройкин]] ([[ОУ:Землеройкин|обс.]]) 20:56, 22 августа 2018 (UTC)
** Это конечно было бы здорово, но там же разобраться невозможно. Я пытался что-то понять, вроде бы кривые рисует [https://github.com/d3/d3-shape/blob/master/src/curve/monotone.js вот эта функция]? Но анекдот в том, что она их рисует правильно. Откуда берется глюк не понятно. [[У:Землеройкин|Землеройкин]] ([[ОУ:Землеройкин|обс.]]) 20:56, 22 августа 2018 (UTC)

Похоже, я разобрался, в чём дело. Текущая версия расширения Graph [https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/extensions/Graph/+/master/lib/d3.js использует библиотеку d3 версии 3.5.17]. А как раз в следующей её версии, 4.0.0, было полное обновление алгоритма monotone (см. [https://github.com/d3/d3/releases/tag/v4.0.0 здесь]), в том числе, видимо, был исправлен и этот баг, но в Graph это уже не попало. [[У:Землеройкин|Землеройкин]] ([[ОУ:Землеройкин|обс.]]) 13:19, 26 августа 2018 (UTC)

Версия от 13:19, 26 августа 2018

formatNum

formatNum формирует числа в читаемом виде, с разбивкой по разрядам. Есть предложение простой пробел заменить на неразрывный. То есть сделать замену конструкции:

format = {decimalMark = ",", groupMark = " ", groupMinLength = 5, groupOnlyIntegerPart = true}

- из строки 126, в текущей версии, на конструкцию:

format = {decimalMark = ",", groupMark = " ", groupMinLength = 5, groupOnlyIntegerPart = true}

- по моему этого достаточно. @Игорь Темиров: В противном случае пробел становится переносим и число может быть размазано по разным строчкам, в результате оно нечитаемо. --Туча 22:07, 14 мая 2015 (UTC)[ответить]

@Туча: Да, вы правы. Игорь Темиров 07:13, 15 мая 2015 (UTC)[ответить]

Включён доступ к произвольным объектам Викиданных

Видимо, статистические таблицы скоро можно будет постепенно отправлять на пенсию. Население НП при наличии такой информации на Викиданных теперь можно получить из кода tonumber(mw.wikibase.getEntityObject('Q656'):getBestStatements('P1082')[1].mainsnak.datavalue.value.amount) (mw.wikibase.getEntityObject('Q656'):formatPropertyValues('P1082')) выдаёт "5 131 942±1", потому что всем влом настраивать другую точность). Правда, пока я что-то не вижу функции, которая бы получала "Q656" из "Санкт-Петербург". Ignatus 14:51, 23 июня 2015 (UTC)[ответить]

@Ignatus: Отличная новость! Игорь Темиров 04:00, 24 июня 2015 (UTC)[ответить]

Отмена работы параметра кэш

Темиров, у вас функция FormatH в коде заявлена, а не реализована, и в соответствующих строчках может происходить ошибка. Чем Вы тут собственно недовольны? --Туча 06:50, 6 ноября 2015 (UTC)[ответить]

Примеры поведения:

{{Участник:Туча/Население|Краснодонецкая (Белокалитвинский район)|Хеш}}:3102257041

{{Участник:Туча/Население|Краснодонецкая|Хеш}}:1385359418

{{Население|Краснодонецкая (Белокалитвинский район)|Хеш}}:662921844

{{Население|Краснодонецкая|Хеш}}:110825366

--Туча 06:56, 6 ноября 2015 (UTC)[ответить]

ча, спасибо, что напомнили. Удалил. Игорь Темиров 07:32, 6 ноября 2015 (UTC)[ответить]
Почему нужно что то удалять, если можно просто сделать работоспособным? --Туча 08:09, 6 ноября 2015 (UTC)[ответить]
Не видите войну правок. Объясните, для чего это нужно. Игорь Темиров 08:12, 6 ноября 2015 (UTC)[ответить]
Я лишь вернул версию до всех изменений, это полное соответствие ВП:КОНС. А намёк на войну правок, и настрой на конфронтацию - это предложение что-то обсудить на СО с не аргументированной отменой правок, без открытия этого самого обсуждения. Если параметр ввёден и введён вами!!, то, вероятно, вам не нужно объяснять зачем он нужен, например для отладки и поиска ошибок. --Туча 08:17, 6 ноября 2015 (UTC)[ответить]
Да, я ввел эту функцию в первоначальном варианте, так как думал использовать шаблон из других вики, но потом выяснилось, что это невозможно и расчёт хеша нужен только внутри модуля. Я поблагодарил вас (спасибо, что напомнили) и удалил. Вы не возражаете, если я удалю найденную вами неиспользуемую, ошибочную, ненужную, не содержащую программного кода функцию? Игорь Темиров 08:24, 6 ноября 2015 (UTC)[ответить]
Я починил эту функцию, я нашел эту ошибку, то есть она понадобилась. Она нужна для исследования работы модуля. --Туча 08:33, 6 ноября 2015 (UTC)[ответить]
Для исследований существует личное пространство. Скопируйте к себе модуль и исследуйте. Игорь Темиров 08:53, 6 ноября 2015 (UTC)[ответить]
Да модуль можно укопироватся в личное пространство до посинения, Вы же потом не дадите ничего вставить из личного пространства обратно в модуль, как показывает практика и не раз. --Туча 08:57, 6 ноября 2015 (UTC)[ответить]
Чем вам не угадил параметр nocat, позволяющий не включать страницу ни в какие категории, тоже непонятно. Это достаточно общая практика в википедии, о том что такой параметр иногда полезен. Вы сами ставили мне в вину, что страница замусоривает категорию, и надо сделать чтобы тестовые страницы, для которых сообщение об ошибке является нормальной работой, туда не попадали. --Туча 08:27, 6 ноября 2015 (UTC)[ответить]
Вы не ответили на мой вопрос. Игорь Темиров 08:31, 6 ноября 2015 (UTC)[ответить]
Вы тоже не ответили на мой вопрос, зачем вы отменили мои правки. Любое изменение модуля почему-то воспринимается в штыки, я же ничего не поломал, зачем меня было отменять? --Туча 08:34, 6 ноября 2015 (UTC)[ответить]
Вы просто не обратили внимания. Повторю свой ответ: Да, я ввел эту функцию в первоначальном варианте, так как думал использовать шаблон из других вики, но потом выяснилось, что это невозможно и расчёт хеша нужен только внутри модуля. Я поблагодарил вас (спасибо, что напомнили) и удалил. Если какие-то слова или фразы непонятны, это не значит, что я не ответил. Просто напишите конкретно, что не поняли, и я распишу подробнее. Игорь Темиров 08:38, 6 ноября 2015 (UTC)[ответить]
Ну а теперь поставьте себя на место другой стороны. Человек потратил время, починил эту функцию, поэтому давайте теперь её удалим, потому что вам она не нужна, потому что вы этот свой кэш считаете в off line, ну и как? Если люди вас спрашивают что это за числа, то они должны быть в праве хотя бы их получить. Вот представьте, случился апокалипсис, перестал работать бот TemirovBot, перестал заходить в википедию Игорь Темиров, люди же в праве наверно будут отойти от концепции, что кэш имеет право знать только Игорь Темиров? --Туча 08:54, 6 ноября 2015 (UTC)[ответить]
Только что заметил ваш комментарий к моему предыдущему вопросу. Отвечу тогда на ваш вопрос по поводу Чем вам не угадил параметр nocat?. А чем он мне не угодил? Вроде ничего против не имею. Это действительно выход. Если не получается скопировать модуль в личное пространство и экспериментировать там, то хотя бы так. Игорь Темиров 08:58, 6 ноября 2015 (UTC)[ответить]
Делаешь правку, отменяют и просят обсудить, но обсуждение не открывают. Когда задаешь прямой вопрос чем не угадила правка, то никакого ответа на самом деле нет, и даже говорится что это выход. Ну и зачем было отменять? Ничего не понимаю. Специально же делались изменения несколькими правками, что бы если есть возражения, отменялись только те изменения, по которым они есть. --Туча 09:36, 6 ноября 2015 (UTC)[ответить]
Согласен с вашими аргументами. Спасибо. Игорь Темиров 11:15, 6 ноября 2015 (UTC)[ответить]

Возможность называть населённый пункт по разному

Сейчас в статье Чучковский район населенный пункт значится как Пет (Чучковский район), а в статье Пертовское сельское поселение как Пёт (Чучковский район), очень бы хотелось что бы вызов из шаблона Население работал в обоих случаях правильно. Полагаю вполне возможно реализовать что бы корректная работа была и в том и другом случае. К примеру, кто-нибудь будет называть его как Пёт (Рязанская область) и это тоже что бы не вызывало ошибку. Алясы это стандартная вещь во многих местах, когда одна и та же сущность может иметь несколько названий - реализовано через перенаправления даже в википедии. --Туча 09:52, 6 ноября 2015 (UTC)[ответить]

Туча Да, я видел ваши правки. Сам думал о чём-то подобном. Я хотел реализовать это через таблицы на странице хешей. Сейчас и так анализируется возврат на наличие таблицы в случае коллизий. Тогда понадобится добавить анализ первого аргумента таблицы. Если он числовой, то хеш подменяется хешем из таблицы. При таком алгоритме структура страницы региона останется неизменной. Да всё руки не доходят. Как вам такой вариант? Игорь Темиров 11:28, 6 ноября 2015 (UTC)[ответить]
Этот вариант был бы очень хорош если бы хеш таблицы были отсортированы по алфавиту, а не по хешу. --Туча 11:49, 6 ноября 2015 (UTC)[ответить]
При чём тут алфавит? Мы имеем устаревшее название. Вычисляем, ничего не подозревая, хеш. Обращаемся к странице хешей. Получаем ответ. Спрашиваем, а не таблица ли это? Если таблица, (начинается нововвведение) спрашиваем, не число ли первый аргумент? Если нет, то это коллизия и всё идёт по старому, если да, то заменяем хеш устаревшего названия на хеш нового названия, возвращённый таблицей. Игорь Темиров 12:01, 6 ноября 2015 (UTC)[ответить]
Хэш таблица не одна, а разбита на несколько частей, старое и новое название, если сортировка по алфавиту в одной её части скорей всего с вероятностью стремящейся к единице, а если сортировка по хэшу, то они с вероятностью стремящейся к единице в разных частях. --Туча 12:15, 6 ноября 2015 (UTC)[ответить]
Всё равно не пойму в чём проблема. Вместо cделанной вами правки [131830654]="RYA" будет [131830654]={1627890309, "RYA"}. Плюс описанный минимальный код в модуле. Страница региона при этом не нуждается в корректировке. Игорь Темиров 12:54, 6 ноября 2015 (UTC)[ответить]
А конструкции с вложенными массивами ещё хуже. Они же память жрут. На самом деле чем меньше вложенных массивов тем меньше нужно памяти, при одном и том же количестве данных. --Туча 13:29, 6 ноября 2015 (UTC)[ответить]
Если бы хэши были бы отсортированы по алфавиту, то ваш вариант мог бы выглядеть как [131830654]=1627890309, [1627890309]="RYA", и не было бы ни вложенных массивов, ни необходимости хватать соседнюю часть индекса. --Туча 13:47, 6 ноября 2015 (UTC)[ответить]

Названия разные, а хэш один: есть проблема, но есть и решение

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

if type(RegionPage) == "table" then RegionPage = RegionPage[PlaceName] end

По идее он должен работать для случаев, когда два разных названия дают один хэш и нет другой возможности (вроде скобочной проверки на "(название региона)") сличить НП с корректной базой регионов. Но это именно "по идее". Дело в том, что сейчас, без RUS-NNN модулей (а для отказа от них была более чем веская причина, так что возврат к этой схеме не вариант) Lua распознаёт тип данных выводимых "экзотических" строк не как table, а как string — доказательство чему мы можем видеть тут (я заставил свой тестовый модуль проверить тип данных, выводимый по комбинации {{Население/STA-005|107744721}} — этому хэшу соответствуют Гришенское в Алтайском крае и Жёлтинский в Челябинской области). Результат не заставит себя долго ждать: попытка сделать вызов {{Население|Гришенское|тс}} или {{Население|Жёлтинский|тс}} закономерно кончится fail'ом — см. здесь. В принципе, можно было бы подобную строку сделать распознаваемой таблицей в Lua через loadString ([1]). Проблема однако в том, что эта функция отключена в Scribunto, о чём можно прочитать тут. Есть ли выход из этой патовой ситуации? Можно, конечно, указывать регион вручную — как я и сделал сейчас в том самом Жёлтинском. Но это костыль, IMHO. А можно сделать поавтоматичнее:

1) вводится специальный "псевдорегион" STA-Multinames, которому такие хэши и должны сопоставляться;
2) если у хэша название региона указано как STA-Multinames, то производится вызов {{Население/STA-Multinames|хэш|название НП}}. Который, в свою очередь, и даст корректный регион. Так, для того же Жёлтинского вызов будет таким: {{Население/STA-Multinames|107744721|Жёлтинский}}, что даст нам правильный регион RUS-CHE. Результат — b (или a).

Соответственно, прошу внести в модуль следующее изменение: после строки

if type(RegionPage) == "table" then RegionPage = RegionPage[PlaceName] end

включить новую строку следующего содержания:

if RegionPage == "STA-Multinames" then RegionPage = frame:expandTemplate{ title = ("Население/"..RegionPage), args = { PlaceHash, PlaceName } } end

С уважением, --Seryo93 (о.) 14:29, 10 августа 2017 (UTC)[ответить]

@Seryo93: Да есть такая проблема {{Население|Жёлтинский|х}}:107744721,{{Население|Гришенское|х}}:107744721, но отдельный модуль тоже костыль. Скорее логичнее было бы переделать GetHashData, то есть заменить:
function GetHashData(PlaceHash) на function GetHashData(PlaceHash,PlaceName) в 68 строчке
if (HashData=="") then HashData=nil на if (HashData=="") then HashData= frame:expandTemplate{ title = templatename, args = { PlaceName } } if (HashData=="") then HashData=nil end в 75 строчке
local RegionPage = GetHashData(PlaceHash) на local RegionPage = GetHashData(PlaceHash,PlaceName) в 137 строчке
RegionPage = GetHashData(PlaceHash) на RegionPage = GetHashData(PlaceHash,PlaceName) в 142 строчке.
А if type(RegionPage) == "table" then RegionPage = RegionPage[PlaceName] end в строке 144 совсем удалить.

Тогда бы колизии без всяких дополнительных модулей можно было бы разрешать в самих шаблонах. Таким способом: правки. --Туча 17:28, 25 июня 2018 (UTC)[ответить]

185 строчка

Хотелось бы что бы в случае таких ошибок как: Кетанда (село), Арка (Хабаровский край) - модуль не падал в строке 185:

Source1 = RegionData['Источники'][PlaceData[NumRecord][3]][1]

, а выдавал хотя бы что-то разумное:

Source1 = ( RegionData['Источники'] and string.format("{{%s}}",PlaceData[NumRecord][3]) ) or (RegionData['Источники'][PlaceData[NumRecord][3]] and PlaceData[NumRecord][3]) or RegionData['Источники'][PlaceData[NumRecord][3]][1]

То есть логика должна быть такая, на мой взгляд, если ошибка в одом источнике, в качестве этого источника подставь хоть что-нибудь, но таблицу итоговую по населению всё таки нарисуй нормальную. Данный кусок кода должен, если нет таблицы Источники, воспринимать параметр три как имя шаблона, а если таблица источники есть, но в ней нет соотвествующей записи, то как готовый и форматированный источник подставлять само поле три. --Туча 16:41, 25 июня 2018 (UTC)[ответить]

Интерполяция в графиках

Есть предложение, заменить

"interpolate": {"value": "monotone"}

на

"interpolate": {"value": "linear"}

(встречается там два раза). А то, смотрите, какие графики получаются

Численность населения
1926[1]2002[2]2007[3]2008[4]2010[5]
13419212326
25
50
75
100
125
150
2010

Землеройкин (обс.) 13:29, 16 августа 2018 (UTC)[ответить]

  • (!) Комментарий: в обсуждении графика поднимался вопрос о линейной интерполяции, конкретных возражений не было, было несколько голосов "за". Но все так нахваливали дизайн из шаблона {{Graph:Population history}}, где интерполяция по умолчанию monotone... Кроме того, был минус: я точно помню, что при резких скачках численности населения на графиках с линейной интерполяцией возникали плохо выглядящие острые углы линии. Тем не менее, сейчас я этот эффект воспроизвести не могу (или он стал незначителен). Короче, никаких фундаментальных преимуществ monotone перед linear действительно нет, а недостаток monotone действительно очевиден. Обсуждалась и возможность полного удаления линий, но однозначной поддержки не получила. Такое поведение при интерполяции monotone — несомненный баг; поскольку он пока не исправлен и, возможно, никогда не будет исправлен, я (+) поддерживаю этот запрос. --Браунинг (обс.) 14:18, 16 августа 2018 (UTC)[ответить]
  • Честно говоря, тут вообще графика не должно быть. Слишком неравномерно расположены реперные точки, слишком большой разрыв между первой и второй. Тут график не то что не даёт адекватную информацию — он вводит в заблуждение, это орисс. Надо вообще график заменить на гистограмму. GAndy (обс.) 17:54, 21 августа 2018 (UTC)[ответить]
  • Причём, так проблема, по-видимому, встречается много где — может даже подумать о ботозамене. GAndy (обс.) 17:56, 21 августа 2018 (UTC)[ответить]
    • Нет. Это отдельный вопрос, по которому были широкие обсуждения -- я привёл ссылки выше. Если желаете, можно открыть новое обсуждение, если есть какие-то новые, не учтённые ранее аргументы. --Браунинг (обс.) 20:01, 21 августа 2018 (UTC)[ответить]
    • Гистограмма тоже плохо, все точки будут расположены равномерно, независимо от того сколько лет между ними прошло. Да, это там есть в обсуждении. Землеройкин (обс.) 20:52, 22 августа 2018 (UTC)[ответить]
  • Я бы предпочёл вариант с исправлением интерполяции monotone, но это нужно где-то внутри Vega 2 ковыряться. Полгода назад пытался разобраться, где же проблема, но так и не нашёл. Например, в Vega-Lite всё хорошо, а в Vega 2 (код, редактор) при таких же значениях проблема. — putnik 20:49, 21 августа 2018 (UTC)[ответить]

Похоже, я разобрался, в чём дело. Текущая версия расширения Graph использует библиотеку d3 версии 3.5.17. А как раз в следующей её версии, 4.0.0, было полное обновление алгоритма monotone (см. здесь), в том числе, видимо, был исправлен и этот баг, но в Graph это уже не попало. Землеройкин (обс.) 13:19, 26 августа 2018 (UTC)[ответить]

  1. Список населенных мест Дальневосточного края : По материалам Всесоюзной переписи населения 17 декабря 1926 года и Приполярной переписи 1926—27 года : [рус.]. — Хабаровск, Благовещенск : Дальневосточный краевой статистический отдел, 1929. — 229 с.
  2. Коряков Ю. Б. Этно-языковой состав населённых пунктов России : [арх. 17 ноября 2020] : база данных. — 2016.
  3. Карта-буклет Лазовский район ФГУП 2007г.
  4. Лазовский район 1.01.2008
  5. Численность населения городских округов, муниципальных районов, городских и сельских поселений, городских населённых пунктов, сельских населённых пунктов. Всероссийская перепись населения 2010 года (по состоянию на 14 октября 2010 года). Приморский край. Дата обращения: 31 августа 2013. Архивировано из оригинала 7 июня 2013 года.