Veri Kalitesi ve Güvenirliliği için Great Expectations

Meraklı okurlarımıza tekrar merhaba!

Günümüzün veri odaklı dünyasında, verilerin kalitesini ve güvenilirliğini sağlamak işletmeler ve kuruluşlar için önemli bir hal almıştır.  Uygun doğrulama ve izleme mekanizmaları olmadan, veri tutarsızlıkları, yanlışlıklar ve anormallikler yanlış içgörüler edinerek hatalı karar vermeye, uygulamalarımızda istenmeyen sonuçların oluşmasına veya önemli mali kayıplara yol açabilmektedir.  Bilgi (yani verilerimiz) ancak yüksek kalitede olduğu durumda değer elde etmemiz mümkün olmaktadır.  Bu yüzden veri kalitesini test edebilmek için, verilerle ilgili beklentilerin tanımlanmasına, doğrulanmasına ve sürdürülmesine olanak tanıyan araçlara ihtiyaç doğmuştur.  Bugün bu araçlardan adını sık bir şekilde duyduğumuz, Great Expectations’u tanıyacağız ve yine her zaman yaptığımız gibi bir örnek ile neler sağladığını birlikte keşfedeceğiz. 

Ancak öncesinde veri kalitesinin belirleyici unsurlarına ve test aşamalarına kısaca değinmek istiyorum.

Veri kalitesini değerlendirirken, verinin aşağıdaki 6 özelliği sağlamasına odaklanılmaktadır. 

  • Kesinlik (Accuracy): Verinin gerçeklikle ilişki derecesi
  • Bütünlük (Completeness): Verinin belirli bir amaç için tüm ilgili ve gerekli bilgilere ne ölçüde sahip olduğu
  • Tutarlılık (Consistency): Verinin bulunduğu/kayıtlı olduğu tüm ortamlarda aynı olması
  • Zamanlılık (Timeliness): Veriye istenilen her zamanda ulaşılabiliyor olması
  • Geçerlilik(Validity): Verinin belirlenen formatta olması ve iş standartlarına uygunluğu
  • Eşsizlik(Uniqueness): Verinin yinelenmemesi veya çakışmaması

Test süreci ise, aşağıdaki evrelerde gerçekleştirilebilmektedir.

  • Veri ilgili kaynaktan alınırken test etmek
  • Verileri dönüşüm sırasında test etmek

Peki, gelelim bu değerlendirmeleri yapmamızı sağlayan ve ilgili testlerde bize yardımcı olan bugünün kahramanına 👇🤩

Great Expectations Nedir?

Charles Dickens’in ünlü kitabıyla aynı ismi taşıyan, veri kalitesini sürdürmek ve ilgili ekipler arasındaki iletişimi geliştirmek için veri doğrulamayı, belgelemeyi, profil oluşturmayı sağlayan açık kaynaklı bir Python kütüphanesidir.  Geleneksel birim testlerinden farklı olarak GX, testleri kod yerine verilere uygular.

Bu kütüphane hakkında öncelikle bilmemiz gereken anahtar bileşenler mevcut.  Bu bileşenler hakkında ön bilgi edinmek GX’in çalışma mantığını ve temel özelliklerini anlamak açısından önemlidir. Bu yüzden bir kısmının üzerinden kısaca geçelim. (Daha fazla bileşen incelemek için de GX’in sitesindeki sözlüğe bakmanızı tavsiye ederim.)

  • Expectation: Veriler için doğrulanabilir bir iddia/sav.
  • Data Context: “Datasource”, “Expectations”, “Profilers”ve “Checkpoints” gibi tüm destekleyici bileşenler için yapılandırmalar ve yöntemlerle GX dağıtımı için birincil -giriş noktası-.
  • Data Docs: GX’in meta verilerinden oluşturulan ve “Expectations”, “Validation Results” vb. bileşenleri detaylandıran, rahatlıkla okunabilen belgeler.
  • Datasource: Çok çeşitli kaynak sistemlerden gelen verilere erişmek ve bunlarla etkileşim kurmak için standart bir API.
  • Validator: Verilere karşı bir “Expectation Suite” çalıştırmayı sağlayan nesne.
  • Checkpoint: GX’in üretim dağıtımındaki verileri doğrulamanın birincil yolu.
  • Expectation Suite: Veriler hakkında doğrulanabilir iddiaların bir koleksiyonu.

Bu bileşenler şu an için karışık geldiyse bu çok normal.  Gelin bir örnek çalışma ile biraz daha bu kavramları anlamaya çalışalım.👓

Örnek Çalışma

Bu çalışmada kullandığım araçlar:

  • Python 3.8 (GX Python 3.8 ve üzeri ile çalışmaktadır)
  • JupyterLab

Adımlar:

  • Kütüphanenin indirilmesi
  • Data Context oluşturulması
  • Validator oluşturulması
  • Expectation’ların tanımlanması ve Expectation Suite’e kaydedilmesi
  • Checkpoint oluşturulması
  • Verinin doğrulanması ve sonuçların görüntülenmesi

Öncelikle great_expectations kütüphanesini indirmemiz gerekiyor.

pip install great_expectations

JupyterLab kullanarak bir Notebook oluşturacağız ve aşağıdaki modülleri içe aktaracağız.

import great_expectations as gx
from great_expectations.data_context import FileDataContext

Daha önce bir Filesystem Data Context oluşturmadığımızı varsayarak, bir klasör belirleyeceğiz.  Ardından Data Context oluşturacağız.

path_to_empty_folder = "/gx_example"
context = FileDataContext.create(project_root_dir=path_to_empty_folder)
Şekil-1: Modülleri içe aktarma ve Data Context oluşturma

