Python, veri bilimi dünyasının önde gelen nesne yönelimli gelişmiş programlama dillerinden. Bu yazıda Python’ın ilk günlerine dönecek, bu programlama dilindeki değişken isimlendirmelerine ve bu dildeki temel veri tiplerine kısa bir bakış atacağız. Vakit kaybetmeden başlayalım.
Python isminin her ne kadar piton yılanından geldiğine dair yaygın bir kanı olsa da programlama dilininin ortaya çıkış serüvenine göz attığımızda bu bilginin pek doğru olmadığını anlıyoruz. Python programlama dili eğitimini matematik ve bilgisayar bilimleri alanlarında tamamlamış Hollandalı Guido van Rossum tarafından 1989 yılında geliştirilmeye başlanıyor. Van Rossum, önceleri bir İngiliz komedi topluluğunun hazırladığı diziyi yakından takip ediyormuş. İşte Monty Python isimli altı kişilik bu topluluğun BBC için hazırladığı Monty Python’s Flying Circus isimli dizi, 1989’da geliştirilmeye başlanan programlama dilinin isimlendirilmesinde ilham kaynağı oluyor.
Guido van Rossum
Sonraları Google ve Dropbox gibi şirketlerde de çalışan Python’ın mimarı Van Rossum, buralarda çalışırken de Python’ı ihmal etmemiş ve bu dilin gelişim sürecinin önemli noktalarında katkılarını sunmayı sürdürmüş. 2018’de emekli olduğunu açıklamasının ardından muhtemelen dayanamayıp 2020’de bu sefer Microsoft’ta çalışmaya başlaması da kendisinin yaşamından enteresan denebilecek bir kesit.
Guido van Rossum’un LinkedIn profili
Herhangi bir programlama çabasının belki de ilk adımı veriyi bilgisayara takdim etme aşaması.
Bilgisayarımıza Python kurulumunu nasıl gerçekleştirilebileceğimize dair internette onlarca anlatıma rastlamak mümkün. Bu nedenle bu yazıda direkt olarak bu konuya odaklanmayacağız. Öte yandan bilgisayarınıza kurmadan da Python üzerinde çeşitli denemeler yapmak isterseniz bunu Google Colab aracılığıyla yapabilirsiniz.
Herhangi bir veri bilimi çalışmasında önceliğimiz adı üstünde veri. Veriyi nasıl tutacağımız, nasıl okuyacağımız, bir programlama çalışması dahilinde nasıl değerlendireceğimiz ise o verinin tipi ile bağlantılı. Python’da basitçe veriyi çalışmanın hafızasında tutabilmek için onu tanımlıyor, değişken yaratıyoruz.
Örneğin 13 sayısını bir onUc değerine atamak istiyor ve bu onUc değişkenini çalışmanın farklı noktalarında kullanmak istiyoruz. Bunu Python’da “onUc = 13” diyerek sağlamak hayli kolay ama sıradan bir değişkenin isimlendirmesinde dikkat etmemiz gereken bazı şeyler de yok değil:
Değişken isimleri genel olarak harfler veya alt tire ile başlayabilir. Öte yandan sayılarla değişken ismi başlatılmamalı. Ek olarak değişken isimlerinde Türkçe karakterlere yer vermemeyi bir alışkanlık haline getirmeli.
Yine ufak bir uyarıda bulunmak gerek: Python büyük-küçük harf duyarlı bir dil. Yaptığımız bir çalışmada onUc değişkenini, ONUC şeklinde çağıramayız.
Değişken isimlendirmelerinde farklı stillere rastlamak mümkün:
Camel Case İsimlendirme: onUC
Pascal Case İsimlendirme: OnUc
Snake Case İsimlendirme: on_uc
Python programlama dilinde değişkenlerde tutulan verilerin farklı tiplerde olabileceğini söyleyebiliriz. Python’daki temel veri tipleri şu şekilde sınıflandırılabilir:
Metin veri tipi (string)
Sayısal veri tipleri (integer, float, complex)
Sıralanabilir veri tipleri (list, tuple, range)
Haritalama veri tipi (dict)
Küme veri tipleri (set, frozenset)
Boolean veri tipi (bool)
İkili veri tipleri (bytes, bytearray,memoryview)
Python’da metinsel ifadeler string veri tipinde tutulur. stringVeri isimli değişkende “miuul” ifadesini tutmak için aşağıdaki işlem yeterli:
stringVeri = “miuul”
Öte yandan sayısal bir ifadenin de string olarak tutulabileceğini hatırlatmakta fayda var. Başta verdiğimiz onUc değişkeni örneğini anımsayalım. “onUc = 13” tanımlamasında 13 sayısını bir string olarak değil, bir sayısal veri olarak tutmuştuk. Ancak şu şekilde bir tanımlama yapılsaydı durum farklı olacaktı:
onUc = “13”
Tek tırnak, çift tırnak veya üç tırnak arasına yazılarak veya str() ifadesinde parantez içinde ifade edilerek bir değişkenin string olarak tutulması sağlanabilir. Bu ise örneğin onUc değişkeninin string olarak yukarıda gösterildiği şekilde tutulması durumunda:
onUc + onUc
işleminin sonucunda bize “1313” sonucunu verecektir. String ifadelerdeki toplama işlemi, sayısal verilerdeki toplama işleminden farklı çalışır. Kısaca sayısal görünümlü string ifadelere karşı uyanık olmalı.
Python’da sayısal veri tiplerini üç ayrı başlık altında değerlendirebiliriz.
Integer (Int)
Integer ifadeler tam sayı olarak tutulan verilerdir. Bu veri tipinde sayısal ifadeler ondalık değer almaz. int() şeklinde tanımlama yapamak mümkündür.
Float
Float ifadeler integer değişkenlerden farklı olarak ondalık değerler alır. float(12) şeklinde tanımladığımız bir değişkenine dahi baktığımızda 12.0 değerini aldığını görürüz.
Complex
Lisede anlatılan karmaşık sayıları belki hatırlarsınız. Bu ifadelerin gerçek ve sanal kısımları vardır. Complex ifadeler bir örneğin (5j + 1) gibi ifadelerdir. Sabit sayı gerçek kısmı, 5j’li bölümü ise karmaşık ifadenin sanal kısmını gösterir.
Python’da complex(5) gibi bir tanımlama (5 + 0j) çıktısını karşımıza getirirken, complex(5j) ibaresi (0 + 5j) ile denktir.
Veri bilimi çalışmalarında sıklıkla karşımıza çıkan sıralanabilir veri tipleri de sayısal veri tipleri gibi üç ayrı başlıkta önümüze çıkıyor.
Listeler Python’da köşeli parantez [] içersinde tanımladığımız sıralı veri tipleridir. list() ile tanımlanabilir. Sıralı olmalarının dışında temel özellikleri şu şekilde sıralanabilir:.
Kapsayıcıdırlar. Yani kısaca içlerinde farklı veri türlerini tutabilirler. Tek tür veri tipi duyarlılıkları bulunmaz.
Değiştirilebilirdirler. Liste elemanlarına düzenlemek, farklı eleman atamaları yapmak mümkündür. Bu yapıları itibariyle aşağıda değineceğimiz tuple veri yapısından farklıdırlar.
Listelerin sıralı olması ise kısaca elemanlarına bulundukları index yardımıyla erişilebilir olması anlamına geliyor.
[‘m’,’i’,’u’,’u’,’l’] listesi
Görselde yer alan veri liste tipinde ve dolayısıyla sıralı olduğundan index yardımıyla listenin her bir elemanına erişilebilir. Index, bir listede elemanın bulunduğu yeri simgeler ve 1’den değil 0’dan başlar. Görseldeki listeyi a = [‘m’,’i’,’u’,’u’,’l’] diyerek a isimli değişkene atamış olsaydık a[0] dedimizde ‘m’ değerine ulaşacaktık. Benzer şekilde negatif index de kullanılabilir ve sondan 5. liste elemanı olması hasebiyle a[-5] diyerek aynı elemana ulaşabiliriz.
Python’da tuple veri tipi listelerin huysuz kardeşi gibi düşünülebilir. Tuple tanımlamaları parantezler () vasıtasıyla yapılır ve tuple() denerek oluşturulur. Listelerden en büyük farkları değiştirilemez yapılarıdır. Index yardımıyla tuple içinde yer alan elemanlara erişilebilir ancak bu elemanların yerlerine atama yapmak tuple veri tipi dahilinde söz konusu değildir.
Tuple içindeki bir eleman ancak değişkenin kendisinin listeye dönüştürülmesinin ardından değiştirilebilir ve sonrasında liste yeniden tuple veri tipine dönüştürülebilir.
Range veri tipi belirli bir aralıktaki sayıları saklar. range(5) ifadesi 0’dan 5’e kadar (5 hariç) sayıları listelerken range(3,5) ibaresi bize 3 ve 4 sayılarını verir.
Bir başka veri tipi ise haritalama veri tipi olarak düşünülebilecek, günlük yaşamda kullandığımız sözlüklere benzer yapıda oldukları hayal edilebilecek bir veri tipidir. Python’da dictionary (dict) olarak karşımıza çıkarlar.
Sözlük yapısı süslü parantezler {} ile tanımlanır ve anahtar kelime ile değer ilişkisi diyebileceğimiz bir yapı üzerine bina edilir. Özünde sözlükte aranan kelime ile kelimeye karşılık gelen bir açıklama gibi düşünülebilir. Sıralanabilir veri tiplerinden farklı olarak Python geliştirmelerinde 3.7 versiyonuna değin sözlükler sırasızdılar. Bunun yanı sıra temel özellikleri arasında şunlar bulunur:
Değiştirilebilirdirler.
Kapsayıcıdırlar.
Basit bir sözlük tanımlaması şu şekildedir.
kisi = {“isim”:”Hande”, “yas”:24}
Bu tanımlama dahilinde anahtar kelimeler üzerinden değer araması yapmak mümkündür. kisi[“isim”] dediğimizde Python bize “Hande” sonucunu verecektir.
Küme veri tipleri dediğimizde ilkokul günlerimizden hatırlayacağımız kümeler konusu aklımıza gelebilir. Bu veri tiplerini iki başlığa ayırabiliriz.
Her ne kadar sözlükler gibi süslü parantezler {} vasıtasıyla tanımlanıyor olsalar da set veri yapıları anahtar kelime-değer gibi ikili yapılar içermezler. Birçok yönüyle gerkçekten de ilkokul günlerimizdeki kümeleri andırırlar.
Değiştirilebilirdirler.
Sırasız ve eşisizdirler. Bir index yardımıyle set elemanlarına ulaşılamaz ve aynı değerden birden fazlasına set içerisinde rastlanmaz.
Farklı veri türlerini içerlerinde barındırabildiklerinden kapsayıcıdırlar.
frozenSet
Liste ve huysuz kardeşi tuple arasındaki ilişkiye benzer bir ilişki de set ve frozenSet arasında bulunuyor. Tuple veri yapılarına benzer şekilde frozenSet yapıları değiştirilemezler. Diğer tüm özellilkleri ise setlerle aynıdır.
Bu veri tipi içi dünya siyahlar ve beyazlardan ibaret. bool() denerek oluşturulan bu yapı, doğru ve yanlış olmak üzere iki değer alabilir. True/False veya 1/0 olarak değerler alırlar.
Veri bilimi çalışmalarında yukarıda bahsedilenlere nazaran daha az sıklıkta karşımıza çıkan ikili veri tipleri ise birkaç farklı alt başlığa sahip.
Bytes veri tipi bir değişkeni byte nesnesine dönüştürür. Eğer değişken özünde bir integer değer ise tam sayı değeri kadar boyutu olan bir byte nesnesi yaratılır. Değişkenin sunduğu değer ise değişmez. bytes() ile oluşturulur.
Bytes ile benzer bir mantıkla çalışır ancak değişkenin sunduğu değerde farklılaşma olabilir. bytesarray() ile oluşturulur.
Python’da arabellek protokolünü ortaya çıkarmanın güvenli bir yolu bellek görüntüleme nesnesi oluşturmaktır. Memoryview bu işlevi görür ve memoryview() ile yaratılır.
Python’a kısa bir giriş yaparak değişken isimlendirmelerini ve Python’daki temel veri tiplerini ele aldığımız bu yazı ilginizi çektiyse Miuul’un veri okuma, veri ön işleme, özellik geliştirme ve yapay öğrenme modelleri üretimi gibi tüm temel veri bilimi çalışmalarını yapabilmek için gerekli altyapıyı sunan “Veri Bilimi için Python Programlama” uzmanlık programına göz atmayı unutmayın!
Kaynaklar