zalo-icon
facebook-icon
phone-icon
Python cho người mới bắt đầu vào lĩnh lực Data & AI

Đơn vị biên soạn: TechData.AI
Đối tượng: Người chưa từng học lập trình, sinh viên và người mới bắt đầu tìm hiểu lĩnh vực Data
Định hướng nghề nghiệp: Data Analyst, Business Intelligence Analyst, Data Engineer, Analytics Engineer và Data Scientist
Phương pháp: Học kiến thức nền tảng kết hợp thực hành trên dữ liệu
Phiên bản: 2026
Thời lượng đề xuất:

Giáo trình Python cho người mới bước vào lĩnh vực Data

MỤC LỤC

  1. Python là gì?
  2. Lĩnh vực Data là gì?
  3. Vì sao người làm Data cần học Python?
  4. Chuẩn bị môi trường học tập
  5. Chương trình Python đầu tiên
  6. Biến và cách lưu dữ liệu
  7. Các kiểu dữ liệu cơ bản
  8. Nhập và xuất dữ liệu
  9. Các phép toán trong Python
  10. Câu lệnh điều kiện
  11. Vòng lặp
  12. Làm việc với chuỗi
  13. List
  14. Tuple, Set và Dictionary
  15. Hàm
  16. Xử lý lỗi
  17. Đọc và ghi tệp dữ liệu
  18. Làm quen với CSV
  19. Làm quen với Pandas
  20. Khám phá dữ liệu với Pandas
  21. Làm sạch dữ liệu
  22. Lọc, sắp xếp và tổng hợp dữ liệu
  23. Trực quan hóa dữ liệu
  24. Dự án phân tích dữ liệu bán hàng
  25. Những lỗi người mới thường gặp
  26. Lộ trình học Python cho người làm Data
  27. Bài tập tổng hợp
  28. Kết luận
Python là gì và các ứng dụng phổ biến

1. PYTHON LÀ GÌ?

Python là một ngôn ngữ lập trình được sử dụng để hướng dẫn máy tính thực hiện công việc.

Máy tính có khả năng xử lý dữ liệu rất nhanh, nhưng máy tính không tự biết chúng ta muốn làm gì. Muốn máy tính tính tổng doanh thu, tìm sản phẩm bán chạy nhất hoặc kiểm tra dữ liệu bị thiếu, chúng ta phải viết các câu lệnh cụ thể.

Python được Guido van Rossum tạo ra và công bố lần đầu vào năm 1991. Hiện nay, Python là một trong những ngôn ngữ lập trình phổ biến nhất thế giới.

Python được sử dụng trong nhiều lĩnh vực:

  1. Phân tích dữ liệu.
  2. Kỹ thuật dữ liệu.
  3. Trí tuệ nhân tạo.
  4. Học máy.
  5. Phát triển website.
  6. Tự động hóa công việc.
  7. Xây dựng phần mềm.
  8. Nghiên cứu khoa học.
  9. Xử lý hình ảnh.
  10. Giáo dục lập trình.

Một lý do khiến Python phù hợp với người mới là cách viết tương đối dễ đọc.

Ví dụ, để hiển thị một lời chào, chúng ta viết:

print("Xin chào Python")

Kết quả:

Xin chào Python

Từ print có nghĩa là in hoặc hiển thị. Nhìn vào câu lệnh, người mới cũng có thể đoán được chương trình đang làm gì.

1.1. Python có khó không?

Python không quá khó nếu người học đi đúng thứ tự.

Người mới thường gặp khó khăn khi cố học quá nhiều nội dung cùng lúc. Có người vừa học biến đã muốn làm trí tuệ nhân tạo. Có người chưa hiểu vòng lặp đã muốn xây dựng một hệ thống Data Pipeline.

Cách học phù hợp là bắt đầu từ những phần nhỏ:

  1. Hiển thị dữ liệu.
  2. Tạo biến.
  3. Thực hiện phép tính.
  4. Kiểm tra điều kiện.
  5. Lặp lại công việc.
  6. Lưu nhiều giá trị.
  7. Viết hàm.
  8. Đọc tệp dữ liệu.
  9. Làm sạch dữ liệu.
  10. Phân tích dữ liệu.

Khi hiểu từng phần, người học có thể ghép chúng lại để giải quyết một bài toán lớn hơn.

1.2. Học Python có cần giỏi toán không?

Người mới học Python chưa cần giỏi toán.

Trong giai đoạn đầu, chúng ta chỉ cần hiểu những phép tính cơ bản như cộng, trừ, nhân, chia, tính trung bình và so sánh các con số.

Ví dụ, muốn tính doanh thu, chúng ta lấy số lượng nhân với đơn giá:

so_luong = 5
don_gia = 120000
doanh_thu = so_luong * don_gia

print(doanh_thu)

Kết quả:

600000

Khi học Data Science hoặc Machine Learning chuyên sâu, kiến thức toán học sẽ quan trọng hơn. Tuy nhiên, người mới không nên chờ đến khi giỏi toán mới bắt đầu học Python.

Quy trình và nghề nghiệp trong lĩnh vực Data

2. LĨNH VỰC DATA LÀ GÌ?

Data có nghĩa là dữ liệu.

Dữ liệu có thể xuất hiện ở khắp nơi trong cuộc sống và hoạt động kinh doanh.

Ví dụ:

  1. Điểm của học sinh.
  2. Danh sách khách hàng.
  3. Đơn hàng trên website.
  4. Lịch sử giao dịch ngân hàng.
  5. Số lượt xem video.
  6. Thông tin sản phẩm.
  7. Dữ liệu cảm biến.
  8. Lịch sử khám bệnh.
  9. Thông tin vận chuyển.
  10. Nội dung người dùng đăng trên mạng xã hội.

Một dòng dữ liệu bán hàng có thể chứa:

Mã đơn hàng: DH001
Ngày mua: 15/09/2026
Khách hàng: Nguyễn Văn An
Sản phẩm: Bàn phím
Số lượng: 2
Đơn giá: 500000
Thành tiền: 1000000

Nếu doanh nghiệp chỉ có vài đơn hàng, con người có thể xem từng dòng. Nhưng nếu doanh nghiệp có hàng triệu đơn hàng, chúng ta cần công cụ để lưu trữ, xử lý và phân tích.

Lĩnh vực Data tập trung vào việc thu thập, lưu trữ, xử lý, phân tích và sử dụng dữ liệu để giải quyết vấn đề.

2.1. Một bài toán Data thường có những bước nào?

Một bài toán Data cơ bản thường gồm các bước sau:

  1. Xác định câu hỏi cần trả lời.
  2. Thu thập dữ liệu.
  3. Kiểm tra dữ liệu.
  4. Làm sạch dữ liệu.
  5. Biến đổi dữ liệu.
  6. Phân tích dữ liệu.
  7. Trình bày kết quả.
  8. Đưa ra nhận xét hoặc đề xuất.
  9. Theo dõi kết quả sau khi áp dụng.

Ví dụ, một cửa hàng muốn biết sản phẩm nào bán tốt nhất.

Câu hỏi kinh doanh là:

Sản phẩm nào tạo ra doanh thu cao nhất trong tháng?

Để trả lời, người làm Data cần:

  1. Lấy dữ liệu đơn hàng trong tháng.
  2. Kiểm tra các đơn hàng bị hủy.
  3. Kiểm tra giá bán và số lượng.
  4. Tính doanh thu của từng dòng.
  5. Nhóm dữ liệu theo sản phẩm.
  6. Tính tổng doanh thu của mỗi sản phẩm.
  7. Sắp xếp từ cao xuống thấp.
  8. Trình bày kết quả bằng bảng hoặc biểu đồ.

Python có thể hỗ trợ hầu hết các công việc này.

2.2. Các công việc phổ biến trong lĩnh vực Data

Data Analyst

Data Analyst tập trung vào việc phân tích dữ liệu và trả lời câu hỏi kinh doanh.

Công việc thường gặp:

  1. Viết SQL để lấy dữ liệu.
  2. Làm sạch dữ liệu.
  3. Tính toán các chỉ số.
  4. Xây dựng báo cáo.
  5. Trực quan hóa dữ liệu.
  6. Giải thích kết quả cho doanh nghiệp.

Business Intelligence Analyst

Business Intelligence Analyst thường tập trung vào báo cáo quản trị, hệ thống chỉ số và Dashboard.

