Ana içeriğe atla

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 gerekiyor. Bu kütüphaneler ; seaborn, matplotlib, squarify. Aynı grafiği verecek farklı kütüphaneler ya da aynı grafiği verecek daha kısa bir yol da mutlaka vardır. Bu tarz bilgilerinizi yorumlarda yazarsanız herkesin yararlanmasını sağlayabilirsiniz. 

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
%matplotlib inline
import squarify #tree map için kullanıldı.

import seaborn as sns

1)LINE PLOT
Çizgi grafiğinin en güzel örneği zaman serisi problemleridir. Bu yazımda yahoo finance kütüphanesini kullanarak Apple(AAPL) hissesinin zaman grafiğini göstereceğim. Bunun için aşağıdaki kod parçasıyla veriyi indirme işlemini yapabilirsiniz.

import yfinance as yf #sizde yüklü değil ise jupyter notebooklarınızda !pip install yfinance komutu ile yükleyebilirsiniz. 
data = yf.download('AAPL','2020-01-01','2022-10-16')
data.head()


plt.figure(figsize=(10,5)) # çizilecek grafiğin boyutunu belirlemek için kullanılır.
plt.title("AAPL hissesinin zamana bağlı kapanış fiyatı") #grafiğin başlığı 
plt.xlabel("Tarih") #x ekseninin ismini 
plt.ylabel("Kapanış Fiyatı") #y ekseninin ismini 
plt.axvline(x=data.index[data.Close.argmax()], linewidth=2, color='b',label="Fiyatın en yüksek olduğu zaman") #dikey çizgi
plt.axhline(y=data.Close.max()*0.95, linewidth=2, color='g',label="Maksimum fiyatın %95'i") #yatay çizgi
plt.axvspan(data.index[data.Close.argmax()+20], data.index[data.Close.argmax()+50], facecolor='y', alpha=0.5) #dikey taralı bölge
plt.axhspan(80, 100, facecolor='c', alpha=0.5) #yatay taralı bölge

#1. LINE PLOT 
plt.plot(data["Close"], # çizilecek değişken
         '--',  #çizim şekli
         linewidth=1, #çizgi kalınlığı
         markersize=3, #işaretleyicinin boyutu
         color="red", #grafiğin rengi
         marker="o", #işaretleyicinin şekli
         label="AAPL Close hisse fiyatı" #grafiğin açıklaması
        )

#2. LINE PLOT 
plt.plot(data["Adj Close"]-20, # çizilecek değişken
         '--',  #çizim şekli
         linewidth=1, #çizgi kalınlığı
         markersize=3, #işaretleyicinin boyutu
         color="black", #grafiğin rengi
         marker="o", #işaretleyicinin şekli
         label="AAPL Adj Close hisse fiyatı" #grafiğin açıklaması
        )
plt.xticks(rotation=45) #x eksenindeki etiketlerin yazılma açısı
plt.yticks(rotation=30)#y eksenindeki etiketlerin yazılma açısı
plt.yticks(np.arange(min(data.Close), max(data.Close)+1, 25)) #y ekseninin gösterim aralığı
plt.annotate('en yüksek nokta', xy=(data.index[data.Close.argmax()],data.Close.max()), xytext=(data.index[data.Close.argmax()+50],data.Close.max()+10),
            arrowprops=dict(facecolor='black', shrink=0.05)) # ok ile gösterim. Örnekte en yüksek nokta gösterilmiştir.
plt.legend() # grafiğe verdiğimiz labelların görülmesini sağlar
plt.grid() # ızgara görünümü vermek için kullanılır. 
plt.savefig('AAPL_lineplot.png') # görseli kaydetmek için
plt.show() # grafiği göstermek için kullanılır.



Kategorik-numerik değişkenlerin gösterimi için kullanılan bir grafik türüdür. 

data=pd.DataFrame({"kategori":["A","B","C","D","E","F","G","H","I","J","K"],
                   "deger":[100,250,75,225,140,200,150,240,230,110,55]})
data


plt.figure(figsize=(10,5)) # çizilecek grafiğin boyutunu belirlemek için kullanılır.
plt.title("Kategorilere göre değer gösterimi") #grafiğin başlığı 
plt.xlabel("Kategori") #x ekseninin ismini 
plt.ylabel("Değer") #y ekseninin ismini 
bar_chart=plt.bar(data["kategori"], # çizilecek değişken x ekseni
                  data["deger"], # çizilecek değişken x ekseni
                  width=0.4,
                  color = 'darkgreen',
                  alpha = 0.85)
bar_chart[0].set_color('darkred')
plt.plot(data['kategori'] , data['deger'].cumsum(), c='red') #kümülatif toplamı göstermek istersek
for i in range(len(data)):
    plt.text(x=data["kategori"][i] , y =data["deger"][i]+3, s=f"{data.deger[i]}",fontdict=dict(fontsize=10)) #değerleri yazdırmak için
plt.xticks(rotation=45) #x eksenindeki etiketlerin yazılma açısı
plt.yticks(rotation=30)#y eksenindeki etiketlerin yazılma açısı
plt.grid() # ızgara görünümü vermek için kullanılır. 
plt.savefig('barplot1.png') # görseli kaydetmek için
plt.show() # grafiği göstermek için kullanılır.


Ayrıca yukarıda gördüğünüz kümülatif toplam çizgisini kaldırabilir ve seçtiğimiz bir barı farklı bir renkte gösterebiliriz.

data=data.sort_values("deger",ascending=False)
plt.figure(figsize=(10,5)) # çizilecek grafiğin boyutunu belirlemek için kullanılır.
plt.title("Kategorilere göre değer gösterimi") #grafiğin başlığı 
plt.xlabel("Kategori") #x ekseninin ismini 
plt.ylabel("Değer") #y ekseninin ismini 
bar_chart=plt.bar(data["kategori"], # çizilecek değişken x ekseni
                  data["deger"], # çizilecek değişken x ekseni
                  width=0.4,
                  color = 'darkgreen',
                  alpha = 0.85)
bar_chart[0].set_color('darkred')
#plt.plot(data['kategori'] , data['deger'].cumsum(), c='red') #kümülatif toplamı göstermek istersek
for i in range(len(data)):
    plt.text(x=data["kategori"][i] , y =data["deger"][i]+3, s=f"{data.deger[i]}",fontdict=dict(fontsize=10)) #değerleri yazdırmak için
plt.xticks(rotation=45) #x eksenindeki etiketlerin yazılma açısı
plt.yticks(rotation=30)#y eksenindeki etiketlerin yazılma açısı
plt.grid() # ızgara görünümü vermek için kullanılır. 
plt.savefig('barplot2.png') # görseli kaydetmek için
plt.show() # grafiği göstermek için kullanılır.


Kategorik değişkenlerin farklı değerleri ile numerik değişkenin ilişkisini gösteren grafik türüdür.
Bu çalışma için veri bilimcilerin aşina olduğu bir dataset olan "titanic" datasetini kullanacağım. Kolaylık olması açısından bu dataseti seaborn kütüphanesini kullanarak indirebilirsiniz.

titanic = sns.load_dataset('titanic')
titanic.head()



Datayı istediğimiz gibi gösterebilmemiz için önce gerekli olan görünüme getirmeliyiz.  Bunun için aşağıdaki adımlar yapılmıştır.

titanic_pivot=pd.pivot_table(index="embarked",columns="who",values="fare",data=titanic).round(0)
titanic_pivot


ax=titanic_pivot.plot(kind="bar",stacked=True,color=["blue","red","yellow"])
for bar in ax.patches:
    height = bar.get_height()
    width = bar.get_width()
    x = bar.get_x()
    y = bar.get_y()
    label_text = height
    label_x = x + width / 2
    label_y = y + height / 2
    ax.text(label_x, label_y, label_text, ha='center',    
            va='center')
plt.savefig('stackedbarplot.png')
plt.show()


Aynı grafiği yatay olarak çizmek isterseniz aşağıdaki kod işinize yarayacaktır.

titanic_pivot.plot(kind="barh",stacked=True,color=["blue","red","yellow"])
b1 = plt.barh(titanic_pivot.index, titanic_pivot["child"], color="red",height=0.5)
b2 = plt.barh(titanic_pivot.index, titanic_pivot["man"], color="yellow" ,height=0.5)
b3 = plt.barh(titanic_pivot.index, titanic_pivot["woman"], color="blue",height=0.5)
plt.legend([b1, b2,b3], ["child", "man","woman"], title="", loc="upper right")
plt.savefig('stackedbarhplot.png')
plt.show()


Stacked bar chart ile benzer amaçlı kullanılmaktadır sadece kategorik değişkenin değerleri art arda değil de yan yana şekilde gösterilmektedir.  Bunun için yukarıdaki dönüştürdüğümüz veri üzerinden gideceğiz.

                       
sns.set(style='white')
sns.barplot(x="embarked", y="fare", hue='who', data=titanic,
            palette=['purple', 'steelblue',"blue"],ci=None)
plt.xlabel('Embarked')
plt.ylabel('Fare')
plt.savefig('groupedbarhplot.png')
plt.show()


Verinin minimum, maksimum,  %25 quantile, %50 quantile,%75 quantile ve aykırı değerlerini bulmak için kullanılır. Bu grafik türünden örnekler gösterirken seaborn kütüphanesinden "tips" datasetini ve daha önceden de kullandığımız "titanic" datasetini kullanacağız.

tips=sns.load_dataset("tips")
tips.head()



plt.figure(figsize=(5,5))
plt.title("Total Bill quartile gösterimi")
sns.boxplot(y="total_bill",data=tips,palette="Blues",width=0.5,notch=True, flierprops={"marker": "x"},medianprops={"color": "red"})
plt.savefig('boxplot.png')
plt.show()


plt.figure(figsize=(10,5))
sns.boxplot(data=titanic, x="class", y="age", hue="alive")
plt.savefig('boxplotikidegisken.png')
plt.show()


Pie chart; değişkenin değerlerini, genel toplam içindeki oranına göre pasta dilimlerine ayırarak gösteren grafik türüdür.
Pie chartın nasıl kullanıldığını görmek için "titanic" veri setini grafiğin istediği şekle getirmemiz gerekiyor. 

titanic_gr=titanic.groupby(["class"]).size().reset_index()
titanic_gr.columns=["class","toplam"]
titanic_gr


plt.figure(figsize=(6,6))
plt.pie(titanic_gr.toplam,
       labels = titanic_gr["class"],
       autopct='%1.1f%%',
       explode=(0.25, 0, 0)
       )
plt.title('Pie chart')
plt.axis('equal')
plt.savefig('piechart.png')
plt.show()


Veri Bilimi alanında korelasyonu incelemek için kullanılan en etkili grafik türüdür.
Bu grafik türünün örneğini göstermek için rastgele sayılardan oluşan bir veriseti oluşturacağız. Bu nedenle sonuçlar sizde farklı olmasın diye "seed" değeri veriyoruz.

np.random.seed(10)
df = pd.DataFrame(np.random.random((15,15)), columns=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o"])
df.head()


plt.figure(figsize=(10,5))
sns.heatmap(df, annot=True, annot_kws={"size": 7},linewidths=2, linecolor='yellow', xticklabels=4)
plt.savefig('heatmap.png')
plt.show()


data = [500,400,700,800,600]
alan = ["A","B","C","D","E"]
  
squarify.plot(data, label=alan,pad=2,value=data,color=["red","green","blue", "grey","orange","yellow"],alpha=0.4)
plt.axis("off")
plt.savefig('treemap.png')
plt.show()
7)SCATTER PLOT 
Scatter plot; numerik-numerik değişkenlerin gösterimi için kullanılır. Ayrıca ve "hue" ve "size" parametreleri ile de tek bir grafikte birçok değer gösterilebilir.
Scatter plot için daha önceki grafik türlerine örnek verirken kullandığım "tips" datasetini kullanacağım. 

plt.figure(figsize=(10,5))
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="size", palette="deep")
plt.title("Total bill- tip dağılımı")
plt.savefig('scatterplot.png')
plt.show()


PYTHON İLE VERİ GÖRSELLEŞTİRME yazısının sonuna geldik. Okuduğunuz için teşekkür ederim. Bir sonraki yazımda görüşmek dileğiyle hoşçakalın.

Yorumlar

Most Popular

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. B uraya tıklayarak ...

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...