Python Veri Bilimi Kütüphaneleri 1 – Pandas Metodoloji

Üzerinde çalıştığım konuları, sizlere de tek tek anlatacağım bir seri haline getiriyorum. Bu sebeple, aktif olarak üzerinde çalıştığım hemen hemen tüm kütüphanelerin metodolojisini ve kullanım yönlerini anlatacağım. Önceliği veri okumadan veri ön işleme gibi fonksiyonel işlemlere izin veren pandas ile başlayacağım. Eksik verilerin gözlenmesi ve o verilerin veri seti içerisinden çıkartma işlemi gibi veri bilimi için hayati önemi olan adımları, bu kütüphane sayesinde veri ön işleme adımlarını rahatlıkla gerçekleştirebiliriz. Ek olarak veri tiplerini ve onların üzerinde yapacağınız, sayısal ya da kategorik işlemlerin ön kısmını bu şekilde atlatabilirsiniz. Bu da yapılacak işlemlerin öncesinde bize önemli anlamda kolaylık sağlar. Python içerisinde bulunan her kütüphanenin kendine has özellikleri bulunmaktadır fakat pandas için konuşmak gerekirse, veri bilimi adımlarının temelini oluşturmak için verinin üzerinde yapılacak ön parça değişikliklerin tamamından sorumludur. Pandas içerisinde veriyi sınıflama işlemleri de birkaç fonksiyonel kod ile hızlıca tasarlanıp aktif hale getirilebilir. Bu da veri ön işleme aşamasında, veriyi modellemenin önceki adımlarında en kritik noktadır.

 

 

Veriyi, ‘dataframe’ ya da ‘series’ halde saklayabilir ve üzerinde işlemleri yapabiliriz. Pandas kütüphanesinin veri üzerinden yapılacak her işlem fonksiyonel, kolay ve hızlı bir şekilde yapması, veri bilimciler adına veri bilimi süreçlerinde iş yükünü azaltmaktadır. Bu sayede, sürecin başlangıç ve en zor kısmı olan veri ön işleme gibi adımları halledip işin son adımlarına odaklanabilir. Farklı türde hazırlanmış .csv, .xlsx, .json, .txt gibi verileri okuma işlemleri yaparak, girişi yapılmış ya da veri madenciliği sayesinde toplanmış verileri işlem yapmak için python bünyesine alır. Dataframe metoduna sahip olan pandas kütüphanesi, veriyi daha işlevsel ve ölçeklenebilir hale getirme konusunda diğer kütüphanelere göre daha mantıklı hatta sürdürülebilirdir. Bu alanda çalışacak kişiler, direkt olarak kod yazmak için değil bu gibi temel anlamda python programlama dilinin temel ve sağlam yapısına sahip pandas kütüphanesinin metodolojisi üzerine çalışmalıdır. Çünkü veri üzerinde yeni atamalar, kolon isimleri, değişkenleri gruplama, verideki boş gözlemleri veriden çıkarmak ya da boş gözlemleri belirli bir şekilde doldurma işlemleri (ortalama, 0 ya da medyan ataması) yapılabilir.

 

 

Pandas kütüphanesi bilinmeden verilerin üzerinde işlem ya da herhangi bir analiz yapılamaz. Açıkça belirtmek gerekirse, pandas kütüphanesi veri biliminin kalbi denilebilir. Özel olarak tasarlanmış apply(), drop(), iloc(), dtypes() ve sort_values() gibi fonksiyonlar, bu kütüphaneyi ayrıcalıklı kılan en mühim özelliktir. Asıl çıkış noktası temelinde buraya dayanmasa bile, bu işlemler için vazgeçilmez bir kütüphanedir. Yapılacak adımlarda, muazzam özelliklere sahip bir yapıya ve sözdizimi anlamında daha temel bir durumdadır. Döngülerden çıkan sonuçların da kümeler içinde barındırılıp onları dataframe ya da series haline dönüştürmeniz mümkündür. İşlemlerin hızlanması, ortaya çıkacak olan projenin zamana bağlı olarak ilerleyen bir süreci varsa ki genelde böyledir, fonksiyonel anlamda büyük avantaj sağlar. Diğer imkanlarına bakınca ise, python kütüphaneleri arasında verim seviyesi en yüksek kütüphanelerden birisidir. Birçok alanda kullanıma elverişli olması, müthiş bir ek özellik olarak değerlendirilebilir. Pandas, python programlama dilini kullanan yazılımcılar tarafından yapılan veri işleme kütüphaneleri arasındaki oylamada ilk 3 kütüphane arasındadır. Kaynaklar kısmında datarequest ile alıntıladığım bu duruma ulaşabilirsiniz.

 

 

