Ana içeriğe geç
Kesit SQL
Orta · Veri Analisti

Veri temizleme

Boşluk, büyük/küçük harf, tutarsız şehir adları, tarih biçimi ve tekrarlar.

Uygulamada aç, 3 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Gerçek veri kirlidir

raw_signups tablosu bir formdan gelen ham kayıtları içerir. Bak:

SELECT * FROM raw_signups LIMIT 12;

Sorunlar: adlarda baş/son boşluk ve karışık harf, e-postalarda büyük harf, şehirlerde 'istanbul'/'ISTANBUL'/' Ankara', boş metin ve NULL, iki farklı tarih biçimi, tekrar eden satırlar.

Adım adım temizlik

SELECT id,
       TRIM(full_name) AS ad,
       LOWER(TRIM(email)) AS email,
       CASE
         WHEN LOWER(TRIM(city)) IN ('istanbul', 'İstanbul') OR UPPER(TRIM(city)) = 'ISTANBUL' THEN 'İstanbul'
         WHEN LOWER(TRIM(city)) = 'ankara' THEN 'Ankara'
         WHEN LOWER(TRIM(city)) IN ('izmir', 'İzmir') THEN 'İzmir'
         ELSE NULLIF(TRIM(city), '')
       END AS sehir,
       CASE
         WHEN signup_date LIKE '__.__.____'
           THEN substr(signup_date, 7, 4) || '-' || substr(signup_date, 4, 2) || '-' || substr(signup_date, 1, 2)
         ELSE signup_date
       END AS kayit_tarihi
FROM raw_signups;
Türkçe İ/ı sorunuSQLite'ın LOWER fonksiyonu 'İ' harfini dönüştürmez. Bu yüzden eşleme tablosuna her iki yazımı da koyduk. Gerçek projelerde bir eşleme (mapping) tablosu tutmak en sağlam yoldur.

Tekrarları atmak

SELECT COUNT(*) AS satir,
       COUNT(DISTINCT id) AS farkli_id,
       COUNT(DISTINCT LOWER(TRIM(email))) AS farkli_email
FROM raw_signups;
Alıştırmalara geç (3)