1. Giới thiệu về nhóm dữ liệu
Nguyên tắc nhóm dữ liệu
Trong đời thực, tụi mình thường nhóm các đối tượng theo một số đặc điểm: sách với sách, rau với rau, người với người (chắc bạn hiểu rồi). Lập trình cũng hoạt động tương tự. Nhóm dữ liệu cho phép chia nhỏ một tập dữ liệu lớn thành các phần nhỏ gọn hơn để dễ dàng phân tích.
Trong pandas, bạn dùng phương thức groupby để chia dữ liệu thành các nhóm và thực hiện các thao tác khác nhau trên từng nhóm. Ví dụ, bạn có thể nhóm doanh số bán hàng theo từng phòng ban trong cửa hàng và tính tổng doanh thu cho mỗi phòng.
Ví dụ thực tế trông sẽ như này:
import pandas as pd
# Tạo DataFrame với dữ liệu về doanh số
data = {'Phòng ban': ['Thực phẩm', 'Công nghệ', 'Thực phẩm', 'Sách', 'Công nghệ'],
'Doanh_thu': [100, 200, 150, 50, 300]}
df = pd.DataFrame(data)
# Nhóm dữ liệu theo phòng ban và tính tổng doanh thu
nhóm = df.groupby('Phòng ban')['Doanh_thu'].sum()
print(nhóm)
Ví dụ ứng dụng nhóm dữ liệu
Nhóm dữ liệu rất hữu ích khi tụi mình muốn so sánh dữ liệu giữa các danh mục khác nhau. Ví dụ, nếu bạn làm trong HR và muốn biết mức lương trung bình ở các phòng ban trong công ty, hoặc nếu bạn là marketer và muốn tìm hiểu tháng nào có doanh số bán hàng lớn nhất cho từng sản phẩm. Những bài toán này trở nên đơn giản hơn nhiều nhờ khả năng nhóm dữ liệu trong pandas.
2. Tính các hàm tổng hợp
Giới thiệu về hàm tổng hợp
Hàm tổng hợp là những hàm đặc biệt được áp dụng cho một nhóm dữ liệu và trả về một giá trị duy nhất. Những hàm phổ biến nhất là sum (tổng), mean (giá trị trung bình), và count (số lượng phần tử). Chúng giúp thu hẹp khối lượng thông tin lớn xuống mức đơn giản và dễ hiểu hơn.
Sử dụng hàm tổng hợp
Chúng ta đã thấy cách tính tổng trong ví dụ trước. Giờ thì xem cách tính giá trị trung bình và số lượng bán hàng trong mỗi phòng ban nhé.
# Tính doanh thu trung bình theo phòng ban
trung_bình = df.groupby('Phòng ban')['Doanh_thu'].mean()
print(trung_bình)
# Tính số lượng bán hàng cho mỗi phòng ban
số_lượng = df.groupby('Phòng ban')['Doanh_thu'].count()
print(số_lượng)
Ví dụ tính toán tổng hợp
Giả sử bạn có dữ liệu về lượt truy cập của người dùng trên website, và bạn muốn biết trung bình mỗi ngày trong tuần có bao nhiêu lượt truy cập. Đây là một bài toán kinh điển để áp dụng nhóm dữ liệu và hàm mean.
data = {'Ngày': ['T2', 'T3', 'T4', 'T5', 'T6', 'T4', 'T3'],
'Truy cập': [120, 150, 170, 160, 180, 300, 220]}
df = pd.DataFrame(data)
# Tính trung bình lượt truy cập theo ngày
truy_cập_trung_bình = df.groupby('Ngày')['Truy cập'].mean()
print(truy_cập_trung_bình)
3. Thực hành
Bài tập nhóm dữ liệu và tính tổng hợp
Giả sử bạn có một tập dữ liệu về doanh số bán hàng. Nhiệm vụ: nhóm chúng theo danh mục và tính tổng doanh số, giá trị trung bình của đơn hàng, và số lượng đơn hàng trong từng danh mục. Điều này sẽ giúp bạn hiểu rõ danh mục nào mang lại lợi nhuận lớn nhất và cơ hội tiềm năng.
data = {
'Danh mục': ['Điện tử', 'Thời trang', 'Điện tử', 'Sách', 'Sách', 'Thời trang'],
'Tổng đơn hàng': [250, 100, 150, 200, 500, 300]
}
df = pd.DataFrame(data)
# Tính tổng doanh số theo danh mục
tổng_doanh_số = df.groupby('Danh mục')['Tổng đơn hàng'].sum()
print(tổng_doanh_số)
# Tính giá trị trung bình của đơn hàng theo danh mục
giá_trị_trung_bình = df.groupby('Danh mục')['Tổng đơn hàng'].mean()
print(giá_trị_trung_bình)
# Tính số lượng đơn hàng theo danh mục
số_lượng_đơn = df.groupby('Danh mục')['Tổng đơn hàng'].count()
print(số_lượng_đơn)
Thảo luận kết quả nhóm dữ liệu và phân tích
Sau khi hoàn thành bài tập nhóm dữ liệu và tính tổng hợp, việc phân tích dữ liệu thu được rất hữu ích. Bạn có thể nhận ra rằng, ví dụ, danh mục "Sách" có tổng doanh số cao nhất nhờ một vài đơn hàng lớn. Hoặc "Thời trang" có số lượng đơn hàng lớn nhất nhưng giá trị trung bình đơn hàng lại thấp hơn so với "Điện tử".
Phân tích như vậy giúp đưa ra các quyết định kinh doanh hợp lý, ví dụ tập trung vào tăng kích thước đơn hàng trung bình trong danh mục có nhiều đơn hàng nhưng giá trị trung bình thấp.
4. Sai lầm và lưu ý
Khi làm việc với nhóm dữ liệu, một trong những lỗi phổ biến nhất là quên sử dụng dấu ngoặc khi áp dụng các hàm tổng hợp. Ví dụ, viết df.groupby('Danh mục').sum() thay vì df.groupby('Danh mục')['Tổng đơn hàng'].sum(). Ngoài ra, đôi khi có vấn đề với dữ liệu bị thiếu. Pandas có các phương thức tiện lợi để xử lý dữ liệu bị thiếu, như fillna(), cho phép thay thế giá trị thiếu bằng một giá trị cố định để tránh bóp méo kết quả.
Ngoài ra, hãy đảm bảo kiểu dữ liệu chính xác. Đôi khi các cột số có thể được đọc dưới dạng chuỗi, và việc cố gắng tính toán trên dữ liệu này sẽ gây ra lỗi.
Nếu bạn muốn tìm hiểu sâu hơn về pandas và phương thức groupby, tham khảo tài liệu chính thức pandas để xem chi tiết và ví dụ cụ thể.
GO TO FULL VERSION