Ünite 9 / 11

Kod Üretimi: Python (pandas) ve SQL ile Yapay Zeka Destekli Analiz

Kazanimlar:

  • Yapay zekaya şema ve amacı net vererek sağlam SQL ve pandas kodu alıp satır satır okuyup doğrulayabilme
  • merge/JOIN sonrası satır sayısı, uydurma fonksiyon ve verim gibi sessiz hataları yakalayabilme
  • Hata ayıklamada sorunu susturmadan çözüp kodu üretim ortamında test etmeden çalıştırmaktan kaçınabilme

Veri biliminin iki temel dili vardır: SQL (İngilizcesiyle Structured Query Language — veritabanlarından veri sorgulama dili) ve Python (özellikle pandas kütüphanesi — tabloları programla işlemenin standart aracı). Bu ünitede yapay zekayı bir kod ortağı olarak kullanmayı öğreneceğiz: doğru soruyla ondan sağlam SQL ve pandas kodu almak, o kodu okuyup doğrulamak, hatalarını gidermek ve asla körü körüne çalıştırmamak. YZ, tekrarlı kodu dakikalar yerine saniyeler içinde yazar; ama ürettiği kodun doğru sütunu, doğru mantıkla işlediğinden emin olmak sizin işinizdir. Çalışan kod, doğru kod demek değildir.

Neden YZ ile kod üretmek güçlü ama riskli

YZ kod üretiminde üç büyük fayda sağlar: hız (30 satırlık bir groupby-pivot işlemini saniyede yazar), hatırlatma (unuttuğunuz bir pandas fonksiyonunu anımsatır) ve öğretme (kodu satır satır açıklar). Ama üç risk taşır: sessiz mantık hatası (yanlış sütunu toplayan kod hatasız çalışır), uydurma fonksiyon (var olmayan bir metod önerir) ve verim tuzağı (küçük veride çalışan ama 10 milyon satırda çöken kod). Bu yüzden altın kural: YZ'nin kodunu, kendi yazmış gibi oku. Anlamadığın satırı çalıştırma.

SQL: veriyi kaynağında işlemek

SQL, veriyi veritabanından çekerken orada işlemenizi sağlar; milyonlarca satırı Python'a çekmeden özetleyebilirsiniz. Temel yapı taşları: SELECT (hangi sütunlar), WHERE (hangi satırlar), GROUP BY (grupla ve özetle), JOIN (tabloları birleştir), HAVING (grup sonrası filtre). YZ karmaşık JOIN'leri ve pencere fonksiyonlarını (window functions) yazmakta çok yardımcıdır, ama iki şeyi mutlaka kontrol edin: JOIN doğru anahtar üzerinden mi (yanlış anahtar satırları çoğaltır) ve filtre mantığı doğru mu (özellikle NULL davranışı ve tarih aralıkları).

Dikkat: YZ'nin ürettiği bir SQL sorgusunu doğrudan üretim veritabanında çalıştırmayın. Önce küçük bir kopya veya LIMIT ile test edin. Bir UPDATE/DELETE sorgusunu asla WHERE şartını doğrulamadan çalıştırmayın; yanlış bir WHERE tüm tabloyu silebilir.

Python/pandas: esnek analiz

pandas, tabloları (DataFrame) Python'da işlemenin standart yoludur. YZ ile en verimli kullanımı, ona şemayı ve amacı net vermektir. En sık kullanılan işlemler: filtreleme, groupby (grupla-özetle), merge (birleştir), pivot_table, apply. YZ bunları hızla yazar; sizin kontrol edeceğiniz şey mantıktır: gruplama doğru sütunda mı, birleştirme satır sayısını beklenmedik biçimde değiştirdi mi (merge sonrası satır sayısını daima kontrol edin), zincir işlemler orijinali mi değiştiriyor.

İşlem

SQL

pandas

Kontrol noktası

Filtreleme

WHERE

df[df.x > 5]

NULL/NaN davranışı

Gruplama

GROUP BY

df.groupby()

Doğru sütun mu

Birleştirme

JOIN

df.merge()

Satır sayısı değişimi

Özet

AVG(), SUM()

.mean(), .sum()

Hangi sütun toplandı

