Изучение того, как использовать экосистему Python для аудита качества данных.
Нельзя управлять тем, что нельзя измерить — Питер Друкер
Введение
Аудит качества данных — незаменимый навык в нашем быстро развивающемся мире с искусственным интеллектом. Точно так же, как сырая нефть нуждается в переработке, данные также нуждаются в очистке и обработке, чтобы быть полезными. Старая поговорка «мусор на входе, мусор на выходе» остается актуальной и сегодня, как и на заре вычислительной техники.
В этой статье мы рассмотрим, как Python может помочь нам обеспечить соответствие наших наборов данных стандартам качества для успешных проектов. Мы углубимся в библиотеки Python, фрагменты кода и примеры, которые вы можете использовать в своих рабочих процессах.
Содержание:
- Понимание качества данных и его аспектов
- Проверка данных с использованием Pydantic и pandas_dq
- Сравнение Pydantic и pandas_dq
- Исследование точности и согласованности
- Аудит качества данных с помощью pandas_dq
- Заключение
Аудит качества данных
Прежде чем углубляться в инструменты и методы, давайте сначала рассмотрим концепцию качества данных. Согласно широко принятому в отрасли определению, качество данных относится к степени точности, полноты, своевременности, достоверности, уникальности идентификаторов и согласованности набора данных.
Полнота
Полнота качества данных включает в себя наличие всех жизненно важных элементов данных, необходимых для достижения конкретной цели. Возьмем, к примеру, базу данных клиентов, предназначенную для маркетинговых целей; он будет считаться неполным, если для некоторых клиентов отсутствовала важная контактная информация, такая как номера телефонов или адреса электронной почты.
Чтобы обеспечить полноту данных, организации могут использовать методы профилирования данных.
Профилирование данных – это систематическое изучение и оценка наборов данных для выявления закономерностей, несоответствий и аномалий.
Тщательно изучив данные, можно выявить пробелы, особенности или отсутствующие значения, что позволяет принять корректирующие меры, такие как поиск недостающей информации или внедрение надежных процессов проверки данных. Результатом является более надежный, полный и действенный набор данных, который позволяет лучше принимать решения, оптимизировать маркетинговые усилия и, в конечном итоге, способствовать успеху бизнеса.
Но перед тщательным профилированием данных первым шагом в любом аудите качества данных является просмотр словаря данных: краткого описательного справочника, который определяет структуру, атрибуты и взаимосвязи элементов данных в наборе данных, служит руководством для понимания и интерпретации значения и цели данных.
После тщательного просмотра или создания словаря данных оценка полноты становится легкой задачей, если вы используете возможности библиотек с низким кодом, таких как Sweetviz, Missingno или Pandas_DQ.
import missingno as msno import sweetviz as sv from pandas_dq import dq_report # completeness check msno.matrix(df) # data profiling Report = sv.analyze(df) Report.show_notebook()
Лично я тяготею к комбинации Pandas-Matplotlib-Seaborn, поскольку она дает мне возможность полностью контролировать свой результат. Таким образом, я могу создать увлекательный и визуально привлекательный анализ.
# check for missing values import seaborn as sns import matplotlib.pyplot as plt def plot_missing_values(df: pd.DataFrame, title="Missing Values Plot"): plt.figure(figsize=(10, 6)) sns.displot( data=df.isna().melt(value_name="missing"), y="variable", hue="missing", multiple="fill", aspect=1.25 ) plt.title(title) plt.show() plot_missing_values(df)
Уникальность
Уникальность — это параметр качества данных, который подчеркивает отсутствие повторяющихся данных в столбцах с ограничением уникальности. Каждая запись должна представлять уникальный объект без избыточности. Например, список пользователей должен иметь уникальные идентификаторы для каждого зарегистрированного пользователя; несколько записей с одним и тем же идентификатором указывают на отсутствие уникальности.
В приведенном ниже примере я имитирую этап интеграции данных, заключающийся в объединении двух наборов данных с одинаковой структурой. Аргумент verify_integrity
функции concat Pandas выдает ошибку, если нарушена уникальность:
# verify integrity check df_loans = pd.concat([df, df_pdf], verify_integrity=True) # check duplicated ids df_loans[df_loans.duplicated(keep=False)].sort_index()
В идеале вы должны проверить наличие дублирования в рамках аудита качества данных.
def check_duplicates(df, col): ''' Check how many duplicates are in col. ''' # first step set index df_check = df.set_index(col) count = df_check.index.duplicated().sum() del df_check print("There are {} duplicates in {}".format(count, col))
Своевременность
Своевременность — это аспект качества данных, который фокусируется на доступности и частоте данных. Актуальные и легкодоступные данные необходимы для точного анализа и принятия решений. Например, своевременный отчет о продажах должен включать самые свежие данные, а не только данные за несколько месяцев до этого. Набор данных, который мы использовали до сих пор для примеров, не имеет временного измерения, чтобы мы могли более глубоко изучить каденцию.
Период действия
При переходе к концепции достоверности следует признать ее роль в обеспечении соответствия данных установленным правилам, форматам и стандартам. Валидность гарантирует соответствие схеме, ограничениям и типам данных, назначенным для набора данных. Для этого мы можем использовать мощную библиотеку Python Pydantic:
# data validation on the data dictionary from pydantic import BaseModel, Field, conint, condecimal, constr class LoanApplication(BaseModel): Loan_ID: int Gender: conint(ge=1, le=2) Married: conint(ge=0, le=1) Dependents: conint(ge=0, le=3) Graduate: conint(ge=0, le=1) Self_Employed: conint(ge=0, le=1) ApplicantIncome: condecimal(ge=0) CoapplicantIncome: condecimal(ge=0) LoanAmount: condecimal(ge=0) Loan_Amount_Term: condecimal(ge=0) Credit_History: conint(ge=0, le=1) Property_Area: conint(ge=1, le=3) Loan_Status: constr(regex="^[YN]$") # Sample loan application data loan_application_data = { "Loan_ID": 123456, "Gender": 1, "Married": 1, "Dependents": 2, "Graduate": 1, "Self_Employed": 0, "ApplicantIncome": 5000, "CoapplicantIncome": 2000, "LoanAmount": 100000, "Loan_Amount_Term": 360, "Credit_History": 1, "Property_Area": 2, "Loan_Status": "Y" } # Validate the data using the LoanApplication Pydantic model loan_application = LoanApplication(**loan_application_data)
После тестирования на примере мы можем запустить весь набор данных через проверку проверки, которая в случае успеха должна вывести «нет проблем с проверкой данных»:
# data validation on the data dictionary from pydantic import ValidationError from typing import List # Function to validate DataFrame and return a list of failed LoanApplication objects def validate_loan_applications(df: pd.DataFrame) -> List[LoanApplication]: failed_applications = [] for index, row in df.iterrows(): row_dict = row.to_dict() try: loan_application = LoanApplication(**row_dict) except ValidationError as e: print(f"Validation failed for row {index}: {e}") failed_applications.append(row_dict) return failed_applications # Validate the entire DataFrame failed_applications = validate_loan_applications(df_loans.reset_index()) # Print the failed loan applications or "No data quality issues" if not failed_applications: print("No data validation issues") else: for application in failed_applications: print(f"Failed application: {application}")
Мы можем сделать то же самое с pandas_dq, используя гораздо меньше кода:
from pandas_dq import DataSchemaChecker schema = { 'Loan_ID': 'int64', 'Gender': 'int64', 'Married': 'int64', 'Dependents': 'int64', 'Graduate': 'int64', 'Self_Employed': 'int64', 'ApplicantIncome': 'float64', 'CoapplicantIncome': 'float64', 'LoanAmount': 'float64', 'Loan_Amount_Term': 'float64', 'Credit_History': 'int64', 'Property_Area': 'int64', 'Loan_Status': 'object' } checker = DataSchemaChecker(schema) checker.fit(df_loans.reset_index())
Это возвращает простой для чтения отчет в стиле фрейма данных Pandas, в котором подробно описаны любые проблемы проверки. Я предоставил неверную схему, в которой int64
переменных указаны как float64
переменных. Библиотека правильно определила это:
Несоответствие типов данных устраняется одной строкой кода с использованием объекта проверки, созданного из класса DataSchemaChecker
:
# fix issues df_fixed = checker.transform(df_loans.reset_index())
Пидантик или pandas_dq?
Есть некоторые различия между Pydantic и pandas_dq:
- Декларативный синтаксис: возможно, Pydantic позволяет вам определять схему данных и правила проверки, используя более краткий и удобочитаемый синтаксис. Это может облегчить понимание и поддержку вашего кода. Я считаю очень полезным иметь возможность определять диапазоны возможных значений, а не просто тип данных.
- Встроенные функции проверки: Pydantic предоставляет различные мощные встроенные функции проверки, такие как
conint
,condecimal
иconstr
, которые позволяют применять ограничения к вашим данным без необходимости писать собственные функции проверки. - Комплексная обработка ошибок: при использовании Pydantic, если входные данные не соответствуют определенной схеме, создается
ValidationError
с подробной информацией об ошибках. Это может помочь вам легко определить проблемы с вашими данными и принять необходимые меры. - Сериализация и десериализация. Pydantic автоматически выполняет сериализацию и десериализацию данных, что упрощает работу с различными форматами данных (например, JSON) и преобразование между ними.
В заключение, Pydantic предлагает более лаконичный, многофункциональный и удобный подход к проверке данных по сравнению с классом DataSchemaChecker
из pandas_dq.
Pydantic, вероятно, является лучшим выбором для проверки вашей схемы данных в производственной среде. Но если вы просто хотите быстро приступить к работе с прототипом, вы можете предпочесть низкокодовую природу DataSchemaChecker.
.
Точность и согласованность
Есть еще 2 измерения качества данных, которые мы до сих пор не исследовали:
- Точность – это параметр качества данных, который определяет правильность данных, гарантируя, что они представляют реальные ситуации без ошибок. Например, точная база данных клиентов должна содержать правильные и актуальные адреса для всех клиентов.
- Последовательность связана с единообразием данных в разных источниках или наборах данных внутри организации. Данные должны быть согласованными с точки зрения формата, единиц и значений. Например, многонациональная компания должна сообщать данные о доходах в одной валюте, чтобы обеспечить согласованность между ее офисами в разных странах.
Вы можете проверить все проблемы с качеством данных, присутствующие в наборе данных, с помощью функции dq_report:
from pandas_dq import dq_report dq_report(df_loans.reset_index(), target=None, verbose=1)
Он обнаруживает следующие проблемы с качеством данных:
- Сильно связанные переменные (мультиколлинеарность)
- Столбцы без отклонений (избыточные функции)
- Асимметричное распределение данных (аномалии, выбросы и т. д.)
- Нечастые появления категории
Заключение
Проведение проверок качества данных имеет решающее значение для поддержания высококачественных наборов данных, что, в свою очередь, способствует принятию более эффективных решений и успеху в бизнесе. Python предлагает множество библиотек и инструментов, которые делают процесс аудита более доступным и эффективным.
Понимая и применяя концепции и методы, обсуждаемые в этой статье, вы будете хорошо подготовлены к тому, чтобы ваши наборы данных соответствовали необходимым стандартам качества для ваших проектов.
Ссылка на полный код: https://github.com/mohwarsame273/Medium-Articles/blob/main/DataQualityAudit.ipynb
Рекомендации
[1] Pydantic (2023): Документация https://docs.pydantic.dev/ (по состоянию на 24 апреля 2023 г.)
[2] Pandas_dq (2023): Документация https://github.com/AutoViML/pandas_dq (по состоянию на 24 апреля 2023 г.)
[3] Параметры качества данных (EDM Совета по управлению корпоративными данными): https://cdn.ymaws.com/edmcouncil.org/resource/resmgr/featured_documents/BP_DQ_Dimensions_Oct17.pdf (по состоянию на 24 апреля 2023 г.)
[4] Батини, К., Каппиелло, К., Франкаланчи, К., и Маурино, А. (2009). Методологии оценки и улучшения качества данных. Вычислительные опросы ACM (CSUR), 41(3), стр. 1–52.
[5] Гюнтер, Л. К., Коланджело, Э., Виндал, Х. Х. и Бауэр, К., (2019). Оценка качества данных для улучшения принятия решений: методология для малых и средних предприятий. Procedia Manufacturing, 29, стр. 583–591.