2.2. Veri Ön İşleme¶ Open the notebook in SageMaker Studio Lab
Ş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.
2.2.1. 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.
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.
# 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)
NumRooms Alley Price
0 NaN Pave 127500
1 2.0 NaN 106000
2 4.0 NaN 178100
3 NaN NaN 140000
# 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)
NumRooms Alley Price
0 NaN Pave 127500
1 2.0 NaN 106000
2 4.0 NaN 178100
3 NaN NaN 140000
# 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)
NumRooms Alley Price
0 NaN Pave 127500
1 2.0 NaN 106000
2 4.0 NaN 178100
3 NaN NaN 140000
2.2.2. 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.
girdiler, ciktilar = veri.iloc[:, 0:2], veri.iloc[:, 2]
girdiler = girdiler.fillna(girdiler.mean())
print(girdiler)
NumRooms Alley
0 3.0 Pave
1 2.0 NaN
2 4.0 NaN
3 3.0 NaN
girdiler, ciktilar = veri.iloc[:, 0:2], veri.iloc[:, 2]
girdiler = girdiler.fillna(girdiler.mean())
print(girdiler)
NumRooms Alley
0 3.0 Pave
1 2.0 NaN
2 4.0 NaN
3 3.0 NaN
girdiler, ciktilar = veri.iloc[:, 0:2], veri.iloc[:, 2]
girdiler = girdiler.fillna(girdiler.mean())
print(girdiler)
NumRooms Alley
0 3.0 Pave
1 2.0 NaN
2 4.0 NaN
3 3.0 NaN
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.
girdiler = pd.get_dummies(girdiler, dummy_na=True)
print(girdiler)
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
girdiler = pd.get_dummies(girdiler, dummy_na=True)
print(girdiler)
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
girdiler = pd.get_dummies(girdiler, dummy_na=True)
print(girdiler)
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
2.2.3. 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 Section 2.1.
from mxnet import np
X, y = np.array(girdiler.values), np.array(ciktilar.values)
X, y
(array([[3., 1., 0.],
[2., 0., 1.],
[4., 0., 1.],
[3., 0., 1.]], dtype=float64),
array([127500, 106000, 178100, 140000], dtype=int64))
import torch
X, y = torch.tensor(girdiler.values), torch.tensor(ciktilar.values)
X, y
(tensor([[3., 1., 0.],
[2., 0., 1.],
[4., 0., 1.],
[3., 0., 1.]], dtype=torch.float64),
tensor([127500, 106000, 178100, 140000]))
import tensorflow as tf
X, y = tf.constant(girdiler.values), tf.constant(ciktilar.values)
X, y
(<tf.Tensor: shape=(4, 3), dtype=float64, numpy=
array([[3., 1., 0.],
[2., 0., 1.],
[4., 0., 1.],
[3., 0., 1.]])>,
<tf.Tensor: shape=(4,), dtype=int64, numpy=array([127500, 106000, 178100, 140000])>)
2.2.4. Ö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.
2.2.5. Alıştırmalar¶
Daha fazla satır ve sütun içeren bir ham veri kümesi oluşturun.
En fazla eksik değerlere sahip sütunu silin.
Ön işlenmiş veri kümesini tensör formatına dönüştürün.