Hướng dẫn binning python - con trăn binning

Bởi Bernd Klein. Sửa đổi lần cuối: 24 tháng 3 năm 2022.Bernd Klein. Last modified: 24 Mar 2022.

Trên trang này

Giới thiệu

Hướng dẫn binning python - con trăn binning

Bánh dữ liệu, còn được gọi là xô hoặc rời rạc, là một kỹ thuật được sử dụng trong xử lý dữ liệu và thống kê. Binning có thể được sử dụng ví dụ, nếu có nhiều điểm dữ liệu có thể hơn các điểm dữ liệu được quan sát. Một ví dụ là chia chiều cao cơ thể của mọi người thành các khoảng hoặc loại. Chúng ta hãy giả sử, chúng ta có độ cao của 30 người. Các giá trị chiều dài có thể nằm trong khoảng thời gian dự đoán khoảng 1,30 mét đến 2,50 mét. Về mặt lý thuyết, có 120 giá trị CM khác nhau có thể, nhưng chúng ta có thể có tối đa 30 giá trị khác nhau từ nhóm mẫu của chúng tôi. Một cách để nhóm chúng có thể là đặt các giá trị đo vào các thùng dao động từ 1,30 - 1,50 mét, 1,50 - 1,70 mét, 1,70 - 1,90 mét, v.v. Điều này có nghĩa là các giá trị dữ liệu gốc, sẽ được gán cho một thùng vào wich mà chúng phù hợp theo kích thước của chúng. Các giá trị ban đầu sẽ được thay thế bằng các giá trị đại diện cho các khoảng tương ứng. Binning là một hình thức lượng tử hóa.

Các thùng không nhất thiết phải là số, chúng có thể là các giá trị phân loại dưới bất kỳ hình thức nào, như "chó", "mèo", "chuột đồng", v.v.

Binning cũng được sử dụng trong xử lý hình ảnh, Binning. Nó có thể được sử dụng để giảm lượng dữ liệu, bằng cách kết hợp pixel lân cận thành các pixel đơn. KXK Binning làm giảm các khu vực của K x K pixel thành pixel đơn.

Pandas cung cấp các cách dễ dàng để tạo thùng và dữ liệu thùng. Trước khi chúng tôi mô tả các chức năng gấu trúc này, chúng tôi sẽ giới thiệu các chức năng Python cơ bản, làm việc trên danh sách và bộ dữ liệu Python.

Binning trong Python

Hàm Python sau đây có thể được sử dụng để tạo thùng.

def create_bins(lower_bound, width, quantity):
    """ create_bins returns an equal-width (distance) partitioning. 
        It returns an ascending list of tuples, representing the intervals.
        A tuple bins[i], i.e. (bins[i][0], bins[i][1])  with i > 0 
        and i < quantity, satisfies the following conditions:
            (1) bins[i][0] + width == bins[i][1]
            (2) bins[i-1][0] + width == bins[i][0] and
                bins[i-1][1] + width == bins[i][1]
    """
    

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

Chúng tôi sẽ tạo bây giờ năm thùng (số lượng = 5) với chiều rộng 10 (chiều rộng = 10) bắt đầu từ 10 (Lower_bound = 10):

bins = create_bins(lower_bound=10,
                   width=10,
                   quantity=5)

bins

OUTPUT:

[(10, 20), (20, 30), (30, 40), (40, 50), (50, 60), (60, 70)]

Hàm tiếp theo 'find_bin' được gọi với một danh sách hoặc tuple của thùng 'thùng', phải là hai bộ phận hoặc danh sách của hai yếu tố. Hàm tìm chỉ mục của khoảng, trong đó có giá trị 'giá trị':

def find_bin(value, bins):
    """ bins is a list of tuples, like [(0,20), (20, 40), (40, 60)],
        binning returns the smallest index i of bins so that
        bin[i][0] <= value < bin[i][1]
    """
    
    for i in range(0, len(bins)):
        if bins[i][0] <= value < bins[i][1]:
            return i
    return -1

from collections import Counter

bins = create_bins(lower_bound=50,
                   width=4,
                   quantity=10)

print(bins)

weights_of_persons = [73.4, 69.3, 64.9, 75.6, 74.9, 80.3, 
                      78.6, 84.1, 88.9, 90.3, 83.4, 69.3, 
                      52.4, 58.3, 67.4, 74.0, 89.3, 63.4]

binned_weights = []

for value in weights_of_persons:
    bin_index = find_bin(value, bins)
    print(value, bin_index, bins[bin_index])
    binned_weights.append(bin_index)
    
frequencies = Counter(binned_weights)
print(frequencies)

OUTPUT:

[(50, 54), (54, 58), (58, 62), (62, 66), (66, 70), (70, 74), (74, 78), (78, 82), (82, 86), (86, 90), (90, 94)]
73.4 5 (70, 74)
69.3 4 (66, 70)
64.9 3 (62, 66)
75.6 6 (74, 78)
74.9 6 (74, 78)
80.3 7 (78, 82)
78.6 7 (78, 82)
84.1 8 (82, 86)
88.9 9 (86, 90)
90.3 10 (90, 94)
83.4 8 (82, 86)
69.3 4 (66, 70)
52.4 0 (50, 54)
58.3 2 (58, 62)
67.4 4 (66, 70)
74.0 6 (74, 78)
89.3 9 (86, 90)
63.4 3 (62, 66)
Counter({4: 3, 6: 3, 3: 2, 7: 2, 8: 2, 9: 2, 5: 1, 10: 1, 0: 1, 2: 1})

Binning với gấu trúc

Các gấu trúc mô -đun của Python cung cấp các chức năng mạnh mẽ cho việc sử dụng dữ liệu. Chúng tôi sẽ chứng minh điều này bằng cách sử dụng dữ liệu trước đây của chúng tôi.

Thùng được sử dụng bởi gấu trúc

Chúng tôi đã sử dụng một danh sách các bộ dữ liệu như các thùng trong ví dụ trước của chúng tôi. Chúng tôi phải biến danh sách này thành một cấu trúc dữ liệu có thể sử dụng cho hàm gấu trúc "cắt". Cấu trúc dữ liệu này là một khoảng thời gian. Chúng ta có thể làm điều này với pd.IntervalIndex.from_tuples:

import pandas as pd

bins2 = pd.IntervalIndex.from_tuples(bins)

"Cut" là tên của hàm gấu trúc, cần thiết để các giá trị thùng thành thùng. "Cut" có nhiều tham số nhưng các tham số quan trọng nhất là "x" cho các giá trị thực tế und "thùng", xác định khoảng thời gian. "X" có thể là bất kỳ cấu trúc giống như mảng 1 chiều nào, ví dụ: Tuples, Danh sách, nd-marrays, v.v.

categorical_object = pd.cut(weights_of_persons, bins2)
print(categorical_object)

OUTPUT:

[(70, 74], (66, 70], (62, 66], (74, 78], (74, 78], ..., (58, 62], (66, 70], (70, 74], (86, 90], (62, 66]]
Length: 18
Categories (11, interval[int64, right]): [(50, 54] < (54, 58] < (58, 62] < (62, 66] ... (78, 82] < (82, 86] < (86, 90] < (90, 94]]

Kết quả của hàm gấu trúc "cắt" là cái gọi là "đối tượng phân loại". Mỗi thùng là một loại. Các loại được mô tả trong một ký hiệu toán học. "(70, 74]" có nghĩa là các thùng này chứa các giá trị từ 70 đến 74 trong khi 70 không được bao gồm nhưng bao gồm 74. . Đôi khi nó cũng được gọi là một khoảng thời gian nửa đóng.

Chúng tôi cũng đã định nghĩa các thùng trong chương trước của chúng tôi là một nửa khoảng mở, nhưng theo cách khác, tức là bên trái đóng và bên phải mở. Khi chúng tôi sử dụng pd.IntervalIndex.from_tuples, chúng tôi có thể đã xác định "độ mở" của các thùng này bằng cách đặt tham số "đã đóng" thành một trong các giá trị:

  • 'trái': đóng ở phía bên trái và mở bên phải
  • 'Phải': (mặc định) mở ở phía bên trái và đóng bên phải
  • 'cả hai': đóng ở cả hai bên
  • 'Không': Mở ở cả hai bên

Để có hành vi tương tự như trong chương trước của chúng tôi, chúng tôi sẽ đặt tham số đóng thành "trái":

bins2 = pd.IntervalIndex.from_tuples(bins, closed="left")
categorical_object = pd.cut(weights_of_persons, bins2)
print(categorical_object)

OUTPUT:

bins = create_bins(lower_bound=10,
                   width=10,
                   quantity=5)

bins
0

Những cách khác để xác định thùng

Chúng tôi đã sử dụng một khoảng thời gian làm thùng để chia dữ liệu trọng lượng. Hàm "cắt" cũng có thể đối phó với hai loại biểu diễn bin khác:

  • Một số nguyên: Xác định số lượng thùng có chiều rộng bằng nhau trong phạm vi của các giá trị "x".
    bins = create_bins(lower_bound=10,
                       width=10,
                       quantity=5)
    
    bins
    
    1
    defining the number of equal-width bins in the range of the values "x". The
    bins = create_bins(lower_bound=10,
                       width=10,
                       quantity=5)
    
    bins
    
    1
  • Trình tự vô hướng: Xác định các cạnh bin cho phép không đồng nhất
    bins = create_bins(lower_bound=10,
                       width=10,
                       quantity=5)
    
    bins
    
    2
    Defines the bin edges allowing for non-uniform
    bins = create_bins(lower_bound=10,
                       width=10,
                       quantity=5)
    
    bins
    
    2

bins = create_bins(lower_bound=10,
                   width=10,
                   quantity=5)

bins
3

OUTPUT:

bins = create_bins(lower_bound=10,
                   width=10,
                   quantity=5)

bins
4

bins = create_bins(lower_bound=10,
                   width=10,
                   quantity=5)

bins
5

OUTPUT:

bins = create_bins(lower_bound=10,
                   width=10,
                   quantity=5)

bins
6

Số lượng bin và số lượng giá trị

Câu hỏi tiếp theo và thú vị nhất là làm thế nào chúng ta có thể thấy số lượng thùng thực tế. Điều này có thể được thực hiện với hàm "value_counts":

bins = create_bins(lower_bound=10,
                   width=10,
                   quantity=5)

bins
7

OUTPUT:

bins = create_bins(lower_bound=10,
                   width=10,
                   quantity=5)

bins
8

"Ít nhất

bins = create_bins(lower_bound=10,
                   width=10,
                   quantity=5)

bins
9

OUTPUT:

[(10, 20), (20, 30), (30, 40), (40, 50), (50, 60), (60, 70)]
0

Các danh mục là khoảng thời gian của các danh mục của các chỉ số nhãn:

[(10, 20), (20, 30), (30, 40), (40, 50), (50, 60), (60, 70)]
1

OUTPUT:

[(10, 20), (20, 30), (30, 40), (40, 50), (50, 60), (60, 70)]
2

Sự tương ứng từ dữ liệu trọng lượng đến thùng:

[(10, 20), (20, 30), (30, 40), (40, 50), (50, 60), (60, 70)]
3

OUTPUT:

[(10, 20), (20, 30), (30, 40), (40, 50), (50, 60), (60, 70)]
4

[(10, 20), (20, 30), (30, 40), (40, 50), (50, 60), (60, 70)]
5

OUTPUT:

[(10, 20), (20, 30), (30, 40), (40, 50), (50, 60), (60, 70)]
2

Đặt tên thùng

Hãy tưởng tượng, chúng tôi có một trường đại học, trong đó có ba cấp độ danh dự Latin tùy thuộc vào điểm trung bình (GPA): GPA):

  • "Summa cum laude" yêu cầu GPA trên 3.9
  • "Magna cum laude" nếu GPA trên 3,8
  • "Cum laude" nếu điểm trung bình từ 3,6 trở lên

[(10, 20), (20, 30), (30, 40), (40, 50), (50, 60), (60, 70)]
7

OUTPUT:

[(10, 20), (20, 30), (30, 40), (40, 50), (50, 60), (60, 70)]
8

Chúng ta hãy xem xét các bằng cấp cá nhân của mỗi học sinh:

[(10, 20), (20, 30), (30, 40), (40, 50), (50, 60), (60, 70)]
9

OUTPUT:

def find_bin(value, bins):
    """ bins is a list of tuples, like [(0,20), (20, 40), (40, 60)],
        binning returns the smallest index i of bins so that
        bin[i][0] <= value < bin[i][1]
    """
    
    for i in range(0, len(bins)):
        if bins[i][0] <= value < bins[i][1]:
            return i
    return -1
0

Đào tạo Python sống

Hướng dẫn binning python - con trăn binning

Các khóa học trực tuyến sắp tới

Ghi danh ở đây