MWN9LGx8LGF4NWZcMqR5NWVdLTcsynIkynwbzD1c

Python ile Veri Bilimine Giriş

Python ile Veri Bilimine Giriş - Akblog NET

Ak Blog SEO
4349759590016280108

Python ile Veri Bilimine Giriş

2 Eylül 2023 Cumartesi
Python ile Veri Bilimine Giriş

1. Python Programlamaya Giriş

Veri bilimi, karmaşık problemleri çözmek için hem yapılandırılmış hem de yapılandırılmamış veriyi, işe yarar/değerli bilgiye (knowledge) dönüştürmeye yarar. Bu süreçte, bilimsel problem çözme tekniklerini, matematiği, istatistiği ve yazılım geliştirme disiplinlerini birlikte kullanır  Veri biliminin geçmişi çok uzun yıllara dayansa da veri bilimi iş kavramının popüler olması HBR (Harvard Business Review) dergisinde yayınlanan “Data Scientist: The Sexiest Job of the 21st Century” adlı yazıyla başlamaktadır.
Bir veri bilimi projesinin aşamalarını soyut olarak aşağıdaki gibi 4 adımda tanımlamak mümkündür.
  1. Problem Tanımlama
  2. Veri Hazırlama
  3. Model/Algoritma Seçimi
  4. Sonuçları İyileştirme
Aşamaların detaylarına bu yazıda girerek yazıyı boğmak istemiyorum ancak yine de elinizdeki problemin ne olduğunu iyice anlamadan, problemi çözünce tam olarak ne elde edeceğinizi bilmeden ve mümkünse yanınızda bir alan uzmanı olmadan gerçek hayatta hiçbir projeye girmemenizi tavsiye ediyorum.
Olaya bir de makine öğrenmesi açısından bakacak olursak, bir veri bilimi projesinin iş akışındaki adımları (pipeline görevleri) aşağıdaki gibi şekillendirebiliriz.
Günümüzde veri bilimi denilince akla ilk gelen programlama dili Python’dur. Kolay öğrenilebilmesi, kolay okunması, bakımının kolay olması ve hazır birçok veri bilimi kütüphanesi bulundurması, dilin kullanımını oldukça yaygınlaştırmıştır. Popülerliği ve kullanımı arttıkça, var olan kütüphaneleri daha fazla gelişmekte ve ayrıca yeni kütüphaneler de eklenmektedir. Bu yazımızda Python diline veri bilimi perspektifinden hızlı ama detaylı bir giriş yapıp, önemli paketlerden NumPy ve Pandas ile ilgili bilgi verip, örnekler yapacağız. Yazının genel akışı aşağıdaki gibi olacak:

  1. Giriş (Veri Bilimi, Tanıtım)
  2. Python Programlama Dili (Geçmişi ve Yapısı)
  3. Kurulum
  4. Python Değişken Türleri
  5. Python Koşul Deyimleri
  6. Python Döngüleri
  7. Python Veri Yapıları (Listeler, Sözlükler)
  8. Referans Türleri ve Nesne Klonlama
  9. Python Fonksiyon Tanımları
  10. Python Lambda Fonksiyonları
  11. Veri Bilimi ve Nesne Yönelimli Programlama
  12. NumPy Kütüphanesi
  13. Pandas Kütüphanesi

2. Python Programlama Dili

Python, Hollandalı bir yazılım geliştirici olan Guido van Rossum tarafından 1990 yılında tasarlanmış bir programlama dilidir. Programlama dilinin adı, yaygın bilinenin aksine piton yılanından değil, Guido van Rossum’un çok sevdiği Monty Python adlı, altı kişiden oluşan İngiliz komedi grubunun oynadığı, Monty Python’s Flying Circus isimli gösteriden gelmektedir.
Açık kaynak kod lisansına sahip olan ve ücretsiz yazılım geliştirilmesine imkan veren Python programlama dilinin; Windows, Unix/Linux ve MacOS işletim sistemleri üzerinde farklı yöntemlerle çalıştırılması mümkündür.
Programlama dil yapısı açısından incelendiğinde, yüksek seviyeli diller kategorisine giren Python’un en ilginç özelliği; i) fonksiyonel programlama, ii) nesne yönelimli programlama ve iii) yapısal programlama dil paradigmalarının hepsini desteklemesidir. Dilin diğer güçlü yanlarından birisi de dinamik dil yorumlayıcısına (interpreter) sahip olmasıdır.

