Pandas ile Keşifçi Veri Analizi

Ahmet Okan YILMAZ
5 min readDec 28, 2021

--

Matematikçi John Tukey tarafından geliştirilen keşifçi veri analizi teknikleri, günümüzde veri keşfi sürecinde yaygın olarak kullanılan bir yöntem olmaya devam ediyor. Bende veri bilimi projelerinin ilk adımlarından olan Keşifçi Veri Analizinden kısaca bahsedeceğim.

Pandas nedir?

Pandas, Python programlama dili ile oluşturulmuş, hızlı, güçlü, esnek ve kullanımı kolay, açık kaynaklı bir veri analiz ve manipülasyon aracıdır.

Keşifçi Veri Analizi nedir?

Keşifçi veri analizi, ana özelliklerini özetlemek için veri setlerini analiz etmeye yönelik bir yaklaşımdır.

Keşifçi Veri Analizi nasıl yapılır?

Genellikle toplulaştıma, istatiksel grafikler ve veri görselleştirme yöntemlerinden faydalanılarak yapılır.

Keşifçi Veri Analizi amacı nedir?

Herhangi bir varsayımda bulunmadan önce veriyi, veri yapısını ve problemi daha iyi anlamamıza yardımcı olur. Veri setine daha geniş açıdan bakmayı, önemli değişkenleri ortaya çıkarmayı, değişkenler arası ilişkeleri ortaya koymayı, aykırı ve anomali değerlerin tespitini sağlar.

Adım Adım Keşifçi Veri Analizi

Üzerinde çalışacağımız veri setini salaries.ai-jobs.net sitesinden çektim. Bu veri seti dünyanın birçok yerinde veri bilimi, yapay zeka, makine öğrenmesi, büyük veri, vb işlerde çalışanların, yaptığı iş, tecrübe, şirket büyüklüğü, vb. bilgileriyle birlikte yıllık ücretlerini girdiği canlı bir veri setidir.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
salaries = pd.read_csv('https://salaries.ai-jobs.net/download/salaries.csv')

Gerekli kütüphaneleri içe aktarıp ilgili veri setini salaries isimli dataframe’e kaydettik. Veri setinin ilk ve son 5 gözlemine hızlıca göz atalım.

salaries.head()
salaries.tail()

Rastgele bir gözlem görüntülemek istersek:

salaries.sample()

Dataframe’i bir veya birden fazla sütuna göre sıralayabiliriz.

salaries.sort_values(by='salary_in_usd', ascending=False).head()
salaries.sort_values(by=['salary_in_usd', 'company_size'], ascending=False).head()

Hangi lokasyonda kaç tane şirket olduğuna bakalım.

salaries.groupby('company_location').size().sort_values(ascending=False).head(10)

Gözlem sayısı ve değişken sayısını görmek istersek shape özelliğini kullanırız. Canlı bir veri seti olduğu için gözlem sayısı değişiklik gösterebilir. Çıktıyı tuple veri tipinde verecektir.

salaries.shape

(262, 11)

262 gözlem ve 11 değişken sayısına sahip. Toplam değer sayısına size özelliği ile bakalım.

salaries.size

2882

Değişken isimlerini liste halinde de görüntüleyebiliriz.

salaries.columns

Index(['work_year', 'experience_level', 'employment_type', 'job_title',
'salary', 'salary_currency', 'salary_in_usd', 'employee_residence',
'remote_ratio', 'company_location', 'company_size'],
dtype='object')

Değişkenlerin veri tiplerini ve eksik gözlem içerip içermediğine bakabiliriz.