Các công cụ thường dùng:

  1. SQL.
  2. Power BI.
  3. Tableau.
  4. Excel.
  5. Python.

Data Engineer

Data Engineer xây dựng hệ thống đưa dữ liệu từ nguồn về kho dữ liệu.

Công việc thường gặp:

  1. Thu thập dữ liệu từ nhiều hệ thống.
  2. Xây dựng Data Pipeline.
  3. Làm sạch và biến đổi dữ liệu.
  4. Đưa dữ liệu vào Data Warehouse.
  5. Theo dõi chất lượng dữ liệu.
  6. Tối ưu tốc độ xử lý.
  7. Bảo đảm hệ thống hoạt động ổn định.

Analytics Engineer

Analytics Engineer nằm giữa Data Analyst và Data Engineer. Công việc tập trung vào việc biến dữ liệu thô thành các bảng dữ liệu rõ ràng, đáng tin cậy và sẵn sàng cho việc phân tích.

Data Scientist

Data Scientist sử dụng dữ liệu, thống kê và Machine Learning để dự báo hoặc tìm ra các quy luật.

Ví dụ:

  1. Dự báo doanh thu.
  2. Dự đoán khách hàng sắp rời bỏ.
  3. Phát hiện giao dịch bất thường.
  4. Đề xuất sản phẩm.
  5. Phân loại hình ảnh.
  6. Phân tích nội dung văn bản.

Người mới chưa cần chọn ngay một nghề cụ thể. Kiến thức Python cơ bản trong giáo trình này có thể được sử dụng cho nhiều vị trí khác nhau.

Vì sao người làm Data cần học Python

3. VÌ SAO NGƯỜI LÀM DATA CẦN HỌC PYTHON?

Python không phải công cụ duy nhất trong lĩnh vực Data, nhưng là một công cụ rất quan trọng.

3.1. Python giúp xử lý nhiều dữ liệu

Excel phù hợp với những bảng dữ liệu nhỏ và các công việc thông thường. Khi dữ liệu lớn hơn hoặc công việc cần được lặp lại thường xuyên, Python trở nên hữu ích.

Ví dụ, mỗi ngày nhân viên phải:

  1. Mở 20 tệp Excel.
  2. Ghép dữ liệu.
  3. Xóa các dòng trùng.
  4. Chuẩn hóa tên tỉnh.
  5. Tính doanh thu.
  6. Xuất báo cáo mới.

Nếu làm bằng tay, công việc có thể mất vài giờ. Với Python, quy trình có thể được viết thành chương trình và chạy lại mỗi ngày.

3.2. Python giúp tự động hóa

Một chương trình Python có thể:

  1. Đọc dữ liệu từ tệp.
  2. Lấy dữ liệu từ API.
  3. Kết nối cơ sở dữ liệu.
  4. Kiểm tra dữ liệu.
  5. Gửi cảnh báo.
  6. Tạo báo cáo.
  7. Xuất kết quả.
  8. Chạy theo lịch.

Tự động hóa giúp giảm công việc lặp lại và hạn chế lỗi do con người nhập sai.

3.3. Python có nhiều thư viện Data

Thư viện là tập hợp các công cụ đã được lập trình sẵn.

Một số thư viện phổ biến:

  1. Pandas dùng để xử lý dữ liệu dạng bảng.
  2. NumPy dùng để tính toán với mảng số.
  3. Matplotlib dùng để vẽ biểu đồ.
  4. Seaborn dùng để trực quan hóa dữ liệu.
  5. Scikit-learn dùng cho Machine Learning.
  6. PySpark dùng để xử lý dữ liệu phân tán.
  7. SQLAlchemy dùng để làm việc với cơ sở dữ liệu.
  8. Requests dùng để lấy dữ liệu từ API.

Trong giáo trình nhập môn này, chúng ta tập trung vào Python cơ bản, Pandas và Matplotlib.

Môi trường học Python với Colab và máy tính

4. CHUẨN BỊ MÔI TRƯỜNG HỌC TẬP

Người mới có thể chọn Google Colab hoặc cài Python trên máy tính.

4.1. Sử dụng Google Colab

Google Colab hoạt động trên trình duyệt. Người học không cần cài đặt Python.

Các bước cơ bản:

  1. Mở Google Colab.
  2. Đăng nhập tài khoản Google.
  3. Tạo Notebook mới.
  4. Nhập mã vào một ô lệnh.
  5. Nhấn nút chạy.
  6. Xem kết quả ngay bên dưới.

Google Colab phù hợp với người mới vì:

  1. Không cần cấu hình phức tạp.
  2. Có sẵn nhiều thư viện Data.
  3. Có thể lưu bài trên Google Drive.
  4. Có thể học trên nhiều máy tính.
  5. Dễ chia sẻ Notebook.

4.2. Cài Python trên máy tính

Nếu muốn học lâu dài, người học có thể cài:

  1. Python 3.
  2. Visual Studio Code.
  3. Tiện ích Python cho Visual Studio Code.

Tệp Python có phần mở rộng .py.

Ví dụ:

phan_tich_ban_hang.py
lam_sach_du_lieu.py
bao_cao_doanh_thu.py

Tên tệp nên viết bằng chữ thường, không dấu và không có khoảng trắng.

4.3. Notebook và tệp Python khác nhau thế nào?

Notebook phù hợp với:

  1. Học tập.
  2. Thử nghiệm.
  3. Phân tích dữ liệu.
  4. Vẽ biểu đồ.
  5. Giải thích từng bước.

Tệp Python phù hợp với:

  1. Chương trình cần chạy nhiều lần.
  2. Chương trình tự động hóa.
  3. Data Pipeline.
  4. Dự án có nhiều thành phần.
  5. Chương trình triển khai thực tế.

Người mới bước vào Data nên bắt đầu bằng Notebook. Khi đã hiểu rõ hơn, chúng ta có thể chuyển sang viết tệp Python.

Chương trình Python đầu tiên

5. CHƯƠNG TRÌNH PYTHON ĐẦU TIÊN

Hãy bắt đầu bằng câu lệnh:

print("Xin chào thế giới Data")

Kết quả:

Xin chào thế giới Data

Hàm print() dùng để hiển thị dữ liệu ra màn hình.

Chúng ta có thể in nhiều nội dung:

print("Khóa học Python cho người mới")
print("Định hướng: Data")
print("Đơn vị biên soạn: TechData.AI")

5.1. In số và phép tính

print(100)
print(50 + 20)
print(10 * 5)
print(1000 / 4)

Kết quả:

100
70
50
250.0

5.2. Ghi chú trong chương trình

Ghi chú bắt đầu bằng dấu #.

# Tính doanh thu của một đơn hàng
print(5 * 120000)

Python không thực hiện phần ghi chú. Ghi chú dùng để giải thích mục đích của đoạn mã.

Một ghi chú tốt nên giải thích lý do hoặc quy tắc nghiệp vụ.

# Đơn hàng bị hủy không được tính vào doanh thu
trang_thai_hop_le = "Hoàn thành"
Biến và các kiểu dữ liệu cơ bản trong Python

6. BIẾN VÀ CÁCH LƯU DỮ LIỆU

Biến là một cái tên dùng để lưu dữ liệu trong chương trình.

Có thể hình dung biến như một chiếc hộp có dán nhãn.

san_pham = "Bàn phím"
so_luong = 2
don_gia = 500000

Trong ví dụ trên:

  1. san_pham lưu tên sản phẩm.
  2. so_luong lưu số lượng bán.
  3. don_gia lưu giá bán của một sản phẩm.

Từ các biến này, chúng ta tính doanh thu:

doanh_thu = so_luong * don_gia
print(doanh_thu)

Kết quả:

1000000

6.1. Giá trị của biến có thể thay đổi

so_luong = 2
print(so_luong)

so_luong = 5
print(so_luong)

Kết quả:

2
5

Giá trị cũ được thay bằng giá trị mới.

6.2. Quy tắc đặt tên biến

Tên biến hợp lệ:

ten_khach_hang
tong_doanh_thu
so_luong_don_hang
ngay_dat_hang
trang_thai_don_hang

Tên biến không được bắt đầu bằng số.

Ví dụ sai:

2026_doanh_thu = 5000000

Cách viết đúng:

doanh_thu_2026 = 5000000