3. Python Programı Kurulumu

Python dili ile yazılmış bir programın bilgisayarınızda çalışabilmesi için işletim sistemiyle uyumlu Python yorumlayıcının bilgisayarınızda kurulu olması gerekmektedir. Resmi Python sitesinden uygun yorumlayıcıya sahip kurulum paketini indirip, sisteminize kurabilirsiniz.
Python kurulum paketlerinde, 2.7 ve 3.x olmak üzere iki temel farklı sürümün olması dikkat çekicidir. 2008 yılında Python 2.6 ile beraber, geçmiş versiyonlarla uyumlu olmayan Python 3.0 çıkartılmış, daha sonra 2009 yılında Python 2.7 ve Python 3.1 yine birlikte çıkartılarak, bundan sonra Python 2 serisine devam edilmeme kararı verilmiştir
Python kodu yazabilmek için farklı birçok IDE (Integrated Development Environment — Bütünleşik Geliştirme Ortamı) bulunsa da Notepad gibi basit metin düzenleyiciler kullanarak Python programlama yapmanız mümkündür. Programlama dilinin söz dizimlerini renklendirmek, iç-içe kod satırı yuvalaması yapmak gibi isteklerim var, basit metin düzenleyicileri ile uğraşamam diyorsanız, orta seviye IDE’leri hiç kullanmadan, doğrudan Spyder ve Jupyter Notebook yazılımlarını içerisinde barındıran Anaconda gibi dağıtımları kurmanız kişisel gelişiminiz açısından daha yararlı olacaktır.

4. Python Değişken Türleri

Değişkenler programlamanın vazgeçilmez birer parçası olup, özel bellek bölgelerinde saklanmaktadırlar. Diğer programlama dillerinde olduğu gibi Python programlama dilinde de aşağıdaki gibi farklı değişken türleri desteklenmektedir.
Sayısal Türler
Karakter Dizileri (string)
Boolean Türler
Özel Türler
Python kodlarında değişkenlerin türlerini tanımlamak için özel anahtar kelimelerin yazılmasına (int, float, string) yani “bak burada şimdi değişken tanımlıyorum” demeye gerek yoktur. Python’da değişken tanımı, değişkene değer atandığında otomatik olarak gerçekleşir (type inferred language). 

5. Python Koşul Deyimleri

Python programlama dilinde, koşul deyimi olarak “if” kullanılmaktadır. Bu koşulun sonucu doğru (true) ise koşul devamındaki iç içe yuvalanmış kodlar işletilir, doğru değilse (false) “else” deyimi ve devamındaki kod satırları çalışır. Ayrıca “elif” deyimi kullanılarak, else kod blokuna düşülen bir durumda, ilave bir “if” deyimi daha çalıştırılabilir. Aşağıda her üç durumu gerçekleyen bir kod parçası yer almaktadır.

6. Python Döngüleri

Diğer programlama dillerinde olduğu gibi Python’da da while ve for olmak üzere iki temel döngü türü bulunmaktadır.
while döngülerinde, bir koşul en başta işletilir ve bu koşul doğru olduğu sürece while döngüsü içerisinde yer alan kod satırları çalıştırılır. Her yinelemede koşul tekrar kontrol edilir, eğer koşul sonucu yanlışsa koşuldan çıkılır.
for döngülerinde, belirli bir “dizi/liste/sayı aralığı” içerisinde baştan sona döngü işletilir ve for döngüsü içerisinde yuvalanmış kodlar çalıştırılır. Döngünün işleteceği eleman kalmayınca döngü sonlandırılır.
Aşağıdaki kod parçasında hem while hem de for döngüleri kullanılarak 0 ve 5 arasındaki sayılar (5 hariç) ekrana yazdırılmıştır.

7. Python Veri Yapıları

7.1. Listeler

