Hướng dẫn how do you binning a panda in python? - làm thế nào để bạn bắt một con gấu trúc trong trăn?
Show Giới thiệuKhi xử lý dữ liệu số liên tục, thường sẽ hữu ích khi chia dữ liệu thành nhiều thùng để phân tích thêm. Có một số thuật ngữ khác nhau để tạo ra bao gồm xô, binning rời rạc, rời rạc hoặc định lượng hóa. Pandas hỗ trợ các phương pháp này bằng cách sử dụng các hàm pd.qcut(df['ext price'], q=4)0 và pd.qcut(df['ext price'], q=4)1. Bài viết này sẽ mô tả ngắn gọn lý do tại sao bạn có thể muốn chia dữ liệu của mình và cách sử dụng các hàm gấu trúc để chuyển đổi dữ liệu liên tục thành một tập hợp các thùng riêng biệt. Giống như nhiều chức năng của gấu trúc, pd.qcut(df['ext price'], q=4)0 và pd.qcut(df['ext price'], q=4)1 có vẻ đơn giản nhưng có rất nhiều khả năng được đóng gói trong các chức năng đó. Ngay cả đối với người dùng có nhiều kinh nghiệm, tôi nghĩ bạn sẽ học được một vài thủ thuật sẽ hữu ích cho phân tích của riêng bạn & NBSP. BinningMột trong những trường hợp phổ biến nhất của Binning được thực hiện đằng sau hậu trường cho bạn khi tạo biểu đồ. Biểu đồ dưới đây của dữ liệu bán hàng của khách hàng, cho thấy cách một tập hợp các số bán hàng liên tục có thể được chia thành các thùng riêng biệt (ví dụ: $ 60.000 - 70.000 đô la) và sau đó được sử dụng để nhóm và đếm tài khoản & nbsp; Dưới đây là mã cho thấy cách chúng tôi tóm tắt thông tin bán hàng năm 2018 cho một nhóm khách hàng. Đại diện này minh họa số lượng khách hàng có doanh số trong các phạm vi nhất định. Mã mẫu được bao gồm trong sổ ghi chép này nếu bạn muốn theo dõi & nbsp; cùng. import pandas as pd import numpy as np import seaborn as sns sns.set_style('whitegrid') raw_df = pd.read_excel('2018_Sales_Total.xlsx') df = raw_df.groupby(['account number', 'name'])['ext price'].sum().reset_index() df['ext price'].plot(kind='hist') Có nhiều kịch bản khác mà bạn có thể muốn xác định thùng của riêng bạn. Trong ví dụ trên, có 8 thùng với dữ liệu. Điều gì sẽ xảy ra nếu chúng ta muốn chia khách hàng của mình thành các nhóm 3, 4 hoặc 5? Đó là nơi mà Pandas pd.qcut(df['ext price'], q=4)1 và pd.qcut(df['ext price'], q=4)0 phát huy tác dụng. Các chức năng này nghe có vẻ tương tự và thực hiện các chức năng Binning tương tự nhưng có sự khác biệt có thể gây nhầm lẫn với người dùng mới. Họ cũng có một số tùy chọn có thể làm cho chúng rất hữu ích cho phân tích hàng ngày. Phần còn lại của bài viết sẽ cho thấy sự khác biệt của họ là gì và cách sử dụng & nbsp; chúng. QcutTài liệu gấu trúc mô tả pd.qcut(df['ext price'], q=4)1 là một chức năng rời rạc dựa trên lượng tử. Điều này về cơ bản có nghĩa là pd.qcut(df['ext price'], q=4)1 cố gắng chia dữ liệu cơ bản thành các thùng có kích thước bằng nhau. Hàm xác định các thùng sử dụng phần trăm dựa trên phân phối dữ liệu, chứ không phải các cạnh số thực của các thùng & nbsp; Nếu bạn đã sử dụng chức năng Pandas pd.qcut(df['ext price'], q=4)8, bạn đã thấy một ví dụ về các khái niệm cơ bản được biểu thị bằng pd.qcut(df['ext price'], q=4)1: df['ext price'].describe() count 20.000000 mean 101711.287500 std 27037.449673 min 55733.050000 25% 89137.707500 50% 100271.535000 75% 110132.552500 max 184793.700000 Name: ext price, dtype: float64 Hãy ghi nhớ các giá trị cho tỷ lệ phần trăm 25%, 50% và 75% khi chúng ta xem xét trực tiếp bằng cách sử dụng pd.qcut(df['ext price'], q=4)1. Việc sử dụng đơn giản nhất của pd.qcut(df['ext price'], q=4)1 là xác định số lượng lượng tử và để gấu trúc tìm ra cách phân chia dữ liệu. Trong ví dụ dưới đây, chúng tôi bảo Pandas tạo ra 4 nhóm có kích thước bằng nhau của & NBSP; dữ liệu. pd.qcut(df['ext price'], q=4) 0 (55733.049000000006, 89137.708] 1 (89137.708, 100271.535] 2 (55733.049000000006, 89137.708] .... 17 (110132.552, 184793.7] 18 (100271.535, 110132.552] 19 (100271.535, 110132.552] Name: ext price, dtype: category Categories (4, interval[float64]): [(55733.049000000006, 89137.708] < (89137.708, 100271.535] < (100271.535, 110132.552] < (110132.552, 184793.7]] Kết quả là một chuỗi phân loại đại diện cho các thùng bán hàng. Bởi vì chúng tôi đã yêu cầu các lượng tử với 0 (55733.049000000006, 89137.708] 1 (89137.708, 100271.535] 2 (55733.049000000006, 89137.708] .... 17 (110132.552, 184793.7] 18 (100271.535, 110132.552] 19 (100271.535, 110132.552] Name: ext price, dtype: category Categories (4, interval[float64]): [(55733.049000000006, 89137.708] < (89137.708, 100271.535] < (100271.535, 110132.552] < (110132.552, 184793.7]]2 các thùng phù hợp với phần trăm từ hàm pd.qcut(df['ext price'], q=4)8. Một trường hợp sử dụng phổ biến là lưu trữ kết quả thùng trong DataFrame gốc để phân tích trong tương lai. Ví dụ này, chúng tôi sẽ tạo 4 thùng (hay còn gọi là tứ phân) và 10 thùng (còn gọi là deciles) và lưu trữ kết quả trong bản gốc & nbsp; dataFrame: df['quantile_ex_1'] = pd.qcut(df['ext price'], q=4) df['quantile_ex_2'] = pd.qcut(df['ext price'], q=10, precision=0) df.head()
Purdy-Kunde (76471.0, 87168.0] df['quantile_ex_1'].value_counts() (110132.552, 184793.7] 5 (100271.535, 110132.552] 5 (89137.708, 100271.535] 5 (55733.049000000006, 89137.708] 5 Name: quantile_ex_1, dtype: int64 Kulas inc df['quantile_ex_2'].value_counts() (124778.0, 184794.0] 2 (112290.0, 124778.0] 2 (105938.0, 112290.0] 2 (103606.0, 105938.0] 2 (100272.0, 103606.0] 2 (95908.0, 100272.0] 2 (90686.0, 95908.0] 2 (87168.0, 90686.0] 2 (76471.0, 87168.0] 2 (55732.0, 76471.0] 2 Name: quantile_ex_2, dtype: int64 (110132.552, 184793.7] (124778.0, 184794.0] df['ext price'].describe()0
Purdy-Kunde (76471.0, 87168.0] df['ext price'].describe()1 df['ext price'].describe()2 Kulas inc (110132.552, 184793.7]
(90686.0, 95908.0] df['ext price'].describe()3
Purdy-Kunde df['ext price'].describe()4
(76471.0, 87168.0] Kulas inc df['ext price'].describe()5
Đúng như dự đoán, chúng tôi hiện có phân phối khách hàng bằng nhau trên 5 thùng và kết quả được hiển thị một cách dễ hiểu & nbsp; Một mục quan trọng cần lưu ý khi sử dụng pd.qcut(df['ext price'], q=4)1 là các lượng tử phải nhỏ hơn 1. Dưới đây là một số ví dụ về phân phối. Trong hầu hết các trường hợp, nó đơn giản hơn để xác định df['quantile_ex_1'] = pd.qcut(df['ext price'], q=4) df['quantile_ex_2'] = pd.qcut(df['ext price'], q=10, precision=0) df.head()2 là một & nbsp; số nguyên: df['ext price'].describe()6
Purdy-Kunde (76471.0, 87168.0]Kulas inc (110132.552, 184793.7] (124778.0, 184794.0] Kim cương Một số ví dụ nên làm cho sự khác biệt này & nbsp; rõ ràng. Để đơn giản, tôi sẽ xóa các cột trước để giữ các ví dụ & nbsp; ngắn: df['ext price'].describe()7 Đối với ví dụ đầu tiên, chúng ta có thể cắt dữ liệu thành 4 kích thước thùng bằng nhau. Pandas sẽ thực hiện toán học đằng sau hậu trường để xác định cách chia dữ liệu được đặt thành các nhóm 4 & nbsp này: các nhóm: df['ext price'].describe()8 df['ext price'].describe()9 Hãy cùng nhìn vào & nbsp; phân phối: count 20.000000 mean 101711.287500 std 27037.449673 min 55733.050000 25% 89137.707500 50% 100271.535000 75% 110132.552500 max 184793.700000 Name: ext price, dtype: float640 count 20.000000 mean 101711.287500 std 27037.449673 min 55733.050000 25% 89137.707500 50% 100271.535000 75% 110132.552500 max 184793.700000 Name: ext price, dtype: float641 Điều đầu tiên bạn nhận thấy là các phạm vi bin là khoảng 32.265 nhưng sự phân phối các phần tử bin không bằng nhau. Các thùng có phân phối 12, 5, 2 và 1 (các) mục trong mỗi thùng. Tóm lại, đó là sự khác biệt thiết yếu giữa pd.qcut(df['ext price'], q=4)0 và pd.qcut(df['ext price'], q=4)1. Thông tin Nếu bạn muốn phân phối bằng nhau của các mục trong thùng của mình, hãy sử dụng pd.qcut(df['ext price'], q=4)1. Nếu bạn muốn xác định phạm vi bin số của riêng bạn, thì hãy sử dụng pd.qcut(df['ext price'], q=4)0. Trước khi đi xa hơn, tôi muốn đưa ra một sự bồi dưỡng nhanh về ký hiệu khoảng thời gian. Trong các ví dụ trên, đã có sự sử dụng tự do của () và [], để biểu thị cách xác định các cạnh bin. Đối với những người trong số các bạn (như tôi) có thể cần phải bồi dưỡng theo ký hiệu khoảng thời gian, tôi thấy trang web đơn giản này rất dễ & nbsp; hiểu. Để mang về nhà vào ví dụ của chúng tôi, đây là một sơ đồ dựa trên ví dụ & nbsp; ở trên: Khi sử dụng CUT, bạn có thể xác định các cạnh chính xác của các thùng của bạn để điều quan trọng là phải hiểu liệu các cạnh có bao gồm các giá trị hay không. Tùy thuộc vào tập dữ liệu và trường hợp sử dụng cụ thể, điều này có thể hoặc không phải là vấn đề lớn. Nó chắc chắn có thể là một vấn đề tinh tế mà bạn cần & nbsp; xem xét. Để đưa nó vào quan điểm, khi bạn trình bày kết quả phân tích của mình cho người khác, bạn sẽ cần phải rõ ràng liệu một tài khoản có 70.000 trong doanh số là bạc hay vàng & nbsp; khách hàng. Dưới đây là một ví dụ mà chúng tôi muốn xác định cụ thể các ranh giới của 4 thùng của chúng tôi bằng cách xác định tham số (110132.552, 184793.7] 5 (100271.535, 110132.552] 5 (89137.708, 100271.535] 5 (55733.049000000006, 89137.708] 5 Name: quantile_ex_1, dtype: int649. count 20.000000 mean 101711.287500 std 27037.449673 min 55733.050000 25% 89137.707500 50% 100271.535000 75% 110132.552500 max 184793.700000 Name: ext price, dtype: float642
Purdy-Kunde Kulas inc count 20.000000 mean 101711.287500 std 27037.449673 min 55733.050000 25% 89137.707500 50% 100271.535000 75% 110132.552500 max 184793.700000 Name: ext price, dtype: float643 count 20.000000 mean 101711.287500 std 27037.449673 min 55733.050000 25% 89137.707500 50% 100271.535000 75% 110132.552500 max 184793.700000 Name: ext price, dtype: float644 kim cương Stokes LLC Một trong những thách thức với việc xác định phạm vi bin với vết cắt là nó có thể cồng kềnh để tạo ra danh sách tất cả các phạm vi bin. Có một vài phím tắt chúng tôi có thể sử dụng để tạo ra các phạm vi mà chúng tôi & nbsp; cần. Đầu tiên, chúng ta có thể sử dụng df['quantile_ex_2'].value_counts()0 để tạo khoảng cách đều nhau & nbsp; phạm vi: phạm vi: count 20.000000 mean 101711.287500 std 27037.449673 min 55733.050000 25% 89137.707500 50% 100271.535000 75% 110132.552500 max 184793.700000 Name: ext price, dtype: float645 count 20.000000 mean 101711.287500 std 27037.449673 min 55733.050000 25% 89137.707500 50% 100271.535000 75% 110132.552500 max 184793.700000 Name: ext price, dtype: float646 Không gian Linspace Numpy là một hàm đơn giản cung cấp một mảng các số cách đều nhau trong phạm vi do người dùng xác định. Trong ví dụ này, chúng tôi muốn 9 điểm cắt đều cách đều nhau từ 0 đến 200.000. Độc giả Astute có thể nhận thấy rằng chúng tôi có 9 số nhưng chỉ có 8 loại. Nếu bạn vạch ra các danh mục thực tế, nó sẽ có ý nghĩa tại sao chúng tôi kết thúc với 8 loại từ 0 đến 200.000. Trong tất cả các trường hợp, có một loại ít hơn số lượng Cut & nbsp; điểm. count 20.000000 mean 101711.287500 std 27037.449673 min 55733.050000 25% 89137.707500 50% 100271.535000 75% 110132.552500 max 184793.700000 Name: ext price, dtype: float647
vàng Purdy-Kunde Kulas inc kim cương Một thủ thuật cuối cùng tôi muốn trình bày là 0 (55733.049000000006, 89137.708] 1 (89137.708, 100271.535] 2 (55733.049000000006, 89137.708] .... 17 (110132.552, 184793.7] 18 (100271.535, 110132.552] 19 (100271.535, 110132.552] Name: ext price, dtype: category Categories (4, interval[float64]): [(55733.049000000006, 89137.708] < (89137.708, 100271.535] < (100271.535, 110132.552] < (110132.552, 184793.7]]7 bao gồm một lối tắt để tạo ra và đếm dữ liệu. Nó có phần tương tự như cách pd.qcut(df['ext price'], q=4)8 có thể là một lối tắt cho pd.qcut(df['ext price'], q=4)1. Nếu chúng ta muốn chia một giá trị thành 4 thùng và đếm số lượng & nbsp; xảy ra: count 20.000000 mean 101711.287500 std 27037.449673 min 55733.050000 25% 89137.707500 50% 100271.535000 75% 110132.552500 max 184793.700000 Name: ext price, dtype: float648 count 20.000000 mean 101711.287500 std 27037.449673 min 55733.050000 25% 89137.707500 50% 100271.535000 75% 110132.552500 max 184793.700000 Name: ext price, dtype: float649 Bằng cách Defeault 0 (55733.049000000006, 89137.708] 1 (89137.708, 100271.535] 2 (55733.049000000006, 89137.708] .... 17 (110132.552, 184793.7] 18 (100271.535, 110132.552] 19 (100271.535, 110132.552] Name: ext price, dtype: category Categories (4, interval[float64]): [(55733.049000000006, 89137.708] < (89137.708, 100271.535] < (100271.535, 110132.552] < (110132.552, 184793.7]]7 sẽ sắp xếp với giá trị cao nhất trước tiên. Bằng cách vượt qua df['ext price'].describe()01, các thùng sẽ được sắp xếp theo thứ tự số có thể là hữu ích & nbsp; xem. Bản tóm tắtKhái niệm phá vỡ các giá trị liên tục thành các thùng riêng biệt là tương đối đơn giản để hiểu và là một khái niệm hữu ích trong phân tích thế giới thực. May mắn thay, Pandas cung cấp các chức năng pd.qcut(df['ext price'], q=4)0 và pd.qcut(df['ext price'], q=4)1 để làm cho điều này đơn giản hoặc phức tạp như bạn cần. Tôi hy vọng bài viết này chứng tỏ hữu ích trong việc hiểu các chức năng gấu trúc này. Xin vui lòng bình luận bên dưới nếu bạn có bất kỳ & nbsp; câu hỏi. Cập nhật
tín dụngẢnh của Radek Grzybowski trên & NBSP; Unplash Làm thế nào để bạn binning trong Python?Làm mịn bằng thùng có nghĩa là: Trong việc làm mịn bằng thùng có nghĩa là, mỗi giá trị trong một thùng được thay thế bằng giá trị trung bình của thùng. Làm mịn bằng trung bình bin: Trong phương pháp này, mỗi giá trị bin được thay thế bằng giá trị trung bình bin của nó.each value in a bin is replaced by the mean value of the bin. Smoothing by bin median : In this method each bin value is replaced by its bin median value.
Làm thế nào để bạn tạo ra một thùng panda trong Python?Sử dụng cắt khi bạn cần phân đoạn và sắp xếp các giá trị dữ liệu thành các thùng. Hàm này cũng hữu ích cho việc đi từ biến liên tục đến biến phân loại [2] ... X: Mảng đầu vào sẽ bị hỏng. .... BIN: Trình tự vô hướng: Xác định các cạnh bin cho phép chiều rộng không đồng nhất .. Làm thế nào để bạn binning dữ liệu?Có 2 phương pháp chia dữ liệu thành các thùng: Binning tần số bằng nhau: BIN có tần số bằng nhau.Binning có chiều rộng bằng nhau: Các thùng có chiều rộng bằng nhau với một phạm vi của mỗi thùng được xác định là [tối thiểu + W], [tối thiểu + 2W].[tối thiểu + nw] trong đó w = (max - min) / (không có thùng).
Làm thế nào để bạn bin một cột phân loại trong gấu trúc?Một cách là sử dụng các điều kiện như df ['south'] = df ['state']. Isin (Southern_states) nơi Southern_states là danh sách các tên của bang miền Nam.- Kazuya Hatta..... Xây dựng ở trên, bạn có thể tạo một chức năng Bins các trạng thái và sử dụng sê -ri. Applly để tạo một cột mới .. |