Обобщенные проверки качества данных в наборах данных - PullRequest
0 голосов
/ 11 февраля 2020

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

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

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

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

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

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

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

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

Любые предложения приветствуются.

1 Ответ

2 голосов
/ 11 февраля 2020

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

Например:

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...