Pandas: Veri Türleri Üzerindeki Perdeyi Kaldırın

Merhabalar bu yazımızda: “Pandas dataframe veri türlerini nasıl görebiliriz?” sorusunun cevabını iki farklı yöntemi mukayese ederek öğreneceğiz. Aslında bir nevi pandas dataframe şeması üzerinde keşif yapacağız. “Okudum veriyi oldu bitti” deyip dümdüz, tam gaz ilerlemeyin. İleride başınıza neler gelebilir dikkat edin.

Aslında dataframe nesnesinin dtypes özelliği var oradan çok kolay veri türlerini öğrenebiliriz niçin böyle basit bir konuda yazı yazıyorsunuz diyebilirsiniz? Evet haklısınız ancak yazının ilerleyen bölümlerinde bana hak vereceğinizi düşünüyorum. Çünkü dtypes gerçekten bazı veri türlerini gizliyor.

Pandas dataframe büyük veri dünyasının haricinde neredeyse veri manipülasyonunun tek adresi. Çok gelişmiş yetenekleri var. Tabiri caizse veriye takla attırıyorsunuz. Veri ile uğraşıyorsanız verinin seyri boyunca şemayı mutlaka göz altında tutmalısınız. Yaptığınız dönüşümler şemayı da değiştirebilir ve bu ilerleyen aşamalarda karşınıza hata olarak gelebilir.

Birazdan bir örnek yapacağız. Örneğimizde bir dataframe üzerinden 2 farklı şema nasıl oluyor göreceğiz.

Örnek veriyi çocukluğumun en popüler oyuncusu Cüneyt Arkın ve Kara Murat karakterinden esinlenerek biraz sallamasyon oluşturdum. Tutarsızlıklar varsa kusura bakmayın. Ancak bu işin gırgırı tabi asıl olan veri türleri onlara odaklanacağız.

Veri:

data = {
"user_id": [251],
"first_name": ["Murat"],
"last_name": ["Fedai"],
"nick_name": "Kara Murat",
"summary": ["Fatih'in fedaisi."],
"birth_place": ["Çorum"],
"photo_url": ["/photos/7/000/253/05b/308dd6e.jpg"],
"served_years_places": [ [ {"year": 1461, "place": "Arnavutluk"},
                 {"year": 1464, "place": "Bosna Hersek"}]
],
"education": [ [ {"school_name": "Çorum Sıbyan Mektebi", "start": 1441, "end": 1445, "city": "Çorum"},
                 {"school_name": "Fatih Medresesi", "start": 1455, "end": 1457, "city": "İstanbul"} 
               ],
],
"contact_info": [ { "blog": "http://karamuratbenim.com", "twitter": "http://twitter.com/KaraMurat" }],
"horses": [ '{ "name": "Gelincik"}']
}

Birazdan bu dictionary yapısını pandas dataframe haline getireceğiz ancak ondan önce veri türlerini çıplak gözle bir inceleyelim:

user_id -> int           
first_name -> string     
last_name -> string 
nick_name -> string
summary -> string
birth_place -> string  
photo_url -> string
served_years_places -> list(her bir elemanı dictionary)
education -> list(her bir elemanı dictionary)
contact_info -> dictionary
horses -> string (dictionary gibi görünüyor ama dışarıdaki tek tırnaklar string yapıyor)

Şimdi de pandas dataframe oluşturalım.

df = pd.DataFrame(data=data)

Dataframe olarak görelim

df.head()
Şekil-1: Pandas Dataframe Görünüm

Şimdi diyelim ki ey pandas bize sen söyle veri türlerini. Bunun için yaygın iki yöntem var: df.dtypes ve df.info(). dtypes kullanalım.

Komut:
df.dtypes

Çıktı:
user_id                 int64
first_name             object
last_name              object
nick_name              object
summary                object
birth_place            object
photo_url              object
served_years_places    object
education              object
contact_info           object
horses                 object

Yukarıda gördüğümüz gibi her şeye object diyor. Peki ne var bu object’ler içinde? Nasıl öğrenebiliriz? Bir for döngüsü ile bu objelerin içindeki gerçek python veri tiplerini görebiliriz. Bu çıplak gözümüz ile yaptığımız incelemeye çok yakın olacaktır.

Komut: 
for i in df.columns:
    print(df[i].apply(lambda x: type(x)).head(1))


Çıktı:
0    <class 'int'>
Name: user_id, dtype: object
0    <class 'str'>
Name: first_name, dtype: object
0    <class 'str'>
Name: last_name, dtype: object
0    <class 'str'>
Name: nick_name, dtype: object
0    <class 'str'>
Name: summary, dtype: object
0    <class 'str'>
Name: birth_place, dtype: object
0    <class 'str'>
Name: photo_url, dtype: object
0    <class 'list'>
Name: served_years_places, dtype: object
0    <class 'list'>
Name: education, dtype: object
0    <class 'dict'>
Name: contact_info, dtype: object
0    <class 'str'>
Name: horses, dtype: object

Şimdi sadece bir farka değinip kapanış yapalım. dtypes, bize horses ve contact_info için object demişti (basit veri türlerinde object’i string olarak yorumlamaya eğilimliyizdir) ancak gerçekte contact_info’nun dictionary, horses’un ise string olduğunu öğrendik. Aslına bakarsanız horses da dictionary olmalı, ancak bir şekilde dışına tek tırnak gelmiş, o yüzden string. Onu da tek tırnaklardan kurtarıp gerçek hüviyetine kavuşturmalısınız. Diğer farklılıkların incelemesini sizlere bırakıyorum ve bitiriyorum.

Kıssadan hisse:

Gerçek veri türleri pandas tarafından perdeleniyor, işe koyulmadan önce mutlaka gerçek veri türlerinin ne olduğunu bilmeliyiz.

Başka bir yazıda görüşmek dileğiyle…

 

Kapak Görseli: Petter Rudwall on Unsplash

Yazar Hakkında
Toplam 177 yazı
Erkan ŞİRİN
Erkan ŞİRİN
10 yılı aşkın süredir yurtiçi ve yurtdışında sektörde büyük veri mühendisliği, platform yönetimi ve makine öğrenmesi ile ilgili çalışmalar yürütmekte ve aynı zamanda birçok kurum ve şirkete danışmanlık ve eğitimler vermektedir. Çalışma alanları: Data ve MLOps platformları, gerçek zamanlı veri işleme, değişen veriyi yakalama (CDC) ve Lakehouse.
Yorumlar (Yorum yapılmamış)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara