paint-brush
Перевірка якості для великих наборів даних за допомогою Deequ та статистичних методівза@akshayjain1986
42,029 показання
42,029 показання

Перевірка якості для великих наборів даних за допомогою Deequ та статистичних методів

за Akshay Jain7m2024/05/30
Read on Terminal Reader
Read this story w/o Javascript

Надто довго; Читати

Бібліотека Deequ — це платформа профілювання даних і забезпечення якості з відкритим кодом, створена на базі Spark. Він дозволяє визначати комплексні правила перевірки, адаптовані до ваших конкретних вимог, забезпечуючи повне охоплення. Deequ має широкі показники та можливості виявлення аномалій, які допоможуть вам визначити та завчасно вирішувати проблеми з якістю даних. Ось як ви можете реалізувати ці перевірки за допомогою Deequ.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Перевірка якості для великих наборів даних за допомогою Deequ та статистичних методів
Akshay Jain HackerNoon profile picture

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


У цій статті я досліджую надійні методи виконання перевірок якості великих наборів даних за допомогою бібліотеки Deequ і статистичних методів. Комбінуючи підходи, які я поясню нижче, ви зможете підтримувати цілісність даних, вдосконалювати методи керування даними та запобігати потенційним проблемам у подальших програмах.

Перевірки якості за допомогою бібліотеки Deequ

Чому Deequ?

Забезпечення якості даних у великому масштабі є складним завданням, особливо коли мова йде про мільярди рядків, що зберігаються в розподілених файлових системах або сховищах даних. Бібліотека Deequ — це платформа для профілювання даних і забезпечення якості з відкритим кодом, створена на базі Spark, що є сучасним і універсальним інструментом, призначеним для вирішення цієї проблеми. Що відрізняє його від подібних інструментів, так це його здатність легко інтегруватися з Spark, використовуючи потужність розподіленої обробки для ефективної обробки великомасштабних наборів даних.


Спробувавши його, ви побачите, як його гнучкість дозволяє визначати складні правила перевірки, адаптовані до ваших конкретних вимог, забезпечуючи повне покриття. Крім того, Deequ має розширені показники та можливості виявлення аномалій, які допоможуть вам визначити та завчасно вирішувати проблеми з якістю даних. Для спеціалістів із обробки даних, які працюють із великими та динамічними наборами даних, Deequ — це рішення «швейцарського ножа». Давайте подивимося, як ми можемо цим скористатися.

Налаштування Deequ

Додаткові відомості про налаштування бібліотеки Deequ і сценарії використання профілювання даних доступні тут . Для простоти в цьому прикладі ми просто згенерували кілька записів іграшок:


 val rdd = spark.sparkContext.parallelize(Seq( Item(1, "Thingy A", "awesome thing.", "high", 0), Item(2, "Thingy B", "available at http://thingb.com", null, 0), Item(3, null, null, "low", 5), Item(4, "Thingy D", "checkout https://thingd.ca", "low", 10), Item(5, "Thingy E", null, "high", 12))) val data = spark.createDataFrame(rdd)


Визначення припущень щодо даних

Більшість програм для роботи з даними постачаються з неявними припущеннями щодо атрибутів даних, таких як значення, відмінні від NULL, і унікальність. З Deequ ці припущення стають явними через модульні тести. Ось кілька поширених перевірок:


  1. Кількість рядків: переконайтеся, що набір даних містить певну кількість рядків.


  2. Повнота атрибутів: переконайтеся, що такі атрибути, як id і productName, ніколи не мають значення NULL.


  3. Унікальність атрибутів: переконайтеся, що певні атрибути, наприклад id, є унікальними.


  4. Діапазон значень: переконайтеся, що такі атрибути, як пріоритет і numViews, належать до очікуваних діапазонів.


  5. Зіставлення шаблонів: переконайтеся, що описи містять URL-адреси, коли очікується.


  6. Статистичні властивості: переконайтеся, що медіана числових атрибутів відповідає певним критеріям.


