Trong thời đại thương mại điện tử phát triển bùng nổ, việc hiểu hành vi khách hàng trở thành yếu tố sống còn cho các doanh nghiệp. Dữ liệu mua sắm online không chỉ phản ánh doanh thu, mà còn thể hiện rõ xu hướng, sở thích và tiềm năng của từng nhóm khách hàng. Với Python, chúng ta hoàn toàn có thể xây dựng một hệ thống phân tích mạnh mẽ để xử lý, trực quan hóa và trích xuất thông tin hữu ích từ những dữ liệu tưởng chừng khô khan.
Bài viết này sẽ hướng dẫn bạn xây dựng một đồ án phân tích khách hàng mua hàng online bằng Python. Chúng ta sẽ sử dụng thư viện pandas, seaborn, matplotlib, và một tập dữ liệu thực tế để trả lời các câu hỏi: Quốc gia nào có doanh thu cao nhất? Sản phẩm nào bán chạy nhất? Khách hàng nào chi tiêu nhiều nhất?
Nếu bạn đã từng thực hành với các bài như Phân tích điểm rớt môn cho sinh viên CNTT, Tạo đồ án học máy phân loại email spam, hoặc Xử lý chuỗi thời gian bằng Prophet của Facebook, thì đây là một bước tiến tiếp theo trong việc áp dụng phân tích dữ liệu thực tế để hỗ trợ ra quyết định trong kinh doanh.
Dataset và mục tiêu phân tích
Dữ liệu được sử dụng trong bài này là Online Retail Dataset, gồm hơn 500,000 giao dịch từ một công ty bán lẻ ở Anh, được công khai trên Kaggle.
📥 Link tải dữ liệu dùng được:
🔗 https://archive.ics.uci.edu/ml/machine-learning-databases/00352/Online%20Retail.xlsx
Bạn có thể tải trực tiếp file .xlsx, sau đó đọc bằng pandas.
Thông tin trong dữ liệu:
-
InvoiceNo: Số hóa đơn -
StockCode: Mã sản phẩm -
Description: Tên sản phẩm -
Quantity: Số lượng -
InvoiceDate: Ngày hóa đơn -
UnitPrice: Giá đơn vị -
CustomerID: Mã khách hàng -
Country: Quốc gia
Mục tiêu phân tích:
-
Thống kê doanh thu theo quốc gia
-
Phân tích sản phẩm bán chạy
-
Tìm khách hàng chi tiêu nhiều nhất
-
Trực quan hóa xu hướng doanh thu theo thời gian
Đọc và xử lý dữ liệu
Trước tiên, ta cần đọc dữ liệu từ file Excel và xử lý các dòng thiếu, định dạng lại ngày tháng và tính tổng doanh thu.
import pandas as pd
# Đọc file Excel từ địa chỉ tải về
df = pd.read_excel("Online Retail.xlsx")
# Xóa dòng bị thiếu thông tin khách hàng
df.dropna(subset=["CustomerID"], inplace=True)
# Thêm cột Doanh thu = Số lượng * Đơn giá
df["Revenue"] = df["Quantity"] * df["UnitPrice"]
# Đổi định dạng thời gian
df["InvoiceDate"] = pd.to_datetime(df["InvoiceDate"])
# Hiển thị thông tin cơ bản
print(df.info())
Hai đoạn trên đảm bảo dữ liệu đã sẵn sàng cho phân tích. Ta loại bỏ các giao dịch không hợp lệ và chuẩn hóa dữ liệu thời gian để phân tích xu hướng sau này.
Phân tích doanh thu theo quốc gia
Đây là một trong những thống kê quan trọng nhất với doanh nghiệp đa quốc gia. Việc biết được nước nào tạo ra doanh thu cao nhất giúp điều chỉnh chiến lược tiếp thị và phân phối.
import matplotlib.pyplot as plt
# Tổng doanh thu theo quốc gia
revenue_country = df.groupby("Country")["Revenue"].sum().sort_values(ascending=False)
# Vẽ biểu đồ
plt.figure(figsize=(12, 6))
revenue_country.head(10).plot(kind="bar", color="skyblue")
plt.title("Top 10 quốc gia có doanh thu cao nhất")
plt.xlabel("Quốc gia")
plt.ylabel("Doanh thu")
plt.tight_layout()
plt.show()
Phân tích sản phẩm bán chạy
Đây là phần giúp doanh nghiệp nhận diện sản phẩm chủ lực để tối ưu tồn kho, định giá và marketing.
# Sản phẩm bán chạy nhất (tính theo số lượng)
top_products = df.groupby("Description")["Quantity"].sum().sort_values(ascending=False)
# Hiển thị Top 10 sản phẩm
print(top_products.head(10))
Nếu bạn muốn phân tích theo doanh thu thay vì số lượng:

