Pandas kütüphanesi ile Keşifsel Veri Analizi 📊

Ahmet Enes Yalçınkaya
7 min readJan 8, 2022

--

Pandas kütüphanesi Python programlama dili ile geliştirilen data analysis ve data manipulation işlemlerinde bize yardımcı olan hızlı, güçlü, esnek ve kolay uygulanabilir açık kaynak bir Python kütüphanesidir.

Veri bilimciler genellikle tablo formatında (.csv, .tsv, ya da .xlsx) data kaynakları ile çalışırlar. Pandas kütüphanesi ise SQL benzeri sorguları kullanarak, bu tür tablo verilerini yüklemeyi, işlemeyi ve analiz etmeyi oldukça kolaylaştırır. Aynı zamanda Matplotlib ve Seaborn gibi farklı kütüphaneler ile birlikte kullanıldığında tablo verileri üzerinde visual analysis yapmaya olanak verir.

Pandas kütüphanesinde Series ve DataFrame olmak üzere veri yapıları bulunmaktadır. Bu veri yapıları bir boyutlu ve iki boyutlu olarak karşımıza çıkıyor. Series tek boyutlu olarak, DataFrame’leri ise iki boyutlu olarak gerçek datamızın haline çok benzer bir şekilde gözlemleyebiliriz. Buradaki iki boyuttan kastımız, satırlarımızda nesne ve gözlem bilgileri tutulurken kolonlarda datamızın özellikleri tutulmaktadır.

Pandas kütüphanesini en iyi öğrenme yönteminin bu kütüphane üzerinde uygulama yapmak olduğunu düşünüyorum. Bu örneğimiz gerçek bir veri seti üzerinde yapacağımız işlemler ile gerçekleştirilecektir.

Elimizde bir telekom şirketinin sahip olduğu müşterilerin bazı bilgilerinin tutulduğu bir veri seti bulunmaktadır. Bu veri setini analiz etmek için ilk olarak .csv uzantılı dosyanın içerisinde bulunan datayı pandas kütüphanesi yardımı ile okuma işlemini gerçekleştireceğiz ardından bu veri setinin ilk beş satırını gösteren kodu yazacağız.

İlk 5 satırını yazdırdığımız verinin satırları her bir müşteriyi temsil ederken sütunları ise özelliklerini ifade etmektedir.

Eğer verimizin boyutunu ve kolonlarda bulunan özelliklerin ne olduğunu bulmak istiyorsak aşağıdaki gösterilen metotları uygulayabilirsin.

Eğer verimiz hakkında genel bilgileri edinmek istiyorsak info() metodunu kullanabiliriz. Bu metot bize oluşturduğumuz DataFrame’in toplam kaç kolondan oluştuğunu ve her bir kolonun dtype bize gösterecektir.

Verimiz bool, int64, float64 ve object datatype’lardan oluşmaktadır. Bir kolonun bool veri tipinde, üç tanesinin object veri tipinde ve on altı kolonun ise nümerik veri tipinde olduğunu gözlemleyebiliriz. Aynı zamanda verimizin içerisinde herhangi bir eksik verinin olmadığını da 3333 tane verinin her kolonda bulunduğunu fark ederek anlayabiliriz.

Peki kolonlarımızın veri tiplerini değiştirebilir miyiz ? Elbette evet! Churn kolonumuzun veri tipini int64 olarak değiştimek istiyorum. Bunun için aşağıdaki metotu kolaylıkla uygulayabilirim. Ve sonuç olarak tekrar DataFrame’in bilgilerini kontrol ettiğim zaman Churn kolonum bool veri tipinde int64 veri tipine dönmüştür.

Sıra verimiz için daha detaylı bilgiler elde etmeye geldi. describe() metotu ile birlikte verimizin eksik değerlerine, ortalamalarına, standart sapmalarına ve aralık bilgilerine ulaşmış olacağız.

Sayısal olmayan yani object veya bool veri tipinde bulunan kolonlarımızı ayrı olarak incelemek istersek include parametresinin içerisine incelemek istediğimiz veri tiplerini yerleştirerek erişebiliriz.

Peki Churn kolonunda bulunan bilgilerin kaç tanesi 0 kaç tanesi 1 değerini almaktadır. Bunu nasıl buluruz? İşte tek yapmamız gereken, value_counts() metotunu kullanmak olacak.

3333 adet verinin 2850 adeti 0'lardan oluşurken diğer kalanı ise 1'lerden oluşmaktadır.

Sorting

Verimizi değişkenlerden birisini seçerek büyükten küçüğe doğru sıralamak istiyorum. Yapmam gereken sort_values() metotunun içerisine hangi kolonumdaki bilgiye göre verimi sıralamak istiyorum ve artan mı azalan yönde mi sıralamak istiyorum bunu söylemem gerekiyor.

Aynı işlemi birden fazla sütun içinde yapabiliriz.

Indexing ve Retrieving Data

DataFrame’ler üzerinde çeşitli yollar ile indexleme işlemleri gerçekleştirebiliriz.

Churn kolonundaki değer telekom sektöründeki abone hareketini göstermektedir. Eğer Churn değerimiz 1 ise o müşteriyi kaybettiğimiz anlamına gelir. Örneğin; kaybedilen müşterilerin bizim verimizdeki oranını bulmak ister isek, Churn kolonundaki değerlerin ortalamasını alarak aşağıdaki sonucu elde ederiz.

%14,5'luk bir churn rate(kayıp oranı) değeri elde ettik. Bu değer şirketler için büyük bir kayıp oranı olabilir. Hatta iflasa kadar sürükleme durumu ortaya çıkabilir.

Şimdi ise şu soruya yanıt arayalım.

Kayıp kullanıcıların diğer sayısal değişkenlerinin ortalama değerleri nedir ?

