{count, plural, one {Khóa học} other {Khóa học}}

TabPy là gì
TabPy là một framework cho phép Tableau thực thi mã Python. Nó cho phép người dùng chạy script Python trong ô tính toán (calculated field) của Tableau hoặc triển khai các hàm trên máy chủ TabPy bằng Python API.
TabPy là một công cụ mạnh mẽ đi kèm nhiều cấu hình và tiện ích. Bạn có thể tích hợp nó với trực quan hóa của Tableau, và bất cứ khi nào tham số thay đổi, script Python sẽ tự động chạy để mang đến trải nghiệm trực quan hóa động.
Vì sao dùng TabPy?
Mặc dù Tableau cung cấp chức năng phong phú để tạo, thao tác và làm sạch trường dữ liệu, chúng ta vẫn bị giới hạn ở các chức năng thống kê đơn giản. Để mở khóa các thống kê nâng cao như học máy, chúng ta sẽ tích hợp các thư viện Python mạnh mẽ với Tableau.
Tìm hiểu các kỹ thuật thống kê trong Tableau thông qua khóa học tương tác của DataCamp.
Trong hướng dẫn này, chúng ta sẽ học cách thiết lập máy chủ TabPy và thực hiện một dự án học máy đơn giản. Chúng ta sẽ dùng thuật toán K Means để chia các danh sách AirBnB Amsterdam thành nhiều cụm.
Thiết lập TabPy
Thiết lập máy chủ TabPy rất đơn giản. Bạn có thể cài đặt TabPy bằng `pip` trong terminal hoặc `!pip` trong Jupyter Notebook. Nó sẽ tự động cài đặt server và client API cho Python.
pip install tabpy
Để chạy máy chủ, chúng ta gõ `tabpy` trong terminal. Sau vài giây sẽ thấy máy chủ chạy cục bộ trên cổng 9004.
tabpy
Kết quả
... Password file is not specified: Authentication is not enabled
... Call context logging is disabled
... Initializing TabPy...
... Initializing TabPy Server...
... Done initializing TabPy.
... Setting max request size to 104857600 bytes
... Initializing models...
... Web service listening on port 9004
Cấu hình máy chủ TabPy
Bạn có thể cấu hình máy chủ TabPy bằng file cấu hình và lệnh dưới đây.
tabpy --config=path/to/my/config/file.conf
Bạn có thể cấu hình:
- Kết nối HTTP so với HTTPS
- Quản lý người dùng
- Ghi log
TabPy mang lại sự linh hoạt để tùy chỉnh máy chủ theo chính sách bảo mật và đảm bảo chất lượng của công ty. Bạn có thể xem file cấu hình mẫu và tìm hiểu cách thiết lập máy chủ với các yêu cầu cụ thể.
Triển khai TabPy lên Heroku
Nếu bạn dùng Tableau Cloud hoặc Tableau Server, bạn sẽ cần triển khai máy chủ TabPy lên nền tảng đám mây hoặc web hosting. Bạn có thể làm điều này bằng Docker file hoặc triển khai trực tiếp máy chủ trên Heroku.
Để chạy máy chủ từ xa trên Heroku:
- Đăng nhập tài khoản Heroku qua trình duyệt, nếu chưa có tài khoản, hãy đăng ký miễn phí.
- Truy cập kho lưu trữ TabPy trên GitHub và nhấp nút "Deploy to Heroku" trong Readme.

- Làm theo hướng dẫn. Nhập tên máy chủ và chọn khu vực máy chủ.
- Thiết lập biến môi trường username và password.
Máy chủ của bạn đã được triển khai một cách gọn nhẹ. Bạn có thể kết nối Tableau bằng URL và số cổng.
Kết nối với TabPy
Hãy đảm bảo máy chủ TabPy của bạn đang chạy cục bộ hoặc từ xa trước khi kết nối với Tableau.
Để kết nối máy chủ, chúng ta nhấp menu Help và chọn Settings and Performance > Manage Analytics Extension Connection. Một cửa sổ mới sẽ hiện ra với các loại kết nối: TabPy, Einstein Discovery, RServe, và Analytics Extension API.

Chúng ta sẽ chọn TabPy, khi đó sẽ có cửa sổ yêu cầu thêm Hostname, Port, Username và Password. Ta sẽ bỏ qua username và password vì chưa thiết lập.
Tiếp theo, thêm Hostname là “localhost” và Port là “9004” rồi nhấn Test Connection. Sau khi kiểm tra thành công, lưu cấu hình kết nối.

