Hướng dẫn dùng pd merge python

Khi làm việc với dữ liệu bảng chúng ta thường xuyên phải thống kê dữ liệu theo các nhóm để bắt dữ liệu tạo ra những thông tin insight hữu ích cho phân tích và ra quyết định. Ngoài ra những feature tốt, có sức mạnh phân loại và dự báo cao có thể được tạo thành từ việc thống kê dữ liệu theo nhóm. Quá trình thống kê và phân tích dữ liệu mặc dù tốn kém về mặt thời gian nhưng lại rất quan trọng đối với mô hình. Vì vậy chúng ta cần thực hiện chúng kỹ lưỡng và cần kết hợp giữa kỹ năng thống kê và kinh nghiệm thực tiễn.

Ở mục 5 này chúng ta sẽ làm quen với hai câu lệnh kinh điển trong pandas được sử dụng nhiều trong thống kê theo nhóm trên pandas đó là

tax_labels
low        15221
normal     73540
high      117807
Name: tax, dtype: int64
1 và
tax_labels
low        15221
normal     73540
high      117807
Name: tax, dtype: int64
2.

2.4.1. df.groupby[]

groupby là câu lệnh cho phép bạn áp dụng những hàm số trên measurements dựa trên việc phân nhóm dữ liệu theo các dimensions.

Nếu bạn chưa hiểu về khái niệm measurement và dimension thì mình có thể giải thích đơn giản là: measurement là những biến có thể cộng trừ nhân chia và đo đếm được còn dimension là những biến dùng để phân nhóm dữ liệu. Ví dụ chiều cao là một measurement có thể đo theo dimension là giới tính gồm các nhóm nam/nữ.

Cú pháp của hàm

tax_labels
low        15221
normal     73540
high      117807
Name: tax, dtype: int64
1 khá đơn giản:

Chúng ta cần xác định các chiều dimension trong

tax_labels
low        15221
normal     73540
high      117807
Name: tax, dtype: int64
4. Phía sau
tax_labels
low        15221
normal     73540
high      117807
Name: tax, dtype: int64
5 là một list các measurements mà ta cần áp dụng hàm lên trên những trường này.

df.groupby['tax_labels']['tax'].sum[]

tax_labels
low        15221
normal     73540
high      117807
Name: tax, dtype: int64

Theo cách trên thì ta chỉ áp dụng được với những hàm tính toán như

tax_labels
low        15221
normal     73540
high      117807
Name: tax, dtype: int64
6 có sẵn trong dataframe. Nếu muốn sử dụng
tax_labels
low        15221
normal     73540
high      117807
Name: tax, dtype: int64
5 cho mọi biến đổi hàm chúng ta có thể dùng hàm
tax_labels
low        15221
normal     73540
high      117807
Name: tax, dtype: int64
8 trong
tax_labels
low        15221
normal     73540
high      117807
Name: tax, dtype: int64
9.

df.groupby['tax_labels']['tax'].apply[lambda x: sum[x]]

tax_labels
low        15221
normal     73540
high      117807
Name: tax, dtype: int64

Nếu muốn áp dụng tính toán cho nhiều measurements một lúc thì truyền vào một list các measurements. Chẳng hạn bên dưới ta truyền vào một list gồm

df.groupby['tax_labels']['tax'].apply[lambda x: sum[x]]
0

import numpy as np
df.groupby['tax_labels'][['tax', 'rm']].apply[lambda x: np.mean[x]]

taxrmtax_labelslow220.594206.52564normal310.295366.42074high589.035006.04020

Chúng ta cũng có thể tự định nghĩa các hàm được tuỳ biến theo ý muốn:

# Tính quantile 90% của mỗi nhóm tax_labels.
def quantile[x]:
  q_90 = np.quantile[x, 0.9]
  return q_90

df.groupby['tax_labels']['tax'].apply[lambda x: quantile[x]]

tax_labels
low       244.2
normal    384.0
high      666.0
Name: tax, dtype: float64

Hoặc group theo nhiều chiều dữ liệu. Khi đó phải truyền vào

tax_labels
low        15221
normal     73540
high      117807
Name: tax, dtype: int64
5 một list các dimension.

df.groupby[['tax_labels', 'chas']]['tax'].apply[lambda x: quantile[x]]

tax_labels  chas
low         0       244.6
            1       223.0
normal      0       384.0
            1       307.0
high        0       666.0
            1       666.0
Name: tax, dtype: float64

Ưu điểm của

tax_labels
low        15221
normal     73540
high      117807
Name: tax, dtype: int64
5 đó là nhanh gọn, dễ hiểu. Nhưng nhược điểm của
tax_labels
low        15221
normal     73540
high      117807
Name: tax, dtype: int64
5 đó là chúng ta chỉ có thể áp dụng cùng một biến đổi hàm số cho mọi measurements. Ở
df.groupby['tax_labels']['tax'].apply[lambda x: sum[x]]
4 bạn có thể tuỳ biến sâu hơn từng hàm đối với từng measurement nhưng cú pháp sẽ phức tạp hơn một chút.

2.4.2. Pivotable

Pivot table là một công thức có ứng dụng rất quan trọng trong pandas. Nó giúp cho chúng ta thực hiện các thống kê trên các biến measurement theo các chiều dimension.

Bạn sẽ hình dung ra cách áp dụng của

df.groupby['tax_labels']['tax'].apply[lambda x: sum[x]]
5 thông qua ví dụ bên dưới.

import numpy as np

pd.pivot_table[df, 
               columns = ['tax_labels', 'chas'], 
               index = ['rad'], 
               values = 'tax',
               aggfunc = np.sum]

tax_labelslownormalhighchas010101rad1241198496804220218000445600036424446120801273042155020434214712222052853216221758289269282160058070388807888042870008005695153500240000825845328

Bạn hình dung ra nội dung của bảng thống kê trên chứ?

Bảng thống kê trên sẽ tính tổng số thuế thu được phân theo các cột là

df.groupby['tax_labels']['tax'].apply[lambda x: sum[x]]
6 và
df.groupby['tax_labels']['tax'].apply[lambda x: sum[x]]
7 [tax_labels gồm low, normal và high và chas gồm 0-không bao bởi sông, 1-bao bởi sông].

Các dòng lại được phân nhóm theo chỉ số mức độ tiếp cận đường cao tốc

df.groupby['tax_labels']['tax'].apply[lambda x: sum[x]]
8 gồm các giá trị
df.groupby['tax_labels']['tax'].apply[lambda x: sum[x]]
9.

Như vậy ta có thể hình dung được trong công thức của pivot_table, các đối số của nó có ý nghĩa như sau:

  • tax_labels
    low        15221
    normal     73540
    high      117807
    Name: tax, dtype: int64
    
    0: List các dimensions của cột mà chúng ta cần thống kê.

  • tax_labels
    low        15221
    normal     73540
    high      117807
    Name: tax, dtype: int64
    
    1: List các dimensions theo dòng mà chúng ta cần thống kê.

  • tax_labels
    low        15221
    normal     73540
    high      117807
    Name: tax, dtype: int64
    
    2: List các measurement chúng ta sử dụng để tính toán.

  • tax_labels
    low        15221
    normal     73540
    high      117807
    Name: tax, dtype: int64
    
    3: Qui định hàm số chúng ta sẽ dùng để biến đổi measurement. Trong ví dụ này chúng ta áp dụng hàm np.sum cho toán bộ các measurement.

Làm sao để qui định mỗi measurement một công thức?

Giả sử chúng ta cần tính thêm trung bình số phòng trên căn hộ. Tức là thêm trung bình của trường

tax_labels
low        15221
normal     73540
high      117807
Name: tax, dtype: int64
4 trong khi vẫn cần tính tổng của trường
tax_labels
low        15221
normal     73540
high      117807
Name: tax, dtype: int64
5. Khi đó cần khai báo
tax_labels
low        15221
normal     73540
high      117807
Name: tax, dtype: int64
3 dưới dạng một dictionary có key là tên của measurement và value là công thức của measurement.

tax_labels
low        15221
normal     73540
high      117807
Name: tax, dtype: int64
0

rmtaxtax_labelslownormalhighlownormalhighchas010101010101rad16.230007.92306.49553NaN6.54000NaN24119849680422026.08611NaN6.98827NaNNaNNaN18000445600036.442596.80556.38275NaN6.66600NaN6424446120801273046.79033NaN6.102016.178755.96652NaN2155020434214712222056.462777.64506.509226.070675.982176.44614285321622175828926928216NaNNaN6.11888NaN6.07800NaN00580703888077.03025NaN6.53008NaNNaNNaN888042870008NaNNaN7.024636.67020NaNNaN00569515350024NaNNaNNaNNaN5.984146.611370000825845328

Bảng của chúng ta đã tăng gấp đôi số cột. Dòng đầu tiên của bảng là

tax_labels
low        15221
normal     73540
high      117807
Name: tax, dtype: int64
4,
tax_labels
low        15221
normal     73540
high      117807
Name: tax, dtype: int64
5 là những thông tin ứng với từng measurement.

Chủ Đề