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.