Tên biến không được chứa khoảng trắng.

Ví dụ sai:

tong doanh thu = 5000000

Cách viết đúng:

tong_doanh_thu = 5000000

6.3. Đặt tên biến theo ý nghĩa dữ liệu

Ví dụ chưa tốt:

a = 5
b = 120000
c = a * b

Ví dụ rõ ràng hơn:

so_luong = 5
don_gia = 120000
doanh_thu = so_luong * don_gia

Trong công việc Data, tên biến rõ ràng rất quan trọng vì một chương trình có thể xử lý hàng chục hoặc hàng trăm trường dữ liệu.

7. CÁC KIỂU DỮ LIỆU CƠ BẢN

Bốn kiểu dữ liệu cơ bản trong Python là:

  1. str dùng cho văn bản.
  2. int dùng cho số nguyên.
  3. float dùng cho số thập phân.
  4. bool dùng cho giá trị đúng hoặc sai.

7.1. Chuỗi ký tự

ten_khach_hang = "Nguyễn Văn An"
ma_don_hang = "DH001"
tinh_thanh = "Hồ Chí Minh"

Mã đơn hàng có chứa số nhưng vẫn nên được lưu dưới dạng chuỗi vì chúng ta không dùng mã đơn hàng để tính toán.

7.2. Số nguyên

so_luong = 10
so_don_hang = 250
nam = 2026

7.3. Số thập phân

don_gia = 125000.5
ty_le_giam_gia = 0.1
diem_danh_gia = 4.8

7.4. Giá trị đúng hoặc sai

da_thanh_toan = True
da_huy = False

7.5. Kiểm tra kiểu dữ liệu

ma_don_hang = "DH001"
so_luong = 5
don_gia = 120000.5
da_thanh_toan = True

print(type(ma_don_hang))
print(type(so_luong))
print(type(don_gia))
print(type(da_thanh_toan))

7.6. Chuyển đổi kiểu dữ liệu

Dữ liệu lấy từ tệp hoặc bàn phím có thể không đúng kiểu mong muốn.

so_luong_dang_chu = "10"
so_luong_dang_so = int(so_luong_dang_chu)

print(so_luong_dang_so * 2)

Kết quả:

20

Các hàm chuyển đổi thường dùng:

int("100")
float("8.5")
str(2026)
bool(1)

Trong thực tế, người làm Data thường gặp trường hợp một cột số lại được lưu dưới dạng văn bản. Nếu không chuyển đổi, việc tính tổng có thể cho kết quả sai hoặc gây lỗi.

Nhập xuất dữ liệu và phép toán Python

8. NHẬP VÀ XUẤT DỮ LIỆU

Hàm input() dùng để nhận dữ liệu từ bàn phím.

ten_khach_hang = input("Nhập tên khách hàng: ")
print("Khách hàng:", ten_khach_hang)

Dữ liệu nhận từ input() luôn có kiểu chuỗi.

Muốn nhập số lượng, chúng ta cần chuyển kiểu:

so_luong = int(input("Nhập số lượng: "))
don_gia = float(input("Nhập đơn giá: "))

doanh_thu = so_luong * don_gia
print("Doanh thu:", doanh_thu)

8.1. Hiển thị bằng F string

san_pham = "Chuột máy tính"
so_luong = 3
don_gia = 250000
doanh_thu = so_luong * don_gia

print(f"Sản phẩm: {san_pham}")
print(f"Số lượng: {so_luong}")
print(f"Doanh thu: {doanh_thu}")

Có thể định dạng số:

print(f"Doanh thu: {doanh_thu:,.0f} đồng")

Kết quả:

Doanh thu: 750,000 đồng

9. CÁC PHÉP TOÁN TRONG PYTHON

Các phép toán cơ bản:

a = 10
b = 3

print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a // b)
print(a % b)
print(a ** b)

Ý nghĩa:

  1. + dùng để cộng.
  2. - dùng để trừ.
  3. * dùng để nhân.
  4. / dùng để chia.
  5. // dùng để chia lấy phần nguyên.
  6. % dùng để chia lấy phần dư.
  7. ** dùng để tính lũy thừa.

9.1. Tính doanh thu sau giảm giá

so_luong = 5
don_gia = 200000
ty_le_giam_gia = 0.1

doanh_thu_goc = so_luong * don_gia
tien_giam = doanh_thu_goc * ty_le_giam_gia
doanh_thu_sau_giam = doanh_thu_goc - tien_giam

print(f"Doanh thu gốc: {doanh_thu_goc:,.0f}")
print(f"Tiền giảm: {tien_giam:,.0f}")
print(f"Doanh thu sau giảm: {doanh_thu_sau_giam:,.0f}")

9.2. Phép so sánh

doanh_thu = 1500000

print(doanh_thu > 1000000)
print(doanh_thu < 1000000)
print(doanh_thu == 1500000)
print(doanh_thu != 0)

Phép so sánh trả về True hoặc False.

9.3. Phép toán logic

doanh_thu = 1500000
da_thanh_toan = True

don_hang_hop_le = doanh_thu > 0 and da_thanh_toan
print(don_hang_hop_le)

and yêu cầu tất cả điều kiện đều đúng.

kenh_ban = "Website"

la_kenh_online = kenh_ban == "Website" or kenh_ban == "Ứng dụng"
print(la_kenh_online)

or chỉ yêu cầu ít nhất một điều kiện đúng.

da_huy = False
print(not da_huy)

not đảo ngược giá trị đúng và sai.

Câu lệnh điều kiện if elif else

10. CÂU LỆNH ĐIỀU KIỆN

Câu lệnh điều kiện giúp chương trình quyết định việc cần làm.

doanh_thu = 1500000

if doanh_thu >= 1000000:
    print("Đơn hàng giá trị cao")

10.1. Cấu trúc if và else

trang_thai = "Hoàn thành"

if trang_thai == "Hoàn thành":
    print("Được tính vào doanh thu")
else:
    print("Không được tính vào doanh thu")

10.2. Cấu trúc if, elif và else

doanh_thu = 3500000

if doanh_thu >= 5000000:
    print("Nhóm khách hàng VIP")
elif doanh_thu >= 2000000:
    print("Nhóm khách hàng tiềm năng")
elif doanh_thu >= 500000:
    print("Nhóm khách hàng thông thường")
else:
    print("Nhóm khách hàng mới")

Python kiểm tra từ trên xuống dưới. Khi gặp điều kiện đúng đầu tiên, chương trình thực hiện phần tương ứng.

10.3. Kiểm tra dữ liệu hợp lệ

so_luong = 5
don_gia = 200000

if so_luong <= 0:
    print("Số lượng không hợp lệ")
elif don_gia < 0:
    print("Đơn giá không hợp lệ")
else:
    doanh_thu = so_luong * don_gia
    print("Doanh thu:", doanh_thu)

Trong lĩnh vực Data, việc kiểm tra dữ liệu hợp lệ rất quan trọng. Nếu số lượng là số âm hoặc ngày giao hàng sớm hơn ngày đặt hàng, dữ liệu có thể đang có vấn đề.

Vòng lặp for và while trong Python

11. VÒNG LẶP

Vòng lặp giúp thực hiện một công việc nhiều lần.

for lan in range(5):
    print("Kiểm tra dữ liệu")

11.1. Duyệt qua danh sách doanh thu

danh_sach_doanh_thu = [500000, 750000, 1200000, 300000]

for doanh_thu in danh_sach_doanh_thu:
    print(doanh_thu)

11.2. Tính tổng bằng vòng lặp

danh_sach_doanh_thu = [500000, 750000, 1200000, 300000]
tong_doanh_thu = 0

for doanh_thu in danh_sach_doanh_thu:
    tong_doanh_thu = tong_doanh_thu + doanh_thu

print(f"Tổng doanh thu: {tong_doanh_thu:,.0f}")

Python cũng có hàm sum():

tong_doanh_thu = sum(danh_sach_doanh_thu)

11.3. Đếm đơn hàng giá trị cao

danh_sach_doanh_thu = [500000, 750000, 1200000, 300000, 2500000]
so_don_gia_tri_cao = 0

for doanh_thu in danh_sach_doanh_thu:
    if doanh_thu >= 1000000:
        so_don_gia_tri_cao = so_don_gia_tri_cao + 1