Churn kolonumdaki değeri 1'e eşit olan kullanıcılarımın diğer kolonlarımda yer alan özelliklerinin ortalama değerlerini yukarıda gösterdiğim gibi mean() fonksiyonunu kullanarak bulabiliriz.

Kayıp müşterilerimin günlük konuşma dakikasının ortalaması nedir ?

Kaybettiğim müşterilerin günlük konuşma dakikalarını buldum. Bu rakam benim için çok kritik çünkü 206 dk. azımsanmayacak bir kayıp.

Şimdi sırada başka bir sorumuz var. Telefonlarımızla uluslararası konuşmalar gerçekleştirebiliriz. Peki hali hazırda bizim müşterimiz olan ve uluslararası konuşma paketlerimize üye olmayan ama en uzun uluslararası konuşma yapan müşterimizin kaç dakika kullandığına bir bakalım.

18.9 dakika uluslararası konuşma paketi olmayan ama uluslararası görüşme gerçekleştiren müşterilerin en uzun konuşma dakikasını da bulduk.

Şimdi loc ve iloc metotlarından bahsedeceğim. Eğer isme göre indeksleme yapmak istiyorsam loc() metodunu, sayıya göre indexleme yapmak istiyorsam iloc() metodunu kullanabilirim.

Kolonlarımdan State’dan başlayıp Area Code’a kadar olan sütunları içinde barındıran ve ilk 6 satırı bize döndüren işlemi gerçekleştirelim.

Bu işlemi loc metedu ile gerçekleştirdik. Sırada indexleme işlemini verdiğimiz sayıya göre yapan metodumuz iloc ile yapalım.

Eğer ilk satırı ya da son satırı çağıran metodu yazmak istersek df[:1] ve df[-1:] metodunu kullanabiliriz.

Hücrelere, Sütunlara ve Satırlara Apply Fonksiyonunu Uygulamak

Apply fonksiyonu bir işlemi her elemente uygulamak için uyguladığımız bir metotdur.

Aşağıda her kolondaki değerlerin en büyüğünü bulan işlemi gerçekleştireceğiz.

State kolonunda W ile başlayan her bir satıra bu işlemi uygulamak istiyorsak. Yapmamız gereken apply() metodu ile lambda fonksiyonunu birlikte kullanmak olacaktır. ( lambda arguments : expression )

Bir diğer sık kullandığımız metot olan map metodunu satılarımda yer alan değerleri istediğimiz başka bir değer ile değiştirirken kullanırız. Örneğin International plan kolunundaki ‘No’ değerlerinin yerine ‘False’, ‘Yes’ değerlerinin yerine ise ‘True’ yazdırmak istiyorum.

Aynı işlemi replace metodu ile de yapabiliriz.

Grouping

Belirli sütunlara göre datamızı seçtiğimiz kolona göre gruplamak istiyorsak aşağıdaki formülü rahatlıkla kullanabiliriz. Sonucunda bize seçtiğimiz kolonlara göre ve fonksiyona göre sonucu bize verecek.

df.groupby(by=grouping_columns)[columns_to_show].function()

agg() fonksiyonu ile uygulamak istediğimiz fonksiyonları liste olarak içine tanımlayabiliriz. Örneğin; mean, std, min, max vb.

Özet Tablolar

Örneğimizde iki değişkene bağlı durum tablosu oluşturacağız. Churn ve International plan sütunlarının birbirlerine göre olasılık tablolarını çıkartacağız.

Buradan çıkaracağımız sonuç çoğu kullanıcımızın sadık müşteri olduğunu ancak ek paket kullanmadığını gözlemleyebiliriz.

Excelden de aşina olduğumuz pivot tablolara pandas kütüphanesini kullanarak da oluşturabiliriz.

DataFrame Dönüşümleri

Pandas kütüphanesi yardımı ile tablolarımıza sütunlarda ekleyebiliriz. Ve bu sütundaki değerleri insert metodumuzun içerisinde vereceğimiz parametreler ile düzenleyebiliriz.

Daha basit bir yöntem ile de uygulamak mümkün tabi. Total charge tablosunu ekledik.

Eklediğimiz sütunları da kolaylıkla silebiliriz tabi. Bunun için kullanacağımız fonksiyon drop fonksiyonu olacaktır.

Müşteri Kayıp Oranını Tahmin Etme

Öncelikle uluslararası konuşma paketinin müşteri kayıp oranı ile ilişkisini inceleyeceğiz. Bu işlemi yaparken crosstab fonksiyonunu ve görsel analiz gerçekleştirmek için seaborn kütüphanesini kullanacağız.

Müşteri servislerini arama sayılarına göre kayıp oranlarımızı inceleyelim. Seaborn kütüphanesi yardımı ile çizimini gerçekleştirdiğimiz grafikte de göreceğimiz gibi 4 aramadan sonra müşteri kayıp oranımız daha fazla. Yani Churn 1 değerleri Churn 0 değerlerine göre daha yüksek.

Ya da diğer bir gösterim ile müşteri servislerini arama sayısı 3'den daha fazla olanlara göre filtreleyelim. Burda da göreceğimiz gibi bir müşterimiz 3 kereden fazla müşteri hizmetlerini aradıysa onu kaybetme oranımız daha yüksek.

Makine öğrenmesi algoritmalarını uygulamadan önce uygulanan veri analizi süreçlerini beraber ele aldık. Bu işlemleri pandas kütüphanesi yardımı ile gerçekleştirdik. Veri ön hazırlık aşaması, veri bilimi projelerinde önemli bir yer tutmaktadır. Bu aşamada oldukça verimli zaman harcamak uygulayacağımız makine öğrenmesi algoritmalarını uygulama sürecinde bize yarar sağlayacaktır.

SON 💪

--

--