Listeler neredeyse bu dilin en çok kullanılan veri yapılarından birisidir. Aslında temel bir sıralama türü olarak da adlandırılan listeler, bir değer koleksiyonunu saklamak için kullanılırlar. Bir liste, herhangi bir veri türünde değerleri içerebilir ayrıca liste değerleri içinde başka yuvalanmış listeler de saklanabilir. Aşağıdaki kod parçasında bir liste tanımı ve bu liste elemanlarına indis ile erişimler gösterilmiştir. Python’da liste elemanlarının indis değerleri 0'dan başlayarak artmaktadır.
Dikkat edilirse negatif indis değerleri kullanılarak listenin sonundan başına doğru erişim de gerçekleştirilebilmektedir.
Python listelerine erişimde birden fazla liste elemanını getirme ihtiyacı olduğunda, “liste dilimleme (list slicing)” adlı yöntem kullanılmaktadır. Alt liste getirme olarak da isimlendirilebilecek bu yöntemin genel yapısı aşağıdaki gibidir.
liste_nesnesi[baslangic_indisi:bitis_indisi:adim]
baslangic_indisi: getirilecek alt listenin ilk elemanının indis değeridir. Bu indiste yer alan eleman alt listeye dahil edilir. Varsayılan değeri 0'dır.
bitis_indisi: getirilecek alt listenin son elemanının indis değeridir. Bu indiste yer alan eleman alt listeye dahil edilmez. Varsayılan değeri, “eleman sayısı -1” şeklinde hesaplanır.
adim: getirilecek alt listedeki elemanların indis aralıklarını belirtmektedir. Varsayılan değeri 1'dir.
Liste elemanları üzerinde değişiklik yapmak için remove() ve append() gibi fonksiyonlar kullanılmaktadır. Ayrıca toplama operatörü (+) de kullanılarak listeye ekleme işlemi yapılabilir.

7.2. Sözlükler (Dictionaries)

Sözlükler anahtar-değer çiftlerini saklayabilen özel koleksiyonlar olup, anahtarların mutlaka benzersiz değerlere sahip olması gerekmektedir. Sözlük oluşturulması sırasında süslü parantezler kullanılmaktadır. Aşağıdaki kod parçasında; sözlüğe yeni eleman ekleme, sözlükten eleman silme (del) ve sözlükteki bir elemanı anahtar ile kontrol etme (“key” in) işlemleri için kod satırları görülmektedir.

Sözlük nesnelerinin desteklediği bazı fonksiyonlar aşağıdaki kod parçasında örnek olarak gösterilmiştir.

8. Referans Türleri ve Nesne Klonlama

Python programlama dilindeki birçok nesne türü (örneğin: listeler) referans türündedir (reference type). Yani siz bir nesneye atama yaparken “ilgili değerleri” değil, “değerlerin tutulduğu bellek adresini” kullanırsınız.
Dolayısıyla referans türündeki bir nesneyi, başka bir nesneye “=” operatörü ile atayarak, yeni değerlere sahip bir nesne oluşturmuş (kopyalamış / klonlamış) olmazsınız, aynı bellek adresini gösteren “ikinci nesneniz” olur.

9. Python Fonksiyon Tanımları

Fonksiyonlar belirli bir isme sahip program parçalarıdır. Karmaşık yapıdaki programların karmaşıklığını azaltmak ve bu programları modüler bir yapıya kavuşturmak için kullanılırlar.

Modüler yapıları sayesinde programcıların tekrarlanan kodlar yazmalarını önlerler.

Aşağıdaki kod parçasında, veri yapıları dersinin olmazsa olmazlarından kabarcık sıralama (bubble sort) algoritmasının, fonksiyon gerçekleştirimi yer almaktadır. Python’da fonksiyon tanımlayıcı anahtar kelime olarak “def” kullanılır. Geriye bir değer döndürülmesi isteniyorsa “return <deger>” şeklinde bir kod satırı ile fonksiyon tamamlanır.
Veri bilimi projelerinde, fonksiyonlar, sıkça kullanılan programlama yapılarıdır. 
Örneğin Keras kütüphanesi kullanarak basit (basitModel()) ve derin bir yapay sinir ağı modelini (derinModel()) fonksiyonlar yardımıyla aşağıdaki gibi oluşturabiliriz.

