Şema Doğrulama ve İddialar
Her işlem hattının başlangıcında çalışacak şekilde sütun aralıkları, boş olmayan değer kısıtları ve benzersiz anahtarlar için assertion denetimleri yazın.
Şema Doğrulama ve İddialar, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Pandas & NumPy Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.
Şema Doğrulaması Neden Önemlidir?
Bir veri pipeline'ı yeni verileri çoğu zaman insan incelemesi olmadan otomatik olarak işler. Girdi dosyasının şeması değişirse — bir sütunun adı değiştirilirse, tarih biçimi farklılaşırsa veya yeni bir kategori ortaya çıkarsa — pipeline sessizce hatalı çıktı üretmek yerine açıkça başarısız olmalıdır. İddialarla yapılan şema doğrulaması, veri üreticileri ile veri tüketicileri arasındaki sözleşmeleri zorunlu kılan mekanizmadır ve sorunları mümkün olan en erken anda yakalar.
import pandas as pd
import numpy as np
df = pd.read_parquet('sales_treated.parquet')
print('Loaded:', df.shape)
print(df.dtypes)Gerekli Sütun Kontrolleri
En temel doğrulama, gerekli tüm sütunların mevcut olup olmadığını kontrol etmektir. Beklenen sütun kümesini bir yapılandırmada saklayın ve bunun gerçek sütunların bir alt kümesi olduğunu doğrulayın. Bu kontrol, yeniden adlandırmaları ve silinmeleri işlem hattının başlangıcında hemen yakalar; böylece sonraki kod eksik sütunlara erişmeye çalışıp işlem hattının derinliklerinde kafa karıştırıcı bir KeyError oluşturmaz.
REQUIRED_COLUMNS = {'order_id', 'order_date', 'customer_id',
'product', 'category', 'quantity', 'unit_price', 'revenue'}
missing = REQUIRED_COLUMNS - set(df.columns)
assert not missing, f'Missing required columns: {missing}'
print('All required columns present.')Sütun Veri Türü Doğrulamaları
Gerekli sütunları doğruladıktan sonra veri türlerini doğrulayın. object olarak yüklenen bir tarih sütunu, pd.to_datetime() çağrısının yapılmadığı anlamına gelir. int64 yerine float olarak saklanan bir ID sütunu, genellikle tamsayı olarak saklamayı engelleyen NaN değerlerinin bulunduğunu gösterir. En kritik sütunlar için assert df['col'].dtype == expected_type kullanarak tür doğrulamaları yazın.
assert pd.api.types.is_datetime64_any_dtype(df['order_date']), \
'order_date must be datetime'
assert pd.api.types.is_numeric_dtype(df['revenue']), \
'revenue must be numeric'
assert df['order_id'].dtype == object or pd.api.types.is_integer_dtype(df['order_id']), \
'order_id must be string or int'
print('Dtype checks passed.')Boş Olmayan Değer Kısıtlamaları
order_id, order_date ve revenue gibi temel sütunlar hiçbir zaman boş olmamalıdır. Her biri için df['col'].notna().all() doğrulamasını kullanın. Doğrulama mesajını uygulanabilir hâle getirmek için boş değerlerin sayısını da ekleyin; böylece işlem hattı operatörü yalnızca bir doğrulamanın başarısız olduğunu değil, sorunun boyutunu da görebilir.
NOT_NULL_COLS = ['order_id', 'order_date', 'revenue', 'customer_id']
for col in NOT_NULL_COLS:
null_count = df[col].isna().sum()
assert null_count == 0, f'{col} has {null_count} null values'
print('Non-null checks passed.')Sayısal Sütunlar İçin Aralık Kontrolleri
Sayısal sütunların genellikle geçerli iş aralıkları vardır. Gelir negatif olmamalıdır. Miktar pozitif bir tamsayı olmalıdır. Birim fiyat sıfırdan büyük olmalıdır. Bu kısıtları açıkça doğrulayın — gözden kaçan negatif gelirli bir satır, sonraki tüm toplulaştırmalarda toplamların hatalı biçimde düşük hesaplanmasına neden olur ve herhangi bir hata oluşturmaz. Aralık kontrolleri, veri girişi hatalarını ve üst sistemlerdeki hataları erken aşamada yakalar.
assert (df['revenue'] >= 0).all(), 'Negative revenue found'
assert (df['quantity'] > 0).all() or df['is_return'].any(), \
'Non-positive quantity without return flag'
assert (df['unit_price'] > 0).all(), 'Zero or negative unit price found'
print('Range checks passed.')Benzersiz Anahtar Doğrulamaları
Tekilleştirmeden sonra order_id benzersiz olmalıdır. Bu değişmez koşulun her işlem hattı çalıştırmasında korunduğunu doğrulamak için df['order_id'].is_unique ifadesini kullanın. Tekilleştirmeden sonra görülen benzersizlik ihlalleri, tekilleştirme mantığında bir hata olduğunu veya ana veri kümesiyle birleştirilmeden önce temizlenmemiş yeni bir veri kaynağının eklendiğini gösterir.
assert df['order_id'].is_unique, \
f'order_id not unique: {df.duplicated(subset=["order_id"]).sum()} duplicates'
print('Uniqueness check passed.')Kategorik Değer Doğrulamaları
region veya category gibi sonlu bir geçerli değer kümesine sahip sütunlarda, her değerin izin verilen kümede bulunduğunu doğrulayın. Bu kontrol, sistem geçişinden veya üst sistemdeki veri girişi değişikliğinden sonra ortaya çıkan beklenmeyen değerleri yakalar. İşletme yeni bölgelere açıldığında kolayca güncellenebilmeleri için geçerli kümeleri işlem hattı yapılandırmasında tanımlayın.
VALID_REGIONS = {'North', 'South', 'East', 'West', 'Central'}
VALID_CATEGORIES = {'electronics', 'apparel', 'home', 'sports', 'beauty', 'other'}
assert df['region'].isin(VALID_REGIONS).all(), \
f'Invalid regions: {df[~df["region"].isin(VALID_REGIONS)]["region"].unique()}'
assert df['category'].isin(VALID_CATEGORIES).all(), \
'Invalid categories found'
print('Categorical checks passed.')Tarih Aralığı Doğrulamaları
Tüm tarihlerin veri kümesi için beklenen dönem içinde bulunduğunu doğrulayın. Gelecekteki bir tarihe sahip sipariş mümkün değildir; şirket kurulmadan önceki bir tarihe sahip sipariş ise bozulmuş bir kayda işaret eder. Yapılandırmada MIN_DATE ve MAX_DATE tanımlayın ve sütunun bu sınırlar içinde kaldığını doğrulayın. Bu kontrol, hatalı zaman damgası dönüştürmelerinden kaynaklanan Unix dönemi başlangıcı tarihlerini (1970-01-01) de yakalar.
MIN_DATE = pd.Timestamp('2020-01-01')
MAX_DATE = pd.Timestamp('today')
assert (df['order_date'] >= MIN_DATE).all(), 'Date before minimum found'
assert (df['order_date'] <= MAX_DATE).all(), 'Future date found'
print(f'Date range: {df["order_date"].min()} to {df["order_date"].max()}')Satır Sayısı Koruması
Önceki işlem hattı çalıştırmasına göre satır sayısındaki ani değişim, üst sistemde bir sorun olduğuna dair güçlü bir işarettir. Önceki çalıştırmanın satır sayısını bir yapılandırma dosyasında saklayın ve yeni sayının bir tolerans bandı içinde olduğunu doğrulayın; örneğin, geçmiş sayıdan ±20 % içinde olmasını bekleyin. Çalıştırmalar arasında satırlarının %50'sini kaybeden bir veri kümesi, neredeyse kesin olarak bozuk bir veri dışa aktarımına işaret eder.
EXPECTED_MIN_ROWS = 5000
EXPECTED_MAX_ROWS = 200000
assert EXPECTED_MIN_ROWS <= len(df) <= EXPECTED_MAX_ROWS, \
f'Row count {len(df)} outside expected range [{EXPECTED_MIN_ROWS}, {EXPECTED_MAX_ROWS}]'
print(f'Row count check passed: {len(df)} rows')Kontrolleri Bir validate İşlevinde Paketleme
Tüm doğrulamaları, her işlem hattı aşamasının başında çağrılabilecek tek bir validate(df) işlevinde toplayın. Her kontrol başarısız olduğunda açıklayıcı bir mesajla AssertionError oluşturur. Bu yaklaşım, işlem hattını kendi kendini belgeleyen bir yapıya dönüştürür: doğrulama işlevi, o aşamadaki DataFrame için makine tarafından okunabilen şema sözleşmesidir.
def validate_sales_df(df):
assert not (REQUIRED_COLUMNS - set(df.columns)), 'Missing columns'
assert df['order_id'].is_unique, 'Duplicate order IDs'
assert (df['revenue'] >= 0).all(), 'Negative revenue'
assert df['region'].isin(VALID_REGIONS).all(), 'Invalid region'
print(f'Validation passed: {len(df)} rows, {len(df.columns)} columns')
validate_sales_df(df)Doğrulama Hatalarını Sorunsuzca Günlüğe Kaydetme
Üretim işlem hatlarında, doğrudan bir assert çökmesi geliştirme sırasında kabul edilebilir; ancak zamanlanmış bir işte istenmez. Çıplak doğrulamaları, hata mesajını günlüğe kaydeden ve çıkmadan önce isteğe bağlı olarak uyarı gönderen try/except AssertionError bloklarıyla değiştirin. Böylece izleme sistemi yalnızca işlenmemiş bir özel durum yığın izlemesi yerine hatanın nedenini yakalayabilir.
import logging
logging.basicConfig(level=logging.INFO)
def validate_with_logging(df):
checks = [
(lambda d: d['order_id'].is_unique, 'Duplicate order IDs'),
(lambda d: (d['revenue'] >= 0).all(), 'Negative revenue found'),
]
for check_fn, msg in checks:
try:
assert check_fn(df), msg
except AssertionError as e:
logging.error(f'VALIDATION FAILED: {e}')
raise
validate_with_logging(df)
print('All checks passed.')Hızlı Kontrol
Bu dersteki Veri Analizi kavramlarını anlayıp anlamadığınızı test edin.
Ders Özeti
Bu derste şunları öğrendiniz: gerekli sütunları, veri türlerini, boş olmayan değer kısıtlamalarını ve aralık geçerliliğini doğrulamayı, benzersiz anahtarları, kategorik değerleri ve tarih aralıklarını kontrol etmeyi ve tüm kontrolleri günlüğe kaydetme özelliğine sahip yeniden kullanılabilir bir validate() işlevinde paketlemeyi. Sırada, sütunlar ve satırlar üzerinde apply() kullanarak özel toplulaştırmaları inceleyeceğiz.
Yapay zeka eğitmeniyle Python öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 30
- Dersler
- 120
Sıkça Sorulan Sorular
“Şema Doğrulama ve İddialar” dersi ücretsiz mi?
Evet — “Şema Doğrulama ve İddialar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Pandas & NumPy Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.
“Şema Doğrulama ve İddialar” dersinde ne öğreneceğim?
Her işlem hattının başlangıcında çalışacak şekilde sütun aralıkları, boş olmayan değer kısıtları ve benzersiz anahtarlar için assertion denetimleri yazın. Pandas & NumPy Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Pandas & NumPy Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Pandas & NumPy Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Şema Doğrulama ve İddialar” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Pandas & NumPy Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Pandas & NumPy Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Yinelenenleri Belirleme ve Kaldırma
- Aykırı Değerleri Belirleme ve Ele Alma
- Tutarsız Kategorileri Standartlaştırma
- Şema Doğrulama ve İddialar