Python Veri Bilimi 4 – Pandas Kütüphanesinin Kullanımı

Pandas, python programlama dilinde veri analizi için kullanılan bir kütüphanedir.

Numpy kütüphanesinde kullandığımız bütün fonksiyonları pandas kütüphanesinde de kullanabiliriz.

Peki o zaman neden numpy kütüphanesini kullanmıyoruz da pandas kütüphanesini kullanıyoruz?

Numpy kütüphanesinin en büyük eksiği sadece aynı türden verileri alabilmesidir. Mesela sayısal bir veri vermişsek bütün verilerin sayısal olarak olması gerekmektedir. Ancak bizim kullandığımız ve gerçek hayatta karşımıza çıkan birçok veri kümesi farklı veri türlerinden oluşmaktadır.

Mesela bir okuldaki öğrencilerin verilerinden oluşan bir veri seti düşünün.

Burada öğrencinin adı(string), boyu(float), memleketi(string), sınıftan geçip kalma durumu(boolean) gibi farklı veri türleri vardır. İşte bu tarz durumlarda numpy kütüphesi ile işlem yapamayız. Bunun yerine pandas kütüphanesini kullanmamız gerekmektedir.

Pandas kütüphanesi ile kolay bir şekilde .csv, .txt, xls gibi dosyalardan veri alabilir bunlar üzerinde istediğimiz manipülasyonu yapabiliriz.

Pandas kütüphanesini kurmak için konsol ekranına aşağıdaki kodu yazmamız ve enter e basmamız yeterlidir.

pip install pandas

Pandas kütüphanesinde temel olarak 2 veri nesnesi bulunur. Bunlar seriler ve veri çerçeveleridir.

1- Seriler(Series)

Numpy dizilerine benzer.

Etiketli verilerdir. Bu yapısı ile bir çeşit sözlük yapısı gibi düşünelebilir. Ancak sözlüklerde arka arkaya gelen veriler seçilemezken serilerde bu yapılabilir.

Seriler Indekslenmiş(sıralanmış) tek boyutlu dizilerdir.

Serileri ouşturmak için liste, sözlük vb. kullanılabilir.

Örnek pandas serisi

import pandas as pd
liste=[4,6,7,9,23]
pandas_seri= pd.Series(liste)
print(pandas_seri)

Pandas serilerinde varsayılan olarak index 0 dan başlar. İstersek bunu değiştirebilir veya barklı index numaraları verebiliriz.

import pandas as pd
liste=[4,6,7,9,23]
pandas_seri= pd.Series(liste,index=["a","b","c","d","e"])
print(pandas_seri)

2- Veri Çerçeveleri(DataFrame)

iris(zambak) dataset (veri kümesi)

Yukarıda iris(zambak) datasetinden(veri kümesinden) bir örnek görmektesiniz. Pandas kütüphanesinde bu şekilde iki boyutlu verilere DataFrame denmektedir. (Veriler excel tablosu gibidir)

Burada dikkat etmeniz gereken nokta en son sütun(Species). Buradaki veriler string(sözel)veri tipindedir ancak diğer alanlar float(ondalık) veri tipindedir. İşte pandas kütüphanesi ile bu tarz verisetlerinde kolaylıkla işlemler yapabiliriz.

Verilere Nerden Ulaşabilirim?

Günümüzde verilere ulaşmak şu ana kadar hiç olmadığı kadar kolaydır.

Çeşitli web sitelerinden, veritabanlarından, excel tablolarından, metin belgelerinden vb. verilere ulaşabiliriz.

Buralardan verileri nasıl alacağımızı ilerleyen derslerimzde detaylı olarak göreceğiz.

Iris(zambak) Verisetinin Kullanımı

