Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Tìm hiểu về các phép toán Groupby trong Pandas
Dưới đây là hướng dẫn toàn diện về cách sử dụng các phép toán groupby trong Pandas, một công cụ quan trọng trong phân tích dữ liệu giúp chia nhóm và tính toán thống kê theo các nhóm khác nhau trong dữ liệu. Bài viết sẽ đưa bạn qua từng bước từ cơ bản đến nâng cao, cùng với các ví dụ chi tiết, để bạn có thể áp dụng các thao tác này một cách hiệu quả trong thực tế.
Aggregation là gì?
Aggregation là quá trình nhóm các dữ liệu theo từng nhóm hoặc loại nhất định và sau đó áp dụng các hàm thống kê như trung bình, tổng, độ lệch chuẩn... trên những nhóm này. Đây là kỹ thuật quan trọng giúp chúng ta hiểu rõ hơn về dữ liệu.
Dataset review
Dataset này dựa trên dữ liệu các "pokemon", với các thuộc tính như: Attack (điểm tấn công), Defense (điểm phòng thủ), HP (sức mạnh), Speed (tốc độ), Generation (thế hệ) và Legendary (pokemon huyền thoại hay không).
Chúng ta sẽ loại bỏ cột Name do chứa dữ liệu kiểu chuỗi không cần thiết cho quá trình groupby.
import pandas as pd # Đọc dữ liệu path='https://gist.githubusercontent.com/armgilles/194bcff35001e7eb53a2a8b441e8b2c6/raw/92200bc0a673d5ce2110aaad4544ed6c4010f687/pokemon.csv' pokemon_data = pd.read_csv(path, index_col = '#') # Xóa cột 'Name' del pokemon_data['Name']
Các bước sử dụng các phép toán groupby trong Pandas
Bước 1: Áp dụng groupby với hàm trung bình
Câu hỏi: Tính giá trị trung bình của thuộc tính "Total" cho từng "Generation".
Bài viết này được đăng tại [free tuts .net]
pokemon_data[['Total', 'Generation']].groupby('Generation').mean()
Kết quả:
Generation | Total |
---|---|
1 | 426.813253 |
2 | 418.283019 |
3 | 436.225000 |
4 | 459.016529 |
5 | 434.987879 |
6 | 436.378049 |
Bước 2: Áp dụng nhiều Hàm Aggregate trong ,ột groupby
Câu hỏi: Tính giá trị trung bình và độ lệch chuẩn của thuộc tính "Speed" cho từng thế hệ.
pokemon_data.groupby("Generation").agg( average_speed=("Speed","mean"), std_speed=("Speed", "std") )
Kết quả:
Generation | average_speed | std_speed |
---|---|---|
1 | 72.584337 | 29.675857 |
2 | 61.811321 | 27.263132 |
3 | 66.925000 | 31.331972 |
4 | 71.338843 | 28.475005 |
5 | 68.078788 | 28.726632 |
6 | 66.439024 | 25.691954 |
Bước 3: Groupby với nhiều cột
Câu hỏi: Tìm Attack cao nhất cho từng Generation và kiểm tra xem pokemon đó có phải là Legendary hay không.
pokemon_data.groupby(['Generation', 'Legendary']).agg( maximum_attack = ('Attack', 'max') )
Bước 4: Sắp xếp kết quả Groupby
Câu hỏi: Loại pokemon có Attack cao nhất cho từng Generation, cần sắp xếp kết quả để dễ quan sát.
pokemon_data.groupby(['Generation', 'Legendary']).agg( maximum_attack = ('Attack', 'max') ).sort_values(by = 'maximum_attack', ascending = False)
Bước 5: Sử dụng Groupby với lọc dữ liệu
Sử dụng groupby với filter để chọn ra các pokemon loại "Dragon" có Attack trung bình trên 100.
grouped = pokemon_data.groupby('Type 1') grouped.filter(lambda x: x['Attack'].mean() > 100)
Qua các bước này, bạn đã nắm được cách sử dụng groupby của Pandas để thực hiện các phép toán thống kê từ cơ bản đến nâng cao.
Kết bài
Sau khi hoàn thành bài viết này, bạn sẽ có cái nhìn toàn diện về các phép toán groupby trong Pandas và cách chúng giúp khai thác dữ liệu theo từng nhóm khác nhau. Bằng cách thực hành và áp dụng các ví dụ này, bạn sẽ nắm vững kỹ năng xử lý, phân tích dữ liệu và dễ dàng sử dụng groupby để giải quyết các bài toán thống kê phức tạp. Chúc bạn thành công trong hành trình chinh phục Pandas và các công cụ phân tích dữ liệu khác!