print("Số đơn giá trị cao:", so_don_gia_tri_cao)

11.4. Vòng lặp while

so_lan_thu = 1

while so_lan_thu <= 3:
    print(f"Đang thử đọc dữ liệu lần {so_lan_thu}")
    so_lan_thu = so_lan_thu + 1

Vòng lặp while phù hợp khi chưa biết chính xác cần lặp bao nhiêu lần.

Làm việc và chuẩn hóa chuỗi trong Python

12. LÀM VIỆC VỚI CHUỖI

Dữ liệu văn bản thường cần được làm sạch trước khi phân tích.

ten_khach_hang = "  nguyễn văn an  "

Tên trên có khoảng trắng thừa và chưa viết hoa đúng cách.

ten_sach = ten_khach_hang.strip().title()
print(ten_sach)

Kết quả:

Nguyễn Văn An

12.1. Một số phương thức thường dùng

noi_dung = "  Data Engineering  "

print(noi_dung.strip())
print(noi_dung.lower())
print(noi_dung.upper())
print(noi_dung.replace("Engineering", "Analytics"))

Ý nghĩa:

  1. strip() xóa khoảng trắng ở đầu và cuối.
  2. lower() chuyển thành chữ thường.
  3. upper() chuyển thành chữ hoa.
  4. title() viết hoa chữ cái đầu mỗi từ.
  5. replace() thay thế nội dung.
  6. split() chia chuỗi thành nhiều phần.

12.2. Chuẩn hóa số điện thoại

so_dien_thoai = "0901 234 567"
so_dien_thoai = so_dien_thoai.replace(" ", "")

print(so_dien_thoai)

12.3. Tách dữ liệu

dong_du_lieu = "DH001,Nguyễn Văn An,Bàn phím,2,500000"
cac_gia_tri = dong_du_lieu.split(",")

print(cac_gia_tri)

Kết quả là một List chứa từng phần dữ liệu.

List trong Python cho dữ liệu doanh thu

13. LIST

List dùng để lưu nhiều giá trị theo thứ tự.

doanh_thu = [500000, 750000, 1200000, 300000]

13.1. Lấy phần tử

print(doanh_thu[0])
print(doanh_thu[1])
print(doanh_thu[-1])

Vị trí đầu tiên là 0. Vị trí -1 là phần tử cuối cùng.

13.2. Thêm, sửa và xóa

doanh_thu = [500000, 750000]

doanh_thu.append(1200000)
doanh_thu[0] = 550000
doanh_thu.remove(750000)

print(doanh_thu)

13.3. Các hàm thống kê cơ bản

doanh_thu = [500000, 750000, 1200000, 300000]

print("Tổng:", sum(doanh_thu))
print("Cao nhất:", max(doanh_thu))
print("Thấp nhất:", min(doanh_thu))
print("Số đơn:", len(doanh_thu))
print("Trung bình:", sum(doanh_thu) / len(doanh_thu))

13.4. Lọc dữ liệu bằng vòng lặp

doanh_thu = [500000, 750000, 1200000, 300000, 2500000]
don_gia_tri_cao = []

for gia_tri in doanh_thu:
    if gia_tri >= 1000000:
        don_gia_tri_cao.append(gia_tri)

print(don_gia_tri_cao)
Tuple Set và Dictionary trong Python

14. TUPLE, SET VÀ DICTIONARY

14.1. Tuple

Tuple dùng để lưu một nhóm giá trị ít thay đổi.

kich_thuoc_anh = (1920, 1080)
toa_do = (10, 20)

Tuple sử dụng dấu ngoặc tròn.

14.2. Set

Set không lưu phần tử trùng lặp.

tinh_thanh = [
    "Hồ Chí Minh",
    "Hà Nội",
    "Đà Nẵng",
    "Hồ Chí Minh",
    "Hà Nội"
]

cac_tinh_khac_nhau = set(tinh_thanh)
print(cac_tinh_khac_nhau)

Set phù hợp khi muốn tìm các giá trị duy nhất.

14.3. Dictionary

Dictionary lưu dữ liệu theo cặp khóa và giá trị.

don_hang = {
    "ma_don_hang": "DH001",
    "khach_hang": "Nguyễn Văn An",
    "san_pham": "Bàn phím",
    "so_luong": 2,
    "don_gia": 500000,
    "trang_thai": "Hoàn thành"
}

Lấy dữ liệu:

print(don_hang["khach_hang"])
print(don_hang["san_pham"])

Thêm dữ liệu:

don_hang["tinh_thanh"] = "Hồ Chí Minh"

Thay đổi dữ liệu:

don_hang["so_luong"] = 3

Tính thành tiền:

don_hang["thanh_tien"] = don_hang["so_luong"] * don_hang["don_gia"]

14.4. List chứa nhiều Dictionary

Một bảng dữ liệu nhỏ có thể được biểu diễn bằng List chứa nhiều Dictionary.

don_hang = [
    {
        "ma_don": "DH001",
        "san_pham": "Bàn phím",
        "so_luong": 2,
        "don_gia": 500000
    },
    {
        "ma_don": "DH002",
        "san_pham": "Chuột",
        "so_luong": 3,
        "don_gia": 250000
    },
    {
        "ma_don": "DH003",
        "san_pham": "Màn hình",
        "so_luong": 1,
        "don_gia": 3500000
    }
]

Tính doanh thu từng đơn:

for don in don_hang:
    doanh_thu = don["so_luong"] * don["don_gia"]
    print(don["ma_don"], doanh_thu)

Đây là bước chuẩn bị quan trọng trước khi học Pandas.

Hàm và xử lý lỗi trong Python

15. HÀM

Hàm là một nhóm câu lệnh được đặt tên và có thể sử dụng lại.

def chao_mung():
    print("Chào mừng bạn đến với lĩnh vực Data")

chao_mung()

15.1. Hàm có tham số

def tinh_doanh_thu(so_luong, don_gia):
    doanh_thu = so_luong * don_gia
    return doanh_thu

ket_qua = tinh_doanh_thu(5, 120000)
print(ket_qua)

15.2. Hàm tính doanh thu sau giảm giá

def tinh_doanh_thu_sau_giam(so_luong, don_gia, ty_le_giam):
    doanh_thu_goc = so_luong * don_gia
    tien_giam = doanh_thu_goc * ty_le_giam
    return doanh_thu_goc - tien_giam

ket_qua = tinh_doanh_thu_sau_giam(5, 200000, 0.1)
print(ket_qua)

15.3. Hàm kiểm tra dữ liệu

def kiem_tra_so_luong(so_luong):
    if so_luong <= 0:
        return False

    return True

15.4. Tại sao người làm Data cần hàm?

Hàm giúp:

  1. Tránh lặp lại code.
  2. Chuẩn hóa cách tính chỉ số.
  3. Dễ kiểm tra lỗi.
  4. Dễ sử dụng lại.
  5. Chia bài toán lớn thành nhiều phần nhỏ.

Nếu doanh nghiệp có một quy tắc tính doanh thu, chúng ta nên viết quy tắc đó thành hàm thay vì lặp lại công thức ở nhiều nơi.

16. XỬ LÝ LỖI

Dữ liệu thực tế thường không sạch.

Người dùng có thể nhập chữ vào cột số. Tệp có thể không tồn tại. Một giá trị có thể bị thiếu. Một phép chia có thể gặp mẫu số bằng 0.

16.1. Xử lý dữ liệu nhập sai

try:
    so_luong = int(input("Nhập số lượng: "))
    don_gia = float(input("Nhập đơn giá: "))

    doanh_thu = so_luong * don_gia
    print("Doanh thu:", doanh_thu)
except ValueError:
    print("Số lượng và đơn giá phải là số")

16.2. Xử lý phép chia cho 0

doanh_thu = 10000000
so_don_hang = 0

try:
    gia_tri_trung_binh = doanh_thu / so_don_hang
    print(gia_tri_trung_binh)
except ZeroDivisionError:
    print("Không thể tính vì số đơn hàng bằng 0")

16.3. Tư duy xử lý lỗi trong Data

Khi gặp dữ liệu lỗi, không nên chỉ xóa ngay. Trước tiên cần xác định:

  1. Dữ liệu sai ở đâu?
  2. Vì sao dữ liệu sai?
  3. Có thể sửa được không?
  4. Việc xóa có ảnh hưởng kết quả không?
  5. Có cần báo cho người quản lý dữ liệu không?
  6. Có thể ngăn lỗi lặp lại từ nguồn không?
