Проверка данных важна, когда дело доходит до написания согласованных и надежных конвейеров данных. Pydantic - это библиотека для проверки данных и управления настройками с использованием нотаций типов Python. Обычно он используется для анализа структур данных, подобных JSON, во время выполнения, т. Е. Получения данных из API.

Сегодня мы хотели бы кратко представить, как вы можете использовать Pydantic для проверки данных из API. Мы выбрали реальный источник данных для этого руководства, чтобы предоставить более практические шаги по проверке данных, потому что данные в реальной жизни часто бывают беспорядочными, и в этом вся цель проверки данных.

Источник данных тестирования

Мы используем реальный источник данных от Ipstack, который представляет собой API, который предоставляет данные геолокации и идентификации для IP-адресов. Ipstack предоставляет бесплатный план для всех, кто регистрируется, поэтому, если вы хотите следовать примеру, не стесняйтесь зарегистрировать у них бесплатную учетную запись. Отказ от ответственности: мы не имеем коммерческого отношения к Ipstack.

Пример ответа от API:

Что проверять

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

#1. Validate if there is a valid response -> if yes, raise error and stop the program
#2. Validate if the response contains None values -> if yes, raise error but proceed to store None values as it's not critical
#3. Validate and convert the data types of a response

Как это настроить

Вы можете установить библиотеку Pydantic с помощью следующей команды, если у вас активирована виртуальная среда:

(venv) pip install -U pydantic

Вот как вы можете настроить класс проверки данных Pydantic с необходимыми полями, соответствующими API. Обратите внимание, что мы не включаем все поля или ключи из ответа словаря, полученного от API, то есть «continent_code». Мы делаем первые два поля обязательными, а остальные поля - необязательными, поскольку мы можем получить недопустимые IP-адреса, которые возвращают только None из API.

Не стесняйтесь обращаться к официальной документации Pydantic, чтобы узнать о дополнительных поддерживаемых типах моделей данных, включая ORM. Https://pydantic-docs.helpmanual.io/usage/models/

Как передать данные

Прежде всего, давайте напишем две функции для запроса данных из API:

Давайте вызовем API со следующим списком IP-адресов, чтобы получить в ответ список словарей:

Теперь давайте передадим список результатов словаря в наш класс проверки данных IPStackDataValidation, определенный выше. Обратите внимание, что каждый распакованный словарь попадает в класс IPStackDataValidation и становится экземпляром в списке. Это круто!

Как проверить данные

Теперь перейдем к целям, которые мы хотим проверить:

#1. Validate if there is a valid response -> if yes, raise error and stop the program

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

Способ проверки ответа состоит в том, что мы хотим проверить, есть ли элемент «ip» в словаре. Если нет, я создаю собственное исключение, а если да, то возвращаю словарь. Мы также вызываем декоратор @root_validator для проверки данных всей модели.

И, конечно же, возвращается настраиваемое исключение:

#2. Validate if the response contains None values -> if yes, raise error but proceed to store None values as it's not a critical error

Если IP-адрес недействителен или не распознан, API вернет None для полей. Давайте добавим один недопустимый IP-адрес для проверки, «10.10.2.15».

Как видите, API возвращает None для всех полей, кроме полей «ip» и «type».

Хотя мы хотим знать, что были введены недопустимые IP-адреса, мы все же хотим передать записи, а не останавливать программу. Следовательно, мы хотим принять ValueError и по-прежнему вернуть значение в конце. Обратите внимание, что мы вызываем декоратор @validator для проверки каждого поля.

На данный момент вы можете видеть, что ответ словаря для IP-адреса «10.10.2.15» по-прежнему передается в список экземпляров:

#3. Validate and convert the data types of a response

Теперь мы хотим убедиться, что типы данных ответа регулируются. При этом, что удивительно в Pydantic, так это то, что тип данных автоматически преобразуется на основе обозначений типов, указанных в классе. Например, если мы передаем словарь, в котором значение поля «zip» является целым числом, а значение поля «широта» - строкой, Pydantic должен иметь возможность преобразовать их для нас.

Давайте проверим это со словарем, который имеет недопустимые типы данных для поля «zip» (int vs str), поля «latitude» (str vs float) и поля «долгота» (str vs float). Мы добавляем этот словарь в конец списка ip_geomap_responses.

Давайте проиндексируем и проверим последний экземпляр Pydantic. Да, эти недопустимые поля были преобразованы в определенные типы данных в классе в начале.

Преобразование проверенных данных в DataFrame:

Для профессионалов в области данных обычно мы хотим преобразовать проверенные данные в объекты DataFrame pandas. Pydantic позволяет разработчикам экспортировать экземпляры модели обратно в словари с помощью метода .dict (). После того, как мы перебрали все экземпляры в списке, мы можем просто передать список словарей в функцию pd.DataFrame ().

Теперь загруженный фрейм данных был проверен Pydantic с помощью вышеупомянутых трех шагов.

Когда следует проверять данные

Основываясь на том, что мы узнали в прошлом, мы также суммировали следующие передовые практики для проверки данных (следует воспринимать с недоверием, поскольку у разных компаний могут быть разные сценарии и потребности в данных):

  1. Проверка данных должна выполняться как можно раньше и как можно чаще.
  2. Проверка данных должна выполняться всеми разработчиками данных, включая разработчиков, которые готовят данные (Data Engineer), и разработчиков, которые используют данные (Data Analyst или Data Scientist).
  3. Проверка данных должна выполняться как для входных, так и для выходных данных.

Спасибо!

Надеюсь, вы найдете это полезным! Спасибо, что прочитали совет этой недели!

Ознакомьтесь с другими взломами данных на Dataproducts.io.

Больше контента на plainenglish.io