Trong hướng dẫn này, bạn sẽ học cách cài đặt Bokeh (và các phụ thuộc của nó) cùng những khối xây dựng cơ bản để trực quan hóa bằng Bokeh. Bạn cũng sẽ học cách tạo các biểu đồ cơ bản và tùy biến chúng. Đây sẽ là nền tảng để bạn học các tính năng nâng cao hơn ở những phần sau.
Bokeh là gì?
Bokeh là một gói trực quan hóa dữ liệu tương tác để tạo các hình ảnh động bằng Python. Bokeh là mã nguồn mở và bạn có thể dùng nó để tạo các biểu đồ kể một câu chuyện thú vị.
Điều gì khiến Bokeh khác biệt so với các công cụ khác?
Trong thế giới trực quan hóa, có nhiều thư viện Python để tạo bảng điều khiển và hình trực quan, bao gồm:
- Bokeh
- Matplotlib
- Streamlit
- dash
- Seaborn
- Plotly
- Geoplotlib
- Gleam
- ggplot
- Missingo
Bokeh phù hợp với những việc sau:
- Xây dựng hình trực quan tương tác cho các trình duyệt hiện đại
- Tạo tài liệu độc lập hoặc ứng dụng chạy trên máy chủ
- Tạo đồ họa sinh động và giàu biểu đạt
- Tạo bảng điều khiển cho dữ liệu lớn, động hoặc truyền trực tuyến
Hướng dẫn Bokeh này dành cho bạn...
Nếu bạn là nhà khoa học dữ liệu, nhà phân tích dữ liệu hoặc kỹ sư học máy. Hướng dẫn này yêu cầu bạn có kiến thức cơ bản về Python và biết cách cài đặt, import các gói. Bạn sẽ học cách tạo hình trực quan tương tác và triển khai chúng lên web bằng thư viện Bokeh. Bokeh có thể giúp bạn tạo các biểu đồ tương tác, bảng điều khiển và ứng dụng dữ liệu.
Cách cài đặt Bokeh
Cài đặt bằng Anaconda
Nếu Anaconda là trình quản lý gói Python của bạn, bạn có thể cài đặt Bokeh từ Anaconda Prompt, Windows Command Prompt hoặc Bash Terminal như sau:
conda install bokeh
conda install jinja2
conda install six
conda install requests
conda install tornado
conda install pyYaml
Cài đặt bằng pip
Bạn cũng có thể cài đặt bằng trình quản lý gói pip như sau:
pip install bokeh
pip install jinja2
pip install six
pip install requests
pip install tornado
pip install pyYaml
Cài đặt trong Jupyter Notebook
!pip install bokeh
!pip install Jinja2
!pip install Six
!pip install Requests
!pip install Tornado
!pip install PyYaml
Xác minh cài đặt
from bokeh.io import output_notebook, show
output_notebook()

Giải quyết sự cố
Nếu bạn gặp vấn đề khi cài đặt Bokeh, bạn có thể xem Discourse để được hỗ trợ. Bạn cũng có thể xem Github để xử lý các vấn đề liên quan đến Bokeh.
Tìm hiểu về Glyph
Vậy glyph là gì?
Glyph là các khối xây dựng then chốt trong Bokeh để tạo biểu đồ. Mọi biểu đồ bạn xây trong Bokeh đều có cơ chế glyph. Ví dụ, khi muốn tạo biểu đồ phân tán, bạn có thể dùng hình tròn làm marker để biểu diễn thông tin. Một đường thẳng sẽ biểu diễn thông tin trên biểu đồ đường.
Những hình học cơ bản này (đường thẳng hoặc hình tròn) chính là glyph trong Bokeh. Chúng truyền tải thông tin trực quan về dữ liệu. Hướng dẫn này sẽ giúp bạn hiểu glyph bằng cách chỉ cho bạn cách dùng glyph để tạo nhiều loại biểu đồ khác nhau. Tóm lại, chúng ta sẽ vẽ các biểu đồ sau bằng glyph:
- Biểu đồ đường: Biểu đồ đường thể hiện sự dịch chuyển của các điểm dữ liệu dọc theo trục x và y thành một đường. Biểu đồ đường phù hợp để vẽ dữ liệu chuỗi thời gian.
- Biểu đồ cột: Biểu đồ cột biểu diễn số lượng của mỗi hạng mục dưới dạng cột. Biểu đồ cột phù hợp để phân loại dữ liệu.
- Biểu đồ mảng vá (patch): Biểu đồ patch hiển thị một vùng các điểm bằng một màu cụ thể. Chúng phù hợp để phân biệt các nhóm trong cùng một tập dữ liệu.
- Biểu đồ phân tán: Biểu đồ phân tán biểu diễn mối quan hệ giữa hai biến và mức độ tương quan giữa chúng.
Cách dùng Glyph để vẽ biểu đồ
Các bước chung để tạo một biểu đồ trong Bokeh là:
- Tạo một biểu đồ bằng hàm figure() để yêu cầu Bokeh tạo sơ đồ.
- Đặt tiêu đề, nhãn trục x và trục y.
- Sau đó thêm glyph line() vào figure để tạo biểu đồ đường và
- glyph cross() để đánh dấu các giao điểm giữa các điểm x và y.
Tạo biểu đồ đường
Đoạn mã sau cho bạn thấy cách tạo một biểu đồ đường đơn giản trong Bokeh.
#Import the required packages
from bokeh.io import output_notebook, output_file, show
from bokeh.plotting import figure
#Create two data arrays
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
# Create plot
plot = figure(width=400, height=400, title="Simple line plot", x_axis_label="x-axis", y_axis_label = 'y-axis')
plot.line(x,y, line_width=2, color='green')
#Show plot
output_file(“line_plot1.html”)
show(plot)
Ví dụ này cho bạn thấy cách tạo một glyph đường đơn bằng một dãy một chiều các điểm dữ liệu x và y với glyph line(). Bạn có thể chỉ định chiều rộng và chiều cao của biểu đồ, tiêu đề, và nhãn trục trong hàm figure(). Trong glyph line(), bạn có thể chỉ định line_width (độ dày) bằng tham số line_width, và màu bằng tham số color.