Bu işlemi yaptıktan sonra lokalimizde otomatik olarak bir dosya sistemi oluştuğunu göreceğiz. Yazının başında bahsettiğim şekilde, Data Context, Expectation’lar , Metadata Store’ları , Data Docs, Checkpoint’ler ve GX ile çalışmak için gerekli tüm yapılandırmaları içeriyor olacak.

Şekil-2: Filesystem Data Context yapısı

Şimdi GX tarafından Github’da depolanan bir csv verisine bağlantı kuracağız ve Validator nesnesi oluşuracağız.  (bir veri tabanını ve dosya sistemini Datasource olarak tanımlamak da mümkün.) Validator, GX’in yine temel bir işlevsel bileşenidir. Ek yapılandırma gerektirmez.

validator = context.sources.pandas_default.read_csv(
    "https://raw.githubusercontent.com/great-expectations/gx_tutorials/main/data/yellow_tripdata_sample_2019-01.csv"
)

Sonrasında ise Expectation metodlarını uygulayacağız.  Burada, “pickup_datetime” sütununda -null- veri olmaması gerektiğini ve “passenger_count” sütununda ise değerlerin -1 ve 6- arasında olması gerektiğini belirliyoruz.  Yani “beklentimiz” bu şekilde🧐

validator.expect_column_values_to_not_be_null("pickup_datetime") 
validator.expect_column_values_to_be_between("passenger_count", min_value=1, max_value=6)

Şimdi, Expectation’ları bir Expectation Suite’e kaydedeceğiz. Expectation Suite’ler, bir Expectation Store‘da depolanır.  Bir Validator kullanılarak etkileşimli olarak veya Profiler kullanılarak otomatik olarak oluşturulurlar ve Checkpoint tarafından verileri doğrulamak için kullanılırlar.  Dilersek Expectation Store konumu olarak lokal dosya sisteminden farklı bir konum da belirleyebiliriz.

validator.save_expectation_suite()
Şekil-3: Validator oluşturma, Expectation tanımlama ve Expectation Suit’e kaydetme

Expectations klasörü altında, default.json dosyasında (başka bir isim belirtmediğimiz için default) bu Expectation’ların kaydedildiğini göreceğiz.

Şekil-4: Expectation Suite json dosyası

Şimdi bir de Checkpoint oluşturacağız.  Checkpoint’ler , bir Expectation Suit’e (veya birkaçına) karşı bir Batch’in (veri grubu veya gruplarının) doğrulamasını ve ayrıca doğrulamadan sonra alınması gereken Action‘ları gruplandırmak için bir soyutlama sağlar.

Bu sefer isim verelim😅

checkpoint = context.add_or_update_checkpoint(
    name="my_quickstart_checkpoint",
    validator=validator,
)

Aşağıda ilgili checkpointe ait konfigürasyonları görebilmekteyiz. (JupyterLab’dan ilgili dosyaya erişemediğim için terminali kullanarak, oluşan Checkpointe ait görseli paylaşıyorum). Checkpoint’ler de bir Data Context kullanılarak yönetilir ve yapılandırmalarını .yaml dosyalarında kalıcı hale getirmek için kullanılan kendi Store‘larına sahiptir.

Artık doğrulama işlemlerinin sonucunu almak için, aşağıdaki şekilde run() metodunu uygulayabiliriz.

checkpoint_result = checkpoint.run()

Ve sonuçları Data Docs ile görüntüleyebiliriz.

context.view_validation_result(checkpoint_result)

Komutu çalıştırdığınızda, otomatik olarak web tarayıcısında bir sekme açılacaktır.

Şekil-5: Data Docs web sayfası açılışı

Ve görüyoruz ki, örneğin passenger_count sütununda, beklentilerimizi karşılamayan bir durum gerçekleşmemiş.😉

Şekil-6: Data Docs

(Burada açılan url’in “/gx_example/great_expectations/uncommitted/data_docs/local_site/validations/default/__none__/…..”  şeklinde olduğunu göreceksiniz.  İlgili Data Docs’lar uncommitted klasörünün altında depolanmaktadır.  Dilersek yine Data Docs Store konumunu da great_expectations.yaml dosyasında değiştirebiliriz, böylece farklı bir hedefe kaydedebiliriz.)

Great Expectation’s ile ilgili daha çok konuşulacak şey var, ancak temel çalışma sisteminin zihninizde canlanmasına yardımcı olduğumu umuyorum.  Bahsettiğim gibi kavramlar ilk başta karışık gelse de kullandıkça biraz daha aşina olunuyor.  Oluşturduğu dosya sistemi,  pratik bir şekilde doğrulama sonuçlarını görüntüleyebilme, beklentileri gruplayabilme (başka veri kaynakları ile de kullanabilme),  farklı bir çok araç ile entegrasyon imkanı gibi sebeplerle güçlü bir kütüphane.

Bu kadar “Great Expectations” demişken, ilk fırsatta Charles Dickens’in kitabını da okuyalım derim, ne dersiniz😉?  Yeni yazılarda görüşmek üzere!✌️

Kaynaklar:

https://docs.greatexpectations.io/docs/

https://senthilnayagan.com/data-quality/2023/gx-takes-great-care-with-data-quality

Yazar Hakkında
Toplam 7 yazı
Elif Sinem AKTAŞ
Elif Sinem AKTAŞ
DataLonga'da Data Engineer olarak çalışmaktadır. Teknolojiye ve veri bilimine olan ilgisi sebebiyle çıktığı yolda, günümüzün yeniliklerine yönelik gelişmeye ve öğrendiklerini paylaşmaya devam etmektedir.
Yorumlar (Yorum yapılmamış)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara