Расширение "Структурированные статистические данные"

Расширение предназначено для формирования различных способов представления специальным образом структурированных статистических данных. Основываясь на унифицированном формате идентификации произвольных статистических данных, оно позволяет формировать большое число отчётов, представляющих их в различных разрезах. Встроены средства описания порядка формирования производных показателей на основе имеющихся первичных данных и встраивания их в систему унифицированных отчётов. Является основой для формирования специализированных расширений, связанных с обработкой статистических данных.
Расширение требует установки файлов ssd.php, ssdx.php (не входят в базовую комплектацию).

Унифицированный формат представления статистических данных

Расширение использует унифицированный формат идентификации статистических данных. Он использует три базисных понятия:
индикатор (что измеряем);
объект (где измеряем);
период (когда измеряем).
С помощью перечисленных понятий понятий можно идентифицировать любой статистический показатель. Например, показатель ВВП России в текущих ценах за 2022 год с рамках данных понятий раскладывает следующим образом: индикатор - ВВП в текущих ценах; объект - Россия; период - 2022 год. Показатель отчёта о финансовых результатах: Выручка от реализации Газпрома за 2008 год. Индикатор - Выручка от реализации; объект - Газпром; период - 2008 год.
Расширение исходит из того, что набор любых индикаторов, измеренных на любых объектах, за любой период времени может быть представлен массивом уницированных описателей, каждый из которых имеет структуру:
<код индикатора>.<код объекта>.<код периода> <значение>
Расширение манипулирует массивами данных, представленными именно в таком формате, который в дальнейшем изложении будет именоваться ssd-формат. Например, на данном сайте имеются достаточно большие массивы разнородных статистических данных, представляемых ООН по всем регионам мира за ряд периодов [см. Статистика ООН ]. ООН поставляет данные в виде csv-файлов, которыми не всегда удобно манипулировать унифицированными способами. Эти данные были трансформированы в ssd-формат и в данной статье будут использоваться в целях демонстрации возможностей данного расширения.
Фрагмент массива данных, представленных в ssd-формате:
P1203.R030.1985 6.6576
P1203.R030.1995 5.6400
P1203.R030.2005 6.2184
P1203.R030.2010 8.0543
P1203.R030.2015 4.7534
P1203.R030.2017 5.1666
P1203.R030.2018 4.7449
P1200.R035.1985 243806.2277
P1200.R035.1995 703486.7394
P1200.R035.2005 958892.6882
P1200.R035.2010 1980866.2250
P1200.R035.2015 2466780.9620
P1200.R035.2017 2783868.6400
P1200.R035.2018 2974090.0480
P1201.R035.1985 608.3783
P1201.R035.1995 1448.5309
P1201.R035.2005 1708.7807
P1201.R035.2010 3318.3271
P1201.R035.2015 3888.9465
P1201.R035.2017 4293.0478
P1201.R035.2018 4538.5276
В представленном фрагменте P1203, P1200, P1201 - коды индикаторов; R030, R035 - коды объектов. Коды периодов в данном случае идентифицируют годы. Через пробел после составного кода следует значение конкретного индикатора на конкретном объекте в конкретный год.
Единый унифицированный массив данных в ssd-формате может включать также специализированные описатели различных свойств индикаторов и объектов. В этом случае формат кода также трёхкомпонентный. Например:
$.P1200.n GDP in current prices (millions of US dollars)
$.P1201.n GDP per capita (US dollars)
$.P1202.n GDP in constant 2010 prices (millions of US dollars)
$.P1203.n GDP real rates of growth (percent)
#.R030.n Eastern Asia
#.R035.n South-eastern Asia
Символ $ в первой части кода указывает на то, что спецконструкция описывает некоторое свойство индикатора, код которого указан во второй части составного кода. Третья часть кода идентифицирует описываемое свойство данного индикатора. Сопоставляемым такому составному коду значением может быть какая угодно текстовая строка, определяющая число, текст, дату и т.д. В данном случае свойство n обозначает название индикатора.
Символ # в первой части кода указывает на то, что спецконструкция описывает некоторое свойство объекта, код которого указан во второй части составного кода. Третья часть кода идентифицирует описываемое свойство данного объекта. Сопоставляемым такому составному коду значением может быть какая угодно текстовая строка, определяющая число, текст, дату и т.д. В данном случае свойство n обозначает название объекта.
Описание свойств периодов в данной реализации расширения пока не предусмотрено.
Помимо специализированных описателей свойств индикаторов и объектов система использует описатели свойств их групп (начинаются с символа !), позволяющих расширению фильтровать данные тем или иным способом. Например:
!.G20.n Страны группы G20
!.G20.o R032 R036 R076 R826 R276 R356 R360 R380 R124 R156 R484 R643 R682 R840 R792 R250 R410 R710 R392 R097
В данном примере вводится группа с идентификатором G20 с названием "Страны группы G20", определяемым свойством n, которая включает страны с перечисленными кодами (свойство o), свойства которых в свою очередь описаны кодами с идентификатором #.
Достоинством ssd-формата является то, что данные не зависят от их позиционирования, что характерно для табличных форматов их хранения (csv, таблицы реляционных СУБД). То есть данные могут вводиться в произвольном порядке, храниться произвольными наборами данных, а различные массивы могут произвольно объединяться в целях решения конкретных задач. В сочетании со специализированными описателями свойств индикаторов и объектов данные могут храниться совместно с их описаниями. При этом становится возможной универсализация операций по представлению статистических данных в любом интересующем пользователя разрезе.
Для специализированных приложений данных ssd-формата могут вводиться дополнительные соглашения о правилах кодирования индикаторов, объектов и периодов, учитывающие специфические особенности специализированных задач. За счёт такого рода конструкций любому индикатору и объекту может быть сопоставлено любое число самых разных свойств и описателей. Например, расширение Финансовый анализ полностью базируется на универсальных методах манипулирования данными ssd-формата, реализуемых данным расширением, но дополняет его специфическими функциями, учитывающими специализированную структуру кода используемых индикаторов.

