Closed epogrebnyak closed 6 years ago
для проверки что должны делать? Я так понимаю, что функция validate должна кидать исключение, если обнаружены дополнительные столбцы в данных, которых нет в чекпойнтах, или, наоборот, если какие-то чекпойнты не использованы. Так? Либо же должны быть отдельные функции, которые возвращают список различий, к примеру?
Скорее второе.
Нужна функция для проверки "Есть ли в фреймах переменные (столбцы), для которые нет проверочного значения" - это проверка. Это может быть warning или exception.
Справочная функция - есть ли среди проверочных значений те, которые не понадобились для проверки? Это информация о том, что проверочные значения, возможно, устаревают, из-за пересмотра состава переменных. Это warning.
В целом нужен набор правил, которые мы считаем "валидацией целостности" набора данных. @0nkery, можете предложить?
По №2 мы всегда используем все контрольные точки, дополнительная проверка не требуется.
flags = [is_found(df, c) for c in checkpoints]
Текущая цель валидации:
мы хотим добиться, чтобы для каждой переменной в каждой частоте была непустая контрольная точка
Specification
CHECKPOINTS
Все контрольные точки есть в фреймах.
Для каждой переменной в каждой частоте есть одна непустая контрольная точка. Нет неиспользуемых контрольных точек.
мы не знаем все ли переменные во фреймах охвачены контрольными точками
нас удовлетворяют пустые значения в контрольной точке и в фрейме (нужны контрольные токи вне 1999 года для некоторых переменных)
можно метаться туда-суда по поводу компоненты "как задавать чекпойнты", исходя из соображений удобства и соответствия исходнику. тут может быть много вариантов, и сейчас не идеальный.
INDPRO_yoy
, PPI_rog
) нужны дополнительные строки с контрольными точками, привязанные к конкретному году и механизм объединения получившихся словарей для валидации датафреймов. Вариант решения задачи валидации переменных в релизах данных по нескольким контрольным точкам.
Если брать контрольную точку ближе по времени, ее значение может меняться через месяц или квартал ( было / не было данных + уточнили данные ).
Можно задать базовые контрольные точки, общие для всех релизов данных. В каждом отдельном релизе данных, при необходимости, можно указывать "переопределения" отдельных контрольных точек, которые объединяются с базовыми (перезаписывая отдельные контрольные точки). Полученная структура данных уже используется для валидации датафреймов.
https://github.com/mini-kep/parser-rosstat-kep/blob/dev/src/kep/parsing_definition/checkpoints.py and https://github.com/mini-kep/parser-rosstat-kep/blob/dev/src/kep/vintage.py
ideas for work: