Python’ da Bokeh ile İnteraktif Veri Görselleştirme

Bokeh 2013 yılında yayınlanmış Veri görselleştirme kütüphanesidir. Veri dünyasında yaygın bir şekilde kullanılmaktadır.

Bokeh nedir? ve Onu Diğerlerinden farklı Kılan Nedir?

Bokeh İnteraktif Veri Görselleştirme kütüphanesidir. Python’ daki Matplotlib, Seaborn gibi veri görselleştirme kütüphanelerinin aksine Bokeh grafikleri Html ve Javascipt kullanarak gösterir.

Bokeh’ te gösterilen şekilleri,şeklin sağ tarafında çıkan tool ile büyütebilir, kaydedebilir, şeklin belirli kısmını seçebilir veya toolda bulunan daha başka özellikleri kullanabilirsiniz.

Bokeh’ i aşağıdaki şekilde yükleyebilirsiniz;

pip install bokeh

Eğer anaconda kullanıyorsanız;

conda install bokeh

Bokeh versiyonunu öğrenme;

bokeh --version

Bokeh kütüphanesini kullanırken aşağıdaki kodlama adımlarını kullanacağız.

"""Bokeh ile Veri Görselleştirme Şablon Kodlar

Verinizi görselleştirirken kullanacağınız Bokeh' teki 
temel kodların özeti
"""
# Veriyi Kullanma kütüphaneleri
import pandas as pd
import numpy as np

# Bokeh kütüphaneleri
from bokeh.io import output_file, output_notebook
from bokeh.plotting import figure, show
from bokeh.models import ColumnDataSource
from bokeh.layouts import row, column, gridplot
from bokeh.models.widgets import Tabs, Panel

# Veriyi Hazırlama

# Görselleştirme nasıl yapılacağını belirleme
output_file('filename.html', title='Boş Bokeh Şekli')  # Static HTML olarak, veya 
output_notebook()  # Jupyter Notebook' ta inline olarak

# Şekilleri tanımlamak.
fig = figure(plot_height=300, plot_width=300)  # figure() objesi başlatmak. Şeklin boyutlarını tanımlamak.

# Veriye bağlanma ve çizdirme

# Şekillerini yerleşimini düzenleme

# Şekil önizleme ve Kaydetme
show(fig)  # Şekli görme eğer kaydedilmesi gerekiyorsa kaydetme.

Kodu çalıştırdığımızda boş bir şekil şablonu ve yan tarafında araçların olduğu gösterim ortaya çıktı. Yan taraftaki araç çubuğunda araçlar ile grafiği hareket ettirebilir, büyütebilir, grafiğin bir kısmını seçebilir, grafiği .png olarak kaydedebilir, grafiği ilk haline getirebilir ve Bokeh’in yardım internet sitesine gidebiliriz.

İlk Basit Grafiği Çizdirme

İlk basit şeklimizi Bokeh’ de çizdirelim. y = x fonksiyonunu çizgi grafik olarak göstereceğiz.

# x ve y veri kümesi 
x = [1, 2, 3, 4, 5]
y = [6, 7, 2, 4, 5]

# Statik HTML dosya çıktısı
output_file("lines.html")

# Başlığı ve eksenlerin isimlerini tanımladığımız figure() objesi oluşturma
p = figure(title="basit çizgi grafiği", x_axis_label='x', y_axis_label='y')

# Lejant ve çizgi kalınlığını tanımlayarak bir çizgi renderer ekleme 
p.line(x, y, legend="Sıc.", line_width=1)

# sonuçları gösterme
show(p)

Görüldüğü gibi basit bir çizgi grafiği oluşturduk.

Kabartmalar(Glyph) ile Grafik Oluşturma

Bir kabartma grafiği oluşturalım. Bu örneğimizde grafiğin boyutlarınıda tanımlayalım.

# Figure objesi ve Etiketleri tanımlama
p = figure(plot_width = 600, plot_height = 600, 
           title = 'Glyph Örneği',
           x_axis_label = 'X', y_axis_label = 'Y')

# Örnek Veri
squares_x = [1, 3, 6, 5, 7]
squares_y = [4, 6, 4, 2, 9]
circles_x = [9, 11, 4, 3, 12]
circles_y = [3, 4, 8, 7, 6]

# Kare kabartma(glyph) oluşturma
p.square(squares_x, squares_y, size = 12, color = 'navy', alpha = 0.6)
# Daire kabartma(glyph) oluşturma
p.circle(circles_x, circles_y, size = 12, color = 'red')

# Notebookta grafiği çıktı olarak tanımlama
output_notebook()
# Şekli gösterme
show(p)

Daha farklı kabartma şekilleri ile grafiklerimizi oluşturabiliriz. Bunlar;

  • asterisk()
  • circle()
  • circle_cross()
  • circle_x()
  • cross()
  • dash()
  • diamond()
  • diamond_cross()
  • inverted_triangle()
  • square()

Kategorik Verilerle Çalışma

Aşağıda dünya kupası kazanma sayılarına göre bir barchart grafiği oluşturalım.

output_file("kupalar.html")

# Dünya kupasını kazanan takımların bir listesini oluştuma
teams = ['Arjantin', 'Brezilya', 'İspanya', 'Almanya']

# Dünya kupasını kazanma sayıları
wc_won = [2, 5, 1, 4]

# toolbar_location=None ve tools="" ile
# grafiğin sağındaki araçları gizleme
p = figure(x_range=teams, plot_height=250, title="Dünya Kupası Kazanma Sayıları",
           toolbar_location=None, tools="")

#barchart grafiği tanımlama
p.vbar(x=teams, top=wc_won, width=0.5)

p.xgrid.grid_line_color = 'red'
p.y_range.start = 0

show(p)

Barchart grafiğinde p.y_range.start ile y eksenimizin başlangıç noktasını tanımladık.

ColumnDataSource Objesini Kullanma

Bokeh Python dictionary ve Pandas DataFrames’ ler gibi kaynaklardan gelen veriler ile baş edebilmek için ColumnDataSource objesini kullanır. Bu obje ile grafiklerimizi kolay bir şekilde gösterebiliriz.

# ColumnDataSource import etme
from bokeh.models import ColumnDataSource

output_file("meyve.html")
data = {
    'meyveler':
    ['Elma', 'Armut', 'Ayva', 'Erik', 'Üzüm', 'Çilek'],
    '2015': [2, 1, 8, 3, 2, 4],
    '2016': [5, 3, 3, 2, 4, 6],
    '2017': [3, 2, 4, 4, 5, 3],
    'Alan': [10, 9 , 10 , 7 , 8 ,9]
}
#DataFrame oluşturma
df = pd.DataFrame(data).set_index("meyveler")

#DataFrame 'i ColumnDataSource objesine input olarak verme
source = ColumnDataSource(data=df)
meyveler = source.data['meyveler'].tolist()

#figure() objesini oluşturma
barchart = figure(x_range=meyveler,  plot_height=200, title="Ton")

barchart.vbar(x='meyveler', top='2016', width=0.5, legend='meyve', source=source) 

barchart.legend.orientation = "horizontal" 
barchart.legend.location = "top_center"
barchart.y_range.start = 0

show(barchart)

İnteraktif Grafikler Oluşturma

Eğer grafiğimizi biraz daha interaktif hale getirmek istersek Bokeh’ de bunun bir yöntemi de vardır. HoverTool özelliği ile grafiğin üzerinde dolaşıldığında açıklayıcı bilgiler sunulabilinir.

# ColumnDataSource import etme
from bokeh.models import ColumnDataSource
from bokeh.models import HoverTool 

output_file("meyve.html")
data = {
    'meyveler':
    ['Elma', 'Armut', 'Ayva', 'Erik', 'Üzüm', 'Çilek'],
    '2015': [2, 1, 8, 3, 2, 4],
    '2016': [5, 3, 3, 2, 4, 6],
    '2017': [3, 2, 4, 4, 5, 3],
    'Alan': [10, 9 , 10 , 7 , 8 ,9]
}
#DataFrame oluşturma
df = pd.DataFrame(data).set_index("meyveler")

#DataFrame 'i ColumnDataSource objesine input olarak verme
source = ColumnDataSource(data=df)
meyveler = source.data['meyveler'].tolist()

p = figure()
p.circle(x='2015', y='Alan', source=source, size=10, color='red')
p.square(x='2016', y='Alan', source=source, size=10, color='green')
p.cross(x='2017', y='Alan', source=source, size=10, color='blue')
#hover özelliğini ayarlama
hover = HoverTool()
hover.tooltips=[
    ('Ton', '@2015'),
    ('Dönüm', '@Alan')
]

p.add_tools(hover)

show(p)

Eğer Bokeh’ le çok ha fazlasını yapmak istiyorsanız official internet sitesini inceleyebilirsiniz. Bu yazımızda Bokeh’ i ve Bokeh kütüphanesinin güçlü yönlerini anlattık.

Kaynaklar

  1. https://docs.bokeh.org
  2. https://realpython.com/python-data-visualization-bokeh/
  3. https://towardsdatascience.com/data-visualization-with-bokeh-in-python-part-one-getting-started-a11655a467d4
  4. https://codeburst.io/overview-of-python-data-visualization-tools-e32e1f716d10
  5. https://towardsdatascience.com/6-reasons-i-love-bokeh-for-data-exploration-with-python-a778a2086a95
  6. https://programminghistorian.org/en/lessons/visualizing-with-bokeh
  7. https://stackabuse.com/pythons-bokeh-library-for-interactive-data-visualization/