
Công cụ TabPy
TabPy Tools là một gói Python để triển khai và quản lý các hàm Python trên máy chủ TabPy.
Hãy đào sâu vào các chức năng của TabPy Tools.
Kết nối với TabPy
Hàm client cho phép bạn kết nối API Python với máy chủ TabPy bằng URL và PORT.
rom tabpy.tabpy_tools.client import Client
client = Client('http://localhost:9004/')
Chúng ta có thể dùng đối tượng “client” để thiết lập xác thực và quản lý các hàm Python trên máy chủ.
Xác thực
Bạn có thể đặt tên người dùng và mật khẩu bằng hàm “set_credentials”. Cần thiết lập thông tin xác thực để triển khai một mô hình lên máy chủ.
Lưu ý: chỉ chạy hàm này nếu bạn đã bật xác thực trên máy chủ TabPy. Đọc tài liệu cấu hình máy chủ để biết thêm.
client.set_credentials('username', 'password')
Triển khai một Hàm
Tạo một hàm và xuất bản bằng hàm `client.deploy()`. Hàm này cần ba đối số: tên hàm, hàm Python, và mô tả.
Hàm addition cộng hai trường dữ liệu và trả về danh sách. Sau đó, hàm “add” sẽ được truy cập trong Tableau.
client.deploy('add', addition, 'Adds two numbers x and y')
Triển khai một Mô hình
Khi bạn đã huấn luyện một mô hình machine learning và triển khai hàm suy luận của mô hình, Tableau sẽ tự động lưu mô hình và định nghĩa hàm bằng cloudpickle. Chúng sẽ nằm trong bộ nhớ máy chủ để cung cấp thời gian phản hồi nhanh hơn.
Nói đơn giản, bạn không phải huấn luyện lại mô hình mỗi khi có thay đổi trong Tableau. Chúng ta sẽ tìm hiểu thêm về triển khai mô hình ở các phần tiếp theo.
Gỡ bỏ Endpoint
Để gỡ một hàm hoặc mô hình, dùng hàm `remove`. Chỉ cần tên hàm là đủ.
client.remove('add')
>>> Để biết thêm tính năng nâng cao, hãy xem kho TabPy/tabpy trên GitHub.
Triển khai một Hàm Python bằng IDE
Tương tự phần một, chúng ta sẽ tạo hàm Hệ số Tương quan Pearson. Thay vì viết hàm trong Tableau, ta sẽ triển khai lên máy chủ bằng Python API và sau đó truy cập hàm thông qua phép tính trong Tableau.
Ở phần này, chúng ta sẽ dùng tập dữ liệu Sales Store Product từ Kaggle để tính tương quan giữa các trường dữ liệu doanh số và lợi nhuận.

Bộ dữ liệu Kaggle Sales Store Product
Trước khi viết mã Python, hãy đảm bảo bạn có phiên bản TabPy mới nhất.
pip install -U tabpy
Chạy máy chủ cục bộ bằng terminal.
tabpy
TabPy Client
Nếu bạn quen thuộc với Python, phần này khá đơn giản để hiểu. Bạn có thể học mọi thứ về hàm Python qua khóa giới thiệu Python.
- Chúng ta sẽ import Client từ tabpy_tools và NumPy để tính toán.
- Kết nối máy chủ TabPy bằng URL và PORT.
- Tạo pearson_correlation_coefficient() nhận x và y và trả về một cột hệ số tương quan.
- Dùng hàm client.deploy() để xuất bản hàm “pcc”. Cần ba đối số: tên, hàm, và mô tả.
from tabpy.tabpy_tools.client import Client
import numpy as np
client = Client('http://localhost:9004/')
def pearson_correlation_coefficient(x,y):
return np.corrcoef(x,y)[0,1]
client.deploy('pcc', pearson_correlation_coefficient, 'correlation coefficient is extracted of x and y')
TabPy Query
Bây giờ chúng ta sẽ gọi hàm này trong Tableau bằng tabpy.query(). Cần tên hàm Python và các biến giữ chỗ đối số như _arg1 và _arg2.
- Trong SCRIPT_REAL, thêm đoạn query và gom tổng các trường dữ liệu.
- Query bắt đầu với return và kết thúc bằng [‘response’] để trích kết quả từ JSON.
- Đặt tính toán bảng mặc định theo trường dữ liệu Customer Name.
- Apply và nhấn OK.

