Bỏ qua đến nội dung chính
Phân tích dữ liệu
Cửa sổ notebook nối với ba biểu đồ của ba dự án Data Analyst mẫu: dashboard doanh thu, thời gian giao hàng theo tỉnh và kết quả A/B test

Dự án Data Analyst mẫu cho portfolio (có dữ liệu)

AIDev TeamTham vấn chuyên môn: Nguyễn Việt Chung

Đăng 17 phút đọc2 lượt xem

Mục lục · 24

Mỗi dự án trong data analyst portfolio cần đi đủ năm bước: câu hỏi kinh doanh, làm sạch, phân tích, biểu đồ và kết luận. Bài này làm mẫu ba dự án trên dữ liệu bán hàng tải miễn phí, kèm code pandas 3 đã chạy, lỗi gặp phải và một repo GitHub mẫu để bạn chép cách trình bày.

Một dự án đáng đưa vào data analyst portfolio bắt đầu từ một câu hỏi kinh doanh cụ thể và kết thúc bằng một đề xuất có số liệu đi kèm. Ở giữa là ba việc: làm sạch dữ liệu, phân tích, vẽ biểu đồ hoặc dashboard (một trang gom nhiều biểu đồ). Nhà tuyển dụng xem portfolio để biết bạn làm được trọn vòng đó, nên một notebook vẽ mười biểu đồ đẹp mà không trả lời câu hỏi nào thì chưa đủ.

Để có ví dụ cụ thể, ngày 23/10/2026 mình làm ba dự án mẫu trên cùng một bộ dữ liệu bán hàng công khai của cửa hàng hư cấu Tiệm Mây (khoảng 6.000 đơn hàng, dữ liệu mô phỏng, giấy phép MIT). Cả ba notebook dùng pandas 3, chạy lại từ đầu đến cuối mất 6,5 giây trên MacBook Pro M4 Pro. Mọi ảnh trong bài là output thật của các notebook đó.

Mấy điều cần nắm trước khi đọc tiếp:

  • Mỗi dự án nên trả lời một câu hỏi mà người làm kinh doanh thật sự hỏi, ví dụ "nên hứa giao hàng trong mấy ngày", thay cho đề bài chung chung như "phân tích dữ liệu bán hàng".

  • Phần làm sạch phải in ra số dòng bị sửa ở từng bước. Ở dự án 1, mình bỏ 120 dòng trùng, 60 bản cũ của cùng một đơn và sửa 12 ngày không tồn tại.

  • Kết luận cần có giới hạn đi kèm. Ở dự án 3, nút màu cam tăng tỉ lệ mua rõ rệt trên App, còn trên Website thì dữ liệu chưa đủ để chắc.

  • Trong 41 tin tuyển dụng Data Analyst mà AIDev đọc ngày 18/10/2026, 36 tin nhắc dashboard, 21 tin đòi trình bày kết quả cho người không làm kỹ thuật, nhưng không tin nào nhắc GitHub.

Nhà tuyển dụng muốn thấy gì trong Data Analyst portfolio?

Họ muốn thấy bằng chứng bạn làm được những việc ghi trong tin tuyển dụng. Mình đọc lại nguyên văn 41 tin Data Analyst (ITviec, TopCV, LinkedIn, đọc ngày 18/10/2026, cùng bộ tin của bài Data Analyst cần học gì) để đếm xem các tin nói gì về những thứ một dự án mẫu có thể chứng minh.

Biểu đồ số tin Data Analyst nhắc từng ý: dashboard 36 tin, trình bày kết quả 21 tin, làm sạch dữ liệu 10 tin, dự án thực tế 2 tin, Git 1 tin, GitHub hoặc portfolio hoặc Kaggle 0 tin, trên 41 tin đọc ngày 18/10/2026

Không tin nào trong 41 tin yêu cầu link GitHub hay portfolio cá nhân. Chữ "portfolio" có xuất hiện ở hai tin của công ty tài chính, nhưng theo nghĩa danh mục khoản vay. Chỉ một tin (Junior Data Analyst ở AI+DI) ghi Git trong phần kỹ năng. Theo mình, portfolio vẫn đáng làm vì nó là cách nhanh nhất để người tuyển dụng tin những dòng bạn ghi trong CV, nhất là khi bạn chưa có kinh nghiệm đi làm.

