Takip et

AI/ML İçin Python Veri Tipleri Rehberi: Esasları Keşfedin

Yapay Zeka (YZ) ve Makine Öğrenmesi (ML) projeleri geliştirirken, veriyi doğru anlamak ve temsil etmek başarının temelini oluşturur. Python’ın esnek ve güçlü veri tipleri, karmaşık algoritmaları besleyen ham veriyi işlemek, analiz etmek ve optimize etmek için vazgeçilmezdir. Bu rehberde, Python’ın temel ve koleksiyon veri tiplerini AI/ML bağlamında derinlemesine inceleyecek, performans ipuçları sunacak ve gerçek dünya senaryolarıyla bilginizi pekiştireceğiz.

Yapay zeka ve makine öğrenmesi uygulamalarının kalbinde veri yatar. Ancak ham veri, kendi başına anlamlı değildir; onunla çalışabilmek için belirli bir yapıya büründürülmesi gerekir. İşte bu noktada Python’ın zengin veri tipleri devreye girer. Veri tipleri, bilgisayarın bir değeri nasıl yorumlayacağını, depolayacağını ve işleyeceğini belirler. Yanlış veri tipi seçimi, sadece performansı düşürmekle kalmaz, aynı zamanda modelin doğruluğunu da olumsuz etkileyebilir. Özellikle büyük veri setleriyle çalışırken, her bir veri parçasının doğru temsil edilmesi, bellek kullanımını optimize etmek ve işlem sürelerini kısaltmak için kritik öneme sahiptir.

Bir veri bilimci veya makine öğrenmesi mühendisi olarak, elinizdeki verinin türünü (sayısal, metinsel, kategorik vb.) doğru bir şekilde tanımak ve buna uygun Python veri tiplerini kullanmak, etkili bir veri ön işleme süreci için ilk adımdır. Örneğin, bir kullanıcının yaşını temsil eden bir sayıyı metin olarak saklamak, üzerinde matematiksel işlemler yapmanızı imkansız hale getirecektir. Veya bir ürün kimliğini (ID) ondalıklı sayı olarak depolamak, gereksiz bellek harcamasına ve potansiyel hassasiyet sorunlarına yol açabilir. Bu temel ayrım, AI/ML algoritmalarının beklentilerini karşılayacak doğru ve temiz veri setleri oluşturmanın anahtarıdır.

Gerçek dünya senaryolarında bu durumun önemini daha net görebiliriz. Diyelim ki, bir e-ticaret platformunda müşteri davranışlarını analiz ediyorsunuz. Müşteri ID’leri tam sayılar (int), ürün fiyatları ondalıklı sayılar (float) ve müşteri yorumları dizeler (str) olarak temsil edilmelidir. Eğer bu veriler doğru tiplerde tutulmazsa, filtreleme, ortalama alma, duygu analizi gibi işlemler ya çok zorlaşır ya da imkansız hale gelir. Ayrıca, NumPy dizileri ve Pandas DataFrame’leri gibi AI/ML dünyasının vazgeçilmez kütüphaneleri de, temelde bu Python veri tipleri üzerine inşa edilmiştir. Bu kütüphanelerin sunduğu performans avantajlarından tam olarak yararlanabilmek için, altındaki temel veri tiplerini iyi kavramak şarttır. Kısacası, Python’daki veri tiplerini ustaca kullanmak, veriyi daha anlamlı hale getirmek, model performansını artırmak ve daha güvenilir yapay zeka çözümleri geliştirmek için olmazsa olmaz bir beceridir.

Python’ın Temel Veri Tipleri Nelerdir ve AI/ML’de Nasıl Kullanılır?

Python, her programlama dilinde olduğu gibi, temel veri tiplerine sahiptir. Bu tipler, AI/ML projelerinde karşılaştığımız verilerin en basit yapı taşlarıdır. Veri setlerinin karmaşıklığı ne olursa olsun, nihayetinde bu temel tiplerin bir araya gelmesiyle oluşurlar. Şimdi, bu temel tipleri ve AI/ML’deki pratik kullanımlarını daha yakından inceleyelim.

Sayısal Verilerle Çalışmak: Tam Sayılar (int) ve Ondalıklı Sayılar (float) Nasıl Ayırt Edilir?

AI/ML projelerinde en sık karşılaşılan veri türlerinden biri sayısal verilerdir. Sayısal veriler, hem girdi özellikleri (feature) hem de model çıktıları için temel teşkil eder. Python’da iki ana sayısal veri tipi bulunur: tam sayılar (int) ve ondalıklı sayılar (float).

  • Tam Sayılar (int): Adından da anlaşılacağı gibi, ondalık kısmı olmayan sayılardır. AI/ML’de genellikle şu durumlarda kullanılırlar:
    • Benzersiz kimlikler (müşteri ID’leri, ürün ID’leri).
    • Sayım verileri (satın alınan ürün adedi, ziyaretçi sayısı).
    • Kategorik verilerin sayısal temsilleri (örneğin, “Erkek: 0, Kadın: 1”).

    Python’da int tipi, sistemin belleği izin verdiği sürece sınırsız büyüklükteki tam sayıları temsil edebilir. Bu, diğer dillerdeki sabit boyutlu tam sayı tiplerine göre önemli bir esneklik sunar.

  • Ondalıklı Sayılar (float): Ondalık kısmı olan sayılardır ve genellikle gerçek dünya ölçümlerini, olasılıkları veya hassasiyet gerektiren değerleri temsil etmek için kullanılırlar:
    • Sensör okumaları (sıcaklık, basınç).
    • Finansal veriler (fiyatlar, faiz oranları).
    • Model tahminleri (regresyon modellerinden çıkan sürekli değerler, sınıflandırma modellerinin güven skorları).
    • Koordinatlar (enlem, boylam).

    float tipi, IEEE 754 standardına uygun çift hassasiyetli (double-precision) kayan noktalı sayıları kullanır. Bu, genellikle 15-17 ondalık basamağa kadar hassasiyet sağlar, ancak kayan noktalı sayıların doğası gereği bazen küçük yuvarlama hataları meydana gelebilir.

Vaka Analizi: E-ticaret platformunda sipariş verileri

Bir e-ticaret uygulamasında, her bir sipariş için aşağıdaki veriler tutulabilir:

Veri Python Veri Tipi AI/ML Kullanım Alanı
Sipariş ID int Benzersiz tanımlayıcı, veri tabanı ilişkileri
Ürün Adedi int Miktar analizi, stok yönetimi
Toplam Fiyat float Harcama analizi, gelir tahmini (regresyon)
İndirim Oranı float Fiyatlandırma stratejisi analizi

# Örnek Kullanım
siparis_id = 10012345
urun_adedi = 3
toplam_fiyat = 125.75
indirim_orani = 0.15 # %15 indirim

print(f"Sipariş ID: {siparis_id}, Tipi: {type(siparis_id)}")
print(f"Ürün Adedi: {urun_adedi}, Tipi: {type(urun_adedi)}")
print(f"Toplam Fiyat: {toplam_fiyat}, Tipi: {type(toplam_fiyat)}")
print(f"İndirim Oranı: {indirim_orani}, Tipi: {type(indirim_orani)}")

# Hesaplamalar
indirimli_fiyat = toplam_fiyat * (1 - indirim_orani)
print(f"İndirimli Fiyat: {indirimli_fiyat:.2f}")

# Yapay zeka modelinde girdi olarak kullanma (basit bir örnek)
# Örneğin, bir model indirim oranına göre sipariş değerini tahmin edebilir.
# model.predict([urun_adedi, indirim_orani])

Gördüğünüz gibi, doğru sayısal veri tipini seçmek, hem veriyi doğru temsil etmenizi hem de üzerinde anlamlı matematiksel işlemler yapmanızı sağlar. Bu da AI/ML projelerinizin temelini sağlam bir şekilde atmanıza yardımcı olur.

Metinsel Verilerle Dans Etmek: Dizeler (str) ve Ön İşleme Teknikleri Nelerdir?

Günümüz AI/ML projelerinin önemli bir kısmı, metin verileriyle çalışmayı içerir. Müşteri yorumlarından sosyal medya gönderilerine, haber makalelerinden teknik belgelere kadar her yerde karşımıza çıkan metinler, doğal dil işleme (NLP) modelleri için değerli bir kaynaktır. Python'da metin verileri, str (dize) veri tipi ile temsil edilir.

Dizeler, Unicode karakterlerini destekler, bu da farklı dillerdeki ve karakter setlerindeki metinlerle kolayca çalışabileceğiniz anlamına gelir. AI/ML'de metin verileriyle çalışırken, ham metni doğrudan bir modele vermek yerine, onu işlenebilir bir formata dönüştürmemiz gerekir. Bu sürece "metin ön işleme" denir ve str veri tipinin sunduğu yöntemler burada kritik rol oynar.

Yaygın Metin Ön İşleme Teknikleri ve str Yöntemleri:

  1. Küçük Harfe Çevirme (Lowercasing): Aynı kelimenin farklı büyük/küçük harf kombinasyonlarını (örneğin "Python", "python") aynı olarak kabul etmek için metin genellikle tamamen küçük harfe çevrilir.
    
    metin = "Python Harika Bir Dil!"
    kucuk_metin = metin.lower() # 'python harika bir dil!'
            

  2. Noktalama İşaretlerini ve Özel Karakterleri Kaldırma: Metindeki gürültüyü azaltmak için noktalama işaretleri, sayılar veya özel karakterler genellikle kaldırılır.
    
    import re
    metin_noktalama = "Merhaba, dünya! Python 3.9 harika."
    temiz_metin = re.sub(r'[^a-z\s]', '', metin_noktalama.lower()) # 'merhaba dünya python  harika'
            

  3. Tokenizasyon (Tokenization): Metni daha küçük parçalara (kelimeler, cümleler) ayırma işlemidir.
    
    metin_cumle = "Yapay zeka gelecektir. Python öğrenmek önemli."
    kelimeler = metin_cumle.lower().split() # ['yapay', 'zeka', 'gelecektir.', 'python', 'öğrenmek', 'önemli.']
            

  4. Durma Kelimelerini Kaldırma (Stop Word Removal): "ve", "bir", "ile" gibi anlam katmayan yaygın kelimeleri kaldırmak, modelin daha önemli kelimelere odaklanmasını sağlar.
  5. Kök Bulma (Stemming) ve Lemmatizasyon (Lemmatization): Kelimeleri kök formlarına indirgeme işlemidir (örneğin, "koşmak", "koşuyor", "koştu" -> "koş").

Vaka Analizi: Müşteri Yorumlarından Duygu Analizi

Bir ürün hakkında gelen müşteri yorumlarının pozitif, negatif veya nötr olduğunu belirlemek için duygu analizi yapılabilir. Bu, str veri tipinin gücünü gösterir.


# Gerçek dünyadan müşteri yorumu örnekleri
yorumlar = [
    "Bu ürün harika! Çok memnun kaldım.",
    "Kalitesiz bir ürün, kesinlikle tavsiye etmiyorum.",
    "Ürün zamanında geldi, beklediğim gibiydi.",
    "Kargolama yavaştı ve kutu hasarlıydı."
]

print("Orijinal Yorumlar:")
for yorum in yorumlar:
    print(f"- {yorum}")

# Temel ön işleme adımları
temizlenmis_yorumlar = []
for yorum in yorumlar:
    yorum = yorum.lower() # Küçük harfe çevirme
    yorum = re.sub(r'[^\w\s]', '', yorum) # Noktalama işaretlerini kaldırma
    temizlenmis_yorumlar.append(yorum)

print("\nTemizlenmiş Yorumlar:")
for yorum in temizlenmis_yorumlar:
    print(f"- {yorum}")

# Daha sonra bu temizlenmiş yorumlar, bir NLP modeline (örneğin, bir duygu sınıflandırıcısına) beslenebilir.
# Model, her bir yoruma pozitif/negatif/nötr gibi bir etiket atayacaktır.

Gördüğünüz gibi, str veri tipi, metinsel verilerle karmaşık işlemler yapmamıza olanak tanır ve NLP projeleri için temel bir başlangıç noktası sunar. Doğru ön işleme teknikleriyle ham metinleri değerli özelliklere dönüştürebiliriz.

Mantıksal Kararlar Almak: Boolean (bool) Veri Tipi Nasıl Kullanılır?

AI/ML modelleri, çoğu zaman karmaşık karar süreçlerini taklit eder. Bu kararların temelinde ise "doğru" veya "yanlış" ikilik mantığı yatar. Python'da bu ikilik değerler, bool (Boolean) veri tipi ile temsil edilir. Bir bool değeri yalnızca iki olası duruma sahip olabilir: True (doğru) veya False (yanlış).

Boolean değerleri, programlamada koşullu ifadeler, döngüler ve akış kontrolü için vazgeçilmezdir. AI/ML bağlamında ise özellikle şu alanlarda önemli rol oynarlar:

  • Özellik Mühendisliği (Feature Engineering): Mevcut verilerden yeni ikili (binary) özellikler türetmek. Örneğin, "müşteri premium mu?" (is_premium_customer), "ürün indirimli mi?" (has_discount).
  • Veri Filtreleme ve Seçimi: Belirli koşulları karşılayan veri noktalarını seçmek veya dışarıda bırakmak.
  • Model Kararları: Sınıflandırma modellerinin ikili çıktıları (örneğin, "spam: True/False", "hastalık var: True/False").
  • Kontrol Akışı: Algoritma içindeki mantıksal dallanmalar.

Python'da Boolean değerleri, genellikle karşılaştırma operatörleri (==, !=, >, <, >=, <=) veya mantıksal operatörler (and, or, not) kullanılarak oluşturulur.


# Örnek Boolean kullanımı
yas = 25
ehliyet_var_mi = True
gelir = 60000

# Özellik Mühendisliği örneği
yetiskin_mi = yas >= 18
yuksek_gelirli_mi = gelir > 50000

print(f"Yetişkin mi: {yetiskin_mi}, Tipi: {type(yetiskin_mi)}") # True
print(f"Yüksek Gelirli mi: {yuksek_gelirli_mi}, Tipi: {type(yuksek_gelirli_mi)}") # True

# Koşullu mantık
kredi_onayi = ehliyet_var_mi and yetiskin_mi and yuksek_gelirli_mi

if kredi_onayi:
    print("Kredi başvurusu onaylandı.")
else:
    print("Kredi başvurusu reddedildi.")

# Gerçek bir AI/ML modelinde
# Örneğin, bir müşteri churn (kayıp) tahmini modelinden çıkan çıktı:
musteri_churn_riski = 0.85 # Modelin tahmin ettiği olasılık
churn_olacak_mi = musteri_churn_riski > 0.5

print(f"Müşteri ayrılma riski yüksek mi: {churn_olacak_mi}")

Vaka Analizi: Abonelik Durumuna Göre Kişiselleştirilmiş Öneri Sistemi

Bir dijital içerik platformunda, kullanıcının premium abonesi olup olmadığını belirten bir bool özelliği, öneri sistemini kişiselleştirmek için kullanılabilir. Premium üyeler, daha özel içerik veya erken erişim önerileri alabilirken, standart üyeler daha genel öneriler alabilir.


kullanici_premium_abone = True
kullanici_izleme_gecmisi = ["aksiyon", "komedi", "bilim kurgu"]

def onerileri_goster(premium, gecmis):
    if premium:
        print("Premium üyeye özel içerikler:")
        print("- Yeni çıkan bilim kurgu filmi (erken erişim)")
        print("- Uzman röportajları")
    else:
        print("Sizin için popüler içerikler:")
        print("- Haftanın en çok izlenen dizileri")
    
    print("\nİzleme geçmişinize göre öneriler:")
    if "aksiyon" in gecmis:
        print("- Yüksek tempolu aksiyon filmleri")
    if "komedi" in gecmis:
        print("- Son komedi şovları")

onerileri_goster(kullanici_premium_abone, kullanici_izleme_gecmisi)

Boolean veri tipi, AI/ML algoritmalarında mantıksal dallanmalar oluşturarak ve veriye ikili özellikler ekleyerek, modellerin karar verme süreçlerini zenginleştiren basit ama güçlü bir araçtır. Özellikle karar ağaçları gibi modellerde, her düğüm aslında bir Boolean kararını temsil eder.

Python Koleksiyon Veri Tipleri AI/ML Projelerinde Nasıl Fark Yaratır?

Tekil veri parçalarıyla çalışmak önemli olsa da, çoğu AI/ML projesi çok sayıda veri noktasını bir araya getirmeyi gerektirir. Python, bu tür toplu verileri düzenlemek ve yönetmek için güçlü koleksiyon veri tipleri sunar: Listeler, Demetler, Kümeler ve Sözlükler. Bu koleksiyonlar, veri setlerini yapılandırmak, özellik vektörleri oluşturmak ve karmaşık ilişkileri modellemek için vazgeçilmezdir. Her birinin kendine özgü özellikleri, AI/ML görevlerine farklı yaklaşımlar sunar. Şimdi bu koleksiyonları ve AI/ML'deki uygulamalarını inceleyelim.

Esnek ve Sıralı Depolama: Listeler (list) ile Veri Setlerini Yönetme

Python'daki list veri tipi, en yaygın kullanılan ve çok yönlü koleksiyonlardan biridir. Bir liste, farklı türde öğeleri (sayılar, dizeler, hatta başka listeler) sıralı bir şekilde depolayabilir. En önemli özelliği ise değiştirilebilir (mutable) olmasıdır; yani bir liste oluşturulduktan sonra elemanları eklenebilir, çıkarılabilir veya değiştirilebilir. Bu esneklik, özellikle veri ön işleme aşamalarında ve dinamik veri setleriyle çalışırken listeleri paha biçilmez kılar.

AI/ML'de listeler genellikle şu amaçlar için kullanılır:

  • Geçici Veri Depolama: Veri okuma veya dönüştürme sırasında ara sonuçları saklamak.
  • Özellik Listeleri: Bir veri noktasına ait birden fazla özelliği bir arada tutmak.
  • Veri Seti Yükleme: Dış kaynaklardan (CSV, JSON) okunan verileri bellekte tutmak.
  • Eğitim ve Test Verilerini Ayırma: Veri setini alt kümelere bölmek.
  • Dinamik Öğeler: Boyutu önceden bilinmeyen veya çalışma zamanında değişen koleksiyonları yönetmek.

Vaka Analizi: Müşterinin İzlediği Filmlerin Listesi ve Öneri Sistemi

Bir video akış hizmeti düşünün. Bir kullanıcının izlediği filmlerin veya dizilerin listesi, kullanıcının tercihlerini anlamak için hayati öneme sahiptir. Bu listeye yeni izlenen içerikler eklenebilir veya eski, artık izlenmeyenler kaldırılabilir.


# Bir kullanıcının izleme geçmişi
izleme_gecmisi = ["Matrix", "Inception", "Interstellar"]

print(f"Kullanıcının mevcut izleme geçmişi: {izleme_gecmisi}")

# Yeni bir film izlendiğinde listeye ekleme
izleme_gecmisi.append("Dune")
print(f"Dune izlendikten sonra: {izleme_gecmisi}")

# Hatalı bir girişi veya artık ilgi duyulmayan bir filmi çıkarma
izleme_gecmisi.remove("Inception")
print(f"Inception çıkarıldıktan sonra: {izleme_gecmisi}")

# Belirli bir pozisyondaki filme erişme
ilk_izlenen_film = izleme_gecmisi[0]
print(f"İlk izlenen film: {ilk_izlenen_film}")

# Bir AI/ML modelinde kullanımı:
# Örneğin, izleme geçmişine bakarak bir sonraki izleyebileceği filmi önermek.
# Bir öneri sistemi, 'izleme_gecmisi' listesindeki filmlerin türlerini, yönetmenlerini
# analiz ederek benzer yeni filmler önerebilir.

Listeler, NumPy dizilerine dönüştürülmeden önce genellikle verileri depolamak için ilk tercih edilen veri yapısıdır. Çünkü NumPy dizileri, matematiksel işlemler ve performans için optimize edilmiş olsa da, başlangıçta Python listeleri, veriyi esnek bir şekilde inşa etme ve manipüle etme yeteneği sunar. Bu adaptasyon yeteneği, AI/ML'deki dinamik veri işleme ihtiyaçları için çok değerlidir.

Değişmezliği Korumak: Demetler (tuple) ile Sabit Veri Grupları Oluşturma

Python'daki tuple (demet) veri tipi, listelere benzer şekilde sıralı bir öğe koleksiyonudur. Ancak, demetlerin en önemli ayırt edici özelliği değiştirilemez (immutable) olmalarıdır. Bir demet oluşturulduktan sonra içindeki öğeler ne değiştirilebilir, ne eklenebilir ne de çıkarılabilir. Bu sabitlik, demetleri belirli senaryolarda listelerden daha güvenli ve bazı durumlarda daha performanslı hale getirir.

AI/ML'de demetler genellikle şu durumlarda tercih edilir:

  • Sabit Özellik Grupları: Değişmemesi gereken veri kombinasyonlarını (örneğin, coğrafi koordinatlar (enlem, boylam), RGB renk değerleri (kırmızı, yeşil, mavi)) depolamak.
  • Fonksiyon Dönüş Değerleri: Bir fonksiyondan birden fazla değeri tek bir yapı olarak döndürmek.
  • Sözlük Anahtarları: Demetler, hash'lenebilir oldukları için sözlük anahtarı olarak kullanılabilirler (listeler kullanılamaz).
  • Veri Bütünlüğü: Verinin yanlışlıkla değiştirilmesini engellemek istediğimiz durumlarda.

Vaka Analizi: Coğrafi Konum Verileri ile Harita Uygulamaları

Bir coğrafi bilgi sistemi (GIS) veya konum tabanlı bir öneri sistemi geliştirirken, belirli bir noktanın enlem ve boylam değerleri gibi konum bilgilerinin değişmez olması istenir. Bu tür veriler için demetler idealdir.


# Şehirlerin coğrafi koordinatları
sehir_koordinatlari = {
    "Istanbul": (41.0082, 28.9784),
    "Ankara": (39.9334, 32.8597),
    "Izmir": (38.4237, 27.1882)
}

print(f"İstanbul'un koordinatları: {sehir_koordinatlari['Istanbul']}")

# Bir demetin değişmezliğini göstermek
koordinat = sehir_koordinatlari["Istanbul"]
# koordinat[0] = 41.5 # Bu satır hata verir: TypeError: 'tuple' object does not support item assignment

# Fonksiyondan birden fazla değer döndürme
def min_max_sicaklik(veri_listesi):
    # Bu veri listesi gerçek bir modelden gelen tahminler olabilir
    return min(veri_listesi), max(veri_listesi)

sicaklik_verileri = [22.5, 24.1, 20.9, 23.8, 25.0]
min_sicaklik, max_sicaklik = min_max_sicaklik(sicaklik_verileri)

print(f"Minimum sıcaklık: {min_sicaklik}°C, Maksimum sıcaklık: {max_sicaklik}°C")
print(f"Dönüş tipi: {type((min_sicaklik, max_sicaklik))}") # Bu bir demettir

# Bir AI/ML modelinde kullanım:
# Bir demet, bir modelin çıktısı olarak bir konum ve o konumla ilişkili bir değer (örneğin, tehlike seviyesi) döndürebilir.
# model.predict_risk((enlem, boylam)) -> (risk_seviyesi, acil_durum_telefonu)

Demelerin değiştirilemez doğası, kodun daha güvenli ve tahmin edilebilir olmasını sağlar. Özellikle çok iş parçacıklı (multi-threaded) ortamlarda veya kritik veri bütünlüğünün korunması gereken durumlarda demetler, listelere kıyasla önemli avantajlar sunar.

Benzersiz Elemanlarla Çalışmak: Kümeler (set) ve Veri Temizliği Nasıl Yapılır?

Python'daki set (küme) veri tipi, matematikteki küme kavramına karşılık gelir. Bir küme, sıralı olmayan ve benzersiz elemanlardan oluşan bir koleksiyondur. Bir kümede aynı elemandan birden fazla bulunamaz; eğer eklemeye çalışırsanız, mevcut olanın üzerine yazılmaz ve küme değişmez. Bu benzersizlik özelliği, kümeleri veri temizliği ve analizinde oldukça kullanışlı hale getirir.

AI/ML projelerinde kümeler genellikle şu amaçlar için kullanılır:

  • Tekrar Edenleri Kaldırma: Bir veri listesinden veya özellik setinden yinelenen değerleri hızlıca elemek.
  • Hızlı Üyelik Testi: Bir elemanın bir koleksiyon içinde olup olmadığını kontrol etmek (hash tabanlı yapısı sayesinde çok hızlıdır).
  • Küme İşlemleri: İki veri setinin kesişimini (intersection), birleşimini (union), farkını (difference) veya simetrik farkını bulmak.
  • Benzersiz Kategoriler: Kategorik bir özellik için mevcut benzersiz değerleri belirlemek.

Vaka Analizi: Ürün Kategorilerinde Benzersizliği Sağlama

Bir e-ticaret platformunda binlerce ürün olabilir ve her ürünün birden fazla kategorisi olabilir. Bu kategorileri analiz ederken veya yeni bir ürün eklerken, mevcut tüm benzersiz kategorilerin bir listesine ihtiyacımız olabilir.


# Ürün kategorileri içeren bir liste (bazıları tekrar ediyor)
urun_kategorileri = [
    "Elektronik", "Giyim", "Elektronik", "Ev Gereçleri",
    "Kitap", "Giyim", "Yazılım", "Kitap", "Aksesuar"
]

print(f"Orijinal kategoriler: {urun_kategorileri}")

# Benzersiz kategorileri bulmak için kümeyi kullanma
benzersiz_kategoriler = set(urun_kategorileri)
print(f"Benzersiz kategoriler: {benzersiz_kategoriler}") # Sıralı olmayabilir

# Hızlı üyelik testi
if "Elektronik" in benzersiz_kategoriler:
    print("Elektronik kategorisi mevcut.")

# İki kategorik setin kesişimi
yeni_kategoriler = {"Giyim", "Ayakkabı", "Spor"}
ortak_kategoriler = benzersiz_kategoriler.intersection(yeni_kategoriler)
print(f"Ortak kategoriler: {ortak_kategoriler}")

# Bir AI/ML modelinde kullanım:
# Bir veri setindeki 'Kategori' sütunundaki benzersiz değerleri bulup bunları
# one-hot encoding gibi yöntemlerle sayısal özelliklere dönüştürmek.
# Bu, modelin kategorik verileri anlamasına yardımcı olur.

Kümeler, veri temizliği, filtreleme ve kategorik veri analizi gibi işlemlerde performanslı çözümler sunar. Özellikle büyük veri setlerinde tekrar eden elemanları hızlıca kaldırmak veya belirli bir elemanın varlığını kontrol etmek gerektiğinde kümeler, listelere göre çok daha verimli olabilir.

Anahtar-Değer Eşleşmeleri: Sözlükler (dict) ile Karmaşık Veri Yapılarını Modelleme

Python'daki dict (sözlük) veri tipi, anahtar-değer çiftlerinden oluşan, sıralı olmayan bir koleksiyondur. Her anahtar benzersiz olmalı ve bir değere karşılık gelmelidir. Sözlükler, gerçek dünyadaki ilişkileri (bir kişiye ait isim, yaş, meslek gibi özellikler) veya karmaşık veri yapılarını modellemek için son derece güçlü bir araçtır. JSON verileriyle çalışırken veya yapılandırılmış konfigürasyonları saklarken sözlükler yaygın olarak kullanılır.

AI/ML'de sözlükler genellikle şu amaçlar için kullanılır:

  • Kullanıcı Profilleri/Özellik Setleri: Bir veri noktasına (kullanıcı, ürün) ait farklı özellikleri anahtar-değer çiftleri olarak depolamak.
  • Model Parametreleri: Bir makine öğrenmesi modelinin ayarlarını ve parametrelerini yapılandırmak.
  • Etiketleme/Haritalama: Kategorik verileri sayısal değerlere veya tersine haritalamak.
  • JSON Veri İşleme: Web API'larından gelen veya giden JSON tabanlı verileri parse etmek ve oluşturmak.

Vaka Analizi: Kullanıcı Profili ve Tavsiye Sistemleri

Bir tavsiye sisteminde, her kullanıcının tercihleri, demografik bilgileri ve etkileşim geçmişi gibi birçok farklı özelliği bir arada tutmamız gerekir. Sözlükler, bu tür karmaşık profilleri etkili bir şekilde modellemek için idealdir.


# Bir kullanıcının profil bilgileri
kullanici_profili = {
    "kullanici_id": "user_001",
    "ad": "Ali",
    "yas": 30,
    "cinsiyet": "Erkek",
    "tercihler": ["bilim kurgu", "macera"],
    "son_giris": "2023-10-26"
}

print(f"Kullanıcı adı: {kullanici_profili['ad']}")
print(f"Yaşı: {kullanici_profili.get('yas', 'Bilinmiyor')}") # .get() ile anahtar yoksa hata vermez

# Yeni bir özellik ekleme
kullanici_profili["abone_tipi"] = "Premium"
print(f"Abone tipi: {kullanici_profili['abone_tipi']}")

# Mevcut bir özelliği güncelleme
kullanici_profili["yas"] = 31
print(f"Güncel yaş: {kullanici_profili['yas']}")

# Bir AI/ML modelinde kullanım:
# Model parametrelerini saklamak için:
model_parametreleri = {
    "n_estimators": 100,
    "learning_rate": 0.01,
    "max_depth": 5,
    "random_state": 42
}

# model = RandomForestClassifier(**model_parametreleri) # Bir modelin parametrelerini bu şekilde geçirebilirsiniz.

# Özellik mühendisliği: Bir sözlükten model için özellik vektörü oluşturma
def profilden_ozellik_vektoru_olustur(profil):
    return [
        profil["yas"],
        1 if profil["cinsiyet"] == "Erkek" else 0, # One-hot encoding benzeri
        len(profil["tercihler"])
    ]

ozellik_vektoru = profilden_ozellik_vektoru_olust(kullanici_profili)
print(f"Model için özellik vektörü: {ozellik_vektoru}")

Sözlükler, büyük ve yapılandırılmış veri setleriyle çalışırken, veriye hızlı ve anlamlı bir şekilde erişim sağlamak için vazgeçilmezdir. Özellikle AI/ML modellerinin konfigürasyonunu yönetmek veya karmaşık veri noktalarını temsil etmek söz konusu olduğunda, sözlüklerin gücü açıkça ortaya çıkar.

Veri Tiplerini Etkili Kullanarak AI/ML Performansını Nasıl Optimize Edebiliriz?

AI/ML projelerinde veri tiplerini doğru seçmek, sadece kodun okunabilirliğini ve doğruluğunu artırmakla kalmaz, aynı zamanda uygulamanın performansını ve bellek kullanımını da doğrudan etkiler. Büyük veri setleri ve karmaşık modellerle çalışırken, optimizasyon kritik hale gelir. İşte veri tiplerini etkili kullanarak performansı artırmanın yolları:

Uzman İpucu: Büyük sayısal veri setleriyle çalışırken, Python'ın yerleşik listeleri yerine mutlaka NumPy dizilerini tercih edin. NumPy, C tabanlı optimize edilmiş algoritmaları sayesinde matematiksel işlemleri katlarca daha hızlı gerçekleştirir ve bellek kullanımını düşürür. Bu teknikle AI/ML modellerinizin eğitim ve tahmin sürelerini %40'tan fazla hızlandırabilirsiniz.
  1. NumPy Dizileri vs. Python Listeleri:
    * Neden Farklılar? Python listeleri farklı türde öğeleri barındırabilir ve esnektir. Ancak sayısal işlemler için optimize edilmemiştir. NumPy dizileri ise tek bir veri tipindeki öğeleri saklamak için tasarlanmıştır ve tüm elemanlar bellekte bitişik olarak saklanır.
    * AI/ML'deki Önemi: Matris çarpımı, vektör işlemleri gibi temel ML operasyonları NumPy dizileri üzerinde çok daha hızlıdır. Pandas DataFrame'leri de içten içe NumPy dizilerini kullanır.
    
    import numpy as np
    import time
    
    # Python listesi
    python_listesi = list(range(1000000))
    
    # NumPy dizisi
    numpy_dizisi = np.arange(1000000)
    
    baslangic_zaman = time.time()
    toplam_python = sum(python_listesi)
    bitis_zaman = time.time()
    print(f"Python listesi ile toplama süresi: {bitis_zaman - baslangic_zaman:.6f} saniye")
    
    baslangic_zaman = time.time()
    toplam_numpy = np.sum(numpy_dizisi)
    bitis_zaman = time.time()
    print(f"NumPy dizisi ile toplama süresi: {bitis_zaman - baslangic_zaman:.6f} saniye")
            


    Gördüğünüz gibi, NumPy operasyonları çok daha hızlıdır. Bu nedenle, sayısal verilerle yoğun işlem yapıyorsanız, verilerinizi NumPy dizilerine dönüştürmek performansı ciddi şekilde artıracaktır.

  2. Bellek Ayak İzi ve Hassasiyet:
    * int ve float seçimi, bellek tüketimini etkiler. Örneğin, yaş gibi küçük tam sayılar için gereksiz yere float kullanmak hem bellek israfına hem de hassasiyet kayıplarına yol açabilir.
    * NumPy'da np.int8, np.float16 gibi daha küçük bellek ayak izine sahip veri tipleri seçerek bellek kullanımını daha da optimize edebilirsiniz. Özellikle gömülü sistemler veya mobil cihazlar için modeller geliştirirken bu önemlidir.
  3. Değişmezlik Avantajları: Demetler ve Kümeler:
    * Demetler (tuple), listelere göre biraz daha az bellek tüketir ve yinelemeleri daha hızlı olabilir. Özellikle içeriğinin değişmeyeceğinden emin olduğunuz sabit veri setleri (örneğin, veri kümesindeki bir veri noktasının koordinatları) için demetleri kullanın.
    * Kümeler (set), elemanların varlığını çok hızlı bir şekilde kontrol etmek için hash tabanlı yapıları kullanır. Büyük listelerde in operatörüyle arama yapmak yerine, kümeye dönüştürüp arama yapmak performansı artırabilir.
  4. Tip İpuçları (Type Hinting):
    * Python dinamik olarak tipli bir dil olsa da, Python 3.5 ve sonrası ile gelen tip ipuçları (mypy gibi araçlarla kontrol edilebilir), kodun okunabilirliğini artırır, hataları erken aşamada yakalamanızı sağlar ve IDE'lerin otomatik tamamlama özelliklerini geliştirir. Performansa doğrudan etkisi olmasa da, bakım maliyetini düşürerek dolaylı bir optimizasyon sağlar.
    
    def kare_al(sayi: int) -> int:
        return sayi * sayi
    
    def veri_isle(veri: list[float]) -> np.ndarray:
        return np.array(veri)
            

Mobil Uyumlu HTML ve Veri Tipleri İlişkisi:

Veri tipleri doğrudan HTML ile ilgili olmasa da, AI/ML modellerinden elde edilen çıktıların (örneğin, bir grafik, bir metin bloğu veya bir tablo) farklı cihazlarda (mobil, masaüstü) nasıl görüntüleneceği, kullanıcı deneyimi ve performans açısından önemlidir. Örneğin, bir modelin ürettiği büyük boyutlu bir görüntü çıktısı mobil cihazlarda performans sorunlarına neden olabilir. Bu durumda, çıktının farklı ekran boyutlarına göre optimize edilmiş versiyonlarını sunmak gerekebilir. Aşağıdaki gibi bir CSS media query örneği, bu bağlamda verinin sunumunu optimize etmeye yarar:








Model tahmin sonuçları: Yüksek olasılıkla müşteri churn edecek.

Bu örnek, AI/ML çıktılarının görsel temsilinin farklı cihazlara nasıl uyarlanabileceğini gösterir. Veri tipini doğru seçmek (örneğin, bir görüntüyü düşük çözünürlüklü bir formatta kaydetmek) ve ardından bu veriyi responsive tasarımla sunmak, genel kullanıcı deneyimi ve uygulama performansının ayrılmaz bir parçasıdır.

Sonuç: AI/ML Yolculuğunuzda Veri Tiplerinin Gücü

Python'daki veri tiplerini anlamak ve doğru bir şekilde kullanmak, AI/ML projelerinizin temelini oluşturur. Bu rehberde gördüğümüz gibi, sayısal verilerden metinsel ifadelere, mantıksal kararlardan karmaşık koleksiyonlara kadar her bir veri tipi, veriyi temsil etme, işleme ve optimize etme konusunda kendine özgü avantajlar sunar. Doğru veri tipi seçimi, sadece kodunuzun okunabilirliğini ve doğruluğunu artırmakla kalmaz, aynı zamanda bellek verimliliği ve işlem hızı açısından da kritik farklar yaratır. Özellikle büyük veri setleriyle çalışırken ve performans odaklı uygulamalar geliştirirken, bu temel bilgilerin önemi bir kat daha artar. Artık Python'ın zengin veri tipleriyle donanmış olarak, AI/ML dünyasında daha sağlam adımlar atabilir, daha verimli algoritmalar tasarlayabilir ve daha doğru modeller geliştirebilirsiniz. Unutmayın, veriyi anlayan ve onu doğru şekilde temsil edenler, geleceğin akıllı sistemlerini inşa etmeye en yakın olanlardır.

Sıkça Sorulan Sorular (SSS)

  • Q: Neden Python'da int ve float arasında ayrım var?

    A: Bu ayrım, hem veri depolama verimliliği hem de matematiksel işlem hassasiyeti için gereklidir. Tam sayılar (int) tam değerleri temsil eder ve bellekte kayan noktalı sayılardan (float) daha az yer kaplayabilir (özellikle küçük değerler için). Kayan noktalı sayılar ise ondalık değerleri, ölçümleri ve bilimsel hesaplamaları yüksek hassasiyetle temsil etmek için kullanılır. AI/ML'de, sayım verileri veya ID'ler için int, olasılıklar, fiyatlar veya sensör okumaları için float tercih edilir.

  • Q: Listeler ve demetler arasındaki temel fark nedir? AI/ML'de hangisini ne zaman kullanmalıyım?

    A: Temel fark, değiştirilebilir (mutable) olup olmamalarıdır. Listeler değiştirilebilir; yani oluşturulduktan sonra elemanları eklenebilir, çıkarılabilir veya değiştirilebilir. Demetler (tuple) ise değiştirilemez (immutable) ve bir kez oluşturulduktan sonra içeriği sabittir. AI/ML'de:

    • Listeleri genellikle dinamik veri setleriyle çalışırken, veri ön işleme aşamalarında ara sonuçları depolarken veya elemanları değişmesi gereken veri koleksiyonları için kullanmalısınız.
    • Demetleri ise verinin yanlışlıkla değiştirilmesini istemediğiniz durumlarda (örneğin, coğrafi koordinatlar, RGB renk değerleri) veya sözlük anahtarı olarak kullanılabilecek hash'lenebilir koleksiyonlara ihtiyacınız olduğunda tercih etmelisiniz. Demetler, listelere göre biraz daha az bellek tüketebilir ve iterasyonları daha hızlı olabilir.
  • Q: Büyük veri setlerinde veri tipi seçiminin performansa etkisi nedir?

    A: Büyük veri setlerinde veri tipi seçimi performansı doğrudan etkiler. Yanlış veri tipleri bellek israfına ve daha yavaş işlem sürelerine yol açabilir. Örneğin:

    • Python'ın yerleşik listeleri yerine NumPy dizileri kullanmak, özellikle sayısal verilerle yapılan matematiksel işlemler için performansı katlarca artırır çünkü NumPy, C tabanlı optimize edilmiş algoritmalar kullanır ve belleği daha verimli yönetir.
    • NumPy içinde, verinin aralığına ve hassasiyetine uygun (örn. np.int8, np.float16 yerine np.int64, np.float64) daha küçük bellek ayak izine sahip veri tipleri seçmek, belleği önemli ölçüde azaltır ve özellikle büyük veri setlerinde I/O ve işlem sürelerini hızlandırır.
    • Sözlükler (dict) ve kümeler (set), anahtar tabanlı hızlı arama ve üyelik testleri için optimize edilmiştir; bu da büyük koleksiyonlarda eleman kontrolünü çok verimli hale getirir.
  • Q: Stringleri AI/ML modelleri için nasıl hazırlamalıyız?

    A: Ham string verileri genellikle doğrudan AI/ML modellerine verilemez. "Metin ön işleme" adı verilen bir dizi adımdan geçirilmelidir:

    • Küçük Harfe Çevirme: Tüm metni küçük harfe dönüştürerek "Elma" ve "elma" gibi farklı yazımların aynı kabul edilmesini sağlar.
    • Noktalama İşaretlerini Kaldırma: Metindeki gürültüyü azaltmak için noktalama işaretleri, özel karakterler ve sayılar genellikle kaldırılır.
    • Tokenizasyon: Metni kelimeler veya cümleler gibi daha küçük, anlamlı birimlere ayırma işlemidir.
    • Durma Kelimelerini Kaldırma: "ve", "bir", "ile" gibi yaygın ve anlamsız kelimelerin listeden çıkarılması.
    • Kök Bulma (Stemming) veya Lemmatizasyon: Kelimeleri morfolojik olarak kök formlarına indirgeme (örn. "koşuyor", "koştu" -> "koş").
    • Vektörleştirme: Ön işlenmiş metinleri TF-IDF veya Word Embeddings (Word2Vec, GloVe) gibi teknikler kullanarak sayısal vektörlere dönüştürme. Modeller yalnızca sayısal verilerle çalışabildiğinden bu adım kritik öneme sahiptir.

    Bu adımlar, metin verilerinin bir makine öğrenmesi modelinin anlayabileceği ve işleyebileceği bir formata dönüştürülmesini sağlar.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version