2015 yılından bu yana gelişen ‘veri bilimi’ kavramı, pandas kütüphanesini de ön plana çıkarmaya ve yıllarca sessizlik içerisinde gelişimi sürdüren bu kütüphanenin gün yüzüne çıkmasına ön ayak oldu. Pandas sonrası, numpy anlatacağım ve onun hakkında yapılan numerik, matris işlemlerinden bahsedeceğim. Pandas genel anlamda bu şekilde temel anlamda veri analizi ve veri işleme konusunda üst düzey özelliklere sahip bir kütüphanedir. Ek olarak bahsedeceğiniz konular ve değinmemi istediğiniz şeyler varsa belirtirseniz verim anlamında daha sağlam bir yol çizmiş olurum. Seri halinde yayınlayacağım bu yazıların umarım bu alanda çalışacak kişilere yardımı dokunur. İlerleyen süreçlerde github üzerinden hazırlayacağım cheatsheet tarzı içerikleri de kaynakça kısmına ekleyeceğim. Eğer siz de bu gibi notlardan yararlanmak isterseniz, github hesabımı kaynak kısmına koyacağım oradan rahatlıkla ulaşabilirsiniz.

 

 

References:

https://www.geeksforgeeks.org/python-pandas-dataframe/

https://medium.com/deep-learning-turkiye/adan-z-ye-pandas-tutoriali-ba%C5%9Flang%C4%B1%C3%A7-ve-orta-seviye-4edf0094e0d5#:~:text=Pandas%2C%20Python%20programlama%20dili%20i%C3%A7in,sonuca%20kolayca%20ula%C5%9Fmak%20i%C3%A7in%20kullan%C4%B1lmaktad%C4%B1r.

https://www.dataquest.io/blog/15-python-libraries-for-data-science/

https://github.com/tanersekmen/

https://www.edureka.co/blog/python-pandas-tutorial/

https://globalaihub.com/importance-of-data-quality-and-data-processing/

https://globalaihub.com/hareketli-ortalama-algoritmasiyla-al-sat-tavsiyeleri/

https://www.dataquest.io/course/pandas-fundamentals/

TOPLULUK- KOLEKTİF ÖĞRENME YÖNTEMLERİ

Sınıflandırma algoritmaları ile bir verinin hangi sınıfa ait olduğunu tahmin ettiğimizi düşünelim. Bunun için problemimize en uygun sınıflandırma yöntemini seçer, gerekli optimizasyonları yapar ve yüksek doğruluk oranı elde etmeye çalışırız. Ancak bazı veri setlerinde yüksek varyans ve düşük doğruluk değerine sahip sınıflandırmalar gerçekleşmektedir. Sınıflandırma ve tahmin işlemlerindeki bu soruna çözüm üretmek ve performans kaybını önlemek için farklı metotlar öne sürülmüştür. Bu metotlardan biri de topluluk öğrenme yöntemleridir.

Peki topluluk öğrenmesi nedir?

Topluluk öğrenmesi, birden fazla modelin aynı sorunu çözmek için eğitildiği ve daha iyi sonuçlar elde etmek amacıyla birleştirildiği bir makine öğrenimi modelidir. “Birlikten kuvvet doğar” bu sözü hepimiz duymuşuzdur topluluk öğrenme yöntemleri de tam olarak böyle çalışır. Özetlemek gerekirse zayıf modeller doğru şekilde birleştirildiğinde daha güçlü modeller oluşur hipotezine dayanmaktadır.

Böyle bir yaklaşımı günlük hayatımızda rutin olarak birkaç kişinin görüşlerini sorarak kullanıyoruz. Örneğin, bir ürünü almadan önce o ürünü alanlara danışırız, internetteki kullanıcı yorumlarını okuruz. Akademik anlamda bir örnek verecek olursak bir makale yayına kabul edilmeden önce birkaç uzman tarafından incelenir. Çünkü birden çok uzmanın ortak kararı, bir uzmanın kararından daha güvenilir ve daha yüksek doğruluğa sahiptir.

Bagging, Boosting, Voting Classifier, Stacking başlıca topluluk öğrenme metotlarındandır. Bu yazımızda Bagging üzerinde duracağız ve pekiştirmek için Python’da bir örnek çalışma yapacağız. Öncelikle Bagging yöntemi nedir inceleyelim.

Yerine Koyarak Örnekleme (Bagging: Bootsrap Aggregating)

Bagging, var olan bir eğitim setinden yeni eğitim setleri türeterek temel öğreniciyi yeniden eğitmeyi amaçlayan bir yöntemdir. Yukarıdaki şemadan da yola çıkarak konuya biraz açıklık getirelim. Öncelikle mevcut veri seti eğitim ve test olarak ayrılır. Burada eğitilecek (n tane örnekten oluşan) veri setinden, basit tekrarlı tesadüfi örnekleme yoluyla torbalara (1’den n’e kadar) örneklem birimleri atanır ve ortaya bir topluluk çıkar.

Seçilen her örneklem tekrar eğitim setine geri koyulur.  Bu durumda bazı eğitim örnekleri yeni eğitim kümesinde yer almazken bazıları birden fazla yer alır. Ortaya çıkan örneklem birimleri modelleme için kullanılır ve eğitilir. Her bir model değerlendirilerek regresyon problemi çözüyorsak ortalama, sınıflandırma problemi çözüyorsak çoğunluk oylaması sonuçlarına göre tahmin işleminin sonucu tek bir ifade ile ortaya çıkar. Bunun sonucunda gözlem ve değişken bazında rassallık sağlanır, aşırı öğrenme sorunu hafifler ve tahmin başarısı artar.

Şimdi Python’da bir uygulama yaparak öğrendiklerimizi pekiştirelim. Uygulamamızda öncelikle karar ağacı ile tek sınıflandırıcı kullanacağız sonrasında aynı veri seti ile topluluk öğrenme yöntemlerinden Random Forest ve Bagging uygulaması yapacağız ve aralarındaki farkları birlikte karşılaştıracağız.

1.Adım: Gerekli kütüphaneler yüklenmiştir.

2.Adım: Veri seti yüklenmiştir. Veri seti sosyal medya reklam kampanyası kayıtlarından oluşmaktadır. Elimizde toplamda 400 gözlem ve 5 tane de özellik mevcuttur. Bunlar; KullaniciID, Cinsiyet, Yaş, Tahmini Gelir ve  SatinAlmaDurumu’dur. Burada hedef değişkenimiz ürünün satın alınma durumudur. Hedef değişkenimiz eğer bir müşteri bir ürünü aldıysa 1, almadıysa 0 olarak kodlanmıştır. Diğer dört nitelik ise bağımsız değişkenlerdir. Sınıflandırma modelimiz bağımsız değişkenleri kullanarak, bağımlı değişkenin (yani ürünün satın alınıp alınmadığını) tahmin edecektir.

Bağımlı değişken incelenmiştir. Buna göre sosyal medya reklam kampanyası sonucu 257 kişi ürün satın almamış, 143 kişi ise ürünü satın almıştır.

3.Adım: Veriler eğitim için hazırlanmıştır. Burada yaş ve tahmini maaş değerleri bağımsız değişkenlerdir ve X’e atanmıştır. Satın alma durumu değişkeni de bağımlı değişken olan y’ye atanmıştır.

Daha sonra veri seti eğitim ve test seti olarak ayrılmıştır. Yüzde 80’i eğitim seti yüzde 20’si de test seti olarak ayrılmıştır.

