Veri Bilimi İçin Python
Veri bilimi alanında ilk adımlarını atan birisi olarak bu yolculukta öğrendiklerimi yazıya dökerek kendi kütüphanemi oluşturmaya başladığım ilk medium yazısına hoş geldiniz.
Bu uzun yazıda aşağıdaki konulara yakından bakmış olacaksınız. Keyifli dakikalar…
- Veri Yapıları
- Fonksiyonlar
- Koşullar
- Döngüler
- Comprehension
VERİ YAPILARI (DATA STRUCTURES)
Veri saklama, işleme ve düzenleme işlemleri için kullanılır
# — Sayılar (Numbers): int, float, complex
# — Karakter Dizileri (Strings): str
# — Boolean (TRUE-FALSE): bool
# — Liste (List)
# — Sözlük (Dictionary)
# — Demet (Tuple)
# — Set
Numbers:
İnt: x = 46
Float : x = 10.3
Complex : x = 2j + 1
Strings= str
x = “Hello ai era”
Boolean
True- False döndüren veri yapısıdır. Sorgulama yapmak için kullanılır.
type(True)
5 == 4
3 == 2
1 == 1
Liste
x = [“btc”, “eth”, “xrp”]
— Değiştirilebilir
— Sıralıdır. Index işlemleri yapılabilir.
— Kapsayıcıdır.
Sözlük (dictionary)
x = {“name”: “Peter”, “Age”: 36} # Key ve Value şeklinde değer alırlar, “name” key değeri, “Peter”, “Age”: 36 Value değeridir. Aynı key bilgisiyle birden fazla eleman olamaz.
# Değiştirilebilir.
# Sırasız. (3.7 sonra sıralı.)
# Kapsayıcı.
Tuple
x = (“python”, “ml”, “ds”)
Elemanları sıralanabilir ancak güncellenemez ve her bir eleman liste içerisinde birden fazla tekrarlanabilir.
# — Değiştirilemez.
# — Sıralıdır.
# — Kapsayıcıdır.
Set
x = {“python”, “ml”, “ds”}
# — Değiştirilebilir.
# — Sırasız + Eşsizdir.
# — Kapsayıcıdır.
x = {“python”, “ml”, “ds”}
Not 1: Liste, tuple, set ve dictionary veri yapıları aynı zamanda Python Collections (Arrays) olarak geçmektedir.
Not 2: Python’da index’ler 0’dan başlar.
String (Karakter Dizisi) Metotları
#dir(str)
dir () fonksiyonu, Python programlama dilinde bir nesnenin özelliklerini, metotlarını ve öğelerini listelemek için kullanılan bir yerleşik bir fonksiyondur.
# len
Stiring’lerin uzunluklarına erişiriz.
name = “john”
len(name) # 4
# upper() & lower()
küçük harf -büyük harf dönüşümlerini yaparız.
“yasemin”.upper() # YASEMİN
“YASEMİN”.lower() #yasemin
# replace
Karakterler değiştirir.
hi = “Hello AI Era”
hi.replace(“l”, “p”) # Heppo AI Era
# split: Böler
“Hello AI Era”.split() # [‘Hello’, ‘AI’, ‘Era’]
# strip: Kırpar
“ ofofo “.strip()
“ofofo”.strip(“o”) # fof
# capitalize: ilk harfi büyütür
“foo”.capitalize() #Foo
“foo”.startswith(“f”) #True
Liste Metotları (List Methods)
# append: eleman ekler
notes.append(100) #Listenin sonuna100 sayısını ekler.
# pop: indexe göre siler
notes.pop(5) = 5. İndex’teki veriyi siler.
# insert: indexe ekler
notes.insert(2, 99) = 2. İndex’e 99 sayısını ekler.
Sözlük Metodları (Dictonary Methods)
Sözlük Metotları (Dictonary Methods)
dictionary = {“REG”: “Regression”, “LOG”: “Logistic Regression”, “CART”:“Classification and Reg”}
dictionary[“REG”]
Çıktı = 'Regression’
dictionary = {“REG”: [“RMSE”, 10],
“LOG”: [“MSE”, 20],
“CART”: [“SSE”, 30]}
dictionary[“CART”][1] = CART key’inin 1. index’teki değerini getirir.
Çıktı = 30
dictionary[“REG”] = [“YSA”, 10] = REG key’inde RMSE değerinin yerine YSA değerini atar.
Çıktı=
dictionary = {“REG”: [“YSA”, 10],
“LOG”: [“MSE”, 20],
“CART”: [“SSE”, 30]}
# dictionary.keys()
Tüm Key’lere erişmek için kullanılır.
# dictionary.values()
Tüm Value’lara erişmek için kullanılır.
# dictionary.items()
Tüm çiftleri tuple halinde listeye çevirmek için
Çıktı = {‘REG’: [‘YSA’, 10], ‘LOG’: [‘MSE’, 20], ‘CART’: [‘SSE’, 30]}
# dictionary.update({“REG”: 11})
Key-Value değerini güncellemek için kullanılır.
Çıktı = {‘REG’: 11, ‘LOG’: [‘MSE’, 20], ‘CART’: [‘SSE’, 30]}
#dictionary.update({“RF”: 10})
Yeni Key-Value eklemek için kullanılır.
Çıktı = {‘REG’: 11, ‘LOG’: [‘MSE’, 20], ‘CART’: [‘SSE’, 30], ‘RF’: 10}
Set Metotları (Set Methods)
#difference()
İki kümenin farkını gösterir.
set1 = set([1, 3, 5])
set2 = set([1, 2, 3])
set1.difference(set2) = # set1'de olup set2'de olmayanlar. Çıktı {5}
set1 — set2 # diğer yöntem
# symmetric_difference()
İki kümede de birbirlerine göre olmayanları gösterir.
set1.symmetric_difference(set2) = Çıktı {2, 5}
set2.symmetric_difference(set1) = Çıktı {2, 5}
# intersection():
İki kümenin kesişimini gösterir.
set1.intersection(set2) = Çıktı {1, 3}
set2.intersection(set1) = Çıktı {1, 3}
set1 & set2 = Çıktı {1, 3}
#union()
İki kümenin birleşimi gösterir.
set1.union(set2) # Çıktı {1, 2, 3, 5}
set2.union(set1) # Çıktı {1, 2, 3, 5}
# isdisjoint()
İki kümenin kesişimi boş mu?
set1 = set([7, 8, 9])
set2 = set([5, 6, 7, 8, 9, 10])
set1.isdisjoint(set2) #Çıktı — ‘False’
set2.isdisjoint(set1) #Çıktı — ‘False’
# issubset()
Bir küme diğer kümenin alt kümesi mi?
set1.issubset(set2) #set1, set2'nin alt kümesi mi?
Çıktı = ‘True’
set2.issubset(set1)
Çıktı = ‘False’
# issuperset()
Bir küme diğer kümeyi kapsıyor mu?
set2.issuperset(set1) # set2, set1'i kapsıyor mu ?
Çıktı = ‘True’
set1.issuperset(set2)
Çıktı =’False’
FONKSİYONLAR, KOŞULLAR, DÖNGÜLER, COMPREHENSIONS
— Fonksiyonlar (Functions)
— Koşullar (Conditions)
— Döngüler (Loops)
— Comprehesions
# Fonksiyonlar (FUNCTIONS)
Belirli bir işlemi gerçekleştirmek için kullanılan, adlandırılmış ve yeniden kullanılabilir bir kod bloğu oluşturma işlemidir. def, fonksiyon tanımının başlangıcını belirtir.
def calculate(x):
print(x * 2)
calculate(5)
# İki argümanlı/parametreli bir fonksiyon tanımlayalım.
def summer(arg1, arg2):
print(arg1 + arg2)
summer(7, 8)
summer(8, 7)
summer(arg2=8, arg1=7)
# Docstring
Docstring, bir nesnenin kullanımı, işlevi, parametreleri ve dönüş değerini açıklayan metin tabanlı bir açıklama sunar. Docstring, kodunuzun okunabilirliğini ve anlaşılabilirliğini artırır ve diğer geliştiricilerin veya kendinizin kodu daha iyi anlamasına yardımcı olur.
?print şeklinde ya da help(print) şeklinde Python Console’la yazdığımızda print fonksiyonunun ne iş yaptığını herkesin anlayacağı şekilde açıklar.
# Fonksiyonların Statement/Body Bölümü
Fonksiyonun hangi sırayla, hangi görevi yapacağına karar verilen bölümdür.
Aşağıda girilen değerleri bir liste içinde saklayacak fonksiyon tanımlanmış. Adım adım üstünden gidelim.
Örnek Uygulama
list_store = [] = Fonksiyon çıktılarını tutmak için boş bir fonksiyon tanımlanmış.
def add_element(a, b): #add_element adlı bir fonksiyon oluşturulmuş. a ve b parametleri ile işlemler gerçekleştirilecek.
c = a * b # c’ye a ve b çarpımlarının sonuçları atanmış.
list_store.append(c) # başta tanımladığımız list_store listesine append metoduyla her yeni değeri kaydedilecek.
print(list_store) #print ile list_store ekrana yazdırılacak.
add_element(1, 8)
add_element(18, 8)
add_element(180, 10)
# Ne Zaman Fonksiyon Yazma İhtiyacımız Olur?
Eğer bir işlemi tekrar tekrar yapmamız gerekiyorsa kolayca fonksiyon tanımlayarak zamandan tasarruf ederiz.
# Lokal & Global Değişkenler (Local & Global Variables)
list_store = [1, 2] #Global Değişken
def add_element(a, b):
c = a * b # Yerel Değişken
list_store.append(c)
print(list_store)
add_element(1, 9)
KOŞULLAR (CONDITIONS)
# True-False’u hatırlayalım.
1 == 1
1 == 2
# if
if 1 == 1:
print(“something”)
# Eğer 1=1 ise ekrana something bastırılır.
if 1 == 2:
print(“something”)
# Koşul sağlanmadığı için ekranda hiçbir şey görülmez.
def number_check(number):
if number == 10:
print(“number is 10”)
number_check(12)
Koşul sağlanmıyor. Çıktı görülmez.
# else
def number_check(number):
if number == 10:
print(“number is 10”)
else: #number, 10'a eşit değilse;
print(“number is not 10”)
number_check(12)
ÇIKTI= number is not 10
# elif
Bir durumun sağlanması birden fazla koşula bağlıysa elif kullanılır.
def number_check(number):
if number > 10:
print(“greater than 10”)
elif number < 10:
print(“less than 10”)
else:
print(“equal to 10”)
number_check(6)
# DÖNGÜLER (LOOPS)
# for loop
students = [“John”, “Mark”, “Venessa”, “Mariam”]
for student in students: # students listesinin tüm index’lerinde gezer.
print(student) # ekrana tüm isimler yazdırılır.
for student in students:
print(student.upper()) #upper() metodu tüm harfleri büyük harfe çevirir.
çıktı : JOHN, MARK, VENESSA, MARIAM
# break & continue & while
salaries = [1000, 2000, 3000, 4000, 5000]
for salary in salaries:
if salary == 3000:
break # salaries’te gezerken salary=3000'i yakalarsa for döngüsü durur ve ekrana 3000 yazdırılır.
print(salary)
for salary in salaries:
if salary == 3000: # Eğer salary değeri 3000'e eşitse atla ve davam et.
continue
print(salary)
Çıktı : 1000, 2000, 4000, 5000
# while
number = 1
while number < 5: #number 5'ten küçük olduğu sürece devam et.
print(number)
number += 1 # her döngüde number’ı 1 artır.
# Enumerate: Otomatik Counter/Indexer
Her elemanın indeksini (yerini) ve değerini eş zamanlı olarak döndüren bir yerleşik bir fonksiyondur
students = [“John”, “Mark”, “Venessa”, “Mariam”]
for index, student in enumerate(students):
print(index, student)
Çıktı:
0 John
1 Mark
2 Venessa
3 Mariam
# Zip
Ayrı listeleri ındex’lere göre tek bir liste haline getirir.
students = [“John”, “Mark”, “Venessa”, “Mariam”]
departments = [“mathematics”, “statistics”, “physics”, “astronomy”]
ages = [23, 30, 26, 22]
list(zip(students, departments, ages))
ÇIKTI: Tuple formunda olur.
[(‘John’, ‘mathematics’, 23),
(‘Mark’, ‘statistics’, 30),
(‘Venessa’, ‘physics’, 26),
(‘Mariam’, ‘astronomy’, 22)]
# lambda
Kullan at fonksiyondur. Tek satırdır. Bir ya da daha fazla parametre kabul eder ancak tek bir işlem yapabilirler.
# map
Verileri birbiriyle eşler.
COMPREHENSIONS
# List Comprehension
Tek satırda fonksiyon yazmamızı sağlar, kod satırı kalabalığından kurtuluruz. Köşeli parantezle kullanılır. If-else yapısı varsa for döngüsünden önce yer alır.
[new_salary(salary * 2) if salary < 3000 else new_salary(salary) for salary in salaries] # En sağdan okumaya başlarız. salaries’lerde gez, tuttuğun salary değeri 3000'den küçükse salary’i 2 ile çarp ve new_salary’e ekle. Eğer salary değerin 3000'den küçük değilse salary’i değişkenini olduğu gibi new_salary’e ekle.
[salary * 2 for salary in salaries]
[salary * 2 for salary in salaries if salary < 3000]
# Sadece if yapısı varsa for döngüsü önce gelir. Yukarıda olduğu gibi.
# Dict Comprehension
List Comprehension yapısına benzerdir.
{k: v ** 2 for (k, v) in dictionary.items()}
{k.upper(): v for (k, v) in dictionary.items()}
{k.upper(): v*2 for (k, v) in dictionary.items()}
Bu bölümün sonuna geldik. Bir sonraki yazıda veri analizi için kütüphanelere yakından bakıyor olacağız.
Kaynak olarak katılımcısı olduğum Data Scientist Bootcamp kurs içeriği kullanılmıştır. Vahit Keskin’e teşekkürü borç bilirim.
Linkedin’de daha yakından tanışabiliriz :) yaseminderyadilli