Sıralama

ORDER BY

.sort_values()

Yön (artan/azalan)

Tekilleştirme

DISTINCT

.drop_duplicates()

Hangi sütunlarda

Hata ayıklama: YZ ile birlikte

Kod hata verdiğinde YZ mükemmel bir hata ayıklama (debugging) ortağıdır. Ona tam hata mesajını ve ilgili kod parçasını verin. Ama iki tuzağa dikkat edin. Birincisi, YZ hatayı "susturan" bir çözüm önerebilir (örneğin uyarıları gizlemek) — bu hatayı düzeltmez, saklar. İkincisi, YZ bazen bir sorunu "çözerken" başka bir davranışı sessizce değiştirir. Kural: düzeltmeyi anla, susturma değil çöz, ve düzeltme sonrası çıktının hâlâ doğru olduğunu teyit et.

Yorumlanabilir ve sürdürülebilir kod istemek

YZ'den kod alırken sadece "çalışan" değil, okunabilir ve sürdürülebilir kod isteyin. Aylar sonra o kodu siz veya bir meslektaşınız açtığında ne yaptığını anlayabilmelidir. Bunun için YZ'ye şu üç şeyi ekletmeyi alışkanlık edinin: anlamlı değişken adları (df2 değil siparisler_temiz), kritik adımlarda kısa yorum satırları (neden yapıldığını açıklayan, ne yapıldığını değil) ve sihirli sayı yerine adlandırılmış sabit (kodun içine gömülü 0.85 yerine KABUL_ESIGI = 0.85). Ayrıca uzun tek satırlık zincirlerden (bir satırda beş işlemi birbirine bağlamak) kaçının; bunlar hata ayıklamayı zorlaştırır. YZ varsayılan olarak çoğu zaman kısa ve "akıllı" kod üretir; siz açıkça "okunabilir, yorumlu, sürdürülebilir yaz" derseniz çok daha bakımı kolay bir çıktı alırsınız. Bu, yeniden üretilebilirliğin (Ünite 10) da temelidir: anlaşılmayan kod, güvenle tekrar çalıştırılamayan koddur.

Üç mini vaka

Vaka 1 — JOIN çoğaltması. Bir analist, siparişleri ürün tablosuyla birleştirdi ve toplam ciroyu 3 katı buldu. Neden: ürün tablosunda her ürünün birden çok satır (farklı renk) vardı; JOIN her siparişi çoğalttı. YZ'nin kodu "çalışıyordu" ama satır sayısı 240 binden 690 bine fırlamıştı. Ders: merge/JOIN sonrası satır sayısını daima kontrol edin.

Vaka 2 — Uydurma fonksiyon. Bir stajyere YZ df.groupby('x').summarize() önerdi; pandas'ta böyle bir metod yok (.agg() var). Kod çalışmadı, stajyer 20 dakika kayboldu. Ders: tanımadığınız bir fonksiyonu dokümandan doğrulayın; YZ metod uydurabilir.

Vaka 3 — Verim çöküşü. Bir kod, her satır için apply içinde veritabanına sorgu atıyordu; 5.000 satırda çalıştı, 4 milyon satırda 9 saat sürdü ve durdu. YZ vektörleştirilmiş (toplu) bir çözüm önerince süre 40 saniyeye indi. Ders: küçük veride çalışan kod büyük veride çökebilir; verimi düşünün.

Dört kopyalanabilir şablon

1) Şemayla SQL isteme:

Rolün: SQL asistanı (PostgreSQL). Tablolar:- siparisler(id, musteri_id, tarih timestamp, tutar numeric)- musteriler(id, sehir text)Görev: 2024'te şehir başına toplam ciro ve sipariş sayısını getir,ciroya göre azalan sırala. NULL şehirleri nasıl ele aldığını açıkla.Sorguyu ben önce LIMIT ile test edeceğim; UPDATE/DELETE üretme.

2) pandas işlemi, kontrol noktalı:

df (siparişler) ve df_musteri (müşteriler) DataFrame'lerim var.Şehir başına ortalama tutarı hesapla. ÖNEMLİ: merge'den önce ve sonrasatır sayısını yazdır ki çoğaltma olup olmadığını göreyim. Hangisütunda birleştirdiğini ve neden inner/left seçtiğini açıkla.

