Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Phương pháp Binning làm mượt dữ liệu trong Python

Nhiều khi chúng ta dùng phương pháp làm mượt dữ liệu (data smoothing) để làm cho dữ liệu phù hợp và định lượng cho phân tích thống kê. Trong quá trình làm mượt, chúng ta xác định một khoảng cũng gọi là bin (thùng), và bất kỳ giá trị dữ liệu nào trong khoảng đó được đưa vào bin. Đây gọi là phương pháp binning. Dưới đây là ví dụ về binning. Sau đó sẽ thấy cách thực hiện binning bằng chương trình Python.

Ví dụ Binning

Lấy một dãy số. Tìm giá trị max và min. Quyết định số lượng bin cần thiết tùy thuộc vào số điểm dữ liệu phân tích cần. Tạo các nhóm và gán từng số vào nhóm. Giá trị trên bị loại trừ và thuộc nhóm tiếp theo.

Ví dụ

Các số cho trước: 12, 32, 10, 17, 19, 28, 22, 26, 29, 16
Số nhóm: 4
Giá trị Max: 32, Min: 10
Các nhóm là: (10-15), (15-21), (21-27), (27-32)

Kết quả

Đưa các số vào bin, ta được kết quả:

12 -> (10-15)
32 -> (27-32)
10 -> (10-15)
17 -> (15-21)
19 -> (15-21)
28 -> (27-32)
22 -> (21-27)
26 -> (21-27)
29 -> (27-32)
16 -> (15-21)

Chương trình Binning

Đối với chương trình này, định nghĩa hai hàm. Hàm tạo bin bằng cách xác định giới hạn trên và dưới. Hàm còn lại gán giá trị đầu vào cho từng bin. Mỗi bin cũng có một chỉ số. Xem cách mỗi giá trị đầu vào được gán vào bin và theo dõi số lượng giá trị đi vào một bin cụ thể.

Ví dụ

from collections import Counter

def Binning_method(lower_bound, width, quantity):
    binning = []
    for low in range(lower_bound, lower_bound + quantity * width + 1, width):
        binning.append((low, low + width))
    return binning

def bin_assign(v, b):
    for i in range(0, len(b)):
        if b[i][0] <= v < b[i][1]:
            return i

the_bins = Binning_method(lower_bound=50, width=4, quantity=10)
print("Các Bin: \n", the_bins)

weights_of_objects = [89.2, 57.2, 63.4, 84.6, 90.2, 60.3, 88.7, 65.2, 79.8, 80.2, 93.5, 79.3, 72.5, 59.2, 77.2, 67.0, 88.2, 73.5]
print("\nGiá trị đã binning:\n")
binned_weight = []
for val in weights_of_objects:
    index = bin_assign(val, the_bins)
    print(val, "-with index-", index, ":", the_bins[index])
    binned_weight.append(index)

freq = Counter(binned_weight)
print("\nSố lượng giá trị trong mỗi chỉ số: ")
print(freq)

Kết quả

Chạy đoạn code trên cho kết quả sau:

Các Bin:   [(50, 54), (54, 58), (58, 62), (62, 66), (66, 70), (70, 74), (74, 78), (78, 82), (82, 86), (86, 90), (90, 94)]
Giá trị đã binning:
89.2 -with index- 9 : (86, 90)
57.2 -with index- 1 : (54, 58)
63.4 -with index- 3 : (62, 66)
84.6 -with index- 8 : (82, 86)
90.2 -with index- 10 : (90, 94)
60.3 -with index- 2 : (58, 62)
88.7 -with index- 9 : (86, 90)
65.2 -with index- 3 : (62, 66)
79.8 -with index- 7 : (78, 82)
80.2 -with index- 7 : (78, 82)
93.5 -with index- 10 : (90, 94)
79.3 -with index- 7 : (78, 82)
72.5 -with index- 5 : (70, 74)
59.2 -with index- 2 : (58, 62)
77.2 -with index- 6 : (74, 78)
67.0 -with index- 4 : (66, 70)
88.2 -with index- 9 : (86, 90)
73.5 -with index- 5 : (70, 74)
Số lượng giá trị trong mỗi chỉ số: Counter({9: 3, 7: 3, 3: 2, 10: 2, 2: 2, 5: 2, 1: 1, 8: 1, 6: 1, 4: 1})