Ось як ви можете реалізувати ці перевірки за допомогою Deequ:


 import com.amazon.deequ.VerificationSuite import com.amazon.deequ.checks.{Check, CheckLevel, CheckStatus} val verificationResult = VerificationSuite() .onData(data) .addCheck( Check(CheckLevel.Error, "unit testing my data") .hasSize(_ == 5) // we expect 5 rows .isComplete("id") // should never be NULL .isUnique("id") // should not contain duplicates .isComplete("productName") // should never be NULL // should only contain the values "high" and "low" .isContainedIn("priority", Array("high", "low")) .isNonNegative("numViews") // should not contain negative values // at least half of the descriptions should contain a url .containsURL("description", _ >= 0.5) // half of the items should have less than 10 views .hasApproxQuantile("numViews", 0.5, _ <= 10)) .run()


Інтерпретація результатів

Після запуску цих перевірок Deequ перетворює їх у серію завдань Spark, які він виконує для обчислення показників даних. Після цього він викликає ваші функції твердження (наприклад, _ == 5 для перевірки розміру) для цих показників, щоб побачити, чи обмеження зберігаються на даних. Ми можемо перевірити об’єкт verificationResult, щоб перевірити, чи знайдено тестом помилки:


 import com.amazon.deequ.constraints.ConstraintStatus if (verificationResult.status == CheckStatus.Success) { println("The data passed the test, everything is fine!") } else { println("We found errors in the data:\n") val resultsForAllConstraints = verificationResult.checkResults .flatMap { case (_, checkResult) => checkResult.constraintResults } resultsForAllConstraints .filter { _.status != ConstraintStatus.Success } .foreach { result => println(s"${result.constraint}: ${result.message.get}") } }


Якщо ми запустимо приклад, ми отримаємо такий результат:


 We found errors in the data: CompletenessConstraint(Completeness(productName)): Value: 0.8 does not meet the requirement! PatternConstraint(containsURL(description)): Value: 0.4 does not meet the requirement!


Тест виявив, що наші припущення були порушені! Лише 4 із 5 (80%) значень атрибута productName не є нульовими, і лише 2 із 5 (тобто 40%) значень атрибута description містили URL-адресу. На щастя, ми провели тест і знайшли помилки; хтось повинен негайно виправити дані!

Перевірка якості статистичними методами

Хоча Deequ пропонує надійну структуру для перевірки даних, інтеграція статистичних методів може ще більше покращити ваші перевірки якості, особливо якщо ви маєте справу з агрегованими показниками набору даних. Давайте подивимося, як ви можете використовувати статистичні методи для моніторингу та забезпечення якості даних.

Відстеження кількості записів

Розглянемо бізнес-сценарій, у якому процес ETL (Extract, Transform, Load) створює N записів для щоденного запланованого завдання. Групи підтримки можуть захотіти налаштувати перевірку якості, щоб повідомити про значне відхилення в кількості записів. Наприклад, якщо процес зазвичай створює від 9500 до 10 500 записів щодня протягом двох місяців, будь-яке значне збільшення або зменшення може свідчити про проблему з основними даними.


Ми можемо використати статистичний метод, щоб визначити цей поріг, коли процес має повідомити групу підтримки. Нижче наведено ілюстрацію відстеження кількості записів за два місяці:











Щоб проаналізувати це, ми можемо трансформувати дані про кількість записів, щоб спостерігати за щоденними змінами. Ці зміни зазвичай коливаються навколо нуля, як показано на наступній діаграмі:












Коли ми представляємо цю швидкість зміни за допомогою нормального розподілу, вона утворює дзвоноподібну криву, яка вказує на те, що дані розподілені нормально. Очікувана зміна становить близько 0%, зі стандартним відхиленням 2,63%.













Цей аналіз свідчить про те, що кількість записів зазвичай знаходиться в діапазоні від -5,26% до +5,25% з 90% достовірністю. Виходячи з цього, ви можете встановити правило для попередження, якщо кількість записів виходить за межі цього діапазону, забезпечуючи своєчасне втручання.

Відстеження покриття атрибутів

Покриття атрибута стосується співвідношення значень, відмінних від NULL, до загальної кількості записів для знімка набору даних. Наприклад, якщо 8 із 100 записів мають значення NULL для певного атрибута, охоплення для цього атрибута становить 92%.


Давайте розглянемо інший бізнес-випадок із процесом ETL, який щодня створює знімок таблиці продуктів. Ми хочемо контролювати охоплення атрибутів опису товару. Якщо охоплення падає нижче певного порогу, команді підтримки слід повідомити про це. Нижче наведено візуальне представлення охоплення атрибутів для описів продуктів за два місяці:









Аналізуючи абсолютні щоденні відмінності в охопленні, ми бачимо, що зміни коливаються навколо нуля:










Представлення цих даних у вигляді нормального розподілу показує, що вони розподіляються нормально з очікуваною зміною близько 0% і стандартним відхиленням 2,45%.















Як ми бачимо, для цього набору даних охоплення атрибута опису продукту зазвичай коливається від -4,9% до +4,9% з достовірністю 90%. На основі цього індикатора ми можемо встановити правило для попередження, якщо покриття виходить за межі цього діапазону.

Перевірка якості за допомогою алгоритмів часових рядів

Якщо ви працюєте з наборами даних, які показують значні варіації через такі фактори, як сезонність або тенденції, традиційні статистичні методи можуть викликати помилкові сповіщення. Алгоритми часових рядів пропонують більш витончений підхід, покращуючи точність і надійність ваших перевірок якості.


Щоб створювати більш розумні сповіщення, ви можете використовувати будь-який з них Авторегресійне інтегроване ковзне середнє (ARIMA) або Метод Холта-Уінтерса . Перший досить хороший для наборів даних із тенденціями, але другий дозволяє працювати з наборами даних як з трендом, так і з сезонністю. Цей метод використовує компоненти для рівня, тренду та сезонності, що дозволяє йому гнучко адаптуватися до змін із часом.


Давайте змоделюємо щоденні продажі, які відображають як тенденції, так і сезонні закономірності, використовуючи Holt-Winters:

 import pandas as pd from statsmodels.tsa.holtwinters import ExponentialSmoothing # Load and preprocess the dataset data = pd.read_csv('sales_data.csv', index_col='date', parse_dates=True) data = data.asfreq('D').fillna(method='ffill') # Fit the Holt-Winters model model = ExponentialSmoothing(data, trend='add', seasonal='add', seasonal_periods=365) fit = model.fit() # Forecast and detect anomalies forecast = fit.fittedvalues residuals = data - forecast threshold = 3 * residuals.std() anomalies = residuals[abs(residuals) > threshold] print("Anomalies detected:") print(anomalies)


Використовуючи цей метод, ви можете виявити значні відхилення, які можуть вказувати на проблеми з якістю даних, забезпечуючи більш тонкий підхід до перевірок якості.


Я сподіваюся, що ця стаття допоможе вам ефективно реалізувати перевірку якості для великих наборів даних. За допомогою бібліотеки Deequ та інтеграції статистичних методів і алгоритмів часових рядів ви можете забезпечити цілісність і надійність даних, що в кінцевому підсумку покращить ваші методи управління даними.


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

L O A D I N G
. . . comments & more!

About Author

Akshay Jain HackerNoon profile picture
Akshay Jain@akshayjain1986
Data Engineering Manager at Innovate UK

ПОВІСИТИ БИРКИ

ЦЯ СТАТТЯ БУЛА ПРЕДСТАВЛЕНА В...