4.Adım: Burada karar ağacı modeli eğitilmiştir ve karar ağacına ait doğru sınıflandırma oranı yaklaşık olarak yüzde 90 olarak bulunmuştur. Confusion matrisine bakıldığında ise modelimizin 80 tane veri içerisinden 72 tanesini doğru tahmin ettiği görülmektedir.

5.Adım: Şimdi topluluk öğrenme yöntemlerinden olan Random Forest modelini oluşturacağız ve doğruluk oranını inceleyeceğiz.

Burada sınıflandırma için sklearn.ensemble kütüphanesinin RandomForestClassifier sınıfını kullanılmıştır. Bu model parametre olarak n_estimators alır ve bu parametre rastgele ormandaki ağaçların sayısını tanımlar. Biz 15 ağaç olarak kodladık.

Bir topluluk öğrenmesi yöntemi olarak Random Forest’ın %92 ile karar ağacına göre daha yüksek bir doğruluk oranı yakaladığını görüyoruz. Ayrıca modelimiz 80 tane veri içerisinden 74 tanesini doğru tahmin etmiştir. Oldukça iyi bir tahmin olduğunu söyleyebiliriz.

6.Adım: Şimdi de Bagging modelini oluşturacağız.

Bagging modelinin test sonuçlarına baktığımızda yaklaşık 0.94’lük bir doğruluk oranına sahip olduğunu görüyoruz. Ayrıca modelimiz 80 tane veri içerisinden 75 tanesini doğru tahmin etmiştir. Tıpkı Random Forest da olduğu gibi oldukça iyi bir tahmin olduğunu söyleyebiliriz. Topluluk öğrenmesi yöntemleri yardımıyla, tek bir karar ağacındaki doğruluk oranından daha yüksek bir değer elde ettik. Bu durumun da topluluk öğrenmesi yöntemlerinin tek bir karar ağacı sınıflandırmasından farkını güzel bir şekilde açıkladığını düşünüyorum. Umarım topluluk öğrenme yöntemleri konusu hakkında bir fikriniz oluşmuştur ve umarım faydalı olmuştur.

Bir sonraki yazımda görüşmek dileğiyle 😊

Yararlanılan Kaynaklar:

https://tevfikbulut.com/2020/05/31/topluluk-ogrenme-algoritmalarindan-torbalama-algoritmasi-ile-gogus-kanserinin-tahmini-uzerine-bir-vaka-calismasi-a-case-study-on-the-prediction-of-breast-cancer-using-bagging-algorithm-from-ensemble/

https://www.veribilimiokulu.com/blog/ensemble-yontemler-topluluk-ogrenmesi-basit-teorik-anlatim-ve-python-uygulama/

https://www.knowledgehut.com/blog/data-science/bagging-and-random-forest-in-machine-learning

http://dspace.yildiz.edu.tr/xmlui/bitstream/handle/1/7360/0113685.pdf?sequence=1&isAllowed=y

https://towardsdatascience.com/simple-guide-for-ensemble-learning-methods-d87cc68705a2

http://abakus.inonu.edu.tr/xmlui/handle/11616/18218

http://www.scholarpedia.org/article/Ensemble_learning#:~:text=Ensemble%20learning%20is%20the%20process,%2C%20function%20approximation%2C%20etc.

https://medium.com/ml-research-lab/ensemble-learning-the-heart-of-machine-learning-b4f59a5f9777

https://medium.com/deep-learning-turkiye/ensemble-learning-bagging-ve-boosting-50643428b22b

https://medium.com/ml-research-lab/ensemble-learning-the-heart-of-machine-learning-b4f59a5f9777

https://medium.com/deep-learning-turkiye/ensemble-learning-bagging-ve-boosting-50643428b22b#:~:text=1.-,Torbalama(Bagging),tahminciler%20uygulanarak%20bir%20topluluk%20olu%C5%9Fturulur.&text=Olu%C5%9Fturulan%20alt%20%C3%B6rneklemler%20orijinal%20veri%20setindeki%20say%C4%B1%20ile%20ayn%C4%B1%20olacakt%C4%B1r