salaries.info()<class 'pandas.core.frame.DataFrame'>
RangeIndex: 262 entries, 0 to 261
Data columns (total 11 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 work_year 262 non-null object
1 experience_level 262 non-null object
2 employment_type 262 non-null object
3 job_title 262 non-null object
4 salary 262 non-null int64
5 salary_currency 262 non-null object
6 salary_in_usd 262 non-null int64
7 employee_residence 262 non-null object
8 remote_ratio 262 non-null int64
9 company_location 262 non-null object
10 company_size 262 non-null object
dtypes: int64(3), object(8)
memory usage: 22.6+ KB

salary, salary_in_usd ve remote_ratio değişkenleri numerik, diğer değişkenleri object veri tipinde. Toplam 262 gözlem bulunuyor. Değişkenlerde eksik gözlem olup olmadığını varsa kaç tane eksik gözlem olduğunu tespit edebiliriz.

Sadece numerik veri tipine sahip değişkenleri gözlemleyebiliriz.

salaries.select_dtypes(include = [int, float]).head()

Numerik değere sahip değişkenlerin sadece isimlerine de liste halinde ulaşabiliriz.

salaries.select_dtypes([int, float]).columns

Index(['salary', 'salary_in_usd', 'remote_ratio'], dtype='object')

salaries.isnull().sum()

Eksik gözlem bunumuyor. Eğer olsaydı ‘Özellik Mühendisliği (Feature Engineering)’ ile halletmemiz gerekecekti.

Şimdi toplu şekilde, veri setinin istatiksel ölçümlerine bakalım.

salaries.describe().T

describe fonksiyonunun çıktısı numerik veri tipindeki değişkenlerin sayım, ortalama, standart sapma, medyan ve kartilleri gibi betimsel istatiklerini verir.

Değişkenlerin kaç tane benzersiz sınıfa sahip oluğu ve bunların neler olduğuna bakalım:

salaries['experience_level'].nunique()

4

salaries['experience_level'].unique()

array(['EN', 'SE', 'MI', 'EX'], dtype=object)

Numerik değere sahip değişkenlerin korelasyonuna bakabiliriz.

salaries.corr()

Tekrarlayan değerler yerine sadece ilişkili değerleri görebilmek için korelasyon matrisini üçgen matrise çevirebiliriz.

import numpy as np
cor = pd.DataFrame(np.tril(salaries.corr().values), index=salaries.corr().index, columns=salaries.corr().columns).round(3)
cor = cor.iloc[:,:-1]
cor.drop(cor.head(1).index, inplace=True)
cor.replace(to_replace=[0,1], value='', inplace=True)

Bazen bir resim ya da grafik yüzlerce/binlerce satırlık bir tablodan daha çok şey anlatabilir. Veri görselleştirme teknikleri de Keşifçi Veri Analizinde bu yüzden sıklıkla kullanılır.

Bütün meslekleri bir arada bir grafikte gözlemleyebiliriz.

sns.countplot(x='job_title', data=salaries)
plt.ylabel("Toplam", size=20)
plt.xlabel('Meslek', size=20)
plt.xticks(rotation=90)
plt.title("Mesleklerin Toplam Sayıları", size=20);

Meslek — ortalama maaş grafiğine bakalım.

sns.set()
job_salary_usd = salaries[['job_title', 'salary_in_usd']]
job_salary_usd = salaries.groupby('job_title').agg({'salary_in_usd': 'mean'}).sort_values('salary_in_usd', ascending=False).reset_index()
fig = plt.figure(figsize=(14,12))
sns.barplot(x='job_title',
y='salary_in_usd',
data=job_salary_usd,
ci=None)
plt.ylabel("Ortalama Maaş", size=20)
plt.xlabel('Meslek', size=20)
plt.xticks(rotation=90)
plt.title("Mesleklerin Ortalama Maaşları (USD)", size=25);

Daha önce korelasyon matrisini oluşturduğumuz dataframe’e bir de görsel olarak bakalım:

sns.heatmap(salaries.corr());

Pairplot, verisetindeki numerik değişkenleri ikili gruplar halinde eşleştirerek grafikler oluşturur.

sns.pairplot(salaries);

Displot ile değişkenlerin dağılım grafiğine bakabiliriz.

sns.displot(x='experience_level', data=salaries)

Boxplot ile aykırı değerleri gözlemleyebiliriz.

salaries.boxplot('salary_in_usd');

Kaynak

(1) https://salaries.ai-jobs.net/

(2) https://www.itl.nist.gov/div898/handbook/eda/section1/eda1.htm

(3) https://www.analyticsvidhya.com/blog/2021/04/20-must-known-pandas-function-for-exploratory-data-analysis-eda/

(4) Data Science and Machine Learning Bootcamp Mustafa Vahit Keskin

--

--

Ahmet Okan YILMAZ
Ahmet Okan YILMAZ

Written by Ahmet Okan YILMAZ

Industrial Engineer | Data Scientist | Factory Manager

No responses yet