Ana içeriğe atla

PYTHON İLE VERİ GÖRSELLEŞTİRME- SUBPLOTS

Merhabalar,

Bu yazımda, PYTHON İLE VERİ GÖRSELLEŞTİRME yazımda değindiğim subplot konusunu ele alacağım. Subplot; satır veya sütunda bir veya daha çok grafiği çizdirmemizi sağlayan bir grafik türüdür. Bu grafikler aynı tür ve boyutta olabileceği gibi farklı tür ve boyutlarda da olabilir. Kullanıcının istediği tasarımı verebilmesi ve verinin hikayesini daha akıcı bir şekilde anlatabilmesi nedeniyle oldukça kullanışlıdır. 

Farklı subplotlar göstermek için araştırma yaparken, çok kolay bir şekilde istediğiniz tasarımı oluşturmayı sağlayan bir fonksiyon ile karşılaştım. Bu fonksiyon matplotlib kütüphanesinden subplot_mosaic. Sizlere bu fonksiyonu anlatabilmek ve çeşitli grafik türlerini tek bir figure altında nasıl oluşturabileceğinizi göstermek amacıyla bir veri seti oluşturdum. Veri setinin amacı görselleştirme çalışması olduğu için lütfen anlam çıkarmaya çalışmayın:) 

Kodların anlamlarını tek tek açıklayacağım. En sonda ise hepsini birleştireceğim. Buraya tıklayarak kodun nihai haline gidebilirsiniz. 

Bir grafik türünü birçok kütüphaneden oluşturabileceğinizi ve grafiği oluşturmak için yazdığım bazı kodları, kullandığınız kütüphanenin bunu otomatik olarak yapması nedeniyle yapmak zorunda kalmayacağınızı bilerek okumanızı tavsiye ederim.

Her şeyi açıkladıysak, kullandığımız kütüphaneleri import ederek başlayalım.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

Veri manipülasyonu için pandas ve numpy kütüphanelerini, görselleştirme aşaması için ise matplotlib ve pandas dataframe in plot fonksiyonunu kullanacağım. 

np.random.seed(24)
kategori=["A","B","C","D","E","F","G","H","I","J","K"]
pozisyon=["yönetmen","yönetmen yardımcısı","uzman","uzman yardımcısı","direktör","bölüm yöneticisi"]
cinsiyet=["Erkek","Kadın"]
time_series=pd.DataFrame()
time_series["Tarih"]=pd.date_range(start="2022-01-01",end="2022-10-20")
time_series["kategori"]=[kategori[np.random.randint(len(kategori))] for i in range(time_series.shape[0])]
time_series["Satislar"]=[np.random.randint(25000,100000) for i in range(time_series.shape[0])]
time_series["pozisyon"]=[pozisyon[np.random.randint(len(pozisyon))] for i in range(time_series.shape[0])]
time_series["yas"]=[np.random.randint(24,65) for i in range(time_series.shape[0])]
time_series["satislarx2"]=time_series["Satislar"]*2
time_series["cinsiyet"]=[cinsiyet[np.random.randint(len(cinsiyet))] for i in range(time_series.shape[0])]
time_series.head()
Rastgele sayı ürettiğim için sonuçlar değişmesin diye np.random.seed(24) değerini veriyorum.

time_series=pd.DataFrame() :Boş bir tablo oluşturuyorum.

time_series["Tarih"]=pd.date_range(start="2022-01-01",end="2022-10-20"): 2022-01-01 tarihinden 2022-10-20 tarihine kadar Tarih kolonunu oluşturuyorum.

[kategori[np.random.randint(len(kategori))] for i in range(time_series.shape[0])] : Tablonun satır sayısı kadar, oluşturduğum listeden (kategori) rastgele değer seçiyorum ve kategori kolonunu oluşturuyorum.

[np.random.randint(25000,100000) for i in range(time_series.shape[0])]: 25000 ile 100000 arasında tablonun satır sayısı kadar rastgele tam sayı seçiyorum ve Satislar kolonunu oluşturuyorum.

[pozisyon[np.random.randint(len(pozisyon))] for i in range(time_series.shape[0])] : Tablonun satır sayısı kadar, oluşturduğum listeden (pozisyon) rastgele değer seçiyorum ve pozisyon kolonunu oluşturuyorum.

[np.random.randint(24,65) for i in range(time_series.shape[0])] : 24 ile 65 arasında tablonun satır sayısı rastgele tam sayı seçiyorum ve yas kolonunu oluşturuyorum.

time_series["Satislar"]*2 : Scatter plotu göstermek için -her ne kadar yapamasam da - Satislar kolonunun her değerii 2 ile çarptığım satislarx2 kolonunu oluşturuyorum.

[cinsiyet[np.random.randint(len(cinsiyet))] for i in range(time_series.shape[0])]: Tablonun satır sayısı kadar, oluşturduğum listeden (cinsiyet) rastgele değer seçiyorum ve cinsiyet kolonunu oluşturuyorum.

