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)
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.
Ş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()
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.
Ş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.
Ve görüyoruz ki, örneğin passenger_count sütununda, beklentilerimizi karşılamayan bir durum gerçekleşmemiş.😉
(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