Bokeh - Memfilter Data

Seringkali, Anda mungkin ingin mendapatkan plot yang berkaitan dengan bagian data yang memenuhi kondisi tertentu, bukan seluruh kumpulan data. Objek kelas CDSView yang ditentukan dalam modul bokeh.models mengembalikan subset ColumnDatasource yang sedang dipertimbangkan dengan menerapkan satu atau beberapa filter di atasnya.

IndexFilter adalah jenis filter yang paling sederhana. Anda harus menentukan indeks hanya dari baris-baris tersebut dari dataset yang ingin Anda gunakan saat memplot gambar.

Contoh berikut menunjukkan penggunaan IndexFilter untuk menyiapkan CDSView. Gambar yang dihasilkan menunjukkan mesin terbang garis antara seri data x dan y dari ColumnDataSource. Objek tampilan diperoleh dengan menerapkan filter indeks di atasnya. Tampilan digunakan untuk memplot mesin terbang lingkaran sebagai hasil dari IndexFilter.

Contoh

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)

Keluaran

Untuk memilih hanya baris tersebut dari sumber data, yang memenuhi kondisi Boolean tertentu, terapkan BooleanFilter.

Instalasi Bokeh biasanya terdiri dari sejumlah kumpulan data sampel dalam direktori sampel. Untuk contoh berikut, kami menggunakanunemployment1948dataset disediakan dalam bentuk pengangguran1948.csv. Ini menyimpan persentase tahunan pengangguran di AS sejak 1948. Kami ingin membuat plot hanya untuk tahun 1980 dan seterusnya. Untuk tujuan itu, objek CDSView diperoleh dengan menerapkan BooleanFilter di atas sumber data yang diberikan.

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)

Keluaran

Untuk menambahkan lebih banyak fleksibilitas dalam menerapkan filter, Bokeh menyediakan kelas CustomJSFilter dengan bantuan sumber datanya dapat difilter dengan fungsi JavaScript yang ditentukan pengguna.

Contoh yang diberikan di bawah ini menggunakan data pengangguran AS yang sama. Mendefinisikan CustomJSFilter untuk memplot angka pengangguran tahun 1980 dan setelahnya.

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)