Python Temelleri (Tekrar Amaçlı)
Eğitimin giriş modülüdür ve tüm yapay zeka çalışmalarının üzerine kurulacağı programlama zeminini oluşturur. Katılımcı Python dilini sıfırdan öğrenir: söz dizimi, veriyi bellekte tutma biçimleri, akış kontrolü, kodu tekrar kullanılabilir parçalara bölme ve nesne yönelimli düşünme. Modül sonunda katılımcı, kütüphane kullanmaya geçmeden önce kendi başına çalışan program yazabilecek seviyeye gelir.
1.1 Temel Söz Dizimi ve Değişkenler
Python'un yazım kurallarının ve veriyi değişkenlerde tutma mantığının öğretildiği ilk adımdır. Girinti (indentation) tabanlı yapı, yorum satırları ve değişken isimlendirme kuralları burada oturur.
-
Python kurulumu ve IDE kullanımı
Python yorumlayıcısının kurulumu, sürüm seçimi, sanal ortam (virtual environment) kavramı ve VS Code / PyCharm / Jupyter Notebook gibi geliştirme ortamlarının kullanımı. Kod yazma, çalıştırma, hata mesajlarını okuma ve hata ayıklama (debug) alışkanlığı kazandırılır.
-
Değişken türleri (int, float, string, boolean)
Tam sayı, ondalıklı sayı, metin ve mantıksal doğru/yanlış tiplerinin ne olduğu, bellekte nasıl tutulduğu, tür dönüşümleri (int(), float(), str()) ve tip hatalarının nasıl oluştuğu. Dinamik tipleme kavramı ve type() ile tip denetimi.
-
İşleçler (aritmetik, karşılaştırma, mantıksal)
Toplama, çıkarma, çarpma, bölme, tam bölme (//), mod (%) ve kuvvet (**) işleçleri; ==, !=, <, > karşılaştırma işleçleri; and, or, not mantıksal işleçleri. İşlem öncelik sırası ve karşılaştırmaların neden True/False döndürdüğü.
-
Giriş/Çıkış işlemleri
input() ile kullanıcıdan veri alma, print() ile ekrana yazdırma, f-string ve format() ile biçimli çıktı üretme. Metin dosyalarını okuma/yazma (open, read, write, with bloğu) temel düzeyde ele alınır.
1.2 Veri Yapıları
Birden fazla veriyi tek bir yapıda toplamanın yollarını öğretir. Doğru veri yapısı seçimi hem kodun okunabilirliğini hem de çalışma hızını doğrudan etkiler; her yapının hangi problemde kullanıldığı karşılaştırmalı verilir.
-
Listeler (list): oluşturma, indeksleme, metotlar
Sıralı ve değiştirilebilir koleksiyonlar. Eleman ekleme/çıkarma (append, insert, remove, pop), sıralama (sort, sorted), ters çevirme, dilimleme ([a:b:c]), negatif indeks kullanımı ve iç içe listeler (matris benzeri yapılar).
-
Demetler (tuple): değişmez veri yapıları
Oluşturulduktan sonra değiştirilemeyen sıralı koleksiyonlar. Değişmezliğin (immutability) avantajı, tuple unpacking, fonksiyonlardan çoklu değer döndürme ve listeye göre bellek/performans farkı.
-
Sözlükler (dict): anahtar-değer çiftleri
Veriye sıra numarasıyla değil anlamlı bir anahtarla erişme. Anahtar ekleme/güncelleme/silme, keys(), values(), items() ile dolaşma, get() ile güvenli erişim, iç içe sözlükler ve JSON verisiyle olan doğrudan benzerliği.
-
Kümeler (set): benzersiz elemanlar
Tekrarsız eleman tutan sırasız yapılar. Yinelenen kayıtları temizleme, üyelik testinin neden çok hızlı olduğu, kesişim (&), birleşim (|) ve fark (-) gibi küme işlemleri.
1.3 Kontrol Yapıları
Programın akışını koşullara ve tekrarlara göre yönlendirme becerisidir. Veri temizleme, filtreleme ve algoritma yazımının tamamı bu yapıların üzerine kurulur.
-
if-elif-else koşul yapıları
Koşula bağlı karar verme, çoklu koşul zincirleri, iç içe koşullar, and/or ile birleşik koşullar ve tek satırlık koşullu ifadeler (ternary). Kodun mantıksal doğruluğunu koşul sırasının nasıl etkilediği vurgulanır.
-
for ve while döngüleri
Bir koleksiyonun elemanları üzerinde dolaşmak için for, bir koşul sağlandığı sürece tekrar için while. range(), enumerate(), zip() kullanımı, iç içe döngüler ve sonsuz döngü tuzakları.
-
break, continue, pass ifadeleri
Döngüyü tamamen kesmek (break), o turu atlayıp devam etmek (continue) ve sözdizimsel olarak boş blok bırakmak (pass). Arama algoritmalarında ve hatalı kayıtların atlanmasında pratik kullanım örnekleri.
-
Liste anlama (list comprehensions)
Döngü ve koşulu tek satıra sıkıştırarak yeni liste üretme tekniği. Klasik döngüye göre okunabilirlik ve hız avantajı; dict comprehension ve set comprehension varyasyonları. Veri ön işlemede en sık kullanılan Python kalıplarından biridir.
1.4 Fonksiyonlar ve Modüller
Kodu tekrar kullanılabilir, test edilebilir ve düzenli parçalara bölme aşamasıdır. Makine öğrenmesi projelerinde veri hazırlama, model eğitme ve değerlendirme adımlarının ayrı fonksiyonlara bölünmesi bu disiplinle mümkün olur.
-
Fonksiyon tanımlama ve çağırma
def ile fonksiyon yazma, return ile değer döndürme, docstring yazımı, kapsam (scope) kavramı ve yerel/global değişken ayrımı.
-
Parametreler (konumsal, anahtar kelime, varsayılan)
Sıraya göre gönderilen konumsal parametreler, isimle gönderilen anahtar kelime parametreleri, varsayılan değerli parametreler ve değişken sayıda argüman alma (*args, **kwargs). Kütüphane dokümantasyonunu okuyabilmek için kritik bir konudur.
-
Lambda fonksiyonları
Tek satırlık isimsiz fonksiyonlar. map, filter, sorted ve Pandas'ın apply metoduyla birlikte kullanımı; ne zaman tercih edilmesi, ne zaman normal fonksiyon yazılması gerektiği.
-
Modül oluşturma ve içe aktarma işlemleri
Kodu .py dosyalarına bölme, import, from ... import ..., takma ad verme (as) ve paket (klasör + __init__.py) yapısı. Proje dosya düzeninin nasıl kurulacağı gösterilir.
-
Paket yönetimi (pip)
Dış kütüphane kurma, kaldırma, sürüm sabitleme, requirements.txt oluşturma ve sanal ortamlarla birlikte kullanma. NumPy, Pandas, Scikit-learn gibi kütüphanelerin ortama nasıl dahil edildiği öğrenilir.
1.5 Nesne Yönelimli Programlama
Veriyi ve o veri üzerinde çalışan davranışları tek yapıda birleştirme yaklaşımıdır. Scikit-learn dahil tüm makine öğrenmesi kütüphaneleri nesne yönelimli tasarlandığı için (model = LinearRegression(), model.fit()) bu modül kütüphane mantığını çözmenin anahtarıdır.
-
Sınıf ve nesne kavramları
Sınıfın bir şablon, nesnenin ise o şablondan üretilmiş örnek olduğu fikri. class tanımı, nesne üretme, self parametresinin anlamı ve metot yazımı.
-
Yapıcı (init) metodu
Nesne oluşturulurken otomatik çalışan __init__ metodu ile başlangıç değerlerinin atanması. Zorunlu ve varsayılan parametrelerle esnek nesne üretimi.
-
Örnek ve sınıf değişkenleri
Her nesneye ait olan örnek değişkenleri ile tüm nesnelerin paylaştığı sınıf değişkenleri arasındaki fark; hangi durumda hangisinin kullanılacağı ve sık yapılan hatalar.
-
Kalıtım (inheritance)
Bir sınıfın başka bir sınıfın özelliklerini devralması, metot ezme (override), super() kullanımı ve çok katmanlı kalıtım. Ortak davranışları tek yerde toplayarak kod tekrarını önleme.
-
Kapsülleme ve çok biçimlilik
İç detayları dışarıdan gizleme (kapsülleme; _ ve __ yazım kuralları, getter/setter mantığı) ve aynı metot adının farklı sınıflarda farklı davranması (polymorphism). Scikit-learn'de her modelin aynı fit/predict arayüzünü sunması bu prensibin uygulamasıdır.