Vaka: Bir Perakende Zincirinin Kirli Satış Verisini Pandas ile Güvenilir Rapora Dönüştürmesi

Ders 9/11 · yaklaşık 3 dk okuma

Vaka: Güvenilmeyen Raporlar

Türkiye genelinde mağazası olan orta ölçekli bir perakende zinciri düşünün. Şirketin ismi kurgusaldır, ancak yaşanan sorunlar pek çok kurumda görülür. Her ay 40'a yakın şube, satış dosyasını merkeze e-postayla gönderiyor. Yönetim toplantısında bölge müdürü, kendi tablosundaki ciroyla genel merkez raporundaki ciro arasında fark olduğunu söylüyor. Kimse hangi rakamın doğru olduğunu söyleyemiyor. Rapor bir kez daha elle düzeltiliyor ve toplantı güvensiz bir havada bitiyor.

Sorunun Fark Edilmesi

Veri analisti işe önce şikâyeti ölçmeye çalışarak başlar. Yani "rapor yanlış" demek yerine, hangi dosyada neyin farklı olduğunu listeler.

  • Bazı şubeler tarihi gg.aa.yyyy, bazıları yyyy-aa-gg biçiminde yazıyor.
  • Tutarlar bir şubede 1.234,50, diğerinde 1234.50 olarak geliyor.
  • Aynı fiş bazı dosyalarda iki kez yer alıyor.
  • Bazı satırlarda ürün kodu veya tutar boş.
  • Sütun adları şubeden şubeye değişiyor ("Tutar", "Satış Tutarı", "TUTAR_TL").

Adım Adım Çözüm

1. Dosyaları tek DataFrame'de birleştirmek

Analist, klasördeki tüm dosyaları döngüyle okur, her birine hangi dosyadan geldiğini gösteren bir kaynak_dosya sütunu ekler ve sütun adlarını ortak bir sözlükle standartlaştırır. Ardından hepsini pd.concat ile birleştirir. Kaynak sütunu sonradan en değerli iz olur.

2. Tarih ve para formatlarını düzeltmek

  • Tarihleri pd.to_datetime ile dönüştürür; biçimi şube bazında açıkça belirtir, tahmine bırakmaz.
  • Dönüştürülemeyen satırları silmez, ayrı bir listeye alıp şubeye geri sorar.
  • Metin olarak gelen tutarlarda binlik ayracı ve ondalık işaretini şubenin biçimine göre ayıklayıp sayıya çevirir.

3. Mükerrer ve eksik kayıtlar için karar tablosu

Ekibin en çok tartıştığı bölüm burasıdır. Her sorun için "sil, doldur, işaretle" kararı gerekçesiyle yazılır.

SorunKararGerekçe
Fiş no, tarih, ürün ve tutarı birebir aynı satırSil (ilkini tut)Aynı kaydın tekrarı; ciroyu şişiriyor.
Aynı fiş no, farklı tutarİşaretleHangisinin doğru olduğu bilinmiyor; şubeye sorulmalı.
Boş tutarİşaretle, toplama katmaTahmini değer eklemek raporu bozar.
Boş ürün kategorisi"Tanımsız" ile doldurSatış gerçek; sadece sınıflaması eksik.

4. Tekrar çalıştırılabilir betiğe geçiş

İlk temizlik not defterinde, elle ve sırayla yapılmıştı. Bir sonraki ay aynı işi yapacak kişi aynı adımları hatırlayamayacaktı. Bu yüzden akış fonksiyonlara bölünür: oku, standartlaştır, dönüştür, kontrol et, raporla. Betik çalışırken kaç satır okunduğunu, kaç mükerrerin silindiğini ve kaç satırın işaretlendiğini ekrana yazar.

Sonuç ve Çıkarılan Dersler

  • Kazanılan: Rapor hazırlama süresi kısaldı, önemlisi her rakamın nereden geldiği artık izlenebiliyor.
  • Kazanılan: Şubelere "şu satırlarınız sorunlu" listesi gidiyor; sorun kaynağında çözülmeye başladı.
  • Hata 1: İlk denemede virgül ve nokta karıştırıldı, tutarlar 100 kat büyüdü. Dönüşümden sonra toplam kontrolü yapılmadığı için bir ay fark edilmedi.
  • Hata 2: Mükerrer silme kuralı çok geniş yazıldı ve aynı gün aynı ürünü alan iki ayrı müşterinin satışı da silindi. Fiş numarası anahtara eklenince düzeldi.
  • Ders: Her temizlik adımından önce ve sonra satır sayısı ile toplam tutar karşılaştırılmalı.

Kendi Kontrol Listeniz

  • Ham dosyayı asla üzerine yazmayın; temizi ayrı kaydedin.
  • Her kuralı "neden" ile birlikte yazın.
  • Silinen ve işaretlenen satırları ayrı bir dosyada saklayın.
  • Her çalıştırmada özet kontrol çıktısı üretin.

Tartışma Soruları

  • Eksik değerleri silmek yerine işaretlemeyi tercih etmek hangi durumlarda daha doğrudur?
  • Sizin kurumunuzda hangi veri kaynakları benzer tutarsızlıklar taşıyor?
  • Temizleme adımlarını belgelemek ekibe ne kazandırır?

Bu dersi kayıt olmadan izleyebilirsin. İlerlemeni kaydetmek, sertifika almak ve puan tablosuna girmek için ücretsiz üye ol: Kayıt Ol

İpucu: ← ve → tuşlarıyla dersler arasında geçebilirsin.