Đọc ghi tệp dữ liệu và CSV

17. ĐỌC VÀ GHI TỆP DỮ LIỆU

17.1. Ghi dữ liệu vào tệp

with open("bao_cao.txt", "w", encoding="utf-8") as tep:
    tep.write("BÁO CÁO DOANH THU\n")
    tep.write("Tổng doanh thu: 15,000,000 đồng\n")

17.2. Đọc dữ liệu từ tệp

with open("bao_cao.txt", "r", encoding="utf-8") as tep:
    noi_dung = tep.read()

print(noi_dung)

17.3. Thêm dữ liệu vào cuối tệp

with open("bao_cao.txt", "a", encoding="utf-8") as tep:
    tep.write("Số đơn hàng: 25\n")

Các chế độ thường dùng:

  1. "r" dùng để đọc.
  2. "w" dùng để ghi mới.
  3. "a" dùng để ghi thêm.

18. LÀM QUEN VỚI CSV

CSV là một định dạng tệp rất phổ biến trong lĩnh vực Data.

CSV là viết tắt của Comma Separated Values. Mỗi dòng thường đại diện cho một bản ghi. Các giá trị được ngăn cách bằng dấu phẩy.

Ví dụ tệp don_hang.csv:

ma_don,ngay_ban,san_pham,so_luong,don_gia,tinh_thanh
DH001,2026-09-01,Bàn phím,2,500000,Hồ Chí Minh
DH002,2026-09-01,Chuột,3,250000,Hà Nội
DH003,2026-09-02,Màn hình,1,3500000,Đà Nẵng
DH004,2026-09-03,Bàn phím,1,500000,Hà Nội

18.1. Đọc CSV bằng thư viện csv

import csv

with open("don_hang.csv", "r", encoding="utf-8") as tep:
    du_lieu = csv.DictReader(tep)

    for dong in du_lieu:
        print(dong)

Mỗi dòng được đọc thành một Dictionary.

18.2. Tính doanh thu từ CSV

import csv

tong_doanh_thu = 0

with open("don_hang.csv", "r", encoding="utf-8") as tep:
    du_lieu = csv.DictReader(tep)

    for dong in du_lieu:
        so_luong = int(dong["so_luong"])
        don_gia = float(dong["don_gia"])
        doanh_thu = so_luong * don_gia
        tong_doanh_thu = tong_doanh_thu + doanh_thu

print(f"Tổng doanh thu: {tong_doanh_thu:,.0f} đồng")

Cách này giúp hiểu quá trình xử lý. Tuy nhiên, khi dữ liệu lớn hơn và cần nhiều thao tác, Pandas sẽ thuận tiện hơn.

Làm quen với Pandas DataFrame

19. LÀM QUEN VỚI PANDAS

Pandas là một thư viện Python chuyên xử lý dữ liệu dạng bảng.

Thông thường, Pandas được viết tắt là pd.

import pandas as pd

19.1. DataFrame là gì?

DataFrame là một bảng dữ liệu gồm hàng và cột.

Có thể hình dung DataFrame gần giống một trang tính Excel hoặc một bảng trong cơ sở dữ liệu.

import pandas as pd

du_lieu = {
    "san_pham": ["Bàn phím", "Chuột", "Màn hình"],
    "so_luong": [2, 3, 1],
    "don_gia": [500000, 250000, 3500000]
}

df = pd.DataFrame(du_lieu)

print(df)

Kết quả:

    san_pham  so_luong  don_gia
0   Bàn phím          2    500000
1      Chuột          3    250000
2   Màn hình          1   3500000

19.2. Đọc tệp CSV

import pandas as pd

df = pd.read_csv("don_hang.csv")
print(df)

Chỉ với một dòng, Pandas có thể đọc toàn bộ tệp CSV thành DataFrame.

19.3. Xem một số dòng đầu

print(df.head())

Mặc định, head() hiển thị năm dòng đầu tiên.

print(df.head(10))

Câu lệnh này hiển thị mười dòng đầu tiên.

19.4. Xem các dòng cuối

print(df.tail())

19.5. Xem kích thước dữ liệu

print(df.shape)

Kết quả có dạng:

(1000, 6)

Điều này có nghĩa DataFrame có 1000 dòng và 6 cột.

19.6. Xem tên cột

print(df.columns)

19.7. Xem kiểu dữ liệu

print(df.dtypes)

Việc kiểm tra kiểu dữ liệu giúp phát hiện cột số đang bị lưu thành chuỗi hoặc cột ngày chưa được nhận diện đúng.

19.8. Xem thông tin tổng quát

df.info()

Lệnh này cho biết:

  1. Số dòng.
  2. Số cột.
  3. Tên cột.
  4. Kiểu dữ liệu.
  5. Số giá trị không bị thiếu.
  6. Dung lượng bộ nhớ.
Khám phá và làm sạch dữ liệu bằng Pandas

20. KHÁM PHÁ DỮ LIỆU VỚI PANDAS

Trước khi phân tích, người làm Data cần hiểu dữ liệu mình đang có.

Quá trình này thường được gọi là khám phá dữ liệu.

20.1. Thống kê mô tả

print(df.describe())

Với các cột số, Pandas có thể hiển thị:

  1. Số lượng giá trị.
  2. Giá trị trung bình.
  3. Độ lệch chuẩn.
  4. Giá trị nhỏ nhất.
  5. Các mức phân vị.
  6. Giá trị lớn nhất.

Người mới chưa cần hiểu sâu tất cả chỉ số. Trước tiên, hãy chú ý đến số lượng, trung bình, nhỏ nhất và lớn nhất.

20.2. Đếm số giá trị khác nhau

print(df["san_pham"].nunique())

20.3. Xem danh sách giá trị khác nhau

print(df["san_pham"].unique())

20.4. Đếm số lần xuất hiện

print(df["tinh_thanh"].value_counts())

Kết quả giúp biết mỗi tỉnh có bao nhiêu đơn hàng.

20.5. Chọn một cột

print(df["san_pham"])

20.6. Chọn nhiều cột

print(df[["ma_don", "san_pham", "so_luong"]])

21. LÀM SẠCH DỮ LIỆU

Dữ liệu thực tế có thể chứa nhiều vấn đề:

  1. Thiếu giá trị.
  2. Trùng dữ liệu.
  3. Sai kiểu dữ liệu.
  4. Khoảng trắng thừa.
  5. Viết hoa và viết thường không thống nhất.
  6. Ngày tháng sai định dạng.
  7. Giá trị bất thường.
  8. Tên cột khó hiểu.
  9. Đơn vị đo không thống nhất.
  10. Dữ liệu nhập sai.

21.1. Kiểm tra dữ liệu bị thiếu

print(df.isna().sum())

Câu lệnh này đếm số giá trị thiếu trong từng cột.

21.2. Xóa dòng thiếu dữ liệu

df_sach = df.dropna()

Không phải lúc nào cũng nên xóa. Nếu xóa quá nhiều dòng, kết quả phân tích có thể bị sai lệch.

21.3. Điền giá trị thiếu

df["tinh_thanh"] = df["tinh_thanh"].fillna("Chưa xác định")

Với cột số, có thể điền bằng giá trị trung bình hoặc trung vị, nhưng cần hiểu rõ ý nghĩa nghiệp vụ trước khi thực hiện.

gia_trung_binh = df["don_gia"].mean()
df["don_gia"] = df["don_gia"].fillna(gia_trung_binh)

21.4. Kiểm tra dòng trùng

print(df.duplicated().sum())

21.5. Xóa dòng trùng

df = df.drop_duplicates()

Nếu mã đơn hàng phải là duy nhất, có thể kiểm tra theo cột:

print(df["ma_don"].duplicated().sum())

21.6. Chuẩn hóa văn bản

df["san_pham"] = df["san_pham"].str.strip()
df["san_pham"] = df["san_pham"].str.title()

21.7. Chuyển kiểu số

df["so_luong"] = pd.to_numeric(df["so_luong"], errors="coerce")
df["don_gia"] = pd.to_numeric(df["don_gia"], errors="coerce")

errors="coerce" chuyển những giá trị không thể chuyển thành số về giá trị thiếu.

