Veri Bilimi için Numpy Kütüphanesi

Hüseyin Şahin
8 min readApr 17, 2021

--

Veri bilimi süreçlerinde iş yükünün %80’ini veri ön işleme ve veri düzenleme oluştururken %20’sinde ise modelleme ve programlama yer almaktadır. Bugün veri manipülasyonu için kullanılan Numpy’in ne olduğunu, neler yapılabildiği ve genel özelliklerinin neler olduğundan söz ederek, görsellerle destekleyip anlaşılır bir şekilde anlatmaya çalışacağım.

Numerical Python ifadesinin kısaltması olan Numpy; matematiksel ve istatiksel gibi bilimsel işlemleri hızlıca yapabilmek için kullanılan bir Python kütüphanesidir. Python’ın bazı numerik işlemlerde yetersiz kaldığı noktalarda ihtiyaçlarımızı gidermek üzere ortaya çıkmıştır. Numpy kütüphanesi, diziler / çok boyutlu diziler ve matrisler üzerinde yüksek performanslı çalışma imkanı sunmaktadır. Python’daki listelere benzerdir ancak verimli veri saklama ve vektörel operasyonlar gerçekleştirmesi yönüyle listelerden farklıdır. Şimdi kütüphanemizi import ederek yavaş yavaş başlayalım.

Ben Python kodlarımı, web tabanlı etkileşimli bir hesaplama ortamı olan JupyterLab üzerinde yazmaktayım; sizde yazımdaki kodların tamamını JupyterLab, Jupyter Notebook veya Google Colab üzerinde çalıştırabilir, kendinize göre notlar alabilirsiniz.

Numpy kütüphanesinin import edilmesi

Numpy dizilerini daha iyi anlamak için dizilere geçmeden önce Python’daki bir integer türünün içeriğine bakacak olursak; (Örneğin: x = 1000 tanımlamasını yapmış olalım)

x burada basit bir tamsayı değildir; değerden daha fazla bilgi içeren bir C yapısına işaretçidir. Aşağıda görselde bunu daha net bir şekilde görebilirsiniz.

C integer veri türü ile Python integer veri türünün kıyaslanması

Numpy’ın Python listelerine benzer olduğunu söylemiştim. Kısaca Python listelerine değinip neden Numpy’ın kullanıldığından bahsedeceğim.

Python Listeleri

1.Homojen listeler : Tek tip veri türüne sahip elemanlardan oluşan listelerdir. Yani listedeki elemanların hepsi ya int, ya float, ya string yada boolean türünde olmalıdır. Aşağıdaki homejen listeleri inceleyebilirsiniz.

Tamsayılar (Integer) Listesi
Stringlerin Listesi
Döngüleri kullanarak liste oluşturma
Integer listesinin tür dönüşümünü yapılarak string listesine çevrilmesi

2.Heterojen listeler : Farklı veri türlerine sahip elemanlardan oluşan listelerdir. (int + float + string + bool) Aşağıdaki heterojen liste örneğini inceleyebilirsiniz.

Heterojen liste örneği

Python Listeleri ile ilgili Sorunlar

  • Nesneler, daha fazla bilgi içeren yapılardır
  • Tek nesne türü listesi gereksiz bilgi içeriyor
  • Esnek ama verimsiz

Numpy Dizileri (Arrays)

Numpy kütüphanesi içerisinde yer alan listeler, sözlükler gibi bir veri tipidir. Numpy dizileri, listelerden farklı olarak her eleman için tip bilgisi tutmaz, sadece bir tip tutarak veri saklama maliyetini azaltır. Bu bakımdan tek tip veri tutar. Numpy dizilerini oluşturmak için np.array() metodu kullanılır.

Numpy Arrays

Aşağıdaki şekilde istediğimiz elemanlardan oluşan bir numpy dizisi tanımlayabiliriz.

Not : Tek boyutlu dizilere vektör, iki boyutlu dizilere ise matris denir.

Fixed Type

  • Numpy dizilerinin sabit türü vardır.
  • Upcasting (Örn : Tam sayıları ondalıklı sayılara dönüştürme)
Upcasting örneği

Veri Türünün Ayarlanması (Set The Data Type)

Aşağıdaki şekilde dtype ile dizinin veri türü ayarlanabilmektedir. Böylelikle dizide yer alan tüm elemanların türü aşağıdaki örnek için float32 olmuştur.

Dizinin veri türünün ayarlanması

İki Boyutlu Diziler (2D Arrays)

2 satır, 3 sütundan oluşan 2 boyutlu bir dizi
3 satır, 3 sütundan oluşan 2 boyutlu bir dizi

NumPy Veri Türleri (Data Types)