Sử dụng Python với các phép tính trong Tableau
Để chạy script Python trong một ô tính toán, bạn cần một trong các hàm script dựa trên kiểu đầu ra:
- SCRIPT_BOOL
- SCRIPT_INT
- SCRIPT_REAL
- SCRIPT_STR
Nếu hàm của bạn trả về giá trị boolean, hãy dùng hàm SCRIPT_BOOL. Bạn luôn có thể lấy số nguyên rồi chuyển đổi sang kiểu khác bằng các hàm gốc.
Trong phần này, chúng ta sẽ dùng bộ dữ liệu doanh số cửa hàng từ Kaggle. Trường dữ liệu Sales và Profit sẽ tính hệ số tương quan Pearson.

Hàm SCRIPT_REAL cần hai phần. Phần đầu là script Python trong dấu nháy kép và phần thứ hai là các đối số đã được tổng hợp.
Chúng ta sẽ dùng gói Python Numpy để tính tương quan giữa đối số Sales và Profit. Ta không thể thêm đối số trực tiếp. Thay vào đó, dùng các placeholder như “_arg1” và “_arg2”. Ví dụ, SUM([Profit]) là đối số thứ hai trong thứ tự và liên kết với “_arg2”.
Ta chỉ đơn giản trích hệ số tương quan từ ma trận np.corrcoef để trả về một cột duy nhất.
SCRIPT_REAL("import numpy as np
return np.corrcoef(_arg1,_arg2)[0,1]",
SUM([Sales]),SUM([Profit]))
Sau khi thêm script vào ô tính toán “Correlation”, nhấp nút apply. Script sẽ chạy và trả về các giá trị tương ứng với Customer Name.
Trước khi nhấn nút OK, hãy nhấp vào dòng chữ “Default Table Calculation” và đổi tùy chọn từ Automatic sang Customer Name.

Để trực quan hóa biểu đồ phân tán của danh mục sản phẩm và phân khúc khách hàng:
- Kéo thả trường dữ liệu Category của Product và Sales vào kệ Columns.
- Sau đó, kéo thả trường dữ liệu Customer Segment và Profit vào kệ Rows.
- Kéo thả Customer Name vào nút Detail trong phần Marks.
- Cuối cùng, kéo thả ô tính toán mới tạo Correlation vào nút Label trong phần Marks.

Biểu đồ trên cho thấy hệ số tương quan của khách hàng theo danh mục sản phẩm và phân khúc khách hàng. Có mối tương quan cao giữa danh mục Furniture và khách hàng Small Business.
Script Python phân cụm trong Tableau
Trong phần này, chúng ta sẽ dùng bộ dữ liệu Airbnb Amsterdam để tạo cụm bằng thuật toán phân cụm K-means và khung học máy scikit-learn.

Trước khi bắt đầu viết script TabPy, chúng ta cần phân tích và hiểu bộ dữ liệu trên Jupyter Notebook.
Khởi tạo dự án
Chúng ta sẽ dùng pandas để nạp và làm sạch dữ liệu, matplotlib và seaborn để trực quan hóa dữ liệu, và scikit-learn để xử lý dữ liệu và thuật toán phân cụm.
Đầu tiên, chúng ta import các gói Python cần thiết và nạp file “listing.csv”. Sau đó, khám phá giá trị khuyết bằng .isna().sum().
mport pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import LabelEncoder
from sklearn.cluster import KMeans
df = pd.read_csv("listings.csv")
df.isna().sum()
Như có thể thấy, có nhiều giá trị khuyết ở neighbourhood_group, last_review, và reviews_per_month. Thay vì bù khuyết hoặc loại bỏ các cột này, chúng ta sẽ không đưa chúng vào quá trình huấn luyện mô hình.
id 0
name 38
host_id 0
host_name 4
neighbourhood_group 20030
neighbourhood 0
latitude 0
longitude 0
room_type 0
price 0
minimum_nights 0
number_of_reviews 0
last_review 2406
reviews_per_month 2406
calculated_host_listings_count 0
availability_365 0
dtype: int64
Xử lý dữ liệu
Chúng ta sẽ tạo dataframe X chứa các đặc trưng thiết yếu để huấn luyện. Các đặc trưng này không có giá trị khuyết, không phải ID duy nhất, và không có tương quan cao. Ví dụ, chúng ta sẽ không đưa id, name, host_id, host_name, latitude và longitude vào.
Chúng ta có các cột dạng phân loại, và để chuyển chúng sang dạng số, sẽ dùng LabelEncoder(). Để áp dụng cho nhiều cột phân loại, chúng ta sẽ dùng hàm .apply() của Pandas.
X = df[['neighbourhood',
'room_type',
'price',
'minimum_nights',
'number_of_reviews',
'availability_365',
'calculated_host_listings_count']]
LE = LabelEncoder()
cat = ['neighbourhood','room_type']
X[cat] = X[cat].apply(LE.fit_transform)
X.head()

Như ta thấy, dataframe cuối có bảy cột với giá trị số.
Tìm khuỷu (Elbow) cho K Means
Phương pháp Elbow được dùng để xác định số cụm tối ưu trong một tập dữ liệu. Chúng ta sẽ dùng n_clusters và .inertia_ để hiển thị đồ thị đường với dạng giống khuỷu tay. Inertia là tổng bình phương khoảng cách của các điểm đến tâm cụm gần nhất.
Đoạn mã dưới sẽ chạy từ 1 đến 9 và thêm các giá trị inertia vào mảng clusters. Sau đó, chúng ta dùng thông tin này để vẽ đồ thị đường của số cụm so với inertia.
clusters = []
for i in range(1, 10):
km = KMeans(n_clusters=i).fit(X)
clusters.append(km.inertia_)
fig, ax = plt.subplots(figsize=(12, 8))
sns.lineplot(x=list(range(1, 10)), y=clusters, ax=ax)
ax.set_title('Searching for Elbow')
ax.set_xlabel('Clusters')
ax.set_ylabel('Inertia');

Đồ thị cho thấy vòm đầu tiên ở 3 và vòm thứ hai ở 4. Chúng ta sẽ đưa cả hai số cụm này vào phân tích trực quan trong Tableau.
Bạn có thể tìm hiểu thêm về phân cụm K Means trong Python với scikit-learn qua hướng dẫn của chúng tôi.
Tạo tham số N-Cluster
Để tránh phải thêm số cụm thủ công vào mã, chúng ta sẽ tạo một tham số với phạm vi từ 1 đến 10.
Chúng ta có thể tạo tham số 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 giá trị Minimum 1 và Maximum 10.

Script Python trong ô tính toán
Bây giờ chúng ta sẽ chuyển mã từ Jupyter Notebook sang ô tính toán của Tableau. Ô tính toán của Tableau không cần tải bộ dữ liệu. Chúng ta đã có các trường dữ liệu cần thiết và sẽ sử dụng chúng thông qua các đối số SCRIPT_INT.
- Chuyển đổi đối số một và hai sang kiểu số bằng LabelEncoder.
- Lấy tất cả các đối số và đặt tên biến phù hợp.
- Xếp chồng tất cả đối số đầu vào ngoại trừ N thành các cột.
- Định nghĩa mô hình với số cụm “N”. Ta có thể thay đổi biến này bằng tham số N Clusters.
- Cuối cùng, huấn luyện và dự đoán cụm bằng các đặc trưng.
- Trả về đầu ra dưới dạng danh sách số nguyên.
Phần thứ hai của script là các trường dữ liệu tổng hợp và một tham số.
Bạn có thể xem đoạn mã dưới để hiểu mối liên hệ giữa các đối số và trường dữ liệu.
SCRIPT_INT("from sklearn.preprocessing import LabelEncoder
from sklearn.cluster import KMeans
LE = LabelEncoder()
neighbourhood = LE.fit_transform(_arg1)
room_type = LE.fit_transform(_arg2)
price = _arg3
minimum_nights = _arg4
number_of_reviews = _arg5
availability_365 = _arg6
calculated_host_listings_count = _arg7
N = _arg8[0]
X = np.column_stack(
[
neighbourhood,
room_type,
price,
minimum_nights,
number_of_reviews,
availability_365,
calculated_host_listings_count,
]
)
kmeans = KMeans(n_clusters=N, random_state=35)
return kmeans.fit_predict(X).tolist()
",
ATTR([Neighbourhood]),
ATTR([Room Type]),
AVG([Price]),
MEDIAN([Minimum Nights]),
SUM([Number Of Reviews]),
AVG([Availability 365]),
AVG([Calculated Host Listings Count]),
[N Clusters]
)
Tạo một ô tính toán mới (Kmean) và sao chép dán đoạn mã trên. Hãy đảm bảo kết quả được tính toán theo Host Id. Bạn có thể chỉnh bằng cách nhấp vào dòng chữ xanh Default Table Calculation.

Trực quan hóa dữ liệu
Để tạo trực quan hóa dưới đây, chúng ta cần làm theo một loạt bước.
- Kéo thả trường dữ liệu Price vào kệ Columns và Number of Reviews vào kệ Rows.
- Vào menu Analysis phía trên và bỏ chọn Aggregate Measures.
- Kéo thả trường dữ liệu Host Id vào Detail trong phần Marks, và ô tính toán Kmean vào Color.
- Đổi ô tính toán Kmean sang Discrete bằng cách nhấp phải để truy cập tùy chọn.
- Nhấp phải vào N Clusters trong phần Parameters và chọn Show Parameters để hiển thị thanh trượt bên phải.
- Điều chỉnh thanh trượt N Clusters về 3 hoặc 4 để xem kết quả theo thời gian thực.

Tiếp theo, chúng ta sẽ tạo nhiều trang trực quan hóa bằng cách thay đổi các trường dữ liệu và số cụm.
- Price v/s Availability: chúng ta có thể thấy bốn cụm. Dựa trên thông tin này, có thể xây dựng hệ thống gợi ý cho Airbnb hoặc bất kỳ doanh nghiệp khách sạn nào.
- Review v/s Availability: chúng ta chỉ thấy hai cụm lớn dù N Clusters là 3.
- Listings v/s Price: chúng ta có thể thấy các cụm màu đỏ, xanh dương và xanh lá. Màu vàng ở góc bị bao quanh bởi xanh lá và xanh dương.

Tìm hiểu thêm về phân tích và trực quan hóa nâng cao qua khóa học Analyzing Data in Tableau của chúng tôi. Khóa học sẽ giúp bạn hiểu về chuẩn bị dữ liệu, khám phá, phân tích bản đồ, nhóm, tập hợp và tham số.
Nếu bạn thích hướng dẫn phân cụm này, hãy thử chuyển các điểm dữ liệu lên bản đồ. Chỉ cần kéo thả Latitude và Longitude vào kệ Columns và Rows.

Bạn cũng có thể tạo cụm mà không cần TabPy bằng cách làm theo hướng dẫn Cluster Analysis in the Tableau của chúng tôi.
Kết luận
Bằng cách tích hợp TabPy, bạn sẽ mở ra vô vàn khả năng để tự động hóa và cải thiện thiết lập phân tích dữ liệu hiện tại. Chúng ta cũng có thể dùng nó để tích hợp các mô hình học sâu vào bảng điều khiển phân tích, thực hiện các tác vụ thống kê phức tạp và triển khai tích hợp liên tục cùng phát triển liên tục.
Tích hợp TabPy đi kèm một số hạn chế, chẳng hạn như đầu ra đơn. Những hạn chế này chủ yếu ảnh hưởng đến các cá nhân là Nhà khoa học dữ liệu hoặc Kỹ sư Học máy.
Trong bài viết này, chúng ta đã tìm hiểu về TabPy (máy chủ Python cho Tableau) và cách dùng nó để tạo các cụm K Means. Tạo cụm rất quan trọng đối với ngành thương mại điện tử, du lịch và giải trí nhằm hiểu hành vi khách hàng. Chúng ta đã dùng cụm K Means, nhưng bạn có thể dùng các thuật toán khác để có kết quả tốt hơn.
Dưới đây là danh sách các thuật toán phân cụm hàng đầu:
- Affinity Propagation
- Agglomerative Hierarchical Clustering
- BIRCH (Balanced Iterative Reducing and Clustering using Hierarchies)
- DBSCAN (Density-Based Spatial Clustering of Applications with Noise)
- Gaussian Mixture Models (GMM)
- Mean Shift Clustering
Nếu bạn mới bắt đầu với Tableau và muốn học mọi thứ về trực quan hóa dữ liệu và tính toán thống kê, hãy tham gia lộ trình kỹ năng Tableau Fundamentals.
Trong phần thứ hai của loạt hướng dẫn này, chúng tôi khám phá các script Python phức tạp bằng TabPy. Chúng ta sẽ học cách triển khai mô hình dự báo Facebook Prophet trên máy chủ TabPy và tạo trực quan hóa chuỗi thời gian động.