.. _sec_pandas: Veri Ön İşleme ============== Şimdiye kadar, zaten tensörlerde saklanan verilerde oynama yapmak için çeşitli teknikleri tanıştırdık. Gerçek dünyadaki problemleri çözmede derin öğrenme uygularken, genellikle tensör biçiminde güzel hazırlanmış veriler kullanmak yerine ham verileri ön işleyerek başlarız. Python'daki popüler veri analitik araçları arasında ``pandas`` paketi yaygın olarak kullanılmaktadır. Python'un geniş ekosistemindeki diğer birçok uzatma paketi gibi, ``pandas`` da tensörler ile birlikte çalışabilir. Bu nedenle, ham verileri ``pandas`` ile ön işleme ve bunları tensör formatına dönüştürme adımlarını kısaca ele alacağız. Daha sonraki bölümlerde daha çok veri ön işleme tekniğini ele alacağız. Veri Kümesini Okuma ------------------- Örnek olarak, ``../data/house_tiny.csv`` isimli csv (virgülle ayrılmış değerler) dosyasında saklanan yapay bir veri kümesi yaratarak başlıyoruz. Diğer formatlarda saklanan veriler de benzer şekilde işlenebilir. Aşağıda veri kümesini satır satır bir csv dosyasına yazıyoruz. .. raw:: latex \diilbookstyleinputcell .. code:: python import os os.makedirs(os.path.join('..', 'data'), exist_ok=True) veri_dosyasi = os.path.join('..', 'data', 'house_tiny.csv') with open(veri_dosyasi, 'w') as f: f.write('NumRooms,Alley,Price\n') # Sütun adları f.write('NA,Pave,127500\n') # Her satır bir örnek temsil eder f.write('2,NA,106000\n') f.write('4,NA,178100\n') f.write('NA,NA,140000\n') Oluşturulan csv dosyasından ham veri kümesini yüklemek için ``pandas`` paketini içe aktarıyoruz ve ``read_csv`` işlevini çağırıyoruz. Bu veri kümesinde dört satır ve üç sütun bulunur; burada her satırda oda sayısı ("NumRooms"), sokak tipi ("Alley") ve evin fiyatı ("Price") açıklanır. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python # Eğer pandas kurulu ise alt satırdaki yorumu kaldır # !pip install pandas import pandas as pd veri = pd.read_csv(veri_dosyasi) print(veri) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output NumRooms Alley Price 0 NaN Pave 127500 1 2.0 NaN 106000 2 4.0 NaN 178100 3 NaN NaN 140000 .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python # Eğer pandas kurulu ise alt satırdaki yorumu kaldır # !pip install pandas import pandas as pd veri = pd.read_csv(veri_dosyasi) print(veri) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output NumRooms Alley Price 0 NaN Pave 127500 1 2.0 NaN 106000 2 4.0 NaN 178100 3 NaN NaN 140000 .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python # Eğer pandas kurulu ise alt satırdaki yorumu kaldır # !pip install pandas import pandas as pd veri = pd.read_csv(veri_dosyasi) print(veri) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output NumRooms Alley Price 0 NaN Pave 127500 1 2.0 NaN 106000 2 4.0 NaN 178100 3 NaN NaN 140000 .. raw:: html
.. raw:: html
Eksik Verileri İşleme --------------------- "NaN" girdilerinin eksik değerler olduğuna dikkat edin. Eksik verilerle başa çıkmak için, tipik yöntemler arasında *itham etme* ve *silme* yer alır; burada itham etme eksik değerleri ikame edenlerle değiştirir, silme ise eksik değerleri yok sayar. Burada ithamı ele alacağız. Tamsayı-konuma dayalı indeksleme (``iloc``) ile, ``veri``\ yi ``girdiler``\ e ve ``ciktilar``\ a (çıktılar) böldük, burada girdi ilk iki sütuna, çıktı ise son sütuna denk gelir. ``Girdiler``\ deki eksik sayısal değerler için, "NaN" girdilerini aynı sütunun ortalama değeri ile değiştiriyoruz. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python girdiler, ciktilar = veri.iloc[:, 0:2], veri.iloc[:, 2] girdiler = girdiler.fillna(girdiler.mean()) print(girdiler) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output NumRooms Alley 0 3.0 Pave 1 2.0 NaN 2 4.0 NaN 3 3.0 NaN .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python girdiler, ciktilar = veri.iloc[:, 0:2], veri.iloc[:, 2] girdiler = girdiler.fillna(girdiler.mean()) print(girdiler) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output NumRooms Alley 0 3.0 Pave 1 2.0 NaN 2 4.0 NaN 3 3.0 NaN .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python girdiler, ciktilar = veri.iloc[:, 0:2], veri.iloc[:, 2] girdiler = girdiler.fillna(girdiler.mean()) print(girdiler) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output NumRooms Alley 0 3.0 Pave 1 2.0 NaN 2 4.0 NaN 3 3.0 NaN .. raw:: html
.. raw:: html
``Girdiler``\ deki kategorik veya ayrık değerler için ``NaN``'i bir kategori olarak kabul ediyoruz. "Alley" sütunu yalnızca "Pave" ve "NaN" olmak üzere iki tür kategorik değer aldığından, ``pandas`` bu sütunu otomatik olarak "Alley\_Pave" ve "Alley\_nan" sütunlarına dönüştürebilir. Sokak tipi "Pave" olan bir satır "Alley\_Pave" ve "Alley\_nan" değerlerini 1 ve 0 olarak tayin eder. Sokak türü eksik olan bir satır, değerlerini 0 ve 1 olarak tayin eder. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python girdiler = pd.get_dummies(girdiler, dummy_na=True) print(girdiler) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output NumRooms Alley_Pave Alley_nan 0 3.0 1 0 1 2.0 0 1 2 4.0 0 1 3 3.0 0 1 .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python girdiler = pd.get_dummies(girdiler, dummy_na=True) print(girdiler) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output NumRooms Alley_Pave Alley_nan 0 3.0 1 0 1 2.0 0 1 2 4.0 0 1 3 3.0 0 1 .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python girdiler = pd.get_dummies(girdiler, dummy_na=True) print(girdiler) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output NumRooms Alley_Pave Alley_nan 0 3.0 1 0 1 2.0 0 1 2 4.0 0 1 3 3.0 0 1 .. raw:: html
.. raw:: html
Tensör Formatına Dönüştürme --------------------------- Artık ``girdiler``\ deki ve ``ciktilar``\ daki tüm girdi değerleri sayısal olduğundan, bunlar tensör formatına dönüştürülebilir. Veriler bu formatta olduğunda, daha önce tanıttığımız tensör işlevleri ile daha fazla oynama yapılabilir :numref:`sec_ndarray`. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python from mxnet import np X, y = np.array(girdiler.values), np.array(ciktilar.values) X, y .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output (array([[3., 1., 0.], [2., 0., 1.], [4., 0., 1.], [3., 0., 1.]], dtype=float64), array([127500, 106000, 178100, 140000], dtype=int64)) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python import torch X, y = torch.tensor(girdiler.values), torch.tensor(ciktilar.values) X, y .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output (tensor([[3., 1., 0.], [2., 0., 1.], [4., 0., 1.], [3., 0., 1.]], dtype=torch.float64), tensor([127500, 106000, 178100, 140000])) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python import tensorflow as tf X, y = tf.constant(girdiler.values), tf.constant(ciktilar.values) X, y .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output (, ) .. raw:: html
.. raw:: html
Özet ---- - Python'un geniş ekosistemindeki diğer birçok eklenti paketi gibi, ``pandas`` da tensörler ile birlikte çalışabilir. - İtham etme ve silme, eksik verilerle baş etmek için kullanılabilir. Alıştırmalar ------------ Daha fazla satır ve sütun içeren bir ham veri kümesi oluşturun. 1. En fazla eksik değerlere sahip sütunu silin. 2. Ön işlenmiş veri kümesini tensör formatına dönüştürün. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
`Tartışmalar `__ .. raw:: html
.. raw:: html
`Tartışmalar `__ .. raw:: html
.. raw:: html
`Tartışmalar `__ .. raw:: html
.. raw:: html