NumPy, Python’dan çok daha çeşitli sayısal türleri destekler. Aşağıdaki tablo, NumPy’de tanımlanan farklı skaler veri türlerini göstermektedir.

Numpy Veri Türleri (Numpy Data Types)

Dizileri Başlatma Yolları (Ways to Initialize Arrays)

  • np.zeros() : Metodu elemanları 0'lardan oluşan array oluşturmak için kullanılır. Aşağıda 10 elemanlı np.zeros() metodu ile oluşturulmuş bir dizi gösterilmektedir.
  • np.ones() : Metodu elemanları 1'lardan oluşan array oluşturmak için kullanılır. Aşağıda 3 satır 5 sütundan oluşan 15 elemanlı np.ones() metodu ile oluşturulmuş bir dizi gösterilmektedir.
  • np.random.random() : Metodu 0 ile 1 arasında rastgele dizi oluşturmak için kullanılır. Aşağıda 3 satır ve 3 sütundan meydana gelen rastgele elemanlarda oluşan bir dizi gösterilmektedir.

NumPy Dizilerinin Temelleri (Basics of Numpy Arrays)

Bu bölümde, verilere ve alt dizilere erişmek ve dizileri bölmek, yeniden şekillendirmek ve birleştirmek için NumPy dizi manipülasyonunun kullanılmasına ilişkin bilgilendirmelerde bulunacağım. Aşağıdaki görselde bir Numpy dizisinin tüm özelliklerini görebilirsiniz.

