Bokeh - Verileri Filtreleme

Çoğu zaman, veri kümesinin tamamı yerine belirli koşulları karşılayan bir veri parçasıyla ilgili bir grafik elde etmek isteyebilirsiniz. Bokeh.models modülünde tanımlanan CDSView sınıfının nesnesi, üzerine bir veya daha fazla filtre uygulayarak, üzerinde düşünülen ColumnDatasource alt kümesini döndürür.

IndexFilter, en basit filtre türüdür. Şekli çizerken kullanmak istediğiniz veri kümesinden yalnızca bu satırların indekslerini belirlemeniz gerekir.

Aşağıdaki örnek, bir CDSView kurmak için IndexFilter kullanımını gösterir. Ortaya çıkan şekil, ColumnDataSource'un x ve y veri serileri arasında bir çizgi glifini gösterir. Üzerine dizin filtresi uygulanarak bir görünüm nesnesi elde edilir. Görünüm, IndexFilter'ın bir sonucu olarak çember glifini çizmek için kullanılır.

Misal

from bokeh.models import ColumnDataSource, CDSView, IndexFilter
from bokeh.plotting import figure, output_file, show
source = ColumnDataSource(data = dict(x = list(range(1,11)), y = list(range(2,22,2))))
view = CDSView(source=source, filters = [IndexFilter([0, 2, 4,6])])
fig = figure(title = 'Line Plot example', x_axis_label = 'x', y_axis_label = 'y')
fig.circle(x = "x", y = "y", size = 10, source = source, view = view, legend = 'filtered')
fig.line(source.data['x'],source.data['y'], legend = 'unfiltered')
show(fig)

Çıktı

Veri kaynağından yalnızca belirli bir Boole koşulunu sağlayan satırları seçmek için bir BooleanFilter uygulayın.

Tipik bir Bokeh kurulumu, örnek veri dizinindeki bir dizi örnek veri kümesinden oluşur. Aşağıdaki örnek için kullanıyoruzunemployment1948unemployment1948.csv biçiminde sağlanan veri kümesi. ABD'de 1948'den beri yıllık işsizlik yüzdesini saklıyor. Sadece 1980'den itibaren bir komplo oluşturmak istiyoruz. Bu amaçla, verilen veri kaynağı üzerine BooleanFilter uygulanarak bir CDSView nesnesi elde edilir.

from bokeh.models import ColumnDataSource, CDSView, BooleanFilter
from bokeh.plotting import figure, show
from bokeh.sampledata.unemployment1948 import data
source = ColumnDataSource(data)
booleans = [True if int(year) >= 1980 else False for year in
source.data['Year']]
print (booleans)
view1 = CDSView(source = source, filters=[BooleanFilter(booleans)])
p = figure(title = "Unemployment data", x_range = (1980,2020), x_axis_label = 'Year', y_axis_label='Percentage')
p.line(x = 'Year', y = 'Annual', source = source, view = view1, color = 'red', line_width = 2)
show(p)

Çıktı

Filtre uygulamada daha fazla esneklik eklemek için Bokeh, veri kaynağının kullanıcı tanımlı bir JavaScript işleviyle filtrelenebildiği bir CustomJSFilter sınıfı sağlar.

Aşağıda verilen örnek aynı ABD işsizlik verilerini kullanmaktadır. 1980 yılı ve sonrasının işsizlik rakamlarını çizmek için bir CustomJSFilter tanımlama.

from bokeh.models import ColumnDataSource, CDSView, CustomJSFilter
from bokeh.plotting import figure, show
from bokeh.sampledata.unemployment1948 import data
source = ColumnDataSource(data)
custom_filter = CustomJSFilter(code = '''
   var indices = [];

   for (var i = 0; i < source.get_length(); i++){
      if (parseInt(source.data['Year'][i]) > = 1980){
         indices.push(true);
      } else {
         indices.push(false);
      }
   }
   return indices;
''')
view1 = CDSView(source = source, filters = [custom_filter])
p = figure(title = "Unemployment data", x_range = (1980,2020), x_axis_label = 'Year', y_axis_label = 'Percentage')
p.line(x = 'Year', y = 'Annual', source = source, view = view1, color = 'red', line_width = 2)
show(p)