İnternette daha önce oluşturulumuş birçok verisetine ulaşabilirsiniz. (Örneğin: https://www.kaggle.com/)

Bu verisetlerinden bazıları eğitim amaçlı kullanılmaktadır. Irıs veriseti de eğitim amaçlı kullanılan bir verisetidir.

Bu setinde 150 tane zambak çiçeğinin taç yaprak boyu ve eni, çanak yaprak boyu ve eni ve zambağın türü bulunmaktadır.

Biz de dersimizde bu verisetini kullanarak verileri üzerinde çeşitli işlemler yapacağız.

import pandas as pd 

iris = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data") 
print(iris)

Bu şekilde kütüphaneni internetten indirerek kullanabiliriz.

import pandas as pd 
iris = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data")  #normalde pd.read_csv() dememiz yeterli
iris.columns
iris.columns=["Taç Boy","Taç En","Çanak Boy","Çanak En","Tür"] #başlıkları değiştir
iris.head(10) #10 satır göster

import pandas as pd 
iris = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data")  #normalde pd.read_csv() dememiz yeterli
iris.columns
iris.columns=["Taç Boy","Taç En","Çanak Boy","Çanak En","Tür"] #başlıkları değiştir
iris.tail(5) #sondan 5 satırı göster. 

Bazı önemli fonksiyonlar.

iris.info() #genel bilgi almak için
np_dizi=iris.values #pandas numpy tipine çevir
iris.copy() #veri çerçevesini başka veri çerçevesine aktarmak
iris.head() #baştan 5 değer
iris.tail() #sondan 5 değer
iris.describe() #genel bilgi
iris = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data") 
iris.columns=["Taç Boy","Taç En","Çanak Boy","Çanak En","Tür"] #başlıkları değiştir
iris.loc[2,"Çanak En"] #2. satırdaki çanak en
iris = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data") 
iris.columns=["Taç Boy","Taç En","Çanak Boy","Çanak En","Tür"] #başlıkları değiştir
iris.loc[:,"Çanak En"] #bütün satırlarda çanak en

Dataset olarak getirmek için

iris = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data") 
iris.columns=["Taç Boy","Taç En","Çanak Boy","Çanak En","Tür"] #başlıkları değiştir
iris.iloc[[1]] #1 numaralı 
iris = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data") 
iris.columns=["Taç Boy","Taç En","Çanak Boy","Çanak En","Tür"] #başlıkları değiştir
iris.iloc[[17,18,20]] 
iris = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data") 
iris.columns=["Taç Boy","Taç En","Çanak Boy","Çanak En","Tür"] #başlıkları değiştir
iris.iloc[[17,18,20],[2,3]] #sadece 2 ve 3.sütunlar
iris = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data") 
iris.columns=["Taç Boy","Taç En","Çanak Boy","Çanak En","Tür"] #başlıkları değiştir
iris["fark"]=iris["Taç Boy"]-iris["Taç En"]
print(iris)
import pandas as pd 

iris = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data")  #dosyayı yükle
iris.columns=["Taç Boy","Taç En","Çanak Boy","Çanak En","Tür"] #başlıkları değiştir
iris["Taç En"] #sütün seçme # tek boyutlu dizi olarak döner. yani series
iris[["Taç En"]] #veri çerçevesi olarak gösterir
iris[["Taç En","Çanak Boy"]]
iris[2:5] #2 ile 5. satır arası
#loc - location yani kodum iloc (sayısal konum) integer loc
#.index(["abc","def"]) ile satır isimlendirilir.
#eğer read_csv() ile okutursak ve satırlar 1. sutündaysa index_col=0 deriz read_csv içine
iris.loc[2] #2. satırı getirdi. burada satır ismi varsa o da yazılır
iris.loc[[2]] #dataset olarak gelir
iris.loc[[2,4]] #2 ve 4. satırı getir. 
#hisseler['acilis']['ERN'] #satır ve sütün ismine göre
#hisseler.acilis['ERN'] #yukarıdaki ile aynı
iris.loc[[2,4],["Çanak Boy","Tür"]] #2 ile 4 arası çanak boy ve tür
#numpy formülleri pandas ta da uygulanır
import pandas as pd 
import numpy as np
iris = pd.read_csv("https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/0e7a9b0a5d22642a06d3d5b9bcbad9890c8ee534/iris.csv")  #normalde pd.read_csv() dememiz yeterli
dizi=iris.iloc[:,[0,1,2,3]] #bütün satır ve 0,1,2,3 sütünlarını seç
dizi_log=np.log(dizi) #logaritmasını al
print(dizi_log.head()) #baştan ilk 5 değer

Seaborn Kütüphanesi

Pythonda eğitim amaçlı verisetlerini indirmek için güzel bir kütüphane vardır. (seaborn)

Seaborn kütüphanesi ile istediğimiz verisetini kolay bir şekilde kullanabiliriz. Bunun için aşağıdaki kodu yazarak kütüphaneyi indiriyoruz.

pip install seaborn

Yukarıdaki kod ile aynı görevi gören aşağıdaki kodu inceleyebilirsiniz.

import seaborn as sns
iris=sns.load_dataset('iris')
print(iris)

Pandas verilerini istersek numpy dizisine çevirebiliriz.

import seaborn as sns
iris=sns.load_dataset('iris')
np_dizi=iris.values #numpy dizisine çevir
print(np_dizi)

Dataset hakkında genel bir bilgi almak

import seaborn as sns
iris=sns.load_dataset('iris')
print(iris.describe)

Sadece 1 sütunun bilgilerini almak

import seaborn as sns
iris=sns.load_dataset('iris')
iris['species'].describe()

count: uzunluk, unique: birbirinden farklı 3 veri var, top:en çok görünen, freq: kaç gözlem olduğu

Uzunluğunu almak için

import seaborn as sns
iris=sns.load_dataset('iris')
iris.count()
import seaborn as sns
iris=sns.load_dataset('iris')
veriler=['petal_length','petal_width']
iris[veriler].count()
import seaborn as sns
iris=sns.load_dataset('iris')
veriler=['petal_length','petal_width']
iris[veriler].mean() #ortalama
iris[veriler].std() # standart sapma
iris[veriler].median() #ortanca
iris[veriler].quantile(0.25) #yüzdelik dilim
import seaborn as sns
iris=sns.load_dataset('iris')
iris['petal_length'].min()
iris['petal_length'].max()
import seaborn as sns
iris=sns.load_dataset('iris')
iris.mean(axis='columns') #satır bazında hesaplama
import seaborn as sns
iris=sns.load_dataset('iris')
kosul=iris['species'] == 'versicolor'
type(kosul)
kosul
import seaborn as sns
iris=sns.load_dataset('iris')
kosul=iris['species'] == 'versicolor'
versicolor=iris.loc[kosul,:]
versicolor.head()
import seaborn as sns
iris=sns.load_dataset('iris')
kosul=iris['species'] == 'versicolor'
versicolor=iris.loc[kosul,:]
versicolor.describe()
#yukarıdakinin kısa yoldan yapılışı
import seaborn as sns
iris=sns.load_dataset('iris')
iris[iris['species'] == 'versicolor'].describe()
#yukarıdakinin değişik yapılışı
import seaborn as sns
iris=sns.load_dataset('iris')
kosul=iris['species'].str.contains('setosa')
setosa=iris[kosul]
print(setosa.head())
import seaborn as sns
iris=sns.load_dataset('iris')
iris[iris.sepal_length>7]
import seaborn as sns
iris=sns.load_dataset('iris')
iris[(iris.sepal_length>6.5) & (iris.petal_length<4.5)]
import seaborn as sns
iris=sns.load_dataset('iris')
iris[(iris.sepal_length>7.5) | (iris.petal_length<6.5)]
import seaborn as sns
iris=sns.load_dataset('iris')
iris.petal_length[iris.sepal_length>7.5]
#.all() #hiç sıfır içermeyen sütünları görmek için
# .any() # sıfırdan farklı değerler içeren sütünları görmek için 
#.isnull() #null değeri içeren sütünlar
#.notnull() #null değer içermeyenler görmek için
#ÖRNEKLERDEN KULLANMAK İÇİN DATASET OLUŞTURDUK
import pandas as pd
import numpy as np

degisken=np.repeat(['A','B','C','D'],[3,3,3,3],axis=0)
deger=np.random.random(12)
df_dict={'degisken':degisken,'deger':deger}
df=pd.DataFrame(df_dict)
df=df[['degisken','deger']]
print(df)
import pandas as pd
import numpy as np

degisken=np.repeat(['A','B','C','D'],[3,3,3,3],axis=0)
deger=np.random.random(12)
df_dict={'degisken':degisken,'deger':deger}
df=pd.DataFrame(df_dict)
df=df[['degisken','deger']]
df2=df.pivot(columns='degisken',values='deger') #değişken isimlerini sütün ismi yaptık
print(df2)
#TEKRAR ESKİ HALİNE GETİR
import pandas as pd
import numpy as np

degisken=np.repeat(['A','B','C','D'],[3,3,3,3],axis=0)
deger=np.random.random(12)
df_dict={'degisken':degisken,'deger':deger}
df=pd.DataFrame(df_dict)
df=df[['degisken','deger']]
df2=df.pivot(columns='degisken',values='deger') #değişken isimlerini sütün ismi yaptık
df3=df2.melt(value_vars=['A','B','C','D'],value_name='deger').dropna()
print(df3)
#VERİ ÇERÇEVESİNİ BİRLEŞTİRMEK
#how = left, right, inner, outer
#left ile önce yazılan veri çerçevesi ele alınır, right tam tersi
#inner seçildiğinde sadece kesişimler ele alınır. 
#outher seçildiğinde bileşim kümesi alınır. Birbirinde olmayan değerler için nan seçilir.
#on hangi sütünün dikkate alınacağı. Burada X seçilddi. 
df3=pd.merge(df1,df2,how='left',on='X')  

Yayınlayan

Ahmet KADAK

Bilgisayar Öğretmeni & Bilgisayar Mühendisi

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.