Trường tính hệ số tương quan Pearson
Bạn có thể xem lại phần đầu của hướng dẫn để hiểu script Tableau.
SCRIPT_REAL("return tabpy.query('pcc',_arg1, _arg2)['response']",
SUM([Sales]),SUM([Profit]))
Trực quan hóa Dữ liệu
Giờ chúng ta sẽ tạo trực quan thể hiện tương quan theo hạng mục sản phẩm và phân khúc khách hàng.
- Kéo thả Customer Name vào Detail và Ship Mode vào Color trong bảng Marks.
- Kéo thả Customer Segment và pcc (trường tương quan đã tính) vào kệ Columns.
- Kéo thả Product Category vào kệ Rows.

Hiển thị biểu đồ cột hệ số tương quan
Trong đa số trường hợp, khu vực Corporate có tương quan cao giữa doanh số và lợi nhuận. Nhìn chung, bạn có thể dùng hệ số tương quan để đưa ra quyết định dựa trên dữ liệu nhằm thúc đẩy lợi nhuận công ty.
Đọc hướng dẫn chi tiết về tương quan trong Python để tìm hiểu các hệ số tương quan khác, cách tính trong Python và mối liên hệ giữa tương quan và nhân quả.
Triển khai Mô hình Prophet lên Tableau
Ở phần này, chúng ta sẽ học cách triển khai mô hình dự báo Facebook Prophet và cách chỉnh sửa các trường dữ liệu ngày tháng. Chúng ta sẽ huấn luyện mô hình chuỗi thời gian trên Apple Stock Prices từ năm 2015 đến 2020.

Bộ dữ liệu Kaggle Apple Stock Prices (2015-2020)
Trước khi viết script và tạo trực quan dự báo trên Tableau, chúng ta cần kiểm thử mã Python và đánh giá mô hình dự báo trong Jupyter Notebook.
Facebook Prophet
Facebook Prophet là thư viện mã nguồn mở để tự động dự báo chuỗi thời gian đơn biến. Thư viện hoạt động tốt nhất với tính mùa vụ theo năm, tuần và ngày.
Tại sao lại là Prophet?
Prophet xử lý tốt dữ liệu thiếu, dịch chuyển xu hướng và giá trị ngoại lai.
Cài đặt Prophet
Bạn có thể cài gói Prophet cho Python bằng lệnh dưới đây trong terminal.
pip install pystan==2.19.1.1
pip install prophet
Hoặc nếu bạn dùng môi trường Python Anaconda, dùng lệnh dưới đây.
conda install -c conda-forge prophet
Khởi tạo Dự án
- Chúng ta sẽ bắt đầu bằng cách import pandas để nạp và xử lý dữ liệu và Prophet để huấn luyện, đánh giá mô hình dự báo.
- Đọc tệp dữ liệu cổ phiếu Apple (AAPL.csv) bằng hàm read_csv của pandas.
- Định nghĩa X với các cột date và high.
- Hiển thị kích thước dataframe và trực quan hóa đồ thị đường chuỗi thời gian của cột high.
import pandas as pd
from prophet import Prophet
data = pd.read_csv("AAPL.csv")
X = data.loc[:, ['date','high']]
print(X.shape)
X.plot();
Kết quả
(1258, 2)
Cổ phiếu Apple tăng theo thời gian. Có hai lần sụt giảm, nhưng sau đó đã phục hồi trở lại đà tăng ổn định.