10. Python Lambda Fonksiyonları

Python programlama dilindeki anonim lambda fonksiyonları, istenildiği kadar girdi parametresi alır ve bir tane deyimi çalıştırır. Genel kullanım şekli aşağıdaki gibidir.
lambda parametreler : deyim
Aşağıdaki kod parçasında fnc ve fnc2 isimli 2 adet lambda fonksiyon bulunmaktadır. fnc fonksiyonu 1 adet parametre alarak, parametrenin değeri 1 arttırıp geri dönmektedir. fnc2 fonksiyonu ise aldığı 2 adet parametrenin değerini toplayarak geri dönmektedir. Dikkat edilirse bir lambda fonksiyonunun değeri olarak başka bir fonksiyon kullanmak mümkündür.

11. Veri Bilimi ve Nesne Yönelimli Programlama

Nesne yönelimli programlama (Object Oriented Programming) nesneyi merkezine alan bir bilgisayar programlama yaklaşımıdır. Nesne yönelimli programlama terminolojisindeki “object/nesne” ve “oriented/yönelimli” kavramları ilk olarak 1960'lı yılların başında MIT tarafından yapay zeka projeleri yapan bir araştırma grubunda “ varlıklar ve onların sahip oldukları özellikler” isimlendirilirken kullanılmıştır.
Fonksiyonların kullanıldığı yapısal programlama yaklaşımında sadece soruna odaklı farklı fonksiyonlar yazılır ve sadece o sorun için fonksiyonlar kullanılır. Dolayısıyla yapısal programlama yaklaşımıyla oluşturulmuş bir program binlerce ayrı isimde tanımlanmış değişken ve yüzlerce farklı fonksiyona sahip olabilir. En ufak işlem için bile ayrı fonksiyon oluşturulması gerekir ve bu programın karmaşıklığını arttırır.

Soru: Veri bilimi projelerinde nesne yönelimli programlama kullanılması zorunlu mu?

Bu sorunun cevabına hızlıca “hayır, zorunlu değil” diyebiliriz. Ancak, projenizde kod karmaşıklığı gittikçe artıyor ve soyutlama ihtiyacı duyuyorsanız, yazdığınız kodlar birer “science-script” olmaktan çıkıp servis koduna dönüşüyorsa, bu kodların başka projeler içerisinde sadece sizin belirlediğiniz erişim kurallarıyla kullanılmasını istiyorsanız, veri bilimi projenizi nesne yönelimli yaklaşımla yeniden düzenlemeniz (refactoring) gerekebilir.
Sizi “amaçtan uzaklaştırmıyor” ve “yapmış olmak için yapmıyorsanız” bir veri bilimi projesinde nesne yönelimli programlamanın üzerine SOLID tasarım prensiplerini bile kullanabilirsiniz.
Ayrıca Python ile gerçekleştirdiğimiz neredeyse her veri bilimi projesinde, nesne yönelimli programlama yaklaşımı ile geliştirilmiş kütüphaneleri kullandığımızı da unutmamak gerekiyor. Aşağıdaki linke tıklayarak “scikit-learn” kütüphanesinde yer alan “naive_bayes.py” dosyasını ve içerdiği sınıfları inceleyebilirsiniz.
İki sınıftan oluşan, Python ile yazılmış basit bir program parçası aşağıda örnek olarak verilmiştir. Sınıfların tanımlanmasında “class” anahtar kelimesi ve kurucu metot (constructor) tanımında “__init__” fonksiyon adı kullanılmıştır. self anahtar kelimesi kullanılarak o anki aktif nesnenin özelliklerine ve metotlarına erişilebilir. Üst sınıfa (parent) erişmek için ise super() kullanılabilir.

12. NumPy Kütüphanesi

Numpy kütüphanesi adını Sayısal Python (Numerical Python) kelimelerinin kısaltmalarından almıştır. Kütüphanenin en önemli özelliği, hızlı matematiksel işlemler yapılabilecek diziler (array) sunmasıdır. 
Python’un kendi veri yapısında bulunan liste veri yapısına göre oldukça hızlı çalışan Numpy kütüphanesi kullanılarak; rastgele sayı üretme, matris çarpımı ve doğrusal cebir işlemleri gibi birçok matematiksel işlemi gerçekleştirmek mümkündür. 
Kütüphane kullanımına yönelik; çok boyutlu dizi oluşturma, dizilerin farkını/toplamını/çarpımını hesaplama, belirli bir değerden büyük olan elemanların indislerini bularak elemanları ekranı yazdırma gibi örnekler aşağıda gösterilmiştir.

13. Pandas Kütüphanesi

Pandas yüksek performanslı ve kolay kullanılabilen bir veri yapılandırma ve veri analizi kütüphanesidir. En temel dezavantajı, kütüphanenin paralel programlama alt yapısını desteklemiyor olmasıdır. Dolayısıyla yapacağımız işlemlerin performansı, makinemizin gücü ile doğru orantılı olacaktır. Bu kütüphane ile excel, json, metin (csv) ve veritabanı gibi birçok farklı kaynaktan veri okunabilir ve bu kaynaklara veri yazılabilir. Tek boyutlu olarak Series isimli, 2 boyutlu olarak da DataFrame isimli veri yapısını içinde barındırır. Pandas tabloları içerisinde birçok tipte değişken tutabilirler (sayısal, kategorik, tarih vb.). Veri dönüştürme, filtreleme gibi önemli veri ön işleme aşamaları bu kütüphane ile kolayca gerçekleştirilebilir. 

Veri biliminin Hello World’ü olarak bilinen ve hava durumu özniteliklerine (‘outlook’, ‘temp’, ‘humidity’, ‘windy’) göre dışarı çıkıp tenis oynanıp oynanmayacağına (‘play’) karar verilen veri kümesi (tennis dataset) üzerinde yapılan bazı çalışmalar aşağıda gösterilmiştir. Öncelikle, liste tipindeki data isimli değişkene atanan veriler pd.DataFrame() fonksiyonu kullanılarak, bir veri çerçevesine dönüştürülmüş ve df adlı değişkende (nesnede) saklanmıştır. Daha sonra, veri çerçevesine ait üst seviye bazı bilgiler; info, shape ve describe fonksiyonları kullanılarak ekrana yazdırılmıştır.

Oluşturduğumuz veri kümesine ait tüm veriler kategorik türde olduğu için describe() fonksiyonunu çalıştırdığımızda, minimum/maksimum değer ve standart sapma gibi sonuçlar elde edilemeyecektir. Etiket kodlama (label encoder) yapılmasını sağlayan kütüphaneleri kullanarak, kategorik değerleri sayısal değerlere aşağıdaki gibi çevirmek mümkündür. Öznitelik değerlerinden benzersiz olanlar alfabetik olarak sıralanır ve 0'dan başlayarak ayrı birer değer alır. Örneğin temp özniteliğinin sahip olduğu Cool değeri alfabetik sıralamada, ilk sırada (Cool-Hot-Mild) yer alacağı için 0 değeri alacaktır.


Python Eğitimleri - Akblog Net - Yazılım Eğitimleri
Python Eğitim- Akblog Net


Kaynak: medium.com - Prof. Dr. Deniz Kılınç


--------------
Google SEO (akblog.net)
Ak Blog SEO - Google SEO Eğitimleri Dokümanları
Konu hakkında sormak istediklerinizi yazabilirsiniz.
AK Blog SEO

Read. Think. Exercise (Oku. Düşün. Uygula.)

SEO | SEO | Hukuk | İngilizce Kursu |
Siz hayal edin. Biz Hayata geçirelim.
Akblog.NET
Whatsapp İletişim Formu×
Bilgileriniz
İstek Bilgileriniz
iletişime geç

Merhaba!

Webekle@gmail.com adresine e-posta gönderin veya aşağıdaki temsilcilerimizden biriyle WhatsApp ile iletişime geçin.

Yönetim Ekibi Yönetici ile iletişim geçin.
+905050251428
Destek Ekibi Eva ile iletişime geçin.
+905050251428
Doğrudan arayabilirsiniz +905050251428
Destek Saatleri 09:30 - 17:30
Merhaba! Nasıl Yardımcı Olabiliriz?
×
Nasıl Yardımcı olabilirim?