Dizi Öznitelikleri (Array Attributes)

  • Dimension : Dizinin boyutu, 1 boyutlu 2 boyutlu ve 3 boyutlu gibi
  • Shape : Dizinin şekli (#boyut, #satır, #sütun)
  • Size : Dizinin uzunluğu, toplam eleman sayısı (#boyut * #satır * #sütun)

Aşağıdaki örnekte np.random.randint() metodu ile oluşturulmuş 0 dan 20'ye kadar rastgele elemanlı 2 satır ve 4 sütundan oluşan 3 boyutlu bir dizi gösterilmektedir.

Yukarıdaki örnek için çıktılar aşağıdaki şekildedir.

3 Boyutlu Diziler (3D Arrays)

Boyutların Açıklanması (Explaining Dimensions)

Aşağıdaki görsel ile dizi özniteliklerini daha iyi bir şekilde anlayabilirsiniz.

Index ile Dizi Elemanlarına Erişmek (Array Indexing)

Tek tek numpy dizi öğelerinin değerlerini index numarası ile alabilir ve yeni değer ataması yapabiliriz. Aşağıdaki örnek diziyi kullanacak olursak;

Dizinin 1. ve 5. indeksinde yer alan elemanlar aşağıda gösterilmektedir.

Dizinin indexlemesini sondan başlatırsak, -1. indeksteki eleman en sondaki eleman olmak üzere sonuçlar aşağıda gösterilmektedir.

İki Boyutlu Dizilerde Elemanlara Erişmek (2D Indexing)

Aşağıdaki 0'dan başlayıp 10'a kadar rastgele elemanlarla oluşturulmuş 12 elemanlı örnek diziyi kullanacak olursak;

Dizinin satır olarak 3. ve sütun olarak 0. indeksinde yer alan elemanlar ile satır olarak 2. ve sütun olarak -3. indeksinde yer elemanlar aşağıda gösterilmektedir.

Dizilerin Alt Elemanlarına Erişmek (Array Slicing)

  • Derin öğrenme ve makine öğreniminde veri kümesi ve tensör manipülasyonunda çok önemlidir.
  • x[start : stop : step]

1 Boyutlu Dizilerde Dilimleme (1D Slicing)

Burada np.arrange() metodu ile varsayılan 0 değerinden başlayıp belirtilen 10 bitiş değerine kadar olan elamanlardan oluşan örnek numpy dizisini kullanacak olursak;

  • x[start : ] : Başlangıç olarak belirtilen 3. indexteki elemanı ve sonrasındaki elemanları döndürür.
  • x[: end] : Bitiş olarak belirtilen 6. indexteki elemanı ve öncesindeki elemanları döndürür.
  • x[start : end] : Başlangıç ve bitiş indexlerindeki elemanlar ile arasındaki elemanları döndüdür.
  • x[:: step] : Başlangıç ve bitiş indexleri belirtilmediği için 0. indexteki elemandan başlayıp belirtilen adım sayısı kadar ilerleyerek denk gelen indexlerdeki elemanları döndürür.

2 Boyutlu Dizilerde Dilimleme (2D Slicing)

Aşağıdaki görsel ile iki boyutlu dizilerde dilimleme işleminin nasıl olduğunu daha iyi bir şekilde anlayabilirsiniz

Burada np.random.randint() metodu ile varsayılan 0 değerinden başlayıp belirtilen 15 bitiş değerine kadar rastgele elamanlardan oluşan 2 boyutlu örnek numpy dizisini kullanacak olursak;

Satır olarak 2. indexteki elemanlara kadar, sütun olarak ise 4. indexteki elemanlara kadar olan kısma karşılık düşen elemanları döndürür.

Satır olarak 3. indexteki elemanlara kadar yani örnek dizi 2. satıra kadar mevcut olduğu için satır olarak tamamı, sütun olarak ise 0. indexten başlayıp adım sayısı olan 4 sütun kadar atlayarak denk gelen 4. indexteki elemanları döndürür.

Dizileri Yeniden Şekillendirme (Reshaping Arrays)

Çalışmalarımızda, fonksiyonların ve döngülerin üretmiş olduğu çıktılar tek boyutlu bir array şeklinde gerçekleşebilmektedir. Bazen tek boyutluyu iki boyuta, iki boyuttan tek boyuta indirme ihtiyaçları doğabilmektedir. İşte bu ihtiyaçlarımızı reshape() metodu ile gerçekleyebilmekteyiz.

Aşağıdaki görsel ile dizi üzerinde gerçekleşen reshape işleminin nasıl olduğunu daha iyi bir şekilde anlayabilirsiniz

Reshape Metodu

Aşağıdaki örnekte np.arrange() metodu ile oluşturulmuş 1'den 10 kadar olan elemanlardan meydana gelen vektörün yeniden şekillendirilerek 3 x 3'lük matrise dönüşünü görebilirsiniz.

Numpy Dizilerinde Hesaplama (Computation on Numpy Arrays)

Vektörize İşlemler ve Döngüler (Vectorized Operations vs Loops)

  • Numpy’a göre Python döngüleri daha yavaştır.
  • Büyük diziler üzerinde işlem yapmak maliyetlidir.
  • Numpy, evrensel fonksiyonları kullanarak vektörleştirilmiş bir yaklaşım sağlar.
  • Daha hızlı yürütme/çalıştırmayı sağlar.

Universal Functions

Universal Functions

Aritmetik Fonksiyonlar (Arithmetic Functions)

  • Sabit sayılar dizilerle toplanabilir, çıkartılabilir, çarpılabilir ve bölünebilir. Aşağıda yer alan tek boyutlu dizi üzerindeki örneği inceleyebilirsiniz.

Numpy Hesaplama Fonksiyonları(Aggregate Functions)

  • Bir dizideki değerlerin toplanması : np.sum()
  • Dizideki minimum ve maksimum değerin bulunması : np.min(), np.max()
  • Exsen boyunca dizideki minimum ve maksimum değerin bulunması : np.min(), np.max()

Aşağıdaki görsel ile numpy hesaplama fonksiyonlarının kullanımlarını daha iyi anlayabilirsiniz.

Numpy Hesaplama Fonksiyonları(Aggregate Functions)

Diziler Üzerinde Hesaplama (Computation on Arrays)

  • İki veya daha fazla dizi üzerinde toplama, çıkarma, çarpma veya bölme yapılabilir, aşağıdaki görsel ile bu dediğimi daha iyi anlayabilirsiniz.
Broadcasting

Aşağıdaki iki numpy dizisi üzerinde toplama gerçekleştirilmektedir.

Karşılaştırma Fonksiyonları (Comparison Functions)

Aşağıda np.random.randint() metodu ile 10 elemanlı 1'den 10'a kadar rastgele elemanla oluşturulmuş dizi örneğimize bakacak olursak;

Operatör mantıksal olarak değerlendirdiğinde, 4'ten daha büyük olan elemanlar için True, küçük olan elemanlar için ise False döndürür. Diğer örnekte ise 5'ten küçük olan elemanlar için True, daha büyük olan elemanlar için ise False döndürür.

Operatör mantıksal olarak değerlendirdiğinde, 6'dan büyük veya eşit olan elemanlar için True, küçük olan elemanlar için ise False döndürür. Diğer örnekte ise 0'a eşit olmayan elemanlar için True, eşit olan elemanlar için ise False döndürür.

Bugünkü yazımda veri bilimi için olmazsa olmaz Numpy kütüphanesini dilim döndüğünce anlatmaya çalıştım. Bir sonraki yazım Pandas kütüphanesi ile ilgili olacak. Bir sonraki yazımda görüşmek üzere :)

--

--

Hüseyin Şahin

Merhaba! Ben yeni mezun bir Bilgisayar Mühendisiyim. Siber güvenlik ve yapay zeka ile ilgili araştırıyorum, öğreniyorum ve yazıyorum.