3) Kod açıklama ve doğrulama:

Aşağıdaki pandas kodunu satır satır açıkla: her satır ne yapıyor, hangivarsayımlarda bulunuyor, hangi durumda yanlış sonuç verebilir?Uydurma fonksiyon kullanmışsam belirt. Kod: [yapıştır]

4) Hata ayıklama:

Şu kod bu hatayı veriyor. Tam hata mesajı: [yapıştır]. Kod: [yapıştır].Hatanın KÖK nedenini açıkla ve düzelt. Uyarı susturarak değil, sorunugerçekten çözerek düzelt. Düzeltmenin çıktıyı değiştirip değiştirmediğinide belirt.

Zayıf prompt / Güçlü prompt

Zayıf prompt:

Bana şehir başına satış veren bir sorgu yaz.

Tablo adları, sütunlar, veritabanı tipi, NULL davranışı belli değil. YZ genel geçer, muhtemelen tablonuza uymayan bir sorgu üretir.

Güçlü prompt:

Rolün: SQL asistanı (MySQL 8). Tablo: satis(id, sehir varchar,tutar decimal, tarih date). Görev: 2024 yılı için şehir başına toplamve ortalama tutarı, sipariş sayısını getir; toplam tutara göre azalansırala; sadece 100'den çok siparişi olan şehirleri göster (HAVING).NULL sehir'i hariç tut. Sorguyu açıkla; ben LIMIT ile test edeceğim.

Burada veritabanı, şema, filtre, sıralama ve NULL kuralı açıktır.

Sık yapılan hatalar

  • Kodu okumadan çalıştırmak. Çalışan kod, doğru kod değildir; yanlış sütunu işleyen kod da hatasız çalışır.
  • merge/JOIN sonrası satır sayısını kontrol etmemek. Yanlış anahtar satırları sessizce çoğaltır ve toplamları şişirir.
  • Uydurma fonksiyonu doğrulamamak. YZ var olmayan metod önerebilir; tanımadığınızı dokümandan teyit edin.
  • Verimi düşünmemek. Küçük veride çalışan apply/döngü, milyonlarca satırda çöker; vektörleştirin.
  • Üretim veritabanında doğrudan çalıştırmak. Özellikle UPDATE/DELETE'i WHERE'siz veya test etmeden çalıştırmak felakettir.
İpucu: YZ'den aldığınız her kod parçasına bir "doğrulama satırı" ekletmeyi alışkanlık edinin: işlem öncesi ve sonrası satır sayısı, birkaç örnek satır, ve kritik bir toplamı elle kontrol. Bu üç kontrol, sessiz mantık hatalarının çoğunu yakalar.

Özetle

YZ, SQL ve pandas kodunu hızla üreten güçlü bir ortaktır ama kör bir otorite değildir. Ona şemayı ve amacı net verin; ürettiği kodu kendi yazmış gibi okuyun; merge/JOIN sonrası satır sayısını, uydurma fonksiyonları ve verimi kontrol edin; üretim veritabanında test etmeden çalıştırmayın. Hata ayıklarken sorunu susturmayı değil çözmeyi hedefleyin. Çalışan kod doğru kod değildir; doğruluğu ancak siz garanti edersiniz.

Uygulama görevi

Bir analiz sorusu seçin (örneğin "kanal başına aylık ciro") ve hem SQL hem pandas ile YZ'den kod isteyin. Her iki kodu da satır satır okuyun, merge/JOIN sonrası satır sayısını kontrol edin ve en az bir kritik toplamı elle doğrulayın. İki kodun aynı sonucu verip vermediğini karşılaştırın; farklıysa nedenini bulun.

Kontrol listesi

  • [ ] YZ'ye tablo/şema ve amacı net verdim mi?
  • [ ] Ürettiği kodu satır satır okuyup anladım mı?
  • [ ] merge/JOIN sonrası satır sayısını kontrol ettim mi?
  • [ ] Tanımadığım fonksiyonları dokümandan doğruladım mı?
  • [ ] Kodu üretim ortamında değil, önce güvenli/küçük veride test ettim mi?