Sayfalar

6 Temmuz 2017 Perşembe

Python - Pandas ile Temel İşlemler

Pandas Python programlama dili için geliştirilmiş açık kaynaklı, kullanımı kolay, yüksek performanslı bir veri yapısı ve analizi kütüphanesidir. Bu yazı kapsamında Pandas ile .csv uzantılı dosyanın nasıl okunacağı, veri seti üzerinde temel bazı işlemlerin nasıl yapılacağı ve görselleştirmeye dair örnekler paylaşacağım.



Pandas ile read_csv komutunu kullanarak, .csv dosyalarını kolayca açabiliriz(default olarak virgül ayracı tanımlıdır).

import numpy as np
import pandas as pd

df = pd.read_csv('train.csv')

df değişkeninin tipi 'DataFrame' dir ve içeriğine bakacak olursak; 4209x378 boyutunda ve X0'dan X8'e kadar olan sütunlarda string tipinde değerlerin, geri kalan kısmında ise 0-1 değerlerinin olduğunu göreceğiz.


Eğer bu veri setinden belirli sütunları seçmek istiyorsak ;
data = df[ ["ID","y","X0","X1","X2"] ]

İstediğimiz bir sütun değerlerini grafik üzerinde görmek istiyorsak ;
data['y'].plot()


Ayrıca birden fazla sütunu aynı grafik üzerinde görüntüleyebiliriz ( figür boyutunu ayarlayabiliriz) ;
data[ ['y','ID'] ].plot(figsize=(10, 10)) 


.csv dosyasını read_csv  komutu ile okurken, herhangi bir sütunu index olarak ayarlayabiliriz. 
df = pd.read_csv('train.csv',index_col='ID')

Artık index değerimiz 0'dan başlayıp otomatik artmıyor, ID sütununu index olarak ayarladık ,dolayısıyla sütun sayımız da otomatik olarak 1 azaldı.

Bu veri seti üzerinde herhangi bir makine öğrenmesi tekniği uygulamak istenirse, veri içeriğinin uygun hale getirilmesi gerekmektedir. Bunun için string tipindeki değişkenlerin makine öğrenmesi algoritmalarının işleyebileceği hale getirilmesi gerekmektedir. Kategorik verileri encode etmek için LabelEncoder fonksiyonunu kullanabiliriz. LabelEncoder ile bir liste içerisindeki değerler, 0 ile sınıf sayısı (farklı değer sayısı) arasındaki integer değerlere eşlenir.

import numpy as np
import pandas as pd
from sklearn.preprocessing import LabelEncoder
df = pd.read_csv('train.csv',index_col='ID')
data = df[ ["y","X0","X1","X2"]]


lab = LabelEncoder()
x0_str = list(data['X0'].values)

lab.fit(x0_str)

x0 = lab.transform(x0_str)




Bu işlemi tüm sütunlara uygulamak istersek, her bir sütunun tipi object olanlarını integer değerlere eşlemek için ;
df = pd.read_csv('train.csv',index_col='ID')


for col in df.columns:
    if df[col].dtype == 'object':
        lab = LabelEncoder()
        encode = list(df[col].values)
        lab.fit(encode)
        df[col] = lab.transform(df[col].values)

Ve artık tüm verilerimiz int64 tipine dönüştürülmüş oldu. İçeriği güncellenmiş veri üzerinde maksimum değer  bulma ve sıralama işlemlerini şu şekilde yapabiliriz.

İlk 100 satırı seçip, X0 sütunun maksimum değerini bulmak için;
data = df[0:100]

data['X0'].max()
Out[37]: 46

X0 sütunun ilk 10 değerini bar grafik olarak göstermek için;
data = df[:10]
data['X0'].plot.bar()


Seçilen sütuna göre büyükten küçüğe sıralamak için;
data_sorted = data.sort_values(by='X0', ascending=False)

df DataFrame 'in her bir sütunu pd.Series tipindedir ve DataFrame veri tipini NumPy array tipine dönüştürmek için, .values ya da .as_matrix() kullanılabilir ;
data = df.values
data2 = df.as_matrix()

Belirtilen (0. ve 6.) satırları (indexleri!) silmek için ;
data.drop( [0,6], inplace=True)

Belirtilen sütunları silmek için ;
data.drop(['y','X0'], axis=1, inplace=True)

.drop işlemi yapılırken inplace=True parametresi kullanılmazsa, orjinal veri bozulmaz ve silinmiş hali geri döndürülür ;
data = df[:10]
data_deleted = data.drop(['y','X0'], axis=1)

Bu işlem sonrasında :

data -> 10x377 boyutunda (sütunlar SİLİNMEDİ!!!)  
data_deleted -> 10x375 boyutunda (y ve X0 sütunları SİLİNDİ!!!)  



3 yorum:

  1. Yeni başlayan birisi olarak teşekkür ederiz...

    YanıtlaSil
  2. bir kolonda en sık kullanılmış veriyi nasıl bulabiliriz, ve kaç defa kullanıldıgını

    YanıtlaSil