Các tin nói khá rõ họ cần gì ở người phân tích:

  • Trusting Social muốn người làm hỏi lại mỗi yêu cầu phân tích phục vụ quyết định gì, rồi giao kết quả có "so what" rõ ràng, tức là kèm điều nên làm tiếp.

  • Một hộ kinh doanh đồ gia dụng tuyển trên TopCV ghi: kiểm tra kết quả trước khi báo cáo, chủ động hỏi lại khi thấy số liệu bất thường.

  • Flodesk muốn người làm nói thẳng các điểm cần lưu ý của con số, đừng đưa ra một con số gọn gàng rồi im lặng về phần còn lại.

  • Viettel IDC ưu tiên người đã làm trọn một dự án từ đầu đến cuối.

Ba dự án dưới đây nhắm đúng những ý đó. Mỗi dự án có một câu hỏi rõ, phần làm sạch có ghi chép và kết luận có số kèm giới hạn.

Ba dự án Data Analyst mẫu trên dữ liệu Tiệm Mây

Cả ba dự án dùng chung một bộ dữ liệu nên bạn chỉ cần tải một lần. Bảng dưới tóm tắt từng dự án, phần sau đi vào chi tiết.

Dự án

Câu hỏi kinh doanh

Dữ liệu

Kỹ năng thể hiện

Kết luận chính

1. Doanh thu

Doanh thu đến từ đâu, ngày nào cần chuẩn bị hàng?

don_hang_tho.csv (6.180 dòng chưa làm sạch)

làm sạch, groupby, dashboard

6 tháng đầu 2026 tăng 9,7% so với cùng kỳ

2. Giao hàng

Nên hứa giao trong bao lâu cho từng tỉnh?

tiem_may.db (SQLite), thoi_gian_giao.csv

SQL, phân phối lệch, P90 (mốc 90% đơn giao xong)

hứa 3 ngày chỉ giữ được ở 3/8 tỉnh

3. A/B test

Có nên đổi nút "Mua ngay" sang màu cam?

ab_test.csv (30.101 người dùng)

kiểm định, khoảng tin cậy

tỉ lệ mua tăng từ 2,94% lên 3,49%

Tải dữ liệu và cài môi trường

Dữ liệu nằm ở lab Khóa 2 của AIDev, bạn tải trọn bộ trong một file zip. Trang lab ghi rõ đây là dữ liệu mô phỏng, tên người và tên cửa hàng đều hư cấu, nên bạn đưa lên GitHub công khai được. Mình tạo thư mục dự án và môi trường ảo như sau (macOS, Python 3.14.7):

bash
mkdir data-analyst-portfolio && cd data-analyst-portfolio
curl -LO https://lab.aidev.edu.vn/k2/du-lieu.zip && unzip du-lieu.zip
python3 -m venv .venv && source .venv/bin/activate
pip install pandas==3.1.0 matplotlib==3.11.2 scipy==1.18.1 jupyter==1.1.1

Nếu import pandas báo lỗi No module named pandas, bài cài pandas và sửa lỗi No module named pandas có đủ các trường hợp mình đã gặp. Trong zip có file SHA256SUMS; chạy shasum -a 256 -c SHA256SUMS trong thư mục du-lieu để chắc file tải về không hỏng.

Dự án 1: doanh thu của cửa hàng đến từ đâu?

Câu hỏi của chủ cửa hàng: 6 tháng đầu 2026 bán tốt hơn cùng kỳ năm trước không, tiền đến từ kênh và danh mục nào, và ngày nào cần chuẩn bị thêm hàng, thêm người. Dữ liệu là file đơn hàng xuất thẳng từ hệ thống, chưa ai sửa, nên phần lớn công sức nằm ở bước làm sạch.

Làm sạch có ghi chép từng bước

Mình viết một hàm nhỏ ghi() để mỗi bước in ra số dòng bị đổi. Người đọc notebook nhìn vào là biết dữ liệu đã bị can thiệp ở đâu và bao nhiêu. Nếu mới làm sạch dữ liệu lần đầu, bài làm sạch dữ liệu với pandas đi từng bước và in số dòng trước và sau mỗi bước, giống cách ghi chép ở đây.

Ô notebook làm sạch don_hang_tho.csv: bỏ 120 dòng trùng hoàn toàn, bỏ 60 bản cũ của cùng một đơn, 12 ngày không tồn tại, 390 mã sản phẩm sai hoa thường, còn 6.000 đơn

Chỗ đáng ghi lại nhất là 12 ngày không tồn tại như 31/06/2025 hay 31/04/2026. Mình giả định đây là gõ nhầm ngày cuối tháng nên đổi thành ngày 30, và viết giả định đó ngay trong code. Với dữ liệu công ty thật, bạn nên hỏi người quản lý hệ thống thay vì tự đoán.

Hai đơn gần 2 tỉ: lỗi gõ hay đơn thật?

Khi tính doanh thu, hai đơn nổi lên với giá trị gần 2 tỉ đồng, gấp hàng trăm lần đơn bình thường. Xóa cả hai là cách nhanh nhất nhưng sai. Mình so đơn giá với giá niêm yết trong san_pham.csv:

Kết quả so hai đơn gần 2 tỉ với giá niêm yết: DH001651 đơn giá gấp 1.000 lần giá niêm yết là gõ thừa ba số 0, DH004429 mua 273 cái đúng giá là đơn sỉ thật; đối chiếu với bản sạch lệch 0 đơn ở mọi cột

Đơn DH001651 có đơn giá 1.879.000.000 đồng trong khi giá niêm yết là 1.879.000 đồng, tức gõ thừa ba số 0, nên mình sửa về giá niêm yết. Đơn DH004429 mua 273 sản phẩm đúng giá, là đơn sỉ thật, nên giữ lại nhưng tách khỏi phần xu hướng để một đơn không làm lệch biểu đồ cả tháng.

Bộ dữ liệu có sẵn bản đã làm sạch don_hang_sach.csv, nên mình đối chiếu kết quả của mình với bản đó: 6.000 đơn, lệch 0 đơn ở cả bảy cột. Khi làm dự án trên dữ liệu khác, bạn không có bản để so, nhưng vẫn nên tự viết vài phép kiểm như tổng doanh thu trước và sau khi làm sạch, số đơn theo trạng thái.

Ba lỗi mình gặp khi làm sạch

Lỗi đầu tiên đến ngay khi chuyển cột giá sang số. Cột don_gia có ba kiểu viết (619000, 619.000đ, 2.989.000 đ), nên astype(int) dừng ở dòng đầu tiên có chữ "đ":

python
>>> tho["don_gia"].astype(int)
ValueError: invalid literal for int() with base 10: '619.000đ'

Cách sửa là bỏ "đ", dấu chấm và khoảng trắng trước khi đổi kiểu: str.replace(r"[đ\s.]", "", regex=True).

Lỗi thứ hai nằm ở cột ngày, gồm ba kiểu 2025-07-30, 23/07/2025 và 1/1/2025. Mình thử format="mixed" cho pandas tự đoán từng dòng thì gặp ngay ngày không tồn tại:

python
>>> pd.to_datetime(tho["ngay_dat"], format="mixed", dayfirst=True)
ValueError: day 31 must be in range 1..30 for month 6 in year 2025

Lỗi thứ ba nguy hiểm hơn vì không báo gì cả. Với format="mixed", dayfirst=True, pandas đảo ngày và tháng của cả chuỗi kiểu ISO:

python
>>> pd.to_datetime(pd.Series(["2025-07-08", "08/07/2025", "8/7/2025"]),
...                format="mixed", dayfirst=True)
['07/08/2025', '08/07/2025', '08/07/2025']

Ngày 8 tháng 7 viết theo ISO bị đọc thành ngày 7 tháng 8. Tài liệu pandas.to_datetime có ghi dayfirst không nghiêm ngặt, nhưng đọc lướt thì rất dễ bỏ qua. Mình chuyển sang cách chắc hơn: đọc riêng từng kiểu ngày bằng format cố định với errors="coerce" (dòng nào không khớp kiểu đó thì để trống), rồi ghép lại.