Yukarıdaki tüm işlemlerden sonra oluşan tablonun küçük bir görüntüsü aşağıdaki gibidir. np.random.seed(24) fonksiyonunda 24 değerini değiştirdiyseniz ya da fonksiyon çalışmadıysa sonuçlar sizde farklı görünebilir . 


Bazı grafik türlerini çizebilmek için tabloyu istediğimiz formata dönüştürmemiz gerekiyor. 
Bu nedenle aşağıdaki işlemler yapılmıştır.

bar_plot=time_series.groupby("kategori")["Satislar"].sum().reset_index()
bar_plot.head()



pie_plot=time_series.groupby("pozisyon")["Satislar"].sum().reset_index()
pie_plot.head()



stacked_bar_chart=pd.pivot_table(index="pozisyon",columns="cinsiyet",values="Satislar",data=time_series)
stacked_bar_chart.head()


grouped_bar_chart=pd.pivot_table(index="kategori",columns="cinsiyet",values="Satislar",data=time_series)
grouped_bar_chart.head()


Tabloları oluşturduysak yavaş yavaş görselleştirmeye geçebiliriz. 
subplot_mosaic fonksiyonu bizden parametre olarak bir desen istiyor. Bu deseni tasarlamak tamamen size kalmış durumda.  Örneğin aşağıdaki gibi bir desen oluşturalım ve nasıl grafikler istediğimizi anlamaya çalışalım. 

mosaic="""
ABBCD
AEEEE
AFFGG
"""

1)Yukarıdaki desende A dan G ye 7 farklı harf olduğu için çıktımızda 7 tane grafik olacaktır. 
2) A harfi alt alta 3 defa tekrar ettiği için 3x1 şeklinde 1.satırdan 3.satıra kadar,
    B harfi yan yana 2 defa tekrar ettiği için ve 1. satırda yazıldığı için 1x2 şeklinde 1.satırda,
    C harfi 1. satırda ve bir defa yazıldığı için 1x1 boyutunda 1. satırda,
    E harfi 2.satırda ve 4 defa tekrar ettiği için 1x4 boyutunda 2. satırda,
    F ve G harfleri 3. satırda ve ikişer defa tekrar ettikleri için 2 x 2 boyutunda 3.satırda bulunacaktır. 

axd=plt.figure(constrained_layout=True,figsize=(18,8)).subplot_mosaic(mosaic)

Burada üzerinde grafiklerimizi çizeceğimiz 18x8  lik kanvasımızı oluşturuyoruz ve grafiklerimizin yerleşimini gösteren değişkeni(mosaic) fonksiyona parametre olarak veriyoruz. constrained_layout=True parametresi eksenlerin ve labelların güzelce görünebilmesi için kullanılmış bir parametredir.

grouped_bar_chart.plot.barh(ax=axd["A"])
axd["B"].bar(stacked_bar_chart.index, stacked_bar_chart["Erkek"], label='Men')
axd["B"].bar(stacked_bar_chart.index, stacked_bar_chart["Kadın"],bottom=stacked_bar_chart["Erkek"],label='Women')
axd["B"].tick_params(axis='x', rotation=45)
axd["B"].set(xticks=[0,2,4])
axd["B"].legend(loc='best', bbox_to_anchor=(0.5, 1, 0., 0.5))
axd["C"].scatter(time_series["satislarx2"],time_series["Satislar"],color="blue")
axd["D"].hist(time_series["Satislar"],color="red")
axd["E"].plot(time_series["Tarih"],time_series["Satislar"],color="orange")
axd["E"].tick_params(axis='x', rotation=45)
axd["F"].pie(pie_plot["Satislar"],labels=pie_plot["pozisyon"])
axd["G"].bar(bar_plot["kategori"],bar_plot["Satislar"],color="green")
plt.savefig("subplot_mosaic.png")
plt.show()

Yukarıdaki kodda bir önceki adımda oluşturduğumuz kanvasa grafiklerimizi ekliyoruz. A eksenine yatay grouped bar chart, B eksenine stacked bar chart, C eksenine scatter plot, D eksenine histogram, E eksenine line plot, F eksenine pie chart ve G eksenine bar grafiği çizilmiş, bazı eksenlerdeki grafikler için ek düzenlemeler yapılmıştır. 
Yukarıdaki kod sonunda oluşan görüntü ; 




Çalıştırmayı oluşturan tüm kod ; 

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(24)
kategori=["A","B","C","D","E","F","G","H","I","J","K"]
pozisyon=["yönetmen","yönetmen yardımcısı","uzman","uzman yardımcısı","direktör","bölüm yöneticisi"]
cinsiyet=["Erkek","Kadın"]
time_series=pd.DataFrame()
time_series["Tarih"]=pd.date_range(start="2022-01-01",end="2022-10-20")
time_series["kategori"]=[kategori[np.random.randint(len(kategori))] for i in range(time_series.shape[0])]
time_series["Satislar"]=[np.random.randint(25000,100000) for i in range(time_series.shape[0])]
time_series["pozisyon"]=[pozisyon[np.random.randint(len(pozisyon))] for i in range(time_series.shape[0])]
time_series["yas"]=[np.random.randint(24,65) for i in range(time_series.shape[0])]
time_series["satislarx2"]=time_series["Satislar"]*2
time_series["cinsiyet"]=[cinsiyet[np.random.randint(len(cinsiyet))] for i in range(time_series.shape[0])]

