Kết hợp Python và PowerBI: Phân Tích Cảm Xúc Tiếng Việt

Kết hợp Python và PowerBI: Phân Tích Cảm Xúc Tiếng Việt

Kết hợp Python và PowerBI: Phân Tích Cảm Xúc Tiếng Việt

Bạn đã bao giờ nghĩ đến việc biến những bình luận tiếng Việt của khách hàng thành những insight giá trị ngay trên dashboard PowerBI chưa? Hôm nay, mình sẽ hướng dẫn cách kết hợp Python với Power BI, sử dụng mô hình PhoBERT để phân tích cảm xúc một cách chuyên sâu. Từ thiết lập môi trường đến tạo biểu đồ đẹp mắt, mình sẽ dẫn bạn qua từng bước để tạo ra một báo cáo xịn nhất có thể!

1. Tại sao nên kết hợp Python với Power BI?

Không thể phủ nhận PowerBI là một công cụ tuyệt vời để trực quan hóa dữ liệu, nhưng khi kết hợp với Python, sức mạnh của phần mềm càng được gia tăng. Đặc biệt với các tác vụ xử lý ngôn ngữ tự nhiên (NLP), Python mang lại những lợi ích khó cưỡng:

  • Quy trình liền mạch: Tất cả từ dữ liệu thô đến insight đều nằm trong Power BI, không cần chuyển qua lại giữa các công cụ.

  • Tự động cập nhật: Với cấu hình đúng, Power BI có thể chạy lại script Python mỗi khi dữ liệu mới, giữ dashboard luôn “tươi”.

  • Thư viện mạnh mẽ: Bạn có thể dùng các thư viện như transformers (cho PhoBERT) hay pandas ngay trong Power BI.

  • Tùy biến tối đa: Python giúp bạn xử lý những logic phức tạp mà M hay DAX có thể không làm được.

Hôm nay, chúng ta sẽ cùng phân tích cảm xúc từ bình luận tiếng Việt, thêm nhãn Tích cực, Tiêu cực, Trung tính kèm xác suất, và trực quan hóa chúng.

2. Bài toán phân tích cảm xúc bình luận tiếng Việt

Hãy tưởng tượng bạn có một bảng dữ liệu trong Power BI chứa cột `VanBanBinhLuan` với các bình luận tiếng Việt. Mục tiêu là:

  • Đầu ra: Thêm các cột mới với nhãn cảm xúc (Tích cực/Tiêu cực/Trung tính) và xác suất từ PhoBERT.

  • Trực quan hóa: Tạo biểu đồ phân bổ cảm xúc, bảng chi tiết, và một đám mây từ (word cloud) để khám phá từ khóa nổi bật.

Bảng dữ liệu demo ban đầu

Bảng dữ liệu với nhãn cảm xúc

Bây giờ, hãy đi qua từng bước để biến dữ liệu này thành một dashboard ý nghĩa!

3. Quy trình từ thiết lập đến trực quan hóa

Bước 1: Chuẩn bị môi trường Python

Trước tiên, chúng ta cần thiết lập Python để Power BI có thể chạy script:

JAVASCRIPT
# 'dataset' holds the input data for this script
import pandas as pd
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
import os
# cài đặt cấu hình model
MODEL_PATH_OR_NAME = "wonrax/phobert-base-vietnamese-sentiment"
phobert_model_loaded = False
error_msg_phobert = ""
tokenizer = None # Khởi tạo tokenizer và model ở ngoài để có thể truy cập trong hàm
JAVASCRIPT
  conda create -n pbi_nlp_env python
  conda activate pbi_nlp_env
  • Cài thư viện:

JAVASCRIPT
pip install pandas torch transformers matplotlib torch
  • Kết nối Power BI: Trong Power BI Desktop, vào File > Options and settings > Options > Python scripting, ở phần Detected Python home directories chọn Other.

Kết nối Python với PowerBI

Giờ đây, PowerBI đã có thể khai thác sức mạnh của Python trong phân tích.

Bước 2: Phân tích cảm xúc với Python trong Power Query

Giờ là lúc dùng PhoBERT để phân tích cảm xúc. Chúng ta sẽ làm việc trong Power Query Editor:

  • Nạp dữ liệu: Kết nối Power BI với nguồn dữ liệu (ở đây mình sẽ sử dụng Excel) chứa cột `VanBanBinhLuan`.

  • Mở Power Query: Vào Transform Data để vào Power Query Editor.

Giao diện Power Query Editor với dữ liệu demo

  • Chạy script Python: Chọn bảng chứa cột `VanBanBinhLuan`, vào tab Transform, nhấp Run Python script. Power BI sẽ truyền bảng dữ liệu thành một Pandas DataFrame tên mặc định là `dataset`.

  • Dán đoạn code sau vào cửa sổ script (hoặc nếu bạn đã quen với lập trình thì có thể chỉnh sửa theo nhu cầu của mình). Mã này tải PhoBERT, dự đoán cảm xúc, và thêm các cột như `NhanCamXuc_PhoBERT`, `XacSuat_TieuCuc`, `XacSuat_TrungTinh`, `XacSuat_TichCuc`:

JAVASCRIPT
# 'dataset' holds the input data for this script
import pandas as pd
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
import os
# cài đặt cấu hình model
MODEL_PATH_OR_NAME = "wonrax/phobert-base-vietnamese-sentiment"
phobert_model_loaded = False
error_msg_phobert = ""
tokenizer = None # Khởi tạo tokenizer và model ở ngoài để có thể truy cập trong hàm
  • Kết quả: Nhấn OK, bạn sẽ thấy một bảng mới. Lọc đối tượng dataset, mở rộng bảng, thực hiện các thao tác biến đổi dữ liệu thông thường và sẽ có kết quả giống như bảng kết quả ở trên.

Kết quả sau khi áp dụng Python script

Với dữ liệu đã được xử lý giống như kết quả trên, giờ bạn có thể sử dụng các biểu đồ cần thiết để trực quan hóa dữ liệu.

Bước 3: Thêm điểm nhấn với Word Cloud

Để dashboard thêm ấn tượng, hãy tạo một wordcloud (hiển thị các từ với kích thước sẽ tương đương với tần suất xuất hiện của các từ) để làm nổi bật các từ khóa từ dữ liệu giả lập:

  • Tạo Python Visual: Trong chế độ Report, chọn Python Visual từ ngăn Visualizations, kéo `VanBanBinhLuan` vào Values.

    (Lưu ý: hãy chắc chắn bạn đã cài thư viện wordcloud với pip install wordcloud trong môi trường ảo)

JAVASCRIPT
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS
import pandas as pd
if not dataset.empty and 'VanBanBinhLuan' in dataset.columns:
    text_corpus = " ".join(review for review in dataset.VanBanBinhLuan.astype(str) if pd.notna(review))
    if text_corpus.strip():
        vietnamese_stopwords = set(STOPWORDS)
        vietnamese_stopwords.update(["là", "của", "và", "rằng", "thì", "mà"])
        wordcloud_image = WordCloud(
            font_path=None,