Terminal ghi lại ba lỗi khi làm sạch: astype(int) gặp chuỗi 619.000đ, format mixed gặp ngày 31 tháng 6, và mixed cộng dayfirst đảo 2025-07-08 thành 07/08/2025

Dashboard và kết luận

Sau khi làm sạch, mình chỉ giữ đơn "Hoàn tất" và bỏ đơn sỉ, rồi gom bốn biểu đồ vào một hình. Tiêu đề của hình là kết luận, không chỉ là tên biểu đồ.

Dashboard Tiệm Mây 01/2025 đến 06/2026 gồm bốn ô: doanh thu theo tháng, theo kênh với Website cao nhất, theo danh mục với Điện tử cao nhất, và số đơn trung bình mỗi ngày 8,6 ngày thường, 16,9 trước Tết, 22,2 ngày 11 và 12 của tháng 11 và 12

Kết luận ở cuối notebook, kèm số lấy từ các ô phân tích:

  • Doanh thu 6 tháng đầu 2026 là 4.765 triệu đồng, tăng 9,7% so với 4.344 triệu cùng kỳ 2025, chủ yếu vì số đơn tăng từ 1.694 lên 1.873.

  • Website mang về 32,3% doanh thu. Điện tử chiếm 53,7% doanh thu dù số đơn ngang các danh mục khác.

  • Ngày thường có trung bình 8,6 đơn. Trong tháng trước Tết, con số này lên 16,9 đơn mỗi ngày; các ngày 11 và 12 của tháng 11 và tháng 12 lên 22,2 đơn. Đây là những ngày cần chuẩn bị hàng và người trực.

Phần giới hạn trong notebook ghi rõ doanh thu chưa trừ mã giảm giá và phí vận chuyển. Bạn cũng nên lưu ý nhóm ngày 11 và 12 chỉ có 4 ngày nên con số 22,2 dễ dao động. Nếu dữ liệu bán hàng của bạn đang nằm trong nhiều file Excel, bài Python cho Excel gộp 12 file Excel bán hàng của chính Tiệm Mây thành một báo cáo.

Dự án 2: nên hứa giao hàng trong bao lâu cho từng tỉnh?

Tiệm Mây muốn ghi thời gian giao dự kiến lên trang sản phẩm. Câu hỏi là hứa "giao trong 3 ngày" cho cả nước có giữ được không. Dự án này dùng SQL, kỹ năng được nhắc trong 38/41 tin Data Analyst, để lấy đơn hàng kèm tỉnh của khách từ file SQLite:

python
don = pd.read_sql("""
    SELECT d.ma_don, d.ngay_dat, d.ma_kh, k.tinh, d.kenh
    FROM don_hang AS d
    LEFT JOIN khach_hang AS k ON k.ma_kh = d.ma_kh
    WHERE d.trang_thai = 'Hoàn tất'
""", con)

Bước kiểm tra cho ra 5.129 đơn hoàn tất, trong đó 20 đơn có mã khách không nằm trong bảng khách hàng (đơn "mồ côi"), và 20 đơn này cũng không có thời gian giao. Mình ghi con số này vào notebook rồi loại 20 đơn đó ra, để người đọc biết vì sao 5.129 đơn chỉ còn 5.109.

Vì sao dùng P90 thay cho trung bình?

Thời gian giao lệch phải: đa số đơn đến nhanh, một ít đơn mất tới 221,8 giờ. Trung bình (38,6 giờ) vì thế bị vài đơn rất lâu kéo lên. Khi hứa với khách, con số có ích hơn là P90, nghĩa là 90% đơn giao xong trong khoảng thời gian đó.

Biểu đồ thời gian giao theo tỉnh: P90 của TP. Hồ Chí Minh 32 giờ, Cần Thơ 59 giờ, Khánh Hòa 68 giờ nằm dưới vạch 3 ngày; Đà Nẵng 74, Huế 83, Quảng Ninh 92, Hà Nội 93, Hải Phòng 97 giờ vượt 3 ngày

Trên cả nước, 12,5% đơn mất hơn 3 ngày. Mình làm tròn P90 lên số ngày để có lời hứa cho từng nơi:

Tỉnh, thành

Số đơn

Trung vị (giờ)

P90 (giờ)

Đơn quá 3 ngày

Nên hứa

TP. Hồ Chí Minh

1.918

16,8

32,1

1,9%

2 ngày

Cần Thơ

303

29,1

59,0

4,3%

3 ngày

Khánh Hòa

173

34,1

68,3

9,2%

3 ngày

Đà Nẵng

433

40,4

74,5

11,8%

4 ngày

Huế

220

45,7

83,4

18,6%

4 ngày

Quảng Ninh

189

52,1

91,6

28,6%

4 ngày

Hà Nội

1.477

48,2

92,5

22,0%

4 ngày

Hải Phòng

396

53,2

97,2

25,5%

5 ngày

"Không thấy liên hệ" cũng là một kết luận

Mình hỏi thêm: khách hay bị giao lâu có mua ít đi không? Với 1.186 khách, tương quan Spearman (thước đo từ -1 đến 1 cho biết hai đại lượng có cùng tăng giảm không) giữa số đơn và thời gian giao trung vị của từng khách là 0,003, gần như bằng 0. Chia khách thành bốn nhóm theo tốc độ giao, số đơn trung bình mỗi khách dao động từ 4,19 đến 4,53, không theo chiều nào.

Mình giữ phần này trong dự án dù kết quả "không có gì". Theo mình, người tuyển dụng sẽ tin bạn hơn khi thấy bạn dám báo một giả thuyết không đúng, thay vì chỉ giữ lại biểu đồ ủng hộ câu chuyện bạn muốn kể. Giới hạn ghi kèm: dữ liệu không có đơn bị hủy vì giao chậm, nên chưa đo được khách bỏ đơn.

Dự án 3: có nên đổi màu nút "Mua ngay"?

Tiệm Mây chia ngẫu nhiên người vào trang sản phẩm thành hai nhóm trong 28 ngày từ 02/03/2026: nhóm A thấy nút màu xám, nhóm B thấy nút màu cam. Cách thử này gọi là A/B test. Notebook mở đầu bằng câu hỏi kinh doanh và mô tả cột dữ liệu, trước cả dòng code đầu tiên:

Phần đầu notebook dự án 3: tiêu đề câu hỏi đổi nút Mua ngay sang màu cam, đoạn mô tả câu hỏi kinh doanh và dữ liệu, ô đọc ab_test.csv ra 30.101 dòng và 6 cột

Kiểm tra thí nghiệm trước khi đọc kết quả

Trước khi so tỉ lệ mua, mình kiểm ba điều: không ai bị đếm hai lần, hai nhóm được chia đều, người không mua thì giá trị đơn bằng 0. Nhóm A có 15.019 người, nhóm B 15.082 người. Mình kiểm định nhị thức để xem chênh lệch này có bất thường không. Kết quả p = 0,721 (p là xác suất gặp chênh lệch cỡ này nếu chỉ do may rủi), tức chênh lệch số người giữa hai nhóm nằm trong mức may rủi bình thường của cách chia 50/50 (scipy.stats.binomtest). Nếu bước này cho p rất nhỏ, cách chia nhóm có vấn đề và kết quả phía sau không đáng tin.

Output dự án 3: không trùng user_id, 28 ngày, A 15.019 và B 15.082 người, tỉ lệ mua A 2,94% và B 3,49%, chênh 0,55 điểm phần trăm với p = 0,0067; theo kênh App tăng 1,30 lần với p = 0,0055, Website tăng 1,10 lần với p = 0,315

Kết quả: nên đổi, nhưng nói rõ phần chưa chắc

Tỉ lệ mua của nhóm A là 2,94%, nhóm B là 3,49%, gấp 1,19 lần. Kiểm định hai tỉ lệ cho p = 0,0067, khoảng tin cậy 95% của mức chênh (khoảng mà mức chênh thật gần như chắc chắn nằm trong) từ 0,15 đến 0,95 điểm phần trăm.

Biểu đồ cột tỉ lệ mua: nút xám 2,94%, nút cam 3,49%, kèm vạch khoảng tin cậy 95%, 15.019 người thấy A và 15.082 người thấy B từ 02 đến 29/03/2026

Tách theo kênh thì câu chuyện bớt gọn. Trên App, tỉ lệ mua tăng 1,30 lần (p = 0,0055). Trên Website, mức tăng chỉ 1,10 lần và p = 0,315, tức chưa đủ dữ liệu để nói nút cam có tác dụng ở đây. Giá trị đơn của người mua ở hai nhóm gần như nhau (trung vị 897.500 và 850.000 đồng, p = 0,87), nên đơn tăng thêm cũng là doanh thu tăng thêm.

Đề xuất cuối notebook: đổi sang nút cam, ước tính thêm khoảng 178 đơn mỗi tháng (từ 49 đến 306 đơn theo khoảng tin cậy), và tiếp tục theo dõi riêng Website. Báo một khoảng thay vì một con số giúp người ra quyết định biết mức rủi ro.

Trình bày Data Analyst portfolio trên GitHub và trong CV thế nào?

Mình đặt ba notebook trong một repo, kèm requirements.txt và giấy phép MIT; dữ liệu để ngoài repo và chỉ ghi chỗ tải. Bạn có thể xem và chép nguyên repo mẫu ở github.com/aidevedu/data-analyst-portfolio. Trang README là thứ người tuyển dụng đọc đầu tiên, nên mình viết nó như một bản tóm tắt cho người không mở notebook. Dưới đây là phần đầu README, sau tiêu đề; phía sau còn các mục "Chạy lại" (lệnh cài, chỗ tải dữ liệu), "Dữ liệu", "Giới hạn" và "Giấy phép":

markdown
Ba dự án phân tích trên dữ liệu một cửa hàng online (mô phỏng, 6.000 đơn, 01/2025–06/2026).
Mỗi dự án bắt đầu từ một câu hỏi kinh doanh và kết thúc bằng một đề xuất có số liệu.

| Dự án | Câu hỏi | Kết quả chính | Kỹ năng |
|---|---|---|---|
| Doanh thu | Doanh thu đến từ đâu, ngày nào cao điểm? | 6 tháng đầu 2026 tăng 9,7% so với cùng kỳ | làm sạch dữ liệu bẩn, groupby, dashboard |
| Giao hàng | Nên hứa giao trong bao lâu cho từng tỉnh? | Hứa 3 ngày chỉ giữ được ở 3/8 tỉnh | SQL (SQLite), phân phối lệch, P90 |
| A/B test | Có nên đổi nút "Mua ngay" sang màu cam? | Tỉ lệ mua 2,94% → 3,49% (p = 0,007) | kiểm định hai tỉ lệ, khoảng tin cậy |

![Dashboard doanh thu](hinh/01-dashboard.png)

Trước khi đưa lên, mình chạy lại cả ba notebook từ đầu bằng một lệnh. Notebook chạy lỗi giữa chừng trên máy người xem thì phần kết quả phía sau khó được tin.

Terminal chạy jupyter nbconvert execute cho ba notebook, ghi lại từng file, tổng 6,495 giây; Python 3.14.7, pandas 3.1.0, matplotlib 3.11.2, scipy 1.18.1

Vài điều mình rút ra khi dựng repo này:

  • Đặt tiêu đề biểu đồ là kết luận ("Hứa 3 ngày chỉ giữ được ở TP. Hồ Chí Minh, Cần Thơ, Khánh Hòa"), đừng chỉ ghi tên trục.

  • Ghi phiên bản thư viện vào requirements.txt. Người chạy lại bằng bản pandas khác có thể gặp lỗi hoặc ra số khác, nên ghi rõ bản bạn đã dùng.

  • Trong CV, mỗi dự án một dòng theo mẫu "câu hỏi, cách làm, kết quả có số", kèm link repo.

  • Vẫn đưa dự án lên GitHub, nhưng đừng trông cậy riêng vào nó vì 0/41 tin hỏi GitHub. Theo mình, chỗ dự án được nghe kỹ nhất là buổi phỏng vấn, khi bạn kể lại nó trong vài phút.

Khi nào không nên dùng nguyên ba dự án này?