https://www.veribilimiokulu.com/blog/agaca-dayali-yontemlerde-bagging-ve-boosting-arasinda-ne-fark-var/

http://ceur-ws.org/Vol-1483/11_Bildiri.pdf

https://medium.com/@anilguven1055/topluluk-%C3%B6%C4%9Frenmesi-ensemble-learning-3b71524297d5

https://medium.com/@billmuhh/kolektif-%C3%B6%C4%9Frenme-ve-bagging-algoritmas%C4%B1-e8ea3d932b72

https://towardsdatascience.com/ensemble-methods-in-machine-learning-what-are-they-and-why-use-them-68ec3f9fef5f

 

 

 

 

 

 

Veri Bilimcinin Mutlaka Bilmesi Gereken Sql ve Pandas Kodları

Bundan 15-20 yıl önce yazılım dünyasında belli başlı yeteneklere sahip olmak, bir kaç program bilmek işinizi oldukça kolaylaştırıyor ve yetkinlik sağlıyordu. Bugün geldiğimiz noktada ise tek bir program ya da becerinin yanında bir çok alanda, farklı özellik sahibi olmak ve farklı program dilleri bilmek kişiyi ön plana çıkarmaktadır.

SQL (Structured Query Language) sorgu dili geçmişte ve günümüzde hala önemini korusa da, özellikle yapay zeka ve makine öğrenmesi gibi alanların yaygınlaşması sonucunda Python’da kullanılan Pandas kütüphanesi ön plana çıkmaya başlamıştır.

Bu yazımda temel veri keşfi analizinde kullanılan kodların SQL ve Pandas da nasıl yazıldığını inceleyeceğiz. Analiz boyunca buradaki  Airports datasını kullanacağız. Airports datasının csv dosyasını SQL’e ve Pandas’a yükledikten sonra analize başlayabilirsiniz.

1. Select, Where, Distinct Komutları

SQLPANDASAÇIKLAMA
select * from airports airportsTüm tabloyu getirir.
select top(10) * from airportsairports.head(10)İlk 10 satırı getirir.
select id from airports where iso_country = ‘TR’
airports.id[airports.iso_country == ‘TR’]iso_country si TR olan id leri getirir.
select distinct iso_region from airportsairports.iso_region.unique()Uniq değerleri getirir.

2. Birden Fazla Koşulla Seçim

SQL de birden fazla koşul and ve or ile verilirken, Pandas‘ta bu & ve | şekilleri ile verilir.

SQLPANDASAÇIKLAMA
select * from airports where iso_country = ‘TR’ and type = ‘closed’
airports[(airports.iso_region == ‘US-CA’) & (airports.type == ‘seaplane_base’)]Country’si TR olan ve type’ı closed olan değerleri getirir.
select ident, name, municipality from airports where iso_region = ‘US-CA’ and type = ‘large_airport’airports[(airports.iso_region == ‘US-CA’) & (airports.type == ‘large_airport’)][[‘ident’, ‘name’, ‘municipality’]]Region’u US-CA olan type’i large airport olan kolonları ident,name ve municipality olan değerleri getirir.

3. Order By Sıralama Komutu

SQL’de sıralama Order By komutu ile yapılırken, Pandas’ta ise sort_values ve ascending komutu kullanılmaktadır.

SQLPANDASAÇIKLAMA
select * from airports where iso_country = ‘TR’ order by idairports[airports.iso_country == ‘TR’].sort_values(‘id’)iso_country’si TR olanları id’e göre küçükten büyüğe sıralar.
select * from airports where iso_country = ‘TR’ order by id descairports[airports.iso_country == ‘TR’].sort_values(‘id’, ascending=False)iso_country’si TR olanları id’e göre büyükten küçüğe sıralar.

4. In-not, In Komutu

SQL’de where komutuna birden fazla değeri koşul olarak koymak için kullanılır. Pandas’ta ise bu işi isin komutu gerçekleştirir. Dışındakileri getirirken ~ simgesi unutulmamalıdır.

