Обобщенные проверки качества данных в наборах данных

Я ежедневно извлекаю несколько разных наборов данных, выполняю несколько простых проверок качества данных, а затем отправляю электронные письма, если набор данных не проходит проверку.

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

assert df.shape == (1016545, 8)
assert len(df) - len(df.drop_duplicates()) == 0

Поскольку эти наборы данных обновляются ежедневно и могут изменить количество строк, есть ли лучший способ проверить вместо жесткого кодирования конкретного числа?

Например, в одном наборе данных может быть всего 400 строк, а в другом — 2 миллиона. Могу ли я сказать, чтобы проверить в пределах «одного стандартного отклонения» от количества строк со вчерашнего дня? Но в этом случае мне нужно было бы начать собирать количество предыдущих дней в отдельной таблице, и это могло бы стать некрасивым.

Прямо сейчас для таблиц, которые меняются ежедневно, я делаю следующую элементарную проверку:

assert df.shape[0] <= 1016545 + 100
assert df.shape[0] >= 1016545 - 100

Но очевидно, что это не является устойчивым.

Любые предложения очень ценятся.


person sanjayr    schedule 11.02.2020    source источник


Ответы (1)


Да, вам нужно будет сохранить некоторую предыдущую информацию, но, поскольку вы, похоже, не заботитесь о совершенной статистической точности, я думаю, вы можете немного схитрить. Если вы сохраняете среднее количество записей на основе предыдущих выборок, предыдущего рассчитанного вами отклонения и количества взятых вами выборок, вы можете получить достаточно близкое к тому, что ищете, найдя средневзвешенное значение предыдущего отклонения с текущим значением. отклонение.

Например:

Если среднее количество было 1016545 с отклонением 85, полученным за 10 выборок, а сегодняшнее количество составляет 1016612. Если вы вычисляете разницу от среднего значения (1016612 - 1016545 = 67), тогда средневзвешенное значение предыдущего отклонения и текущего отклонения ((85*10 + 67)/11 ≈ 83).

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

Что касается хранилища, вы можете хранить свои данные в базе данных или файл json или любое количество других местоположений -- Я не буду вдаваться в подробности, поскольку неясно, в какой среде вы работаете или какие ресурсы у вас есть.

Надеюсь, это поможет!

person Eliot K    schedule 11.02.2020