Veri bilimi için kullanılabilecek en önemli dillerden biri Python'dur. Python kolay öğrenilebilen sentaksı (syntax) ve veri bilimine yönelik hazırlanan çok güçlü kütüphaneleri sayesinde istediğiniz işlemleri çok etkin bir şekilde yapabilmenize olanak sağlar. Veri bilimine giriş yapmak isteyenlerin bu dili temel seviyede öğrenmeleri tavsiye edilir.
Bu dokümanda dili formal bir şekilde öğretmek yerine veri biliminde lazım olabilecek operasyonlar hakkında ufak kod parçaları vermenin daha iyi olabileceğini düşündüm.
# Python sürümünü görelim
import sys # kütüphane bu şekilde ekleniyor
print("Kullanılan python sürümü")
print(sys.version)
# Bir satır boşluk
print("\n")
# Değikenler
# integer
a = 2
print("a = %d / Tipi: %s" % (a,type(a).__name__ ) )
print("\n")
# float
b = 3.0
print("b = %f / Tipi: %s " % (b,type(b).__name__ ) )
print("\n")
# boolean
c = True
print("c = %r / Tipi: %s " % (c,type(c).__name__ ))
print("\n")
# string
d = "demo"
print("d = %s / Tipi: %s " % (d,type(d).__name__ ))
print("\n")
# kompleks
e = 1j
print("e = %s / Tipi: %s " % (e,type(e).__name__ ))
# Örnek olarak float bir değişkeni int'e çevirelim
a = 1.345
print("a = %f / Tipi: %s" % (a,type(a).__name__ ) )
a = int(1.345)
print("a = %d / Tipi: %s" % (a,type(a).__name__ ) )
print("\n")
# Örnek olarak float bir değişkeni str'e çevirelim
a = 1.345
print("a = %f / Tipi: %s" % (a,type(a).__name__ ) )
a = str(1.345)
print("a = %s / Tipi: %s" % (a,type(a).__name__ ) )
LIST
# Bir list yaratalım
a_list = [1,2,3,4,5]
# Belirli elemanına erişim
print(a_list[0])
# Listenin başlangıcından 2. elemanına kadar kesit alalım
# Bu operasyon liste döndürür
print(a_list[:2])
# Listenin 2. elemanından sonuncu elemanına kadar kesit alalım
print(a_list[2:])
# Listenin 2. elemanından 3. elemanına kadar kesit alalım
print(a_list[2:3])
# Listenin son elemanına erişim
print(a_list[-1])
Listenin elemanları farklı veri yapıları, hatta başka listeler olabilir. Yukarıda erişim operasyonları bunun için de geçerlidir.
b_list = [1, "merhaba", True, [1,2,3,4], 3.14,["hoşçakal",1234]]
print(b_list)
print(b_list[2:4])
Listenin içindeki listelere erişim sağlarken ikili indeksleme kullanmamız gerekir.
b_list[-1][0]
a_list = [1,2,3,4,5,6]
b_list = [x**2 for x in a_list]
print(b_list)
TUPLES
Tuple tanımlanırken köşeli parantez yerine yuvarlak parantez kullanılır.
Tuple veri tipinin en önemli özelliği "immutable" olmasıdır. Yani "tuple"ı bir kere tanımladıktan sonra değiştirmeniz mümkün değildir.
Aşağıdaki örnekte ilk elemanı değiştirmeye çalıştığımızda bir hata mesajı çıkacak. ('tuple' object does not support item assignment)
a_tuple = (1,"bir")
print(a_tuple[0])
print(a_tuple[1])
# tuple elemanını değiştirmeye çalışalım
try:
a_tuple[0] = "değişir mi?"
except Exception as e:
print(e)
DICTIONARY
En faydalı veri tiplerinden biri de "dictionary"lerdir, sıklıkla kullanılır.
Anahtar - Değer (Key -Value) eşlerinden oluşur
dict_a = {"liste":[1,2,3,4],"metin":"dictionary örneği",
"dict_icinde_dict": {"a":[1,2],"b":[3,4]},
"my_favorite_bands":["Pink Floyd","Queen"],
"my_favorite_songs":["Time","Bohemian Rhapsody"]}
dict_a
# İçindeki elemanlara erişim
dict_a["dict_icinde_dict"]
# İkinci seviyeye de erişim istersek
dict_a["dict_icinde_dict"]["a"][-1]
SET
Sıralanmamış ve indekslenmemiş elemanlar bütünüdür. Birleşim, kesişim, fark gibi operasyonları kolaylıkla set kullanarak yapabiliriz
a_set = {1,2,3,4,5}
b_set = {4,5,6,7,8}
# Birleşim
print(" Birleşim")
print(a_set.union(b_set))
#veya
print(a_set | b_set)
# Kesişim
print(" Kesişim")
print(a_set.intersection(b_set))
#veya
print(a_set & b_set)
# Fark
print(" a_set'in b_set'ten farkı")
print(a_set.difference(b_set))
# veya
print(a_set-b_set)
# Simetrik fark
print(" Simetrik fark")
print(a_set ^ b_set)
Numerik basit değişkenler için
a = 6
b = 3.0
print("a = %d " % a)
print("b = %f " % b)
print(" Toplama a+b ")
print(a + b)
print(" Çıkarma a-b ")
print(a-b)
print(" Değişken eşitleme c=a+b ")
c=a+b
print(c)
print(" Bölme a/b ")
print(a/b)
print(" Çarpma a*b ")
print(a*b)
print(" Kuvvetini alma a**b ")
print(a**b)
print(" Modunu alma a%(b+1) ")
print(a%(b+1))
Listeler için
a_list = [1,2]
b_list = [3,4,5]
# iki listeyi ard arda ekler
print(a_list+b_list)
# Listeyi tekrar ederek ekler
print(a_list*4)
String'ler için
a_str = "asd"
b_str = "qwerty"
# İki stringi ard arda ekler
print(a_str+b_str)
# String'i tekrar eder
print(a_str*4)
"if / else" ifadeleri ve matıksal operatörler
# İki değişken yaratalım
k=5
l=10
# Eşittir operatörü
if k==5:
print("k==5 doğru")
# Eşit değildir operatörü
if k!=5:
print("hiçbir şey")
else:
print("Else kısmına geldi")
# Büyüktür operatörü
if k>3:
print("k, 3'ten büyüktür")
# Küçüktür
if k<=5:
print("k, 5'e küçük veya eşittir")
# Mantıksal "ve(and)"
if (k==5) and (l==10):
print("k, 5'e ve l, 10'a eşittir")
# Mantıksal "veya(or)"
if (k==5) or (l==20):
print("k, 5'e veya l, 20'a eşittir")
# elif ifadesi
if k>5:
print("hiçbir şey")
elif k<5:
print("hiçbir şey")
elif k==5:
print("elif ifadesinin sonu")
if 5 > 3: print("5, 3'ten büyüktür")
print("hiçbir şey") if 5 < 3 else print("Yanlış önerme")
"for" döngüsü
for i in [1,2,3,4]:
print(i)
"while" döngüsü
i=0
while i < 5:
print(i)
i=i+1
"break","continue","pass" ifadeleri
gunler = ["Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi","Pazar"]
for gun in gunler:
if gun == "Pazartesi":
print("continue: En zor gün " + gun + " :( bunu atlayalım lütfen. Tekrar yazılmayacak")
continue
if gun == "Salı":
print("pass: Bunun etkisi olmayacak " + gun + " tekrar yazılacak")
pass
if gun == "Cuma":
print("break: Cumartesi'ye gelmeden " + gun + "'da bitirelim. Cumartesi ve Pazar yazılmayacak")
break
else:
print(" Bugün " + gun)
try and except ifadeleri
Çoğu zaman programda bir hata olduğunda bunu yakalayıp ona göre programın işleyişini değiştirmek veya hata mesajları çıkarmak gerekebilir. Bu sebeple try ve except yapısını kullanabilir. except ifadesinden sonra "Exception as e" diyerek hata mesajını da yakalayabilmek mümkündür.
a_tuple = (1,"bir")
# tuple elemanını değiştirmeye çalışalım
try:
a_tuple[0] = "değişir mi?"
except Exception as e:
print(e)
Fonksiyonlar çağrıldığı zaman koşan kod parçalarıdır. Fonksiyonlara parametre gönderebiliriz. Fonksiyonlardan çıktı alabiliriz.
# En basit şekilde bir fonksiyon hazırlayalım
def a_function():
print("Merhaba dünya!")
# Hazırladığımız fonksiyonu çağırıyoruz.
a_function()
# Varsayılan parametresi olan bir fonksiyon yazalım
def b_function(country_name="Türkiye"):
print("Burası " + country_name)
b_function()
b_function("dünya")
# Değer döndüren bir fonksyion yazalım
def c_function(num = 2):
return num**2
ret_val = c_function(3)
print(ret_val)
LAMBDA FONKSİYONLAR
Lambda fonksiyonlar birden fazla parametre alabilen fakat tek bir ifadeye sahip fonksiyonlardır.
Genel yapıları aşağıdaki gibidir
*lambda parametre : ifade*
# Sayının kübünü alan bir fonksiyon
a_lambda_function = lambda x : x**3
print(a_lambda_function(3))
Diyelim ki sayının n. kuvvetini alan jenerik bir fonksiyon ailesi oluşturmak istiyoruz. Bu durumda bir başka fonksiyonun içinde lambda kullanabiliriz.
def power_family(n):
return lambda x:x**n
karesini_al = power_family(2)
kubunu_al = power_family(3)
dorduncu_kuvvetini_al = power_family(4)
print(karesini_al(2))
print(kubunu_al(2))
print(dorduncu_kuvvetini_al(2))
Python "Object Oriented" bir dildir. Python dilindeki hemen hemen herşey objelerden (objects), özelliklerden (properties) ve metotlardan (methods) oluşmaktadır.
# Genel sınıf tanımlası
class a_class:
# Onje yaratıldığında çağrılan fonksiyon (aka Constructor)
def __init__(self,name,number):
self.name = name
self.number = number
def print_info(self):
print("Name: " + self.name + "\nNumber: " + str(self.number))
my_name = a_class("dataFLOYD",42)
my_name.print_info()