Ana içeriğe geç
Kesit Python
Orta · Orta bitirme

Bitirme projesi: Lezzet Kurye kupon mutabakatı

BT iş analisti için kabul testi: geç teslim kuralını koda çevirir, servisin dökümüyle satır satır karşılaştırır, API cevabını sözleşmeye göre denetler, fark raporunu Excel olarak yazar ve kabul ya da ret notu üretirsin.

Uygulamada aç, 14 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ç.

Proje: kupon mutabakatı

Kesit SQL'deki BT İş Analisti yolunda Lezzet Kurye için geç teslim kuponu talebini analiz ettin: 45 dakikayı aşan teslime 30 TL, 60 dakikayı aşana 60 TL. Geliştirme bitti, kabul testi sana geldi. Elinde sipariş verisi ve kupon servisinin dökümü var. Soru basit: kural doğru uygulanmış mı? Bu dersteki küçük betik bu soruyu her seferinde aynı biçimde, elle Excel karşılaştırması yapmadan cevaplar.

Bu proje yazılımcı olmayı hedeflemez; yolda gördüğün dosya, CSV, JSON, pandas ve Excel işlerini gerçek bir kabul testinde birleştirir.

AdımSoruÇıktı
1. KuralKaç kupon oluşmalıydı?beklenen_kuponlar
2. DosyaDöküm okunabilir mi?dosya_oku
3. MutabakatNerede fark var?mutabakat, ozet_cikar
4. APICevaplar sözleşmeye uyuyor mu?cevap_denetle
5. RaporKabul mü, ret mi?rapor_sayfalari, karar_notu

Önce beklenen sonuç

Kabul testinin ilk kuralı: dosyaya bakmadan önce beklenen sonucu kendin hesapla. Dosyadan başlarsan farkında olmadan ona uyum sağlarsın. Hesabın SQL yolundaki sonuçla aynı olmalı: 1.508 kupon, 51.900 TL (222 tanesi 60 TL).

import csv, io, json
import pandas as pd
import veri

def siparisleri_oku():
    return veri.oku("lezzet_kurye", "lk_orders", parse_dates=["placed_at", "delivered_at"])

s = siparisleri_oku()
print(s["status"].value_counts().to_dict())
d = s[s["status"] == "teslim"]
sure = (d["delivered_at"] - d["placed_at"]).dt.total_seconds()
print("en kısa", sure.min(), "en uzun", sure.max(), "saniye")

İkinci dosya nereden geliyor?

Veri setlerinde gerçek bir kupon servisi dökümü yok, bu yüzden kupon_dosyasi onu hazır kuraldan üretir ve numaraya bağlı, açık hatalar ekler: bazı kuponlar oluşmamış, bazıları çift, bazılarında 30 ile 60 karışmış, bazıları zamanında teslime verilmiş. Hatalar derse aittir ve koda bakınca görünür; sonuçlar her çalıştırmada aynıdır.

Toplam tutarsa neden yetmez?

Dosyanın toplamını beklenenle karşılaştırmak en hızlı yoldur ve en yanıltıcısıdır. Bu örnekte beklenen 51.900 TL, dosyada 53.160 TL; net fark yalnız 1260 TL. Oysa 77 siparişte sorun var. Eksik kupon ile çift kupon birbirini götürür. Karşılaştırma bu yüzden sipariş numarası üzerinden, dış birleştirmeyle yapılır.

import pandas as pd
b = pd.DataFrame({"no": [1, 2, 3], "tutar": [30, 30, 60]})
d = pd.DataFrame({"no": [2, 3, 4], "tutar": [30, 30, 30]})
m = b.merge(d, on="no", how="outer", suffixes=("_b", "_d"), indicator=True)
print(m)

indicator=True her satırın nereden geldiğini söyler: left_only eksik, right_only fazla, both ise tutar karşılaştırılacak satır.

API cevabı da bir sözleşmedir

İş analisti API yazmaz ama cevabın sözleşmeye uyup uymadığını denetleyebilir. HTTP ve REST API istemcisi: requests, httpx ve dayanıklı istekler dersindeki JSON okuma burada işe yarar; gerçek servise bağlanman gerekmez, örnek cevaplar dosyadan okunur.

Bitince göreceğin sonuç

Rapor sayfalarını önce Python listesi olarak kurarsın, sonra gerçek Excel dosyasına yazarsın. Dosya bu sayfada oluşur, indirip Excel'de açabilirsin (openpyxl ilk kullanımda iner, yaklaşık 270 KB).

DurumSipariş
Tamam1.459
Eksik15
Çift18
Tutar farkı16
Fazla28
Uzmanlaş

Bunu işe taşı

Aynı kalıp her kabul testinde çalışır: kuralı ayrı hesapla, anahtarla karşılaştır, farkı sınıflandır, dosya olarak paylaş. Kural Kesit SQL'deki karar tablosundan geliyor; tablo değişirse betikte tek yer değişir. Bir sonraki adım olarak bu betiği bir sonraki sürümde yeniden çalıştırıp farkın kapandığını göster: buna regresyon denetimi denir.

Alıştırmalara geç (14)