21.8. Chuyển kiểu ngày

df["ngay_ban"] = pd.to_datetime(df["ngay_ban"], errors="coerce")

Sau khi chuyển, có thể lấy năm, tháng hoặc ngày:

df["nam"] = df["ngay_ban"].dt.year
df["thang"] = df["ngay_ban"].dt.month
df["ngay"] = df["ngay_ban"].dt.day

21.9. Đổi tên cột

df = df.rename(columns={
    "Tên sản phẩm": "san_pham",
    "Số lượng": "so_luong",
    "Đơn giá": "don_gia"
})

Tên cột đơn giản giúp việc viết code dễ dàng hơn.

Lọc sắp xếp và tổng hợp dữ liệu

22. LỌC, SẮP XẾP VÀ TỔNG HỢP DỮ LIỆU

22.1. Tạo cột doanh thu

df["doanh_thu"] = df["so_luong"] * df["don_gia"]

Pandas thực hiện phép nhân trên toàn bộ cột. Chúng ta không cần viết vòng lặp cho từng dòng.

22.2. Lọc đơn hàng giá trị cao

don_gia_tri_cao = df[df["doanh_thu"] >= 1000000]
print(don_gia_tri_cao)

22.3. Lọc theo nhiều điều kiện

ket_qua = df[
    (df["doanh_thu"] >= 1000000) &
    (df["tinh_thanh"] == "Hồ Chí Minh")
]

print(ket_qua)

Trong Pandas:

  1. Dấu & được dùng cho điều kiện đồng thời.
  2. Dấu | được dùng khi chỉ cần một trong các điều kiện đúng.
  3. Mỗi điều kiện nên được đặt trong dấu ngoặc tròn.

22.4. Sắp xếp dữ liệu

df_sap_xep = df.sort_values(
    by="doanh_thu",
    ascending=False
)

print(df_sap_xep)

ascending=False có nghĩa sắp xếp giảm dần.

22.5. Tính tổng doanh thu

tong_doanh_thu = df["doanh_thu"].sum()
print(f"Tổng doanh thu: {tong_doanh_thu:,.0f} đồng")

22.6. Tính doanh thu trung bình

doanh_thu_trung_binh = df["doanh_thu"].mean()
print(f"Doanh thu trung bình: {doanh_thu_trung_binh:,.0f} đồng")

22.7. Nhóm dữ liệu theo sản phẩm

doanh_thu_theo_san_pham = (
    df.groupby("san_pham")["doanh_thu"]
    .sum()
    .sort_values(ascending=False)
)

print(doanh_thu_theo_san_pham)

22.8. Nhóm dữ liệu theo tỉnh

doanh_thu_theo_tinh = (
    df.groupby("tinh_thanh")["doanh_thu"]
    .sum()
    .sort_values(ascending=False)
)

print(doanh_thu_theo_tinh)

22.9. Tổng hợp nhiều chỉ số

bao_cao_san_pham = (
    df.groupby("san_pham")
    .agg(
        tong_so_luong=("so_luong", "sum"),
        tong_doanh_thu=("doanh_thu", "sum"),
        so_don_hang=("ma_don", "nunique"),
        doanh_thu_trung_binh=("doanh_thu", "mean")
    )
    .reset_index()
)

print(bao_cao_san_pham)

Đây là một kỹ năng rất quan trọng đối với Data Analyst và Data Engineer.

Trực quan hóa dữ liệu bằng biểu đồ

23. TRỰC QUAN HÓA DỮ LIỆU

Biểu đồ giúp người đọc nhận ra xu hướng và sự khác biệt nhanh hơn bảng số liệu.

Matplotlib là một thư viện vẽ biểu đồ phổ biến trong Python.

import matplotlib.pyplot as plt

23.1. Biểu đồ cột doanh thu theo sản phẩm

doanh_thu_theo_san_pham = (
    df.groupby("san_pham")["doanh_thu"]
    .sum()
    .sort_values(ascending=False)
)

doanh_thu_theo_san_pham.plot(
    kind="bar",
    color="skyblue"
)

plt.title("Doanh thu theo sản phẩm")
plt.xlabel("Sản phẩm")
plt.ylabel("Doanh thu")
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

23.2. Biểu đồ đường doanh thu theo ngày

doanh_thu_theo_ngay = (
    df.groupby("ngay_ban")["doanh_thu"]
    .sum()
    .sort_index()
)

doanh_thu_theo_ngay.plot(
    kind="line",
    marker="o"
)

plt.title("Doanh thu theo ngày")
plt.xlabel("Ngày")
plt.ylabel("Doanh thu")
plt.grid(True)
plt.tight_layout()
plt.show()

23.3. Chọn đúng biểu đồ

Biểu đồ cột phù hợp khi so sánh các nhóm.

Ví dụ:

  1. Doanh thu theo sản phẩm.
  2. Số đơn theo tỉnh.
  3. Số khách theo nhóm.

Biểu đồ đường phù hợp khi xem sự thay đổi theo thời gian.

Ví dụ:

  1. Doanh thu theo ngày.
  2. Lượt truy cập theo giờ.
  3. Số người dùng theo tháng.

Biểu đồ tròn chỉ nên dùng khi có ít nhóm và tổng các nhóm tạo thành một tổng thể rõ ràng.

Biểu đồ không cần quá nhiều màu sắc. Mục tiêu chính là giúp người đọc hiểu dữ liệu.

Dự án phân tích dữ liệu bán hàng bằng Python

24. DỰ ÁN PHÂN TÍCH DỮ LIỆU BÁN HÀNG

24.1. Bối cảnh

Một cửa hàng có tệp dữ liệu đơn hàng. Người quản lý muốn biết:

  1. Tổng doanh thu là bao nhiêu?
  2. Có bao nhiêu đơn hàng?
  3. Sản phẩm nào tạo ra doanh thu cao nhất?
  4. Tỉnh nào có doanh thu cao nhất?
  5. Doanh thu thay đổi thế nào theo ngày?
  6. Dữ liệu có bị thiếu hoặc trùng không?

24.2. Cấu trúc dữ liệu

Tệp don_hang.csv có các cột:

ma_don
ngay_ban
khach_hang
san_pham
so_luong
don_gia
tinh_thanh
trang_thai

24.3. Bước 1: Nhập thư viện

import pandas as pd
import matplotlib.pyplot as plt

24.4. Bước 2: Đọc dữ liệu

df = pd.read_csv("don_hang.csv")

24.5. Bước 3: Kiểm tra tổng quan

print(df.head())
print(df.shape)
print(df.columns)
print(df.dtypes)
df.info()

24.6. Bước 4: Kiểm tra dữ liệu thiếu

print(df.isna().sum())

24.7. Bước 5: Kiểm tra dữ liệu trùng

print("Số dòng trùng:", df.duplicated().sum())
print("Mã đơn trùng:", df["ma_don"].duplicated().sum())

24.8. Bước 6: Làm sạch

df = df.drop_duplicates()

df["san_pham"] = df["san_pham"].str.strip().str.title()
df["tinh_thanh"] = df["tinh_thanh"].str.strip().str.title()
df["trang_thai"] = df["trang_thai"].str.strip().str.title()

df["so_luong"] = pd.to_numeric(
    df["so_luong"],
    errors="coerce"
)

df["don_gia"] = pd.to_numeric(
    df["don_gia"],
    errors="coerce"
)

df["ngay_ban"] = pd.to_datetime(
    df["ngay_ban"],
    errors="coerce"
)

24.9. Bước 7: Loại dữ liệu không hợp lệ

df = df.dropna(
    subset=["ma_don", "ngay_ban", "san_pham", "so_luong", "don_gia"]
)

df = df[df["so_luong"] > 0]
df = df[df["don_gia"] >= 0]

24.10. Bước 8: Chỉ giữ đơn hoàn thành

df_hoan_thanh = df[df["trang_thai"] == "Hoàn Thành"].copy()

Việc dùng .copy() giúp tạo một DataFrame riêng để tiếp tục xử lý.

24.11. Bước 9: Tính doanh thu

df_hoan_thanh["doanh_thu"] = (
    df_hoan_thanh["so_luong"] *
    df_hoan_thanh["don_gia"]
)

24.12. Bước 10: Tính KPI tổng quan

