Python từ nhập môn đến thành thạo mô hình thuật toán (53): Ứng dụng của Pandas - 4

Mục lục

Ứng dụng của DataFrame

Phân tích dữ liệu

Sắp xếp và Top-N

Nhóm và tổng hợp

Bảng xoay và bảng chéo

Thị giác hóa dữ liệu

Ứng dụng của DataFrame

Phân tích dữ liệu

Sau khi chuẩn bị dữ liệu, bước tiếp theo là phân tích dữ liệu để trích xuất thông tin hữu ích. Một trong những phương pháp phổ biến là sử dụng các thống kê mô tả như trung bình, độ lệch chuẩn, giá trị cực đại, cực tiểu. Ví dụ sau minh họa cách tính toán các chỉ số này:

import numpy as np
import pandas as pd

diem_so = np.random.randint(50, 101, (5, 3))
ten_sinh_vien = ('Quan Vũ', 'Chu Du', 'Triệu Tử Đệ', 'Tào Tháo', 'Lữ Mông')
mon_hoc = ('Văn học', 'Toán học', 'Ngoại ngữ')
df = pd.DataFrame(data=diem_so, columns=mon_hoc, index=ten_sinh_vien)
df

Kết quả:

     Văn học  Toán học  Ngoại ngữ
Quan Vũ    96       72        73
Chu Du    72       70        97
Triệu Tử Đệ 74       51        79
Tào Tháo  100      54        54
Lữ Mông   89      100        88

Sử dụng các phương thức như mean(), max(), min(), std() để tính toán:

Tính điểm trung bình từng môn học:

df.mean()

Kết quả:

Văn học    86.2
Toán học   69.4
Ngoại ngữ  78.2
dtype: float64

Tính điểm trung bình từng sinh viên:

df.mean(axis=1)

Kết quả:

Quan Vũ    80.333333
Chu Du     79.666667
Triệu Tử Đệ 68.000000
Tào Tháo   69.333333
Lữ Mông    92.333333
dtype: float64

Sắp xếp và Top-N

Để sắp xếp dữ liệu, sử dụng phương thức sort_values() với tham số by chỉ định cột cần sắp xếp và ascending xác định thứ tự. Ví dụ sau sắp xếp theo điểm Văn học giảm dần:

df.sort_values(by='Văn học', ascending=False)

Kết quả:

     Văn học  Toán học  Ngoại ngữ
Tào Tháo   100       54        54
Quan Vũ    96        72        73
Lữ Mông    89       100        88
Triệu Tử Đệ 74       51        79
Chu Du     72       70        97

Để lấy Top-N giá trị, sử dụng nlargest()nsmallest():

Lấy 3 sinh viên có điểm Văn học cao nhất:

df.nlargest(3, 'Văn học')

Kết quả:

     Văn học  Toán học  Ngoại ngữ
Tào Tháo   100       54        54
Quan Vũ    96        72        73
Lữ Mông    89       100        88

Nhóm và tổng hợp

Đọc dữ liệu bán hàng từ file Excel:

df = pd.read_excel('Doanh_so_2020.xlsx')
df.head()

Kết quả:

     Ngay_ban  Khu_vuc  Kenh_ban  So_don_hang  Thuong_hieu  Gia_ban  So_luong
0  2020-01-01    TP.HCM      TikTok   182894-455   Thỏ Trắng     99       83
1  2020-01-01    TP.HCM      Shopee   205635-402   Thỏ Trắng    219       29
2  2020-01-01    TP.HCM      Lazada   205654-021   Thỏ Trắng    169       85
3  2020-01-01    TP.HCM      Lazada   205654-519   Thỏ Trắng    169       14
4  2020-01-01    TP.HCM      Shopee   377781-010   Cá Sấu Xám   249       61

Tính doanh thu theo khu vực:

df['Doanh_thu'] = df['Gia_ban'] * df['So_luong']
df.groupby('Khu_vuc').Doanh_thu.sum()

Kết quả:

Khu_vuc
TP.HCM      11610489
Hà Nội      12477717
Hải Phòng    1767301
Đà Nẵng       895463
HCMC         1617949
Nha Trang     537079
Đồng Nai      687862
Cần Thơ     10178227
Name: Doanh_thu, dtype: int64

Bảng xoay và bảng chéo

Sử dụng pivot_table() để tạo bảng xoay:

pd.pivot_table(df, index='Khu_vuc', values='Doanh_thu', aggfunc='sum')

Kết quả:

         Doanh_thu
Khu_vuc
TP.HCM      11610489
Hà Nội      12477717
Hải Phòng    1767301
Đà Nẵng       895463
HCMC         1617949
Nha Trang     537079
Đồng Nai      687862
Cần Thơ     10178227

Tạo bảng chéo:

sales_area, sales_month, sales_amount = df['Khu_vuc'], df['Thang'], df['Doanh_thu']
pd.crosstab(
    index=sales_area, columns=sales_month, values=sales_amount, aggfunc='sum'
).fillna(0).applymap(int)

Thị giác hóa dữ liệu

Vẽ biểu đồ cột so sánh doanh thu theo khu vực:

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = 'Arial Unicode MS'
temp = pd.pivot_table(df, index='Khu_vuc', values='Doanh_thu', aggfunc='sum')
temp.plot(figsize=(8, 4), kind='bar')
plt.xticks(rotation=0)
plt.show()

Vẽ biểu đồ tròn:

temp.sort_values(by='Doanh_thu', ascending=False).plot(
    figsize=(6, 6), kind='pie', y='Doanh_thu', 
    autopct='%.2f%%', pctdistance=0.8,
    wedgeprops=dict(linewidth=1, width=0.35)
)
plt.legend(loc='center')
plt.show()

Thẻ: Pandas Phân tích dữ liệu Nhóm và tổng hợp Bảng xoay Thị giác hóa dữ liệu

Đăng vào ngày 9 tháng 7 lúc 20:04