PYTHON: DATA ANALİZİ — GRAFİKLER

KOGLAK
4 min readFeb 19, 2021

--

Merhaba, daha önceden nasıl data toplanacağını Data Scraping, sonra da datadaki problemleri tespit edip düzeltmekten Data Assessment bahsetmiştim. Şimdi ise problemleri tespit edilip, düzeltilmiş datayı matplot ve seaborn kütüphanelerini kullanarak nasıl görselleştireceğimizden bahsedeceğim.

Data Assessment yazımda hazırladığım dataframe üzerinden devam edeceğim.

df_clean.head()

Grafik konusunu 3 aşamada inceleyeceğiz; tek veri, ikili veri, çoğul verinin görselleştirilmesi şeklinde. Hadi başlayalım’

TEK VERİ GÖRSELLEŞTİRİLMESİ

1-) BAR CHART — MATPLOTLIB

Aşağıda city_development_range kolonunun bar chartını matplotlib kütüphanesini kullanarak çizdirdim. plt.bar() fonksiyonunun diğer özelliklerine linkten erişebilirsiniz.

  • sort=False dersek, büyükten küçüğe sıralama yapmadan tabloya yansıtırdık.
  • labels etiketlerinin sırasını sort=False ile kontrol ettikten sonra ayarlamanızı tavsiye ederim.
  • plt.barda labels tanımlamazsanız, kolonlardaki veriler x eksenine yazdırılır. Örneğin hepsi küçük harfle yazıldıysa ya da “_” gibi semboller kullanıldıysa bu şekilde yazdırılır.
  • plt.bar’da color ve edgecolor tanımlamasaydık default renk olan mavi renk ile gelirdi.
  • plt.xticks rotation ile x eksenindeki etiketleri 90 derece döndürdük. Eğer tanımlamasaydık default yatay gelirdi.
  • Tablolarda x ve y eksenlerinin tanımlarını yazdırmak ve grafik başlığı yazdırmak oldukça önemlidir!
import matplotlib.pyplot as plt
%matplotlib inline
x=df_clean['city_development_range'].unique()
y=df_clean['city_development_range'].value_counts(sort=True)
labels=['Low','Medium','High','Very High']
plt.bar(x,y, color="#868686", edgecolor="black",label=labels)
plt.xlabel('City Development Range', fontsize=14)
plt.ylabel('Count',fontsize=14)
plt.title('City Development Range Distribution', fontsize=18)
plt.xticks(rotation=90)
plt.show()

2-) BAR CHART — SEABORN

Yukarıda yaptığım aynı tabloyu seaborn kütüphanesi ile yapacağım. .countplot() fonksiyonunu kullanacağım.

import seaborn as sb
base_color = sb.color_palette()[7]
sb.countplot(data=df_clean, x='city_development_range', color=base_color, order=order);
plt.title('City Development Range Distribution', fontsize=18)

3-) PIE CHARTS

Burada ise matplot kütüphanesinin plt.pie() fonksiyonunu kullanarak aşağıdaki grafiği hazırladım. Eğer wedgeprops = {‘width’ : 0.7} kullansaydık, görsel simit şekline dönecekti.

import matplotlib.pyplot as plt
%matplotlib inline
counts = df_clean['gender'].value_counts()
explode = (0, 0.1, 0 )
color_set = ( '.25', '.50', '.75')
plt.pie(counts, labels = counts.index, startangle = 90, counterclock = False,explode=explode, autopct='%1.1f%%', colors=color_set, shadow=True);
plt.title('Gender Distribution', fontsize=18)

4-) HISTOGRAMS — MATPLOT

Öncelikle histogramlarda kullanılan veri tipi sayısal olmalıdır. Örneğin bizim dataframe’imizde training_hours kolonu bu grafik için uygundur. Böylece çalışma saatlerindeki yoğunluğu gözlemleyebiliriz — 1 saat eğitim saati alanların sayısı ile 2 saat eğitim alanların sayısını bu grafikten okuyabiliriz.

Burada plt.hist() fonksiyonunu kullanacağız.

Aşağıda training_hour kolonunundaki verileri range(0,350,20) ile 20 saatlik gruplara böldüm. Aşağıdaki tabloda ise 20 saatlik aralıklardaki yoğunluğu gözlemliyebiliyoruz. Örneğin 20–40 saat eğitim alanlar diğerlerinden daha fazla, 220–240 saat arasında eğitim alan sayısı ise en az olduğunu gözlemleyebiliyoruz. Bins özelliğinin aralığını bu şekilde ayarlayarak; örneğin 10 saatlik gruplara bölerek dağılımı da gözetleyebilirdik.

import matplotlib.pyplot as plt
%matplotlib inline
bins=range(0,350,20)plt.hist(data=df_clean, x='training_hours', bins=bins, color='gray')
plt.title('Training Hours Distribution', fontsize=22)
plt.xlabel('Traning Hours', fontsize=16)
plt.ylabel('Count', fontsize=16)
plt.xticks(bins)
plt.xticks(rotation=90)

5-) HISTOGRAM — SEABORN

Burada seaborn displot() methodunu kullanarak aynı grafiği çizdirdik. Bu sefer bin aralığını 40 olarak ayarladım.

import seaborn as sbbins=range(0,350,40)sb.distplot(df_clean['training_hours'], kde=False, bins=bins, color=sb.color_palette()[7])
plt.title('Training Hours Distribution', fontsize=22)
plt.xlabel('Traning Hours', fontsize=16)
plt.ylabel('Count', fontsize=16)
plt.xticks(bins)
plt.xticks(rotation=90)

Eğer elimizdeki veriler çük büyük rakamlar olsaydı, logaritmik tabanda bir grafik çizdirmek datayı daha anlaşılır hale getirecekti. Ben de şimdi training_hours kolonunun histogramını logoritmik tabanda çizdireceğim.

İlk önce datanın logoritmik tabanda min ve max değerlerini bulacağım. Aşağıda min 0, max 2.52 olduğunu görüyoruz.

np.log10(df_clean['training_hours'].describe())

Ardından bins’i aşağıdaki aralıkta ayarlıyoruz. 10 üzeri 0–2.8 aralığında 0.3 arttırarak bins listesine ekliyoruz. 10 üzeri 0, 1 olduğundan bins listesini yazdırdığımızda 1'den başlayarak listenin nasıl oluştuğunu gözlemleyebiliriz.

bins = 10 ** np.arange(0, 2.5+0.3, 0.3)

labels listesini de aşağıdaki gibi oluşturduk.

ticks = [1, 3, 10, 30, 100, 300, 1000]
labels = ['{}'.format(v) for v in ticks]

Dağılım grafiği aşağıdaki kodla yazdırılır. Logoritmik tabandaki dağılım bu şekildedir.

plt.hist(data=df_clean, x='training_hours', bins=bins);
plt.xscale('log')
plt.xticks(ticks, labels);
plt.title('Training Hours Distribution', fontsize=22)
plt.xlabel('Traning Hours (log)', fontsize=16)
plt.ylabel('Count', fontsize=16)

--

--