Python Kütüphaneleri: NumPy, Pandas ve Matplotlib Temelleri
Günümüzün dijital dünyasında veri, adeta yeni bir petrol kaynağı haline gelmiştir. Bu “veri madenciliği” sürecinde, Python programlama dili sunduğu güçlü kütüphanelerle vazgeçilmez bir araç olarak öne çıkmaktadır. Özellikle NumPy, Pandas ve Matplotlib, veri analizi, manipülasyonu ve görselleştirme alanlarında Python’ın temel taşlarıdır. Bu makale, bu üç hayati kütüphanenin temellerini, her yaştan öğrencinin kolayca anlayabileceği bir dille ve pratik örneklerle ele alacaktır.
- NumPy: Dizilerle bilimsel hesaplamalar yapmayı ve çok boyutlu veri yapılarını etkin bir şekilde kullanmayı öğreneceksiniz.
- Pandas: Veri çerçeveleri (DataFrames) ile tablo şeklindeki verileri nasıl manipüle edeceğinizi, filtreleyeceğinizi ve temizleyeceğinizi kavrayacaksınız.
- Matplotlib: Oluşturduğunuz veya analiz ettiğiniz verileri çeşitli grafik türleriyle (çizgi, sütun, dağılım vb.) görselleştirmeyi başaracaksınız.
- Bu üç kütüphaneyi bir arada kullanarak kapsamlı bir veri analizi ve sunumu akışı oluşturmanın temel adımlarını anlayacaksınız.
- Gerçek dünya veri analizi senaryolarına hazırlık için sağlam bir temel edineceksiniz.
- Python kütüphaneleri, karmaşık işlemleri basitleştirir.
- NumPy, sayısal hesaplamalar için temel sağlar.
- Pandas, yapısal veri yönetimi ve analizi için idealdir.
- Matplotlib, veriyi anlaşılır grafiklere dönüştürür.
- Bu üçlü, veri biliminde standart bir araç setidir.
Python ve Bilimsel Hesaplama: Neden Bu Kütüphaneler?
Python, basit sözdizimi ve geniş kütüphane ekosistemi sayesinde veri bilimi, makine öğrenimi ve yapay zeka alanlarında en popüler dillerden biri haline gelmiştir. Ancak, standart Python listeleri veya döngüleri, büyük veri setleriyle çalışırken performans sorunları yaşatabilir. İşte tam bu noktada, özel olarak optimize edilmiş kütüphaneler devreye girer.
Veri Biliminde Python’ın Yeri
Veri bilimcileri, ham veriyi anlamlı bilgilere dönüştürmek için Python’ı kullanır. Veri toplama, temizleme, analiz etme, modelleme ve görselleştirme gibi adımlar, Python’ın zengin kütüphaneleri sayesinde çok daha hızlı ve etkili bir şekilde gerçekleştirilebilir. Bu kütüphaneler, matematiksel işlemleri hızlandıran C veya Fortran gibi dillerde yazılmış alt katmanlara sahip oldukları için performans açısından da avantaj sağlarlar.
Kütüphanelerin Önemi ve Karşılaştırması
NumPy, Pandas ve Matplotlib, farklı ancak birbirini tamamlayan görevleri üstlenir. NumPy, sayısal işlemlere odaklanırken, Pandas bu sayısal verileri daha yapısal bir formda (tablolar gibi) yönetir. Matplotlib ise, bu işlenmiş verileri görsel olarak sunar. Bu üçlünün entegrasyonu, veri analizi süreçlerinde inanılmaz bir güç ve esneklik sunar.
NumPy Temelleri: Dizilerle Güçlü Hesaplamalar
NumPy (Numerical Python), Python’da bilimsel hesaplamalar için temel bir kütüphanedir. En önemli özelliği, çok boyutlu diziler (ndarray) ve bu diziler üzerinde yüksek performanslı işlemler yapabilmesidir. Standart Python listelerine göre çok daha hızlı ve hafıza açısından daha verimlidir.
NumPy Nedir?
NumPy, büyük, çok boyutlu diziler ve matrislerle çalışmak için optimize edilmiş bir kütüphanedir. Bu diziler üzerinde matematiksel, mantıksal, şekillendirme ve diğer birçok işlemi etkin bir şekilde gerçekleştirmenizi sağlar. Pandas ve Scikit-learn gibi diğer birçok bilimsel Python kütüphanesi NumPy’ın üzerine inşa edilmiştir.
NumPy Dizileri (ndarray) Oluşturma
NumPy dizileri, aynı türden verileri içeren homojen yapılardır. Farklı yöntemlerle oluşturulabilirler:
import numpy as np
# Tek boyutlu dizi
arr1 = np.array([1, 2, 3, 4, 5])
print("Tek boyutlu dizi:", arr1)
# Çıktı: Tek boyutlu dizi: [1 2 3 4 5]
# İki boyutlu dizi (matris)
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print("İki boyutlu dizi:n", arr2)
# Çıktı:
# İki boyutlu dizi:
# [[1 2 3]
# [4 5 6]]
Diğer pratik dizi oluşturma yöntemleri şunlardır:
# Tamamı sıfırlardan oluşan dizi
zeros_arr = np.zeros(5)
print("Sıfır dizisi:", zeros_arr)
# Çıktı: Sıfır dizisi: [0. 0. 0. 0. 0.]
# Tamamı birlerden oluşan matris
ones_matrix = np.ones((2, 3))
print("Bir matrisi:n", ones_matrix)
# Çıktı:
# Bir matrisi:
# [[1. 1. 1.]
# [1. 1. 1.]]
# Belirli aralıkta ardışık sayılar
range_arr = np.arange(0, 10, 2) # 0'dan 10'a (10 dahil değil) 2'şer atlayarak
print("Aralık dizisi:", range_arr)
# Çıktı: Aralık dizisi: [0 2 4 6 8]
# Belirli aralıkta eşit aralıklı sayılar
linspace_arr = np.linspace(0, 1, 5) # 0 ile 1 arasında 5 eşit sayı
print("Eşit aralıklı dizi:", linspace_arr)
# Çıktı: Eşit aralıklı dizi: [0. 0.25 0.5 0.75 1. ]
Dizi Özellikleri ve Temel İşlemler
NumPy dizilerinin boyutları, şekli ve veri tipi gibi önemli özellikleri vardır. Bu özellikler, dizilerle çalışırken size yol gösterir.
arr = np.array([[1, 2, 3], [4, 5, 6]])
print("Dizinin boyutu (dim):", arr.ndim) # Çıktı: 2
print("Dizinin şekli (shape):", arr.shape) # Çıktı: (2, 3) (2 satır, 3 sütun)
print("Dizideki eleman sayısı (size):", arr.size) # Çıktı: 6
print("Dizinin veri tipi (dtype):", arr.dtype) # Çıktı: int64 veya int32
Diziler üzerinde indeksleme ve dilimleme (slicing) işlemleri, belirli elemanlara veya alt dizilere erişmek için kullanılır. Bu işlemler Python listelerindeki işlemlere benzer, ancak çok boyutlu diziler için daha gelişmiş yetenekler sunar.
arr = np.array([[10, 20, 30], [40, 50, 60], [70, 80, 90]])
print("İlk eleman:", arr[0, 0]) # Çıktı: 10
print("İkinci satır, üçüncü sütun:", arr[1, 2]) # Çıktı: 60
# İlk satırdan tüm elemanlar
print("İlk satır:", arr[0, :]) # Çıktı: [10 20 30]
# Tüm satırlardan ikinci sütun
print("İkinci sütun:", arr[:, 1]) # Çıktı: [20 50 80]
# İlk iki satır ve son iki sütun
print("Alt matris:n", arr[:2, 1:])
# Çıktı:
# Alt matris:
# [[20 30]
# [50 60]]
arr[0:2], 0. ve 1. indeksleri kapsar, 2. indeksi değil.Matematiksel İşlemler ve Fonksiyonlar
NumPy, diziler üzerinde element bazında hızlı matematiksel işlemler yapmanızı sağlar. Toplama, çıkarma, çarpma, bölme gibi temel aritmetik işlemler doğrudan diziler üzerinde uygulanabilir.
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
print("Toplama:", arr1 + arr2) # Çıktı: [5 7 9]
print("Çarpma:", arr1 * arr2) # Çıktı: [ 4 10 18]
print("Skaler çarpma:", arr1 * 2) # Çıktı: [2 4 6]
print("Karesi:", arr1 ** 2) # Çıktı: [1 4 9]
Ayrıca, NumPy birçok istatistiksel ve matematiksel fonksiyon sunar:
arr = np.array([[1, 2, 3], [4, 5, 6]])
print("Toplam (tüm elemanlar):", arr.sum()) # Çıktı: 21
print("Ortalama (tüm elemanlar):", arr.mean()) # Çıktı: 3.5
print("Sütun bazında toplam:", arr.sum(axis=0)) # Çıktı: [5 7 9] (ilk sütunlar, ikinci sütunlar vs. toplandı)
print("Satır bazında ortalama:", arr.mean(axis=1)) # Çıktı: [2. 5.] (ilk satırın ortalaması, ikinci satırın ortalaması)
Pandas Temelleri: Veri Manipülasyonunun Anahtarı
Pandas, Python’da veri analizi ve manipülasyonu için tasarlanmış güçlü bir kütüphanedir. Özellikle tablo biçimindeki verilerle (CSV, Excel dosyaları, SQL veritabanları gibi) çalışmayı çok kolaylaştırır. İki ana veri yapısı vardır: Series ve DataFrame.
Pandas Nedir?
Pandas, R programlama dilindeki veri çerçevesi (data frame) kavramından esinlenerek geliştirilmiştir. Yapısal verileri sezgisel bir şekilde depolamanıza, temizlemenize, dönüştürmenize ve analiz etmenize olanak tanır. Kayıp veri işleme, veri hizalama, gruplama, birleştirme gibi birçok gelişmiş özelliği bünyesinde barındırır.
Series Nesnesi: Tek Boyutlu Veriler
Series, Pandas’ın tek boyutlu etiketli dizisidir. Her bir eleman bir indeksle ilişkilidir. Bir sütunu veya bir satırı temsil edebilir.
import pandas as pd
# Listeden Series oluşturma
s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
print("Series:n", s)
# Çıktı:
# Series:
# a 10
# b 20
# c 30
# d 40
# dtype: int64
print("Series'ten eleman erişimi:", s['b']) # Çıktı: 20
print("Series dilimleme:", s[1:3]) # Çıktı:
# b 20
# c 30
# dtype: int64
DataFrame Nesnesi: İki Boyutlu Yapısal Veriler
DataFrame, Pandas’ın en çok kullanılan ve en güçlü veri yapısıdır. Farklı türlerde verileri içerebilen sütunlara sahip iki boyutlu, etiketli bir veri yapısıdır. Bir veritabanı tablosuna veya Excel elektronik tablosuna benzer.
# Sözlükten DataFrame oluşturma
data = {
'İsim': ['Ali', 'Ayşe', 'Can', 'Deniz'],
'Yaş': [25, 30, 22, 28],
'Şehir': ['Ankara', 'İstanbul', 'İzmir', 'Ankara']
}
df = pd.DataFrame(data)
print("DataFrame:n", df)
# Çıktı:
# İsim Yaş Şehir
# 0 Ali 25 Ankara
# 1 Ayşe 30 İstanbul
# 2 Can 22 İzmir
# 3 Deniz 28 Ankara
Genellikle veriler dış kaynaklardan okunur:
# Varsayımsal bir 'veriler.csv' dosyasından okuma
# df_csv = pd.read_csv('veriler.csv')
# print(df_csv.head()) # İlk 5 satırı gösterir
DataFrame Temel İşlemleri
DataFrame’ler üzerinde sütun seçimi, satır filtreleme, sıralama ve eksik veri yönetimi gibi birçok temel işlem yapılabilir.
print("Sadece 'İsim' sütunu:n", df['İsim'])
# Çıktı:
# 0 Ali
# 1 Ayşe
# 2 Can
# 3 Deniz
# Name: İsim, dtype: object
print("Yaşı 25'ten büyük olanlar:n", df[df['Yaş'] > 25])
# Çıktı:
# İsim Yaş Şehir
# 1 Ayşe 30 İstanbul
# 3 Deniz 28 Ankara
.loc ve .iloc, DataFrame’lerde satır ve sütunlara erişim için çok güçlü ve esnek yöntemlerdir:
📚 İlginizi çekebilir: Python Fonksiyonları: Nasıl Tanımlanır ve Kullanılır?
.loc: Etiket (isim) bazlı indeksleme yapar. Sütun isimleri ve satır indeksleri (etiketleri) ile çalışır..iloc: Konum (sayısal indeks) bazlı indeksleme yapar. Sütun ve satırların 0’dan başlayan sayısal konumlarıyla çalışır.
# 'Ayşe' etiketli satır ve 'Yaş' sütununa erişim (loc)
# df.loc[1, 'Yaş'] -> eğer indeksler 0, 1, 2, 3 ise
print("Ayşe'nin yaşı (loc ile):", df.loc[1, 'Yaş']) # Çıktı: 30
# İlk satır ve ikinci sütuna erişim (iloc)
print("İlk satır, ikinci sütun (iloc ile):", df.iloc[0, 1]) # Çıktı: 25
.dropna() ile eksik veriye sahip satırları silebilir veya .fillna() ile eksik verileri belirli bir değerle (ortalama, medyan vb.) doldurabilirsiniz.Veri Gruplama ve Birleştirme
groupby() fonksiyonu, veriyi belirli bir sütuna göre gruplayıp her grup üzerinde toplama, ortalama alma gibi özet istatistikler hesaplamak için kullanılır. merge() ve concat() ise farklı DataFrame’leri birleştirmek için kullanılır.
# 'Şehir'e göre grupla ve 'Yaş' ortalamasını al
print("Şehirlere göre yaş ortalaması:n", df.groupby('Şehir')['Yaş'].mean())
# Çıktı:
# Şehir
# Ankara 26.5
# İstanbul 30.0
# İzmir 22.0
# Name: Yaş, dtype: float64
Matplotlib Temelleri: Veriyi Görselleştirmek
Matplotlib, Python’da veri görselleştirmesi için en yaygın kullanılan kütüphanelerden biridir. Çizgi grafiklerinden histogramlara, dağılım grafiklerinden 3D çizimlere kadar çok çeşitli statik, animasyonlu ve interaktif grafikler oluşturmanızı sağlar.
Matplotlib Nedir?
Matplotlib, MATLAB’e benzer bir arayüze sahip olup, bilimsel çizimler ve görselleştirmeler oluşturmak için tasarlanmıştır. Verilerdeki eğilimleri, desenleri ve anormallikleri hızla keşfetmenizi sağlar. Genellikle pyplot modülü üzerinden kullanılır.
Temel Grafik Türleri
Matplotlib ile oluşturabileceğiniz bazı temel grafik türleri:
- Çizgi Grafiği (Line Plot): Zaman serisi verilerini veya iki değişken arasındaki ilişkiyi göstermek için idealdir.
- Dağılım Grafiği (Scatter Plot): İki sayısal değişken arasındaki ilişkiyi, özellikle veri noktalarının dağılımını incelemek için kullanılır.
- Sütun Grafiği (Bar Plot): Kategorik verileri karşılaştırmak veya farklı grupların değerlerini göstermek için uygundur.
- Histogram: Bir değişkenin dağılımını, veri aralıklarındaki frekansları göstererek anlamak için kullanılır.
import matplotlib.pyplot as plt
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 3, 5, 7, 11])
plt.plot(x, y)
plt.title("Örnek Çizgi Grafiği")
plt.xlabel("X Ekseni")
plt.ylabel("Y Ekseni")
plt.show() # Grafiği gösterir
x_scatter = np.random.rand(50) * 10
y_scatter = np.random.rand(50) * 10
plt.scatter(x_scatter, y_scatter)
plt.title("Örnek Dağılım Grafiği")
plt.xlabel("Değişken 1")
plt.ylabel("Değişken 2")
plt.show()
Grafik Özelleştirme
Matplotlib, grafiklerinizi renklendirme, işaretleyiciler ekleme, eksen limitlerini ayarlama, başlık ve etiketler ekleme gibi birçok özelleştirme seçeneği sunar.
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, label='Sinüs', color='red', linestyle='--')
plt.plot(x, y2, label='Kosinüs', color='blue', marker='o', markersize=4)
plt.title("Sinüs ve Kosinüs Eğrileri")
plt.xlabel("Açı (Radyan)")
plt.ylabel("Değer")
plt.legend() # Lejantı göster
plt.grid(True) # Izgara ekle
plt.show()
Çoklu Grafikler ve Subplotlar
Tek bir figür içinde birden fazla alt grafik (subplot) oluşturarak farklı görselleştirmeleri yan yana veya üst üste gösterebilirsiniz. Bu, veriler arasındaki ilişkileri karşılaştırmak için kullanışlıdır.
plt.figure(figsize=(10, 5)) # Figür boyutunu ayarla
plt.subplot(1, 2, 1) # 1 satır, 2 sütun, 1. grafik
plt.plot(x, y1, color='red')
plt.title("Sinüs")
plt.subplot(1, 2, 2) # 1 satır, 2 sütun, 2. grafik
plt.plot(x, y2, color='blue')
plt.title("Kosinüs")
plt.tight_layout() # Grafikler arasında boşluk bırak
plt.show()
Kütüphaneleri Birlikte Kullanma: Entegre Yaklaşım
Gerçek dünya veri analizi projelerinde, bu üç kütüphane genellikle birlikte kullanılır. NumPy ile sayısal veriler oluşturulur veya işlenir, Pandas ile bu veriler anlamlı bir yapıya dönüştürülür ve analiz edilir, Matplotlib ile de sonuçlar görselleştirilir.
# 1. Adım: NumPy ile veri oluşturma (örneğin rastgele sıcaklık ve nem verileri)
np.random.seed(42)
sicaklik = np.random.randint(15, 30, 100) # 100 günlük sıcaklık
nem = np.random.randint(40, 90, 100) # 100 günlük nem
# 2. Adım: Pandas ile DataFrame oluşturma
dates = pd.date_range(start='2023-01-01', periods=100)
data = {
'Tarih': dates,
'Sıcaklık': sicaklik,
'Nem': nem
}
df_weather = pd.DataFrame(data)
# 3. Adım: Pandas ile veri analizi (ortalama sıcaklık, nem)
ortalama_sicaklik = df_weather['Sıcaklık'].mean()
ortalama_nem = df_weather['Nem'].mean()
print(f"Ortalama Sıcaklık: {ortalama_sicaklik:.2f}°C")
print(f"Ortalama Nem: {ortalama_nem:.2f}%")
# 4. Adım: Matplotlib ile görselleştirme
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1) # 2 satır, 1 sütun, 1. grafik
plt.plot(df_weather['Tarih'], df_weather['Sıcaklık'], label='Sıcaklık (°C)', color='red')
plt.title('Günlük Sıcaklık Değişimi')
plt.xlabel('Tarih')
plt.ylabel('Sıcaklık (°C)')
plt.grid(True)
plt.legend()
plt.subplot(2, 1, 2) # 2 satır, 1 sütun, 2. grafik
plt.plot(df_weather['Tarih'], df_weather['Nem'], label='Nem (%)', color='blue')
plt.title('Günlük Nem Değişimi')
plt.xlabel('Tarih')
plt.ylabel('Nem (%)')
plt.grid(True)
plt.legend()
plt.tight_layout()
plt.show()
Bu örnekte, NumPy ile basit veri setleri oluşturduk. Pandas ile bu verileri tarih damgaları ekleyerek anlamlı bir DataFrame’e dönüştürdük ve ortalama sıcaklık ile nemi hesapladık. Son olarak, Matplotlib kullanarak bu verilerin zaman içindeki değişimini görselleştirdik. Bu entegre yaklaşım, herhangi bir veri bilimi projesinin temelini oluşturur.
📚 İlgili konu: Python Döngüleri: For ve While Döngüsü Kullanımı
Kütüphane Özellikleri Karşılaştırma Tablosu
| Özellik | NumPy | Pandas | Matplotlib |
|---|---|---|---|
| Temel Rol | Sayısal hesaplamalar, çok boyutlu diziler | Veri manipülasyonu, analiz, yapısal veri yönetimi | Veri görselleştirme, grafik çizimi |
| Ana Veri Yapısı | ndarray (çok boyutlu dizi) |
Series (tek boyutlu), DataFrame (iki boyutlu) |
Figure, Axes (grafik ve eksen nesneleri) |
| Tipik Kullanım Alanları | Matris işlemleri, matematiksel fonksiyonlar, sinyal işleme | Veri temizleme, filtreleme, gruplama, CSV/Excel okuma | Çizgi, sütun, dağılım, histogram gibi grafikler oluşturma |
| Diğer Kütüphanelerle İlişkisi | Pandas ve diğer bilimsel kütüphanelerin temelini oluşturur. | NumPy üzerine inşa edilmiştir, Matplotlib ile görselleştirilir. | NumPy ve Pandas verilerini görselleştirmek için kullanılır. |
- NumPy’da 3×3 boyutlarında, tüm elemanları 7 olan bir matrisi nasıl oluşturursunuz?
- Bir Pandas DataFrame’inde ‘Ürün Fiyatı’ sütunundaki eksik değerleri (NaN) ortalama fiyat ile nasıl doldurursunuz?
- Matplotlib kullanarak, X ekseninde 1’den 10’a kadar sayıların, Y ekseninde ise bu sayıların karelerinin olduğu bir çizgi grafiği çizin. Grafiğe bir başlık ve eksen etiketleri eklemeyi unutmayın.
- NumPy, Pandas ve Matplotlib’in veri analizi sürecindeki rollerini kısaca açıklayın ve her birinin neden önemli olduğunu belirtin.
- Aşağıdaki Python kodunda hangi kütüphanenin kullanıldığını ve çıktısının ne olacağını tahmin edin:
import numpy as np arr = np.array([10, 20, 30, 40, 50]) print(arr[arr > 25])
- NumPy: Python’da yüksek performanslı sayısal hesaplamalar için temel olan
ndarray(çok boyutlu dizi) yapısını sunar. Matris işlemleri ve matematiksel fonksiyonlar için vazgeçilmezdir. - Pandas: Yapısal verileri (tabloları) etkili bir şekilde yönetmek ve analiz etmek için
SeriesveDataFramegibi güçlü veri yapıları sağlar. Veri temizleme, filtreleme ve gruplama işlemleri için idealdir. - Matplotlib: Verileri görselleştirmek ve çeşitli grafik türleri (çizgi, sütun, dağılım, histogram) oluşturmak için kullanılan popüler bir kütüphanedir. Verilerdeki eğilimleri ve desenleri anlamaya yardımcı olur.
- Bu üç kütüphane, veri biliminde birbirini tamamlayan roller üstlenerek, ham verinin toplanmasından, işlenmesine ve görsel sunumuna kadar tüm süreci kapsayan entegre bir çözüm sunar.
- Python’daki veri analizi ve makine öğrenimi ekosisteminin temelini oluştururlar ve bu alanlarda çalışan herkes için öğrenilmesi gereken kritik araçlardır.
Bir Sonraki Adım: Bilgilerinizi Uygulayın
NumPy, Pandas ve Matplotlib’in temellerini öğrendiniz. Artık bu bilgileri gerçek dünya veri setleri üzerinde uygulamanın zamanı geldi. İnternette bulabileceğiniz açık kaynak veri setlerini (örneğin Kaggle’dan) kullanarak kendi veri analizi projelerinizi oluşturmaya başlayın. Farklı grafik türlerini deneyin, verileri farklı şekillerde manipüle edin ve elde ettiğiniz sonuçları yorumlamaya çalışın. Unutmayın, pratik yapmak, bu kütüphanelerde ustalaşmanın en etkili yoludur. Ayrıca, bu kütüphanelerin daha gelişmiş özelliklerini ve diğer popüler veri bilimi kütüphanelerini (örneğin Scikit-learn, Seaborn) keşfetmek, yeteneklerinizi bir sonraki seviyeye taşıyacaktır.