Входные данные расширения

Данные ssd-формата объединяются в массивы данных системы, имеющие типовую структуру и описатели. Например:
$.x ssd
$.n T12 Gross domestic product and gross domestic product per capita
$.a
$.d 02233
/kod
^oon/kod.s~AC
^oon/kod.s~CG
//
/T12
$.P1200.n GDP in current prices (millions of US dollars)
$.P1201.n GDP per capita (US dollars)
$.P1202.n GDP in constant 2010 prices (millions of US dollars)
$.P1203.n GDP real rates of growth (percent)
P1200.R001.1985 13567237.7200
P1200.R001.1995 31128272.8800
P1200.R001.2005 47605038.3800
P1200.R001.2010 66231828.7500
P1200.R001.2015 74882647.9600
P1200.R001.2017 80789197.8800
P1200.R001.2018 85693321.6100
P1201.R001.1985 2787.1426
P1201.R001.1995 5420.2254
P1201.R001.2005 7278.7537
//
Здесь раздел $.x ssd указывает на то, что обработчиком этих данных является расширение ssd. Раздел $.n определяет название массива данных. Раздел $.a (Аннотация) пуст. Раздел $.d 02233 указывает на то, что массив данных недоступен роботам, доступен для использования всем остальным, а пользователи со статусом Писатель и Эксперт могут ещё и использовать этот массив в своих публикациях. Раздел kod наполняется за счёт импорта данных из секций AC и CG статьи из файла oon/kod.s (там тоже данные ssd-формате - описатели объектов и групп). В начале раздела T12 размещаются описатели используемых кодов индикаторов, а далее следуют собственно данные в ssd-формате. При считывании массива данных сначала обрабатываются и запоминаются системные описатели массива, а далее несистемные разделы kod и T12 объединяются во внутреннее представление ssd-массива, передаваемого на обработку функциям расширения.
Массивы данных, используемые расширением ssd стандартно могут размещаться и импортироватья как из отдельных файлов типа txt, так и из секций любых других публикаций - статей и книг.

Запуск и взаимодействие с расширением

Встраивание расширения в тело статьи осуществляется с помощью функции ssd(p). Ей передаётся единственный параметр - строка p, включающая параметры, заданные в формате ключ:значение. Основными параметрами являются:
d - указатель используемого массива данных;
f - номер стартовой формы взаимодействия с приложением (по умолчанию 3);
v - режим представления форм (по умолчанию 0).
Есть и другие параметры, но они имеют служебное значение и устанавливаются автоматически при обращении к отчётам-расшифровкам.
Запуск расширения для изучения его возможностей будем осуществлять в другом окне (вкладке), поскольку его вывод очень объёмен и сместит все последующие пояснения под себя. Здесь же изложение построено на том, чтобы переключаться между окном данной статьи и окном, в котором осуществляется запуск и выполнение манипуляций с данными.
Если параметр v=0, то стартовое представление данных зависит от используемого при просмотре страниц устройства. Если это компьютер или планшет, то применяется табличное (широкоформатное) представление. Если это смартфон, то ленточное (узкое). Переходы по ссылкам осуществляют перезагрузку страницы и установку параметров вызова функции ssd(). При v=1 начальная форма всегда отображается в широкоформатном режиме (Таблица), при v=2 - в компактном режиме (Лента). Переключение между режимами отображения любой формы осуществляется по самой правой ссылке (Лента/Таблица). Таким образом, любой разрез данных (тип формы) всегда имеет два представления - Таблица и Лента.