bar_plot=time_series.groupby("kategori")["Satislar"].sum().reset_index()
pie_plot=time_series.groupby("pozisyon")["Satislar"].sum().reset_index()
stacked_bar_chart=pd.pivot_table(index="pozisyon",columns="cinsiyet",values="Satislar",data=time_series)
grouped_bar_chart=pd.pivot_table(index="kategori",columns="cinsiyet",values="Satislar",data=time_series)


mosaic="""
ABBCD
AEEEE
AFFGG
"""
axd=plt.figure(constrained_layout=True,figsize=(18,8)).subplot_mosaic(mosaic)
grouped_bar_chart.plot.barh(ax=axd["A"])
axd["B"].bar(stacked_bar_chart.index, stacked_bar_chart["Erkek"], label='Men')
axd["B"].bar(stacked_bar_chart.index, stacked_bar_chart["Kadın"],bottom=stacked_bar_chart["Erkek"],label='Women')
axd["B"].tick_params(axis='x', rotation=45)
axd["B"].set(xticks=[0,2,4])
axd["B"].legend(loc='best', bbox_to_anchor=(0.5, 1, 0., 0.5))
axd["C"].scatter(time_series["satislarx2"],time_series["Satislar"],color="blue")
axd["D"].hist(time_series["Satislar"],color="red")
axd["E"].plot(time_series["Tarih"],time_series["Satislar"],color="orange")
axd["E"].tick_params(axis='x', rotation=45)
axd["F"].pie(pie_plot["Satislar"],labels=pie_plot["pozisyon"])
axd["G"].bar(bar_plot["kategori"],bar_plot["Satislar"],color="green")
plt.savefig("subplot_mosaic.png")
plt.show()

subplot_mosaic için daha fazla bilgi almak isterseniz tıklayın. 
Okuduğunuz için teşekkürler. Bir sonraki yazımda görüşmek üzere hoşçakalın.


Yorumlar

Most Popular

PYTHON İLE VERİ GÖRSELLEŞTİRME

Merhabalar, Bu yazımda data analiz aşamasında işimizi oldukça kolaylaştıran bir yöntem olan veri görselleştirme üzerinde duracağım. Grafik türlerini göstermeye çalışırken aklıma gelen tüm özellikleri grafiklere koymaya çalıştım. Sizler grafikleri kullanırken işinize yaramayan kodları çıkartabilirsiniz.  Aynı satırda/sütunda birden fazla grafik çizdirmemizi ve ilişkileri daha rahat görmemizi sağlayan subplot konusuna ayrı değineceğim. Subplot için buraya tıklayabilirsiniz.  İncelemek istediğiniz grafiğin adına tıklayarak grafiğin kodunun yazımına doğrudan ilerleyebilirsiniz. İlerlediğiniz sayfadan tekrar menüye dönmek için grafik adına tıklamanız yeterlidir.  Bu yazımda değineceğim grafik türleri: 1)LINE PLOT 2)BAR CHART      2.1) STACKED BAR CHART      2.2) GROUPED BAR CHART 3)BOX PLOT 4)PIE CHART 5)HEATMAP  6)TREE MAP  7)SCATTER PLOT Grafik türleri görmeye başlamadan önce bazı görselleştirme kütüphanelerini import etmek...

PYTHON MAKİNE ÖĞRENMESİ - PIPELINE VE COLUMNTRANSFORMER

Merhabalar, bu yazımda makine öğrenmesi modelleme sürecinde yazdığınız kodların kalitesini ve okunabilirliğini nasıl artıracağınızı anlatacağım. Bunun için Pipeline ve ColumnTransformer fonksiyonlarını kullanacağız. Kodlara geçmeden önce bu fonksiyonların tanımı ve birbirinden ne gibi farkları olduğuna kısaca değineceğim.  Bu yazının asıl amacı Pipeline ve ColumnTransformer yapılarına örnek vermek olduğu için projeyi geliştirme aşamasındaki adımları kendinize göre uyarlayabileceğinizi unutmadan okumanızı tavsiye ederim.  Pipeline Nedir ?  Pipeline;  bir önceki adımdaki çıktının, bir sonraki adımdaki girdiye dönüştüğü birden fazla adımı birbirine bağlayan zincirleme bir yöntemdir. Modelin başından sonuna kadar her bir işlem adımı, tek bir işlem ile tanımlandığı için kodların takibi kolaydır.  Pipeline  yapısını kurabilmek için kullanacağınız fonksiyonlarda  fit ve transform metodlarının bulunması gereklidir.  Yapacağımız projede örnek olarak kend...