SQLPANDASAÇIKLAMA
select * from airports where type in (‘small_airport’, ‘closed’) airports[airports.type.isin([‘small_airport’, ‘closed’])]type’i small_airport ve closed olanları getirir.
select * from airports where type not in (‘small_airport’, ‘closed’)airports[~airports.type.isin([‘small_airport’, ‘closed’])]type’i small_airport ve closed dışındakileri getirir.

5. Group By, Count Komutları

SQL ve Pandas’da group by komutları ortaktır. Count komutu ise yerine göre değişebilir. SQL’deki count ile Pandas’daki size aynı anlamda kullanılabilir diyebiliriz.

SQLPANDASAÇIKLAMA
select iso_country, type, count(*) from airports group by iso_country, type order by iso_country, type


airports.groupby([‘iso_country’, ‘type’]).size()iso_country’e göre gruplar ve iso_coutry ve type göre sıralar.
select iso_country, type, count() from airports group by iso_country, type order by iso_country, count() descairports.groupby([‘iso_country’, ‘type’]).size().to_frame(‘size’).reset_index().sort_values([‘iso_country’, ‘size’], ascending=[True, False])iso_country’e göre gruplar ve iso_coutry ve type göre tersten sıralar.

6. Having

Gruplanmış veri SQL’de having komutu ile filtreleyebiliriz. Pandas’ta bu işlevi filtre komutu yapmaktadır.

SQLPANDASAÇIKLAMA
select type, count(*) from airports where iso_country = ‘US’ group by type having count(*) > 1000 order by count(*) descairports[airports.iso_country == ‘US’].groupby(‘type’).filter(lambda g: len(g) > 1000).groupby(‘type’).size().sort_values(ascending=False)iso_country’si US olanları type göre gruplar 1000’den büyük olanları getirir.

7. Union all ve Union

SQLPANDASAÇIKLAMA
select name, municipality,ident from airports where ident = ‘LTBE’ union all select name, municipality,ident from airports where ident = ‘LTFM’pd.concat([airports[airports.ident == ‘KLAX’][[‘name’, ‘municipality’]], airports[airports.ident == ‘KLGB’][[‘name’, ‘municipality’]]])identleri ‘LTBE’ ve ‘LTFM’ olanları getirir.

8. Insert into

SQL’de yeni tablo oluşturmak için create table komutu kullanılırken, tabloya yeni kayıt eklemek için kullanılan insert into komutu kullanılır. Pandas’da ise pd.DataFrame ile yeni tablo oluşturulup, yeni kayıtlar direk içine yazılabilir ya da başka bir tablo ile concat komutu ile birleştirilebilir.

SQLPANDASAÇIKLAMA
create table yenitablo (id integer, isim text);df1 = pd.DataFrame({‘id’: [1, 2], ‘isim’: [‘Mert’, ‘Furkan’]})Yeni tablo oluşturur.
insert into yenitablo values (1, ‘Mert’);df2 = pd.DataFrame({‘id’: [3], ‘name’: [‘Hermione Granger’]})Tabloya yeni kayıt ekler.
pd.concat([df1, df2]).reset_index(drop=True)
YA DA
data = pd.DataFrame([[9, 7], [8, 5]], columns=list(‘PD’))

data2 = pd.DataFrame([[6, 4], [1, 2]], columns=list(‘PD’))

data.append(data2, ignore_index=True)

9. Delete

SQL’de silme işlemini ‘delete‘ komutu yerine getirirken, Pandas’ta ‘drop‘ komutu kullanılır.

SQLPANDASAÇIKLAMA
delete from airports where type = ‘heliport’airports.drop(airports[airports.type == ‘heliport’].index)type’ı heliport olanları siler.

Bu yazımda temel olarak SQL ve Pandas komutlarının karşılaştırılmasına değindim. Gelecek yazılarımda Pandas kütüphanesi ile ilgili bir seri hazırlamayı düşünüyorum. Soru ve önerileriniz için bana linkedinden yazabilirsiniz.

* Bu yazıdan esinlenerek hazırlanmıştır.