Hãy theo dõi hướng dẫn phân tích chuỗi thời gian trong Python của Hugo Bowne-Anderson để có kiến thức chuyên sâu. Bạn cũng có thể học khóa ngắn của DataCamp về phân tích chuỗi thời gian trong Python để thực hành.
Xây dựng Mô hình Machine Learning
Trong phần này, chúng ta sẽ chuẩn bị dữ liệu cho mô hình Prophet và huấn luyện với các siêu tham số mặc định.
- Đổi tên các cột thành ds và y
- Chuyển cột ds sang kiểu datetime (ngày)
- Định nghĩa một model bằng Prophet()
- Huấn luyện mô hình bằng model.fit()
X.columns = ['ds', 'y']
X['ds']= pd.to_datetime(X['ds'], format='%Y-%m-%d').dt.date
model = Prophet()
# fit the model
model.fit(X)
Đánh giá Mô hình
Để đánh giá, chúng ta cần thêm các ngày tương lai vào dữ liệu. Ta có thể làm điều này bằng make_future_dataframe.
Chúng ta sẽ đặt:
- prediods là 365 ngày
- freq là “D”. Bạn cũng có thể đổi thành “Y” nhưng khi đó cần đổi periods thành 1.
- Đặt include_history là false để bỏ qua dữ liệu trước đó.
future = model.make_future_dataframe(periods=365,
freq='D',
include_history=False
)
future.tail()
Kết quả
Như ta thấy, tập dữ liệu future kết thúc vào năm 2021.
ds
360 2021-05-18
361 2021-05-19
362 2021-05-20
363 2021-05-21
364 2021-05-22
Bước tiếp theo là dùng dữ liệu này để dự đoán các giá trị high của cổ phiếu Apple. Sau đó chúng ta sẽ hiển thị 'ds', 'yhat', 'yhat_lower' và 'yhat_upper'.
yhat_lower và yhat_upper xác định phạm vi sai số chấp nhận được. Nói ngắn gọn, giá cổ phiếu có thể tăng đến 485.3 và giảm xuống 365.4. Thông tin này có thể giúp nhà giao dịch trong ngày đánh giá rủi ro.
forecast = model.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail
Kết quả
ds yhat yhat_lower yhat_upper
360 2021-05-18 423.757736 365.415878 485.293438
361 2021-05-19 423.862811 365.527086 482.751097
362 2021-05-20 423.918642 365.233839 482.501335
363 2021-05-21 423.842872 364.454184 483.672508
364 2021-05-22 421.187822 360.181717 481.024524
Hãy trực quan hóa dữ liệu dự báo bằng hàm plot(). Hàm này cần các giá trị dự đoán để hiển thị biểu đồ điểm và đường với khoảng chấp nhận được tô màu xanh.
model.plot(forecast)
Trực quan dưới đây cho thấy cổ phiếu Apple sẽ tăng giá trị mà không có nhịp giảm.

Bạn có thể cải thiện dự báo bằng cách điều chỉnh các siêu tham số liên quan đến dự báo bão hòa, điểm thay đổi xu hướng, tính mùa vụ, hiệu ứng ngày lễ và các biến hồi quy, mùa vụ nhân, khoảng không chắc chắn, và giá trị ngoại lai. Bạn cũng có thể điều chỉnh tự động bằng tinh chỉnh siêu tham số. Tìm hiểu thêm về Facebook Prophet bằng cách đọc tài liệu.
Dự báo chuỗi thời gian là một lĩnh vực rộng lớn, và bạn có thể học mọi thứ về dự báo chuỗi thời gian qua hướng dẫn time series forecasting của Moez Ali. Hướng dẫn bao quát phân tích chuỗi thời gian, mô hình thống kê, framework Python và AutoML.
Bạn cũng có thể học khóa trực quan hóa dữ liệu chuỗi thời gian trong Python để tìm hiểu về biểu đồ đường, phát hiện tính mùa vụ, xu hướng và nhiễu, cũng như hiển thị nhiều chuỗi thời gian.
Triển khai Suy luận Mô hình
Ở phần này, chúng ta sẽ triển khai suy luận mô hình. Điều này cho phép lưu trữ mô hình và định nghĩa hàm trên máy chủ TabPy để cung cấp thời gian phản hồi nhanh hơn.
Trước tiên, chúng ta sẽ kết nối Client bằng URL và PORT. Sau đó định nghĩa hàm prophet_forecasting.
- Hàm nhận vào số năm cần dự báo và dùng nó để tạo dataframe ngày future.
- Tạo dự đoán bằng model.predict với dataframe future.
- Đổi tên “yhat” thành “y” để có thể nối phần dự báo với dữ liệu lịch sử.
- Phần cuối hơi khó. Trong Tableau, chúng ta không thể thêm giá trị vào trường data. Thay vào đó, chúng ta sẽ dịch các giá trị Date đi 365*n. Trong đó n là số năm.
Cuối cùng, chúng ta sẽ đóng gói và triển khai lên máy chủ TabPy bằng client.deploy(). Chúng ta sẽ đặt tên hàm là “prophet”. Đối số override sẽ giúp tạo các phiên bản của mô hình và hàm. Điều này cần thiết ở giai đoạn đầu khi đang debug mã.
from tabpy.tabpy_tools.client import Client
client = Client('http://localhost:9004/')
def prophet_forecasting(n):
future = model.make_future_dataframe(periods=365*n,include_history=False)
prediction = model.predict(future)
prediction.rename(columns={"yhat":"y"}, inplace=True)
return pd.concat([X,prediction[['ds','y']]])['y'].to_list()[365*n:]
client.deploy('prophet',
prophet_forecasting,
'forecast time series data using prophet',override=True)
Thiết lập Tableau
Để điều khiển số năm trong Tableau, chúng ta phải tạo tham số Years. Tham số này sẽ được dùng trong hàm prophet.
Chúng ta có thể tạo tham số Years bằng cách nhấp chuột phải trong phần Data và chọn Create Parameter. Đổi Data type thành Integer, Current value thành 1, và nhấp Range để thêm Minimum 1 và Maximum 5.