tong_doanh_thu = df_hoan_thanh["doanh_thu"].sum()
so_don_hang = df_hoan_thanh["ma_don"].nunique()
so_khach_hang = df_hoan_thanh["khach_hang"].nunique()

if so_don_hang > 0:
    gia_tri_don_trung_binh = tong_doanh_thu / so_don_hang
else:
    gia_tri_don_trung_binh = 0

print(f"Tổng doanh thu: {tong_doanh_thu:,.0f} đồng")
print(f"Số đơn hàng: {so_don_hang}")
print(f"Số khách hàng: {so_khach_hang}")
print(f"Giá trị đơn trung bình: {gia_tri_don_trung_binh:,.0f} đồng")

24.13. Bước 11: Phân tích theo sản phẩm

bao_cao_san_pham = (
    df_hoan_thanh.groupby("san_pham")
    .agg(
        tong_so_luong=("so_luong", "sum"),
        tong_doanh_thu=("doanh_thu", "sum"),
        so_don_hang=("ma_don", "nunique")
    )
    .reset_index()
    .sort_values(
        by="tong_doanh_thu",
        ascending=False
    )
)

print(bao_cao_san_pham)

24.14. Bước 12: Phân tích theo tỉnh

bao_cao_tinh = (
    df_hoan_thanh.groupby("tinh_thanh")
    .agg(
        tong_doanh_thu=("doanh_thu", "sum"),
        so_don_hang=("ma_don", "nunique"),
        so_khach_hang=("khach_hang", "nunique")
    )
    .reset_index()
    .sort_values(
        by="tong_doanh_thu",
        ascending=False
    )
)

print(bao_cao_tinh)

24.15. Bước 13: Phân tích theo ngày

bao_cao_ngay = (
    df_hoan_thanh.groupby("ngay_ban")
    .agg(
        tong_doanh_thu=("doanh_thu", "sum"),
        so_don_hang=("ma_don", "nunique")
    )
    .reset_index()
    .sort_values("ngay_ban")
)

print(bao_cao_ngay)

24.16. Bước 14: Vẽ biểu đồ

du_lieu_bieu_do = bao_cao_san_pham.head(10)

plt.figure(figsize=(10, 6))

plt.bar(
    du_lieu_bieu_do["san_pham"],
    du_lieu_bieu_do["tong_doanh_thu"],
    color="steelblue"
)

plt.title("10 sản phẩm có doanh thu cao nhất")
plt.xlabel("Sản phẩm")
plt.ylabel("Doanh thu")
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

24.17. Bước 15: Xuất báo cáo

bao_cao_san_pham.to_csv(
    "bao_cao_san_pham.csv",
    index=False,
    encoding="utf-8-sig"
)

bao_cao_tinh.to_csv(
    "bao_cao_tinh.csv",
    index=False,
    encoding="utf-8-sig"
)

bao_cao_ngay.to_csv(
    "bao_cao_ngay.csv",
    index=False,
    encoding="utf-8-sig"
)

24.18. Bước 16: Viết kết luận

Một bài phân tích Data không kết thúc ở đoạn code. Người phân tích cần trình bày kết quả bằng ngôn ngữ dễ hiểu.

Ví dụ:

Trong kỳ phân tích, cửa hàng đạt tổng doanh thu 850 triệu đồng từ 1.240 đơn hàng hoàn thành. Nhóm màn hình tạo ra doanh thu cao nhất, trong khi nhóm chuột có số lượng bán cao nhất. Hồ Chí Minh là thị trường đóng góp doanh thu lớn nhất. Doanh thu tăng mạnh trong tuần cuối tháng, chủ yếu đến từ chương trình khuyến mãi cho thiết bị văn phòng.

Kết luận cần dựa trên kết quả thật. Không nên đưa ra nhận xét chỉ vì biểu đồ trông giống một xu hướng nào đó.

25. NHỮNG LỖI NGƯỜI MỚI THƯỜNG GẶP

25.1. Chỉ học cú pháp mà không hiểu bài toán

Người làm Data không chỉ cần biết viết code. Trước khi xử lý, cần hiểu:

  1. Dữ liệu đại diện cho điều gì?
  2. Mỗi dòng là một đơn hàng hay một sản phẩm?
  3. Doanh thu được tính theo quy tắc nào?
  4. Đơn hàng hủy có được tính không?
  5. Dữ liệu có bao gồm thuế không?
  6. Đơn vị tiền tệ là gì?

Code chạy được chưa chắc kết quả đã đúng về mặt nghiệp vụ.

25.2. Không kiểm tra dữ liệu trước khi phân tích

Không nên đọc tệp rồi lập tức tính tổng.

Trước tiên cần kiểm tra:

df.head()
df.shape
df.info()
df.isna().sum()
df.duplicated().sum()
df.describe()

25.3. Xóa dữ liệu thiếu một cách tùy tiện

Nếu một bảng có 100 dòng và chỉ thiếu 2 dòng, việc xóa có thể chấp nhận được trong một số trường hợp.

Nếu bảng có 1.000 dòng nhưng thiếu 600 dòng, việc xóa toàn bộ có thể làm kết quả mất ý nghĩa.

Cần hiểu nguyên nhân dữ liệu thiếu trước khi quyết định.

25.4. Nhầm giữa mã và số

Mã khách hàng "00125" không nên chuyển thành số 125 vì các số 0 phía trước có thể có ý nghĩa.

Các dữ liệu thường nên lưu dưới dạng chuỗi:

  1. Mã đơn hàng.
  2. Mã khách hàng.
  3. Số điện thoại.
  4. Mã bưu chính.
  5. Số căn cước.
  6. Mã sản phẩm.

25.5. Dùng vòng lặp cho mọi thao tác Pandas

Người mới thường viết:

for dong in df:
    ...

Pandas đã có nhiều thao tác xử lý cả cột. Ví dụ:

df["doanh_thu"] = df["so_luong"] * df["don_gia"]

Cách xử lý theo cột thường ngắn gọn và hiệu quả hơn.

25.6. Chỉ sao chép code

Sau khi chạy một đoạn code, hãy tự trả lời:

  1. Dòng này làm gì?
  2. Dữ liệu đầu vào là gì?
  3. Kết quả đầu ra là gì?
  4. Nếu dữ liệu bị thiếu thì sao?
  5. Nếu kiểu dữ liệu sai thì sao?
  6. Nếu tệp không có dòng nào thì sao?

25.7. Không kiểm tra kết quả

Sau khi tính tổng doanh thu, nên kiểm tra một vài dòng bằng tay.

Nếu một đơn hàng có số lượng 2 và đơn giá 500.000, doanh thu phải là 1.000.000.

Kiểm tra mẫu giúp phát hiện lỗi công thức hoặc lỗi kiểu dữ liệu.

26. LỘ TRÌNH HỌC PYTHON CHO NGƯỜI LÀM DATA

Giai đoạn 1: Python cơ bản

Thời gian đề xuất: 3 đến 4 tuần.

Học:

  1. Biến.
  2. Kiểu dữ liệu.
  3. Phép toán.
  4. Điều kiện.
  5. Vòng lặp.
  6. Chuỗi.
  7. List.
  8. Dictionary.
  9. Hàm.
  10. Xử lý lỗi.

Kết quả cần đạt:

  1. Đọc được chương trình Python đơn giản.
  2. Tự viết chương trình tính toán.
  3. Xử lý được List và Dictionary.
  4. Biết chia chương trình thành hàm.

Giai đoạn 2: Làm việc với dữ liệu

Thời gian đề xuất: 3 đến 4 tuần.

Học:

  1. Đọc CSV.
  2. Pandas.
  3. DataFrame.
  4. Kiểm tra dữ liệu.
  5. Làm sạch dữ liệu.
  6. Lọc dữ liệu.
  7. Sắp xếp dữ liệu.
  8. GroupBy.
  9. Tổng hợp chỉ số.
  10. Xuất kết quả.

Kết quả cần đạt:

  1. Đọc được một tệp dữ liệu.
  2. Phát hiện dữ liệu thiếu.
  3. Xử lý dữ liệu trùng.
  4. Tạo được báo cáo tổng hợp.
  5. Xuất kết quả ra CSV.

Giai đoạn 3: Trực quan hóa và phân tích

Thời gian đề xuất: 2 đến 3 tuần.

Học:

  1. Matplotlib.
  2. Seaborn.
  3. Biểu đồ cột.
  4. Biểu đồ đường.
  5. Biểu đồ phân phối.
  6. Phân tích theo thời gian.
  7. Viết nhận xét dựa trên dữ liệu.

Giai đoạn 4: Học SQL

Python và SQL hỗ trợ nhau.

SQL được dùng để lấy dữ liệu từ cơ sở dữ liệu. Python được dùng để xử lý, tự động hóa và phân tích sâu hơn.

Người bước vào lĩnh vực Data nên học:

  1. SELECT.
  2. WHERE.
  3. GROUP BY.
  4. HAVING.
  5. JOIN.
  6. CASE WHEN.
  7. Subquery.
  8. Common Table Expression.
  9. Window Function.

Giai đoạn 5: Thực hiện dự án Portfolio

Dự án nên có:

  1. Bối cảnh kinh doanh.
  2. Câu hỏi cần trả lời.
  3. Nguồn dữ liệu.
  4. Kiểm tra chất lượng dữ liệu.
  5. Quy trình làm sạch.
  6. Các chỉ số chính.
  7. Phân tích.
  8. Biểu đồ.
  9. Kết luận.
  10. Đề xuất.

Không nên chỉ tải một Notebook lên GitHub mà không có phần giải thích.

27. BÀI TẬP TỔNG HỢP

Bài 1: Tính doanh thu đơn hàng

Nhập tên sản phẩm, số lượng và đơn giá. Tính doanh thu của đơn hàng.

Bài 2: Tính doanh thu sau giảm giá

Nhập số lượng, đơn giá và tỷ lệ giảm giá. Hiển thị doanh thu gốc, số tiền được giảm và doanh thu cuối cùng.

Bài 3: Kiểm tra đơn hàng hợp lệ

Một đơn hàng hợp lệ khi:

  1. Số lượng lớn hơn 0.
  2. Đơn giá không âm.
  3. Tên sản phẩm không để trống.
  4. Trạng thái không phải là "Đã hủy".

Bài 4: Thống kê danh sách doanh thu

Cho List:

doanh_thu = [
    500000,
    1200000,
    750000,
    3000000,
    450000
]

Hãy tính:

  1. Tổng doanh thu.
  2. Doanh thu trung bình.
  3. Doanh thu cao nhất.
  4. Doanh thu thấp nhất.
  5. Số đơn có giá trị từ một triệu đồng.

Bài 5: Làm sạch danh sách tên

Cho List:

ten_khach_hang = [
    "  nguyễn văn an",
    "TRẦN THỊ BÌNH  ",
    "lê văn cường"
]

Hãy xóa khoảng trắng thừa và chuẩn hóa cách viết tên.

Bài 6: Tìm tỉnh không trùng

Cho List chứa tên tỉnh, trong đó có nhiều giá trị lặp lại. Hãy sử dụng Set để tìm danh sách tỉnh duy nhất.

Bài 7: Quản lý đơn hàng bằng Dictionary

Tạo một Dictionary chứa:

  1. Mã đơn.
  2. Tên khách hàng.
  3. Sản phẩm.
  4. Số lượng.
  5. Đơn giá.
  6. Trạng thái.

Tính và thêm trường doanh_thu.

Bài 8: Hàm tính doanh thu

Viết hàm nhận số lượng và đơn giá. Hàm cần trả về doanh thu. Nếu số lượng hoặc đơn giá không hợp lệ, hàm trả về 0.

Bài 9: Đọc CSV

Đọc tệp don_hang.csv bằng Pandas. Hiển thị:

  1. Năm dòng đầu.
  2. Số dòng và số cột.
  3. Danh sách cột.
  4. Kiểu dữ liệu.
  5. Số giá trị thiếu.

Bài 10: Làm sạch CSV

Thực hiện:

  1. Xóa dòng trùng.
  2. Chuẩn hóa tên sản phẩm.
  3. Chuyển số lượng thành số.
  4. Chuyển đơn giá thành số.
  5. Chuyển ngày bán thành kiểu ngày.
  6. Loại các dòng có số lượng không hợp lệ.

Bài 11: Phân tích doanh thu

Tạo cột doanh thu và tính:

  1. Tổng doanh thu.
  2. Doanh thu trung bình.
  3. Số đơn hàng.
  4. Số khách hàng.
  5. Giá trị đơn trung bình.

Bài 12: Phân tích theo sản phẩm

Với mỗi sản phẩm, tính:

  1. Tổng số lượng.
  2. Tổng doanh thu.
  3. Số đơn hàng.
  4. Doanh thu trung bình.
  5. Tỷ lệ đóng góp vào tổng doanh thu.

Bài 13: Phân tích theo tỉnh

Tìm:

  1. Tỉnh có doanh thu cao nhất.
  2. Tỉnh có nhiều đơn hàng nhất.
  3. Tỉnh có nhiều khách hàng nhất.
  4. Doanh thu trung bình của mỗi tỉnh.

Bài 14: Phân tích theo thời gian

Tính doanh thu theo:

  1. Ngày.
  2. Tuần.
  3. Tháng.
  4. Quý.

Vẽ biểu đồ đường thể hiện doanh thu theo ngày.

Bài 15: Viết báo cáo

Từ kết quả phân tích, viết một đoạn báo cáo gồm:

  1. Kết quả tổng quan.
  2. Sản phẩm nổi bật.
  3. Thị trường nổi bật.
  4. Xu hướng theo thời gian.
  5. Một vấn đề về chất lượng dữ liệu.
  6. Hai đề xuất cho doanh nghiệp.

28. KẾT LUẬN

Python là một nền tảng quan trọng đối với người muốn bước vào lĩnh vực Data. Người học không cần bắt đầu bằng những hệ thống phức tạp hoặc thuật toán trí tuệ nhân tạo. Hãy bắt đầu bằng việc hiểu dữ liệu, viết những câu lệnh đơn giản và giải quyết từng vấn đề nhỏ.

Sau giáo trình này, người học cần nắm được:

  1. Python được sử dụng thế nào trong lĩnh vực Data.
  2. Cách tạo và sử dụng biến.
  3. Cách phân biệt các kiểu dữ liệu.
  4. Cách thực hiện phép tính.
  5. Cách sử dụng điều kiện.
  6. Cách sử dụng vòng lặp.
  7. Cách làm việc với chuỗi.
  8. Cách sử dụng List và Dictionary.
  9. Cách viết hàm.
  10. Cách xử lý lỗi.
  11. Cách đọc và ghi tệp.
  12. Cách đọc CSV.
  13. Cách sử dụng Pandas.
  14. Cách kiểm tra chất lượng dữ liệu.
  15. Cách làm sạch dữ liệu.
  16. Cách lọc và tổng hợp dữ liệu.
  17. Cách tính các chỉ số kinh doanh.
  18. Cách vẽ biểu đồ.
  19. Cách hoàn thành một dự án phân tích dữ liệu cơ bản.

Trong lĩnh vực Data, việc viết được code chỉ là một phần của công việc. Người làm Data còn phải hiểu ý nghĩa của dữ liệu, hiểu câu hỏi kinh doanh và kiểm tra tính chính xác của kết quả.

Một chương trình chạy thành công chưa chắc đã tạo ra một kết quả đúng. Nếu dữ liệu đầu vào sai, quy tắc tính sai hoặc người phân tích hiểu sai nghiệp vụ, báo cáo cuối cùng vẫn có thể sai.

Vì vậy, người học cần hình thành bốn thói quen:

  1. Luôn kiểm tra dữ liệu trước khi phân tích.
  2. Luôn hiểu ý nghĩa của từng cột.
  3. Luôn kiểm tra lại kết quả bằng một mẫu nhỏ.
  4. Luôn giải thích kết quả bằng ngôn ngữ dễ hiểu.

Không cần cố gắng ghi nhớ tất cả câu lệnh. Điều quan trọng là hiểu chương trình đang nhận dữ liệu gì, thực hiện công việc gì và tạo ra kết quả gì.

Hãy bắt đầu với một tệp CSV nhỏ. Đọc dữ liệu, kiểm tra từng cột, làm sạch những lỗi đơn giản, tính một vài chỉ số và tạo một biểu đồ. Khi đã làm được quy trình đó, người học đã hoàn thành những bước đầu tiên để bước vào thế giới Data.

Hoàng Minh.

TechData.AI

Scroll to Top