PYTHON · DERS 05
Veri temizleme
Bir satış raporunda aynı sipariş iki kez sayılırsa toplam şişer. Eksik tutarı sıfıra çevirirsen de gerçek bir sıfırla bilinmeyen bir değeri karıştırırsın. Bu derste her kaydı kontrol edecek ve dışarıda bıraktıklarının nedenini kaydedeceksin.
1. Önce veri kurallarını belirle
- Bir sipariş kimliği bir kaydı temsil ediyor. Kimliğin başındaki ve sonundaki boşlukları temizle.
- Bu örnekte tutarlar tam sayı olarak geliyor.
Noneveya sayı olarak okunamayan metinleri inceleme listesine al. - Sıfır geçerli bir tutar, negatif tutar ise iade. Aynı kimlik için ilk geçerli kaydı tut.
2. Temiz kayıtları ve sorunlu kayıtları ayır
def clean_orders(rows):
clean = []
rejected = []
seen = set()
for order_id, raw_amount in rows:
order_id = order_id.strip()
try:
amount = int(raw_amount)
except (TypeError, ValueError):
rejected.append((order_id, "geçersiz tutar"))
continue
if not order_id:
rejected.append((order_id, "eksik sipariş kimliği"))
elif order_id in seen:
rejected.append((order_id, "yinelenen sipariş"))
else:
seen.add(order_id)
clean.append((order_id, amount))
return clean, rejected
rows = [(" A1 ", "120"), ("A2", None), ("A1", "120"),
("A3", "hatalı"), ("A4", "0"), ("A5", "-20")]
clean, rejected = clean_orders(rows)
print(clean)
print(rejected)continue geçersiz tutardan sonra bir sonraki kayda geçer. seen kümesi yalnızca kabul edilmiş kimlikleri saklar. Böylece ilk kaydı hatalı olan bir siparişin daha sonra gelen geçerli kaydı kabul edilebilir.
Çıktıyı göster
[('A1', 120), ('A4', 0), ('A5', -20)]
[('A2', 'geçersiz tutar'), ('A1', 'yinelenen sipariş'), ('A3', 'geçersiz tutar')]3. Hata ayıklama alıştırması
Fonksiyona [("B1", None), ("B1", "40")] verildiğini düşün. seen.add(order_id) satırı doğrulamadan önce çalışsaydı geçerli 40 tutarına ne olurdu?
İpucu al
İlk kayıt reddedildiğinde B1 kimliğinin kümede olup olmayacağını takip et.
Çözümü göster
Kimlik ilk denemede kümeye eklenseydi, geçerli ikinci kayıt yanlışlıkla tekrar olarak elenirdi. Kimliği yalnızca kabul edilen kayıtta işaretle. Beklenen temiz liste [("B1", 40)].
Junior veri analisti mülakat sorusu
Aynı sipariş kimliğiyle gelen iki geçerli kayıttan birinde 120, diğerinde 150 yazıyor. Hangi tutarı rapora alırsın?
Örnek yanıtı aç
Önce satırların sipariş kalemi, tekrar veya güncelleme olup olmadığını kontrol ederim. Güncellemeyse güvenilir zaman damgası ve iş kuralıyla son geçerli kaydı seçerim. Güvenilir sıralama yoksa uyuşmazlığı işaretler ve toplam üzerindeki etkisini raporlarım.