Tạo biểu đồ cột
#Import the
from bokeh.plotting import figure, show
animals = ['lion', 'leopard', 'elephant', 'rhino', 'buffalo']
weight_tonnes = [190, 90, 3000, 2300, 590]
p = figure(x_range=animals, height=350, title="Big Five weight", x_axis_label = "Animal", y_axis_label = "Weight",
toolbar_location=None, tools="")
p.vbar(x=animals, top=weight_tonnes, width=0.9)
p.xgrid.grid_line_color = None
p.y_range.start = 0
show(p)

Tạo biểu đồ patch
Một biểu đồ patch tô màu các vùng để cho thấy một nhóm hoặc vùng có đặc điểm tương đồng. Bạn có thể tạo một biểu đồ patch đơn giản như sau:
# Import required packages
from bokeh.io import output_file, show
from bokeh.plotting import figure
# Create the regions to chart
x_region = [[1,1,2], [2,3,3], [2,3,5,4]]
y_region = [[2,5,6], [3,6,7], [2,4,7,8]]
# Create plot
plot = figure()
plot.patches(x_region, y_region, fill_color = ['blue', 'yellow', 'green'], line_color = 'black')
show(plot)

Có ba vùng riêng biệt: Thứ nhất là [1,1,2] ánh xạ tới [2,5,6] trên trục y. Thứ hai là vùng [2,2,3] trên trục x ánh xạ tới [3,6,7] trên trục y, và vùng thứ ba [2,3,5,4] trên trục x ánh xạ tới [2,4,7,8] trên trục y. Glyph patches dùng các màu khác nhau để tạo mảng vá cho mỗi vùng. Tham số _linecolor chỉ định màu viền cho mỗi mảng vá.
Tạo biểu đồ phân tán
Nhà khoa học dữ liệu thường dùng biểu đồ phân tán để xác định mối quan hệ giữa hai biến. Bạn có thể tạo một biểu đồ phân tán đơn giản trong Bokeh như sau:
# Import required packages
from bokeh.io import output_file, show
from bokeh.plotting import figure
# Create x and y data points
x = [1,2,3,4,5]
y = [5,7,2,2,4]
# Create plot
plot = figure(title = "Scatter plot", x_axis_label = "Label name of x axis", y_axis_label ="Label name of y axis")
plot.circle(x,y, size = 30, alpha = 0.5)
# Add labels
# Output the plot
show(plot)

Đoạn mã dùng marker hình tròn để tạo các điểm giao nhau của danh sách x và y trên biểu đồ phân tán. Thay vì hình tròn, bạn có thể dùng các marker khác như:
- cross()
- x()
- diamond()
- diamond_cross()
- circle_x()
- circle_cross()
- triangle()
- inverted_triangle()
- square_x()
- square_cross()
- asterisk()
Tham số size = 30 chỉ định kích thước của mỗi hình tròn. Hình minh họa dưới đây tóm tắt tất cả các marker có sẵn trong Bokeh.

Tham số alpha chỉ định độ trong suốt của các hình tròn. Giá trị nằm trong khoảng từ 0 đến 1, với 0 là trong suốt hoàn toàn và 1 là đục.
Kết luận
Hướng dẫn này giới thiệu Bokeh như một công cụ trực quan hóa tương tác và cấp cao. Hướng dẫn đặt nền tảng cho những gì bạn có thể kỳ vọng khi dùng Bokeh. Bạn đã thấy cách tạo biểu đồ đường, biểu đồ cột, biểu đồ patch và biểu đồ phân tán trong Bokeh dựa trên khái niệm glyph. Hãy xem thêm tài liệu Bokeh sau để biết chi tiết về các loại biểu đồ bạn có thể tạo trong Bokeh.