Формы представления ssd-данных

Стандартизованный ssd-формат позволяет унифицировать способы структурирования данных. Всего существует 6 форм представления данных ssd-формата, которые представлены в следующей таблице.
1
Период/Индикатор/Объект
2
Период/Объект/Индикатор
3
Объект/Индикатор/Период
4
Объект/Период/Индикатор
5
Индикатор/Объект/Период
6
Индикатор/Период/Объект
Первый элемент определяет первый ключ упорядочения таблиц, второй - строки таблиц, третий - столбцы. Перечисленные 6 форм дают все возможные способы представления ssd-данных.
В первой и второй формах ведущим ключом упорядочения является Период. Для каждого периода строится таблица. В первой форме строками таблицы являются Индикаторы, а столбцами - Объекты. Во второй форме строками являются Объекты, а столбцами - Индикаторы.
В третьей и четвёртой формах ведущим ключом упорядочения является Объект. Для каждого Объекта строится таблица. В третьей форме строками таблицы являются Индикаторы, а столбцами - Периоды. В четвёртой форме строками являются Периоды, а столбцами - Индикаторы.
В пятой и шестой формах ведущим ключом упорядочения является Индикатор. Для каждого Индикатора строится таблица. В пятой форме строками таблицы являются Объекты, а столбцами - Периоды. В шестой форме строками являются Периоды, а столбцами - Объекты.
Переключение между формами осуществляется переходом по ссылкам с номерами форм. Каждой форме соответствует два способа представления: Табличный и Ленточный. Их переключение для каждой формы осуществляется переходом по самой правой ссылке, меняющей своё название в зависимости от текущего способа представления (Лента/Таблица). Ленточное представление более удобно для узких экранов смартфонов или при большом числе столбцов выходных таблиц в широкоформатном представлении. Кроме того в ленточном представлении 3 и 5 форм кроме собственно данных выводятся ещё и их базисные темпы роста.

Фильтрация данных

Фильтрация данных осуществляется с помощью Групп, описания которых включаются в обрабатываемый массив ssd-данных. В группы можно объединить отдельные индикаторы, объекты и периоды. Это позволяет накладывать фильтры по спискам индикаторов, объектов и периодов.
Группа может иметь несколько свойств:
n - название;
i - индикаторы;
o - объекты;
p - периоды.
Задавая списки индикаторов, объектов и периодов можно ограничить вывод данных в отчётах указанными множествами объектов. Выбор фильтра по группе осуществляется переходом по ссылке Группы. Например, в рассматриваемом примере введены несколько групп для фильтрации данных по входящим в массив объектам. Для определения группы G20 в массиве ssd-данных использованы конструкции:
!.G20.n Страны группы G20
!.G20.o R032 R036 R076 R826 R276 R356 R360 R380 R124 R156 R484 R643 R682 R840 R792 R250 R410 R710 R392 R097
Первая строка устанавливает свойство n группы (Название). Под ним она фигурирует в меню выбора группы. Свойство o (объекты) перечисляет коды объектов, которые входят в данную группу. Свойства i (индикаторы) и p (периоды) не заданы и потому в данном случае к группе относятся данные по всем индикаторам и всем периодам, которые заданы для всех объектов, заданных свойством o.
Помимо простого перечисления кодов можно использовать их обобщённые имена и ссылки на другие уже определённые ранее группы.
Обобщённое имя начинается с символа ? (вопросительный знак), после которого следует набор символов, совпадающий с набором символов нескольких других кодов того же типа. В этом случае все коды, начинающиеся с данного набора символов будут относиться к данной группе. Например, имеется следующее определение группы индикаторов:
!.bbva.n Внеоборотные активы
!.bbva.i ?bb11
В соответствии с ним в группу bbva (Внеоборотные активы) входят все индикаторы, коды которых начинаются с набора символов "bb11".
В списке кодов, входящих в группу можно ссылаться на другие группы. Для этого элементом списка может быть комбинация символов, начинающаяся с символа ! (восклицательный знак), после которого должно следовать имя другой группы. В результате такого определения все коды указанной группы будут входить также и в состав данной группы. Более того, если в числе кодов включаемой группы также есть ссылки на другие группы, то и входящие в них коды также попадут в состав перечня кодов определяемой группы. Например, имеется следующее определение группы индикаторов:
!.bbab.n Актив
!.bbab.i bb1600 bb160k !bbva !bboa
В соответствии с данным определением в состав группы bbab (Актив) войдут индикаторы bb1600, bb1600k, все коды группы bbva и все коды группы bboa.

Формы-расшифровки

Внутри таблиц разных форм имеются ссылки, которые обеспечивают вывод в отдельных окнах вспомогательных форм-расшифровок, позволяющих как-то детализировать сведения о том или ином индикаторе, объекте или периоде.
В первой форме ссылками на форму-расшифровку являются коды индикаторов. Выводимая при переходе по такой ссылке форма собирает и обобщает все данные по выбранному индикатору за выбранный период. Обобщение производится по всем объектам. В форме выводятся основные статистические данные по выборке объектов, рейтинг объектов по отношению к максимальному значению индикатора за данный период, а также ряд вспомогательных относительных данных, уточняющих рейтинг. Кроме того, когда это возможно, форма включает сведения о взаимосвязи данного индикатора в данном периоде с другими индикаторами: коэффициенты корреляции и уравнения парной регрессии.
В второй форме ссылками на форму-расшифровку являются коды объектов. Выводимая при переходе по такой ссылке форма собирает и обобщает все данные по выбранному объекту за выбранный период. Обобщение производится по всем индикаторам. Для каждого индикатора в отчёте выводятся относительные характеристики положения данного объекта относительного других в данном периоде. Кроме этого в отчёте выводится таблица сходства данного объекта с другими объектами за данный период по всей совокупности индикаторов. Коэффициенты сходства рассчитывается по авторской методике разработчика данного расширения.
В третьей форме ссылками на форму-расшифровку являются коды индикаторов. Выводимая при переходе по такой ссылке форма собирает и обобщает все данные по выбранному индикатору за все периоды. В ней выводятся все значения индикатора за все периоды, базисные темпы роста, а также темпы прироста от периода к периоду.
В четвёртой форме ссылками на форму-расшифровку являются коды периодов. Содержание этой формы полностью аналогично содержанию формы-расшифровки, выводимой ко второй форме.
В пятой форме ссылками на форму-расшифровку являются коды индикаторов. Содержание этой формы полностью аналогично содержанию формы-расшифровки, выводимой к третьей форме.
В пятой форме ссылками на форму-расшифровку являются коды периодов. Содержание этой формы полностью аналогично содержанию формы-расшифровки, выводимой к первой форме.
Полнота раскрытия информации в формах-расшифровках зависит от состава расширений системы, установленных на конкретном сайте.

Расчётные индикаторы

Расширение позволяет представлять в отчётах не только непосредственно заданные в ssd-массиве данные, но производные значения индикаторов, рассчитанные по определённым правилам на их основе. Для описания производного индикатора используется свойство f, значением которого является расчётная формула. Например, имеется следующее определение свойств индикатора:
$.bb140k.n Долгосрочные обязательства (контрольная сумма)
$.bb140k.f bb1410+bb1420+bb1430+bb1450
Оно означает, что индикатор bb140k рассчитывается как сумма индикаторов bb1410, bb1420, bb1430,bb1450.
Расчёт производных индикаторов осуществляется по следующему алгоритму. Сначала полностью загружается ssd-массив и устанавливаются все непосредственно заданные значения по каждому индикатору, объекту и периоду. Далее расширение выбирает все производные индикаторы, для которых установлено свойство f. Соответствующие формулы компилируются в некое внутреннее представление. Далее производится несколько проходов с попыткой расчёта значений производных индикаторов для каждого объекта и каждого периода. Часть попыток может оказаться неуспешной. Это может быть в том случае, если один производный индикатор рассчитывается на основе других производных, а те к моменту попытки пока не рассчитаны. Поэтому проходы повторяются многократно до тех пор, пока по результатам очередного прохода не удастся выполнить ни одного удачного вычисления.
Расчётные выражения могут включать знаки арифметических операций, скобки, а также любые встроенные функции, оперирующие скалярами. Например:
$.kfra.n Коэффициент финансирования по аналитическому балансу
$.kfra.f (abp_do+abp_ko)/abp_sk
В выражении можно применять условные вычисления.
$.ap1b.n А1 > П1 (УБ)
$.ap1b.f sif(a1b>p1b,'Да','Нет')
Множество примеров вычислений по ssd-данным содержит расширение Финансовый анализ.
Для определения производных показателей можно использовать также программные модули на встроенном языке системы. Однако эта возможность требует описания сложной системы соглашений, недостаточно протестирована и потому в данной версии документации не рассматривается.