Khi bạn ứng tuyển vào một ngành có dữ liệu riêng như ngân hàng, logistics hay game. Dữ liệu Tiệm Mây là mô phỏng và được dùng trong sách, khóa học của AIDev, nên người tuyển dụng từng gặp bộ này sẽ nhận ra. Hãy dùng ba dự án làm khuôn: giữ cách đặt câu hỏi, cách ghi chép làm sạch và cách viết kết luận, rồi thay dữ liệu bằng một bộ gần ngành bạn ứng tuyển. Mình chưa thử khuôn này trên dữ liệu công khai của cơ quan nhà nước nên không dám nói nó vừa với mọi bộ.

Câu hỏi thường gặp

Người mới nên có bao nhiêu dự án trong portfolio?

Theo mình, hai đến ba dự án làm kỹ có ích hơn mười dự án làm vội. Mỗi dự án nên thể hiện một nhóm kỹ năng khác nhau. Ba dự án ở trên lần lượt chứng minh làm sạch và dashboard, SQL và đọc phân phối, kiểm định thống kê.

Lấy dữ liệu thật cho dự án ở đâu?

Bộ Tiệm Mây ở trên phù hợp để luyện vì có lỗi cài sẵn và có bản sạch để tự kiểm. Khi muốn dữ liệu thật, bạn có thể xem dữ liệu của Cục Thống kê, Kaggle hoặc tự thu thập từ một trang web, và đọc kỹ giấy phép trước khi đăng lại.

Dự án Data Analyst nên làm bằng Python hay Power BI?

Tùy vị trí. Trong 41 tin mình đọc, công cụ BI (như Power BI, Tableau) có ở 33 tin, Python ở 29 tin. Nếu chỉ kịp làm bằng một công cụ, Python với pandas giúp bạn ghi lại từng bước làm sạch để người khác kiểm, còn Power BI giúp dựng dashboard tương tác. Bài Excel, Power BI hay Python cho phân tích dữ liệu chạy thật cùng một câu hỏi trên Excel, Power BI và Python, có ảnh chụp từng công cụ. Bài Data Analyst, Data Scientist và AI Engineer khác nhau ở đâu có số liệu kỹ năng của từng nghề.

Có cần dashboard tương tác không?

Không bắt buộc. Một hình tĩnh gồm vài biểu đồ có tiêu đề là kết luận đã đủ để thể hiện bạn biết chọn biểu đồ. Nếu tin tuyển dụng ghi rõ Power BI hay Tableau, hãy làm thêm một bản dashboard bằng đúng công cụ đó.

Đọc tiếp

Ba dự án trong bài dựng trên cùng bộ dữ liệu với ebook Phân tích dữ liệu với Python. Sách viết cho pandas 3, có 89 bài tập tự chấm và một dự án EDA (phân tích khám phá dữ liệu) làm trọn từ đầu đến cuối. Nếu muốn có người hướng dẫn và chấm bài, Khóa 2 Phân tích dữ liệu với Python có một project báo cáo EDA được chấm theo rubric và đưa lên GitHub. Khóa này cũng là chặng thứ hai của lộ trình AI Engineer từ số 0.

Ba notebook chạy ngày 23/10/2026 trên MacBook Pro M4 Pro, macOS 27.0.1, Python 3.14.7, pandas 3.1.0, matplotlib 3.11.2, scipy 1.18.1. Dữ liệu Tiệm Mây là mô phỏng, tải ở lab.aidev.edu.vn/k2. 41 tin tuyển dụng Data Analyst do AIDev đọc ngày 18/10/2026 trên ITviec, TopCV, LinkedIn.

Tham vấn chuyên môn

Nguyễn Việt Chung

Nhà sáng lập AIDev và VietPlatform · Thạc sĩ AI MSE

  • Tốt nghiệp thủ khoa xuất sắc Thạc sĩ AI MSE.
  • Đồng sáng lập, CTO E-University, SVOnline: số hóa 10+ đại học, 40.000+ sinh viên.
  • Xây hệ thống AI cho doanh nghiệp tại VietPlatform.
Biên soạn: AIDev Team · Rà soát · Quy trình biên tập