Tạo tham số Years
Sau đó, chúng ta sẽ tạo trường tính Forecast_date. Chúng ta sẽ dùng trường dữ liệu Date và dịch các giá trị theo số Years.

Trường tính Forecast_date
Hàm DATEADD sẽ cộng Years vào trường dữ liệu Date rồi cắt về ngày.
DATETRUNC('day',DATEADD('year',[Years],[Date])))
Tiếp theo, chúng ta sẽ tạo trường tính forecast và truy cập mô hình đã triển khai bằng tabpy.query(). Hàm query gồm hai phần, phần đầu là tên hàm Python và phần sau là danh sách biến giữ chỗ cho đối số.

Trường tính forecast
Trong trường hợp của chúng ta, chỉ có một đối số, nên sẽ thêm _arg1. Chúng ta sẽ bọc query trong hàm Tableau gọi là SCRIPT_REAL và cung cấp tham số Years làm đầu vào. Trước khi nhấn OK, hãy đảm bảo kết quả được tính theo Forecast_date. Bạn có thể thay đổi bằng cách nhấp vào dòng chữ màu xanh (Default Table Calculation).
SCRIPT_REAL("return tabpy.query('prophet',_arg1[0])['response']",
[Years]
)
Sau đó chúng ta sẽ tạo trường tính Actual dùng trường dữ liệu High và tham số Years.

Trường tính Actual
LOOKUP sẽ giúp chúng ta dịch các giá trị High theo Years*365. Ví dụ, nếu tham số Years là 2, thì sẽ dịch các giá trị đi 730.
LOOKUP(SUM([High]),[Years]*365)
Thực tế so với Dự báo
Cuối cùng chúng ta đã đến bước cuối. Để vẽ biểu đồ đường Actual vs. Forecast, chúng ta làm theo các bước đơn giản sau:
- Vào phần Parameters ở góc dưới bên trái, nhấp chuột phải vào tham số Years và chọn Show Parameters.
- Kéo thả Forecast_date vào kệ Columns. Chuyển thành Day.
- Kéo thả Measure Names từ Dimensions vào Filters. Chỉ chọn Actual và forecast.
- Kéo thả Measure Names từ Dimensions vào Color.
- Cuối cùng, kéo thả Measure Names từ Measures vào kệ Rows.
Sau khi làm theo các bước, bạn sẽ thấy Actual và forecast với hai màu khác nhau.

Biểu đồ đường Actual vs. Forecast
Biểu đồ đường trên còn xa mới hoàn hảo và cần tinh chỉnh siêu tham số, kiểm định chéo, xử lý giá trị và ngày bị thiếu, cũng như cải thiện hàm ngày tháng.
Kết luận
Trong hướng dẫn này, chúng ta đã học cách xây dựng và triển khai một mô hình machine learning trên máy chủ TabPy và truy cập nó bằng script Tableau. Chúng ta cũng đã học những điều cơ bản về tabpy_tools và cách dùng nó để triển khai các hàm hoặc mô hình.
Tìm hiểu thêm về dự báo tài chính với khóa học của DataCamp. Bạn sẽ học cách hiểu báo cáo kết quả kinh doanh, bảng cân đối kế toán và tỷ số dự báo, định dạng dữ liệu thô, quản lý ngày tháng và kỳ tài chính, cùng giả định và độ lệch trong dự báo.
Dự báo chuỗi thời gian là nền tảng; chúng ta cải thiện dự đoán bằng cách huấn luyện dữ liệu với các thuật toán machine learning khác như:
- Autoregressive Integrated Moving Average (ARIMA)
- Seasonal Autoregressive Integrated Moving Average (SARIMA)
- Exponential Smoothing (ES)
- XGBoost
- LSTM (Học sâu)
- Temporal Fusion Transformer (Google)
Nếu bạn mới dùng Tableau và muốn học tất cả về trực quan hóa dữ liệu và tính toán thống kê, hãy học lộ trình kỹ năng Tableau fundamentals.
Đây là phần cuối của series. Trong phần đầu tiên của hướng dẫn TabPy này, chúng ta đã tìm hiểu mọi thứ về TabPy và chạy script Python trong Tableau để tạo các cụm dữ liệu của danh sách Airbnb tại Amsterdam.