Program
Veri kalitesi ve tutarlılığı bir evin temeli gibidir—sağlam bir temel olmadan üzerine inşa edilen her şeyin çökme riski vardır. İşte bu noktada veri doğrulama önemli bir rol oynar. Veri doğrulama, verilerinizin doğru, tutarlı ve güvenilir olduğundan emin olmanıza yardımcı olur.
Great Expectations, veri sorunlarını erken aşamada tespit etmenizi sağlayan ve verilerinizin gerekli kalite standartlarını karşılamasını güvence altına alan açık kaynaklı bir veri doğrulama aracıdır.
Bu rehberde, Great Expectations’ı veri doğrulama için nasıl kullanacağınızı adım adım anlatacağız ve başlamanıza yardımcı olacak uçtan uca pratik bir örnek sunacağız!
Great Expectations nedir?
Great Expectations (GX), modern veri hatlarında veri doğrulamasını yönetmek ve otomatikleştirmek için popüler hale gelmiş açık kaynaklı bir çerçevedir.
Python tabanlı çerçevesi, veri ekiplerinin verilerinin kalitesini ve tutarlılığını garanti etmesine yardımcı olacak şekilde tasarlanmıştır. Kullanıcılar, geçerli verinin nasıl görünmesi gerektiğini tanımlayan kurallar ya da testler olan "beklentiler" tanımlayabilir ve bu kurallar, verinin bu standartları karşılayıp karşılamadığını otomatik olarak doğrular.
Great Expectations’ın bazı faydaları şunlardır:
- Otomatik veri doğrulama – Great Expectations, veri doğrulama sürecini otomatikleştirerek manuel çabayı azaltır ve hata riskini en aza indirir. Verinin önceden tanımlanmış standartları tutarlı şekilde karşılamasını sağlar.
- Veri hatlarıyla entegrasyon – SQL veritabansları, bulut depolama ve ETL araçları dahil çeşitli veri kaynakları ve platformlarla kolayca entegre olur; böylece veri hattınızın farklı aşamalarında veri doğrulaması yapmanızı sağlar.
- Açık ve eyleme dönük doğrulama sonuçları – Araç, veri kalitesi sorunlarını kolayca fark edip hızla çözmenizi sağlayan şeffaf doğrulama sonuçları sunar.
- Veri dokümantasyonu – Great Expectations, veri doğrulama süreçlerinizin ayrıntılı ve erişilebilir dokümantasyonunu üretebilir; bu da ekiplerin kalite standartlarında hizalanmasına yardımcı olur ve gelecekte referans sağlar.
- Ölçeklenebilirlik ve esneklik – Açık kaynaklı bir araç olarak Great Expectations yüksek derecede özelleştirilebilir ve veri doğrulama ihtiyaçlarınızla birlikte ölçeklenebilir; farklı kullanım senaryolarına yüksek maliyetler olmadan uyum sağlayacak esnekliği sunar.
Şimdi uçtan uca bir örneğe bakalım!
Great Expectations’ı Kurma
Bu eğitimde, bir Pandas DataFrame’ini doğrulamak için Great Expectations’ın açık kaynak sürümü olan GX Core’u nasıl kullanacağınızı öğreneceksiniz. Bir context kurmayı, bir Pandas veri kaynağı kaydetmeyi, beklentileri tanımlamayı ve veri yığınlarını (batch) doğrulamayı adım adım inceleyeceğiz.
Not: DataLab not defteri ile birlikte ilerlemenizi öneririz; ancak kendi Python script’inizi de oluşturabilirsiniz.
1. Great Expectations’ı yükleme
Önkoşullar
- Python 3.9 - 3.12 kurulu olmalı.
- Çakışmaları önlemek için, Great Expectations’ı bir sanal ortam içinde kurmanız şiddetle tavsiye edilir (uyarı: sanal ortamların kurulumu bu makalenin kapsamı dışındadır).
- Örnek bir veri seti.
Not: Verilen DataLab not defterini kullanıyorsanız, bu önkoşullar zaten sağlanmıştır. Bu adımları atlayabilirsiniz.
GX’i pip ile kurmak için aşağıdaki komutu kullanın:
pip install great_expectations
Bu komut çekirdek paketi ve gerekli tüm bağımlılıkları kurar.
2. Veri bağlamını (data context) başlatma
Great Expectations yapılandırmaları yönetmek için bir veri bağlamına ihtiyaç duyar. Yapılandırmaları kalıcı hale getirmemek için geçici (ephemeral) bir veri bağlamı kullanıyoruz.
import great_expectations as gx
# Get the Ephemeral Data Context
context = gx.get_context()
assert type(context).__name__ == "EphemeralDataContext"
İlk Veri Doğrulama Paketinizi (Suite) Oluşturma
GX artık kurulduğuna göre bir veri doğrulama paketi oluşturalım.
1. Veri kaynağına bağlanma ve veri varlığı (asset) oluşturma
Bir veri kaynağı, Great Expectations’ı verinize bağlar; bir veri varlığı ise belirli bir veri alt kümesini (ör. tablo, DataFrame veya dosya) temsil eder.
Bu örnekte, inventory_parts_df adlı bir DataFrame’e bağlanmak üzere her şeyi hazırlayacağız. Örnek veri seti verilen DataLab’de mevcuttur ve SQL bloğunu çalıştırdığımızda oluşturulur:

DataLab kullanmıyorsanız, örnek verilerle kendi DataFrame’inizi oluşturun.
Şimdi veri kaynağınızı ve varlığınızı oluşturun:
# Add a Pandas Data Source
data_source = context.data_sources.add_pandas(name="inventory_parts")
# Add a Data Asset to the Data Source
data_asset = data_source.add_dataframe_asset(name="inventory_parts_asset")
2. Bir batch tanımı ekleme
Bir batch tanımı, verinizi doğrulama için tanımlar ve düzenler. Burada, tüm DataFrame’i kapsayan bir batch tanımı ekliyoruz:
# Define the Batch Definition name
batch_definition_name = "inventory_parts_batch"
# Add the Batch Definition
batch_definition = data_asset.add_batch_definition_whole_dataframe(batch_definition_name)
assert batch_definition.name == batch_definition_name
3. Bir batch alma
Batch, bir batch tanımına bağlı bir veri koleksiyonudur. Veriyi doğrulamak için, batch’i alıp DataFrame’inize bağlamanız gerekir; bu durumda inventory_parts_df:
# Define the Batch Parameters
batch_parameters = {"dataframe": inventory_parts_df}
# Retrieve the Batch
batch = batch_definition.get_batch(batch_parameters=batch_parameters)
4. Bir suite oluşturma ve beklentileri tanımlama
Beklentiler, veriyi doğrulamak için kullanılan kurallardır. Bu örnekte aşağıdaki basit beklentileri tanımlayacağız:
inventory_iddeğerlerinin boş olmamasını (non-null) sağlayın.part_numdeğerlerinin benzersiz olmasını sağlayın.
# Create an Expectation Suite
expectation_suite_name = "inventory_parts_suite"
suite = gx.ExpectationSuite(name=expectation_suite_name)
# Add Expectations
suite.add_expectation(
gx.expectations.ExpectColumnValuesToNotBeNull(column="inventory_id")
)
suite.add_expectation(
gx.expectations.ExpectColumnValuesToBeUnique(column="part_num")
)
# Add the Expectation Suite to the Context
context.suites.add(suite)
Mevcut tüm beklentileri Expectation Gallery’de inceleyebilirsiniz. Birkaç tane daha eklemenizi öneririz!
Beklentileri tanımladıktan sonra, GX beklenti paketi yapılandırmasını çıktılar:
{
"name": "inventory_parts_suite",
"id": "b2de0b69-0869-4163-8dde-6c09884483f7",
"expectations": [
{
"type": "expect_column_values_to_not_be_null",
"kwargs": {
"column": "inventory_id"
},
"meta": {},
"id": "53d6c42a-d190-412f-a113-783b706531f4"
},
{
"type": "expect_column_values_to_be_unique",
"kwargs": {
"column": "part_num"
},
"meta": {},
"id": "362a2bdc-616d-4b3a-b7f0-c73808caee78"
}
],
"meta": {
"great_expectations_version": "1.2.4"
},
"notes": null
}
Suite aşağıdaki ayrıntıları içerir:
- Suite adı ve kimliği: Suite’i izlemek ve yönetmek için benzersiz bir ad (
inventory_parts_suite) ve tanımlayıcı. - Beklentiler: Her kural şu bilgileri belirtir:
- Yapılacak kontrolün türü (ör. bir sütunda boş değer olmamasını veya benzersiz girişler olmasını sağlama).
- Doğrulanan sütun gibi parametreler.
- Takibi ve özelleştirmeyi kolaylaştıran her beklenti için metadata ve benzersiz bir kimlik.
- Metadata: Aracın sürüm bilgisi; Great Expectations ile uyumluluğu güvence altına alır.
- Notlar: Suite hakkında açıklayıcı yorumlar eklemek için alan (opsiyonel).
Bu yapılandırılmış çıktı, hem dokümantasyon hem de veri kümenizi doğrulamak için yeniden kullanılabilir bir yapılandırma işlevi görür; böylece beklentileriniz net, izlenebilir ve gelecekte kullanıma hazır olur.
5. Veriyi doğrulama
Son olarak, tanımlanan beklentilere karşı batch’i doğrulayın ve sonuçları değerlendirin.
# Validate the Data Against the Suite
validation_results = batch.validate(suite)
# Evaluate the Results
print(validation_results)
Doğrulamayı çalıştırdıktan sonra Great Expectations, veri kümesinin tanımlanan beklentileri karşılayıp karşılamadığına ilişkin ayrıntılı bir rapor sunar:
{
"success": false,
"results": [
{
"success": true,
"expectation_config": {
"type": "expect_column_values_to_not_be_null",
"kwargs": {
"batch_id": "inventory_parts-inventory_parts_asset",
"column": "inventory_id"
},
"meta": {},
"id": "53d6c42a-d190-412f-a113-783b706531f4"
},
"result": {
"element_count": 580069,
"unexpected_count": 0,
"unexpected_percent": 0.0,
"partial_unexpected_list": [],
"partial_unexpected_counts": [],
"partial_unexpected_index_list": []
},
"meta": {},
"exception_info": {
"raised_exception": false,
"exception_traceback": null,
"exception_message": null
}
},
{
"success": false,
"expectation_config": {
"type": "expect_column_values_to_be_unique",
"kwargs": {
"batch_id": "inventory_parts-inventory_parts_asset",
"column": "part_num"
},
"meta": {},
"id": "362a2bdc-616d-4b3a-b7f0-c73808caee78"
},
"result": {
"element_count": 580069,
"unexpected_count": 568352,
"unexpected_percent": 97.98006788847535,
"partial_unexpected_list": [
"48379c01",
"paddle",
"11816pr0005",
"2343",
"3003",
"30176",
"3020",
"3022",
"3023",
"30357",
"3039",
"3062b",
"3068b",
"3069b",
"3069b",
"33291",
"33291",
"3795",
"3941",
"3960"
],
"missing_count": 0,
"missing_percent": 0.0,
"unexpected_percent_total": 97.98006788847535,
"unexpected_percent_nonmissing": 97.98006788847535,
"partial_unexpected_counts": [
{
"value": "3069b",
"count": 2
},
{
"value": "33291",
"count": 2
},
{
"value": "11816pr0005",
"count": 1
},
{
"value": "2343",
"count": 1
},
{
"value": "3003",
"count": 1
},
{
"value": "30176",
"count": 1
},
{
"value": "3020",
"count": 1
},
{
"value": "3022",
"count": 1
},
{
"value": "3023",
"count": 1
},
{
"value": "30357",
"count": 1
},
{
"value": "3039",
"count": 1
},
{
"value": "3062b",
"count": 1
},
{
"value": "3068b",
"count": 1
},
{
"value": "3795",
"count": 1
},
{
"value": "3941",
"count": 1
},
{
"value": "3960",
"count": 1
},
{
"value": "48379c01",
"count": 1
},
{
"value": "paddle",
"count": 1
}
],
"partial_unexpected_index_list": [
0,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21
]
},
"meta": {},
"exception_info": {
"raised_exception": false,
"exception_traceback": null,
"exception_message": null
}
}
],
"suite_name": "inventory_parts_suite",
"suite_parameters": {},
"statistics": {
"evaluated_expectations": 2,
"successful_expectations": 1,
"unsuccessful_expectations": 1,
"success_percent": 50.0
},
"meta": {
"great_expectations_version": "1.2.4",
"batch_spec": {
"batch_data": "PandasDataFrame"
},
"batch_markers": {
"ge_load_time": "20241129T122532.416424Z",
"pandas_data_fingerprint": "84a1e1939091fcf54324910def3b89cd"
},
"active_batch_definition": {
"datasource_name": "inventory_parts",
"data_connector_name": "fluent",
"data_asset_name": "inventory_parts_asset",
"batch_identifiers": {
"dataframe": "<DATAFRAME>"
}
}
},
"id": null
}
Bu rapor, verinizin kalitesini özetleyerek başarılı ve başarısız noktaları vurgular. İşte sonuçların basitleştirilmiş bir açıklaması:
Genel doğrulama: Doğrulama sonucu kısmen başarılı oldu: Beklentilerin %50’si geçti, %50’si başarısız oldu. Başarısız bir beklenti, dikkat gerektiren bir veri kalitesi sorununa işaret eder. Bu durumda bir sütun tanımlanan kurala uymadı.
Beklenti 1: inventory_id sütununda eksik değer olmamalı
- Sonuç: Geçti
- Açıklama:
inventory_idsütunundaki her değer mevcut; null ya da eksik kayıt yok. Bu, bu sütun için iyi bir veri tamlığına işaret eder.
Beklenti 2: part_num değerleri benzersiz olmalı
- Sonuç: Başarısız
- Açıklama:
part_numsütunu %97,98 oranında yinelenen değer içeriyor; yani çok az değer benzersiz. - Öne çıkanlar:
- "3069b" ve "33291" gibi yinelenen değerlere örnekler.
- Araç, bu yinelenen değerlerin ne sıklıkta göründüğünü ve satır konumlarını da gösterir; böylece sorunları bulup düzeltmek kolaylaşır.
Elbette bu yalnızca örnek bir veri seti; hem geçen hem de kalan bir beklentiyi bilerek dahil ettik ki iki doğrulama sonucunu da görebilin.
Hepsi bu! Uçtan uca veri doğrulamalarını başarıyla çalıştırdınız.
Great Expectations’ı Veri Hatlarına Entegre Etme
Canlı (üretim) ortamlarda, doğrulamaların iş akışına doğrudan yerleştirilmesi ve her aşamada veri kalitesinin sürekli izlenmesi gerekir.
Bu bölümde, Great Expectations’ı veri hatlarınıza nasıl entegre edebileceğinizi tartışacağız.
Bunlar fikir vermesi için örneklerdir; burada yer almayan ek yapılandırmalar gerekebilir. Güncel sözdizimi için her aracın dokümantasyonuna göz atın!
ETL araçlarıyla entegrasyon
Great Expectations’ı Apache Airflow veya Prefect gibi popüler ETL araçlarıyla entegre etmek nispeten kolaydır. Doğrulama adımlarını doğrudan ETL süreçlerine gömmek, veri sorunlarını aşağı akıştaki analizleri etkilemeden önce gerçek zamanlı olarak yakalayıp ele almanızı sağlar.
Great Expectations’ı Prefect ile entegre ederek otomatik bir ETL iş akışının parçası olarak veri doğrulaması çalıştırmaya yönelik basit bir örnek üzerinden gidelim:
from prefect import task, Flow
import great_expectations as ge
# Define a task to run Great Expectations validation
@task
def validate_data():
context = ge.data_context.DataContext()
batch_kwargs = {"path": "path/to/your/datafile.csv", "datasource": "your_datasource"}
batch = context.get_batch(batch_kwargs, suite_name="your_expectation_suite")
results = context.run_validation_operator("action_list_operator", assets_to_validate=[batch])
# Check validation results and raise an alert if validation fails
if not results["success"]:
raise ValueError("Data validation failed!")
# Define your ETL flow
with Flow("ETL_with_GE_Validation") as flow:
validation = validate_data()
# Execute the flow
flow.run()
Bu örnekte, Great Expectations doğrulamasını çalıştırmak için bir görev içeren bir Prefect akışı tanımlıyoruz.
validate_data() görevi, Great Expectations bağlamını yükler, veri batch’ini alır ve beklenti paketini uygular.
Veri, doğrulama kriterlerini karşılamıyorsa görev bir uyarı yükseltir; iş akışı durur ve aşağı akıştaki hatalar önlenir.
Sürekli veri doğrulama
Doğrulama işleri; Unix tabanlı sistemlerde cron işler veya Apache Airflow gibi yönetilen hizmetler kullanılarak zamanlanabilir. Bu örnekte, veri hatlarını düzenlemek için uygun olan Airflow kullanarak doğrulama çalıştırmalarının nasıl zamanlanacağını göstereceğiz.
Great Expectations doğrulamalarını günlük olarak çalıştıracak bir Airflow DAG’ini (Directed Acyclic Graph) şu şekilde kurabilirsiniz:
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime
import great_expectations as ge
# Define the DAG and set the schedule to run daily
default_args = {
'owner': 'airflow',
'start_date': datetime(2024, 1, 1),
'retries': 1,
}
dag = DAG(
'great_expectations_validation',
default_args=default_args,
schedule_interval='@daily', # Runs once a day
)
# Define the function to run the validation
def run_validation():
context = ge.data_context.DataContext()
batch = context.get_batch(batch_kwargs, suite_name="your_expectation_suite")
results = context.run_validation_operator("action_list_operator", assets_to_validate=[batch])
return results
# Set up the task in Airflow
validation_task = PythonOperator(
task_id='run_great_expectations_validation',
python_callable=run_validation,
dag=dag,
)
# Set the task in the DAG
validation_task
Bu örnekte, günde bir kez çalışacak şekilde zamanlanmış bir doğrulama çalıştırmasını tanımlayan bir DAG oluşturuyoruz (@daily).
run_validation() işlevi, Great Expectations bağlamını yükleyerek doğrulamayı yürütür ve tanımlı beklenti paketini veriye uygular.
Great Expectations ile Veri Doğrulamada En İyi Uygulamalar
Ölçeklenebilirlik ve verimlilik için en iyi uygulamaları takip etmek her zaman önerilir; veri doğrulamada Great Expectations için de durum farklı değildir.
Küçük başlayın ve yineleyin
Temel veri kalitesi kontrolleriyle başlayın ve kademeli olarak genişletin. Başlangıçta temel beklentilere odaklanmak daha iyidir; bu, süreci gereksiz yere karmaşıklaştırmaktan kaçınmanıza yardımcı olur; entegrasyonu daha sorunsuz ve sorun gidermeyi daha kolay hale getirir. Veri kümesine dair anlayışınız arttıkça daha karmaşık doğrulamalar ekleyebilirsiniz.
Ekipler arası iş birliği yapın
Veri kalitesi yalnızca teknik bir konu değildir. İş beklentilerini tanımlamak ve uygulanan doğrulamanın temel iş mantığı ve hedeflerle uyumlu olmasını sağlamak için iş birimleriyle birlikte çalışın. Bu çapraz işlevli yaklaşım, verinin amaçlanan amaca hizmet etmesini ve tüm paydaşların gereksinimlerini karşılamasını garanti eder.
Mümkün olduğunda otomatikleştirin
Mümkün olan her yerde süreci otomatikleştirerek veri doğrulamayı veri hatlarına entegre edin. Otomatik doğrulama kontrollerini entegre etmek, manuel müdahaleye gerek kalmadan veri kalitesinin sürekli izlenmesini sağlar ve verimliliği önemli ölçüde artırır.
Sonuç
Harika iş! Great Expectations’ta veriyi yapılandırmayı ve doğrulamayı öğrendiniz. Bu teknikler, iş akışlarınızda yüksek veri kalitesi ve şeffaflık sağlamanıza yardımcı olacaktır.
Becerilerinizi geliştirmeye devam etmek için şu kaynaklara göz atın:
- Python ile ETL ve ELT: Verileri etkili şekilde dönüştürmeyi ve taşımayı öğrenin.
- Veri Kalitesine Giriş: Veri kalitesi yönetiminin temellerini keşfedin.
- Python’da Veri Temizleme: Doğruluk ve tutarlılık için veri temizleme tekniklerinde ustalaşın.
- Veri Kalitesi Boyutları Cheat Sheet: Veri kalitesi boyutları için kullanışlı bir rehber.
FAQs
Great Expectations diğer veri doğrulama araçlarıyla nasıl karşılaştırılır?
Great Expectations açık kaynaklıdır, esnektir ve modern veri hatlarıyla iyi entegre olur. Geniş beklenti kütüphanesi ve güçlü dokümantasyonu ile öne çıkar.
Great Expectations’ı kullanmak için Python bilmem gerekir mi?
Temel düzeyde Python bilgisi faydalı olsa da Great Expectations kullanıcı dostu bir CLI ve kapsamlı dokümantasyon sunar; bu sayede programcı olmayanlar için de erişilebilir olur.
Great Expectations hangi tür veri kaynaklarını destekler?
Great Expectations, aşağıdakiler de dahil olmak üzere çok çeşitli veri kaynaklarını destekler:
- PostgreSQL, MySQL ve SQL Server gibi ilişkisel veritabanları.
- AWS S3, Google Cloud Storage ve Azure Blob Storage gibi bulut depolama çözümleri.
- CSV, Parquet ve Excel gibi dosya formatları.
- Apache Spark ve Databricks gibi büyük veri çerçeveleri. Great Expectations’a bu kaynakları, veri kaynağınız (datasource) için uygun yapılandırmayı kullanarak kolayca bağlayabilirsiniz.
Great Expectations’ı akan (streaming) veri ile kullanabilir miyim?
Great Expectations öncelikle batch veri doğrulaması için tasarlanmıştır. Yerel olarak akış veri hatlarını desteklemese de, periyodik olarak anlık görüntüleri (snapshot) veya mikro-batch’leri doğrulayarak Apache Kafka veya Spark Structured Streaming gibi çerçevelere entegre edebilirsiniz.
Beklentileri ve doğrulama sonuçlarını sürüm kontrolüne almak mümkün mü?
Evet, beklentileri ve yapılandırmaları bir Git deposunda YAML veya JSON dosyaları olarak saklayarak sürüm kontrolüne tabi tutabilirsiniz. Doğrulama sonuçları için, zaman içindeki sonuçları izlemek üzere bir veritabanı veya dosya tabanlı bir depo kurabilir ve sürekli izleme için bunları CI/CD hatlarınıza entegre edebilirsiniz.
Great Expectations veri kümelerindeki şema evrimini nasıl ele alır?
Great Expectations, esnek beklenti çerçevesi ile şema evrimini yönetir. Şemanız değişirse şunları yapabilirsiniz:
expect_table_columns_to_match_setveya benzeri beklentileri kullanarak sütun adlarını dinamik olarak doğrulayın.- Yeni şemaya uyum sağlamak için beklenti paketlerini değiştirin veya yenilerini oluşturun.
- Yeni eklenen sütunlar için beklentileri otomatik olarak güncellemek üzere şema çıkarım (inference) araçlarından yararlanın.

Thalia Barrera, Bilgisayar Bilimleri alanında yüksek lisansa ve yazılım ile veri mühendisliğinde on yılı aşkın deneyime sahip, DataCamp'te Kıdemli Veri Bilimi Editörüdür. Thalia, blog yazıları, eğitimler ve video kursları aracılığıyla mühendisler ve veri bilimciler için teknik kavramları sadeleştirmekten keyif alır.
