Bạn không thực sự cần phải thực hiện một thuật toán để đạt được điều này. Có một vài công cụ sẽ làm điều này cho bạn.
Bạn có thể nhận dữ liệu được gán cho các thùng để xử lý thêm bằng cách sử dụng gấu trúc hoặc chỉ cần đếm số lượng giá trị rơi vào mỗi thùng bằng cách sử dụng Numpy.
Gán cho xô
Bạn chỉ cần tạo một khung dữ liệu gấu trúc với dữ liệu của mình và sau đó gọi hàm
In [6]: df["bucket"] = pd.cut(df.data, bins)
8 tiện dụng, sẽ đặt mỗi giá trị vào một thùng/thùng theo định nghĩa của bạn. Từ tài liệu:
In [6]: df["bucket"] = pd.cut(df.data, bins)
8 function, which will put each value into a bucket/bin of your definition. From the documentation:
Sử dụng
In [6]: df["bucket"] = pd.cut(df.data, bins)
8 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.
In [1]: import pandas as pd
In [2]: import numpy as np # to create dummy data
Tạo một số dữ liệu giả, đặt nó vào DataFrame và xác định các thùng:
In [3]: data = np.random.randint(low=1, high=10001, size=1000)
In [4]: df = pd.DataFrame(data=data, columns=["data"])
In [5]: bins = np.array([1,5,25,50,150,250,1000,5000,10000])
Chuyển dữ liệu, cùng với các định nghĩa bin cho hàm
In [6]: df["bucket"] = pd.cut(df.data, bins)
8 và gán lại như một cột mới trong DataFrame:
In [6]: df["bucket"] = pd.cut(df.data, bins)
Sau đó, bạn có thể kiểm tra một vài hàng đầu tiên để thấy rằng các giá trị hiện đã được dán nhãn với thùng có liên quan:
Trường hợp hàng đầu tiên cho bạn biết có bao nhiêu giá trị rơi vào mỗi thùng và hàng thứ hai xác nhận các thùng được sử dụng.
Bạn có thể đưa từ điển dữ liệu của mình vào cùng một biểu mẫu với dữ liệu giả của tôi ở trên (thành một mảng numpy) bằng cách thực hiện điều này:
data = np.array([v for v in your_dict.values()])
Thứ Hai ngày 14 tháng 10 năm 2019
Giới thiệu
Khi 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
5. 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,
5 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.
Binning
Mộ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.
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
4 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.
5 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;
5 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.
In [1]: import pandas as pd
In [2]: import numpy as np # to create dummy data
0
In [1]: import pandas as pd
In [2]: import numpy as np # to create dummy data
1
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
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:
In [1]: import pandas as pd
In [2]: import numpy as np # to create dummy data
2
số tài khoản
Tên
Giá EXT
quantile_ex_1
quantile_ex_2
0
141962
Herman LLCLLC
63626.03
(55733.049000000006, 89137.708]
(55732.0, 76471.0]
1
146832
Kiehn-Spinka
99608.77
(89137.708, 100271.535]
(95908.0, 100272.0]
2
163416
Purdy-Kunde
77898.21
(55733.049000000006, 89137.708]
(55732.0, 76471.0]
3
218895
Kiehn-Spinka
137351.96
(89137.708, 100271.535]
(95908.0, 100272.0]
4
239344
Purdy-KundeLLC
91535.92
(89137.708, 100271.535]
(95908.0, 100272.0]
Purdy-Kunde
(76471.0, 87168.0]
In [1]: import pandas as pd
In [2]: import numpy as np # to create dummy data
3
In [1]: import pandas as pd
In [2]: import numpy as np # to create dummy data
4
Kulas inc
In [1]: import pandas as pd
In [2]: import numpy as np # to create dummy data
5
In [1]: import pandas as pd
In [2]: import numpy as np # to create dummy data
6
(110132.552, 184793.7]
(124778.0, 184794.0]
In [1]: import pandas as pd
In [2]: import numpy as np # to create dummy data
7
số tài khoản
Tên
Giá EXT
quantile_ex_1
quantile_ex_2
quantile_ex_3
0
141962
Herman LLCLLC
63626.03
(55733.049000000006, 89137.708]
(55732.0, 76471.0]
Kiehn-Spinka
1
146832
Kiehn-Spinka
99608.77
(89137.708, 100271.535]
(95908.0, 100272.0]
Purdy-Kunde
2
163416
Purdy-Kunde
77898.21
(55733.049000000006, 89137.708]
(55732.0, 76471.0]
Kiehn-Spinka
3
218895
Kiehn-Spinka
137351.96
(89137.708, 100271.535]
(95908.0, 100272.0]
Purdy-Kunde
4
239344
Purdy-KundeLLC
91535.92
(89137.708, 100271.535]
(95908.0, 100272.0]
Purdy-Kunde
(76471.0, 87168.0]
Kulas inc
In [1]: import pandas as pd
In [2]: import numpy as np # to create dummy data
8
In [1]: import pandas as pd
In [2]: import numpy as np # to create dummy data
0 để xác định số lượng số thập phân để sử dụng để tính toán bin & nbsp; độ chính xác.
Chế độ xem thú vị khác là xem các giá trị được phân phối trên các thùng bằng cách sử dụng
data = np.array([v for v in your_dict.values()])
1:
In [3]: data = np.random.randint(low=1, high=10001, size=1000)
In [4]: df = pd.DataFrame(data=data, columns=["data"])
In [5]: bins = np.array([1,5,25,50,150,250,1000,5000,10000])
0
Bây giờ, cho cột thứ hai & nbsp; cột:
Điều này minh họa một khái niệm quan trọng. Trong mỗi trường hợp, có một số lượng quan sát bằng nhau trong mỗi thùng. Pandas thực hiện toán học đằng sau hậu trường để tìm ra cách làm cho mỗi thùng. Ví dụ, trong
8, phạm vi của thùng đầu tiên là 74.661,15 trong khi thùng thứ hai chỉ là 9,861,02 (110132 -& nbsp; 100271).
0
55733.050
Kiehn-Spinka
1
87167.958
Purdy-Kunde
2
95908.156
Purdy-Kunde
3
103606.970
(76471.0, 87168.0]
4
112290.054
Purdy-Kunde
(76471.0, 87168.0]
In [3]: data = np.random.randint(low=1, high=10001, size=1000)
In [4]: df = pd.DataFrame(data=data, columns=["data"])
In [5]: bins = np.array([1,5,25,50,150,250,1000,5000,10000])
1
quantile_ex_1
quantile_ex_2
quantile_ex_3
Kulas inc
20
20
20
(110132.552, 184793.7]
4
10
5
(124778.0, 184794.0]
(89137.708, 100271.535]
(95908.0, 100272.0]
Purdy-Kunde
(76471.0, 87168.0]
5
2
4
Kulas inc
(110132.552, 184793.7]
In [3]: data = np.random.randint(low=1, high=10001, size=1000)
In [4]: df = pd.DataFrame(data=data, columns=["data"])
In [5]: bins = np.array([1,5,25,50,150,250,1000,5000,10000])
0 để xác định số lượng số thập phân để sử dụng để tính toán bin & nbsp; độ chính xác.
332759.333333
91241.493333
Chế độ xem thú vị khác là xem các giá trị được phân phối trên các thùng bằng cách sử dụng
data = np.array([v for v in your_dict.values()])
1:
476006.500000
100271.535000
Bây giờ, cho cột thứ hai & nbsp; cột:
662511.000000
104178.580000
Điều này minh họa một khái niệm quan trọng. Trong mỗi trường hợp, có một số lượng quan sát bằng nhau trong mỗi thùng. Pandas thực hiện toán học đằng sau hậu trường để tìm ra cách làm cho mỗi thùng. Ví dụ, trong
8, phạm vi của thùng đầu tiên là 74.661,15 trong khi thùng thứ hai chỉ là 9,861,02 (110132 -& nbsp; 100271).
786968.000000
184793.700000
Một trong những thách thức với phương pháp này là các nhãn BIN không dễ giải thích cho người dùng cuối. Chẳng hạn, nếu chúng tôi muốn chia khách hàng của mình thành 5 nhóm (hay còn gọi là nhóm nhạc) như cách tiếp cận thường xuyên của hãng hàng không, chúng tôi có thể dán nhãn rõ ràng các thùng để giúp họ dễ dàng hơn & NBSP;
786968.000000
184793.700000
Đồng
Vàng
In [3]: data = np.random.randint(low=1, high=10001, size=1000)
In [4]: df = pd.DataFrame(data=data, columns=["data"])
In [5]: bins = np.array([1,5,25,50,150,250,1000,5000,10000])
3
số tài khoản
Tên
Giá EXT
quantile_ex_1
quantile_ex_2
quantile_ex_3
quantile_ex_4
0
141962
Herman LLCLLC
63626.03
(55733.049000000006, 89137.708]
(55732.0, 76471.0]
Kiehn-Spinka
0
1
146832
Kiehn-Spinka
99608.77
(89137.708, 100271.535]
(95908.0, 100272.0]
Vàng
2
2
163416
Purdy-Kunde
77898.21
(55733.049000000006, 89137.708]
(76471.0, 87168.0]
Đồng
0
3
218895
Kulas inc
137351.96
(110132.552, 184793.7]
(124778.0, 184794.0]
Kim cương
4
4
239344
Stokes LLCLLC
91535.92
(89137.708, 100271.535]
(90686.0, 95908.0]
Màu bạc
1
Cá nhân, tôi nghĩ rằng sử dụng
df['ext price'].describe()
1 là kịch bản hữu ích nhất nhưng có thể có những trường hợp phản hồi số nguyên có thể hữu ích vì vậy tôi muốn chỉ ra rõ ràng nó & nbsp;
5 sẽ tính toán kích thước của mỗi thùng để đảm bảo phân phối dữ liệu trong các thùng là bằng nhau. Nói cách khác, tất cả các thùng sẽ có (khoảng) cùng một số lượng quan sát nhưng phạm vi thùng sẽ & nbsp; khác nhau.
4 được sử dụng để xác định cụ thể các cạnh bin. Không có gì đảm bảo về việc phân phối các mặt hàng trong mỗi thùng. Trên thực tế, bạn có thể định nghĩa các thùng theo cách không có vật phẩm nào được bao gồm trong thùng hoặc gần như tất cả các mặt hàng đều nằm trong một & nbsp; bin.
Trong các ví dụ trong thế giới thực, các thùng có thể được xác định bởi các quy tắc kinh doanh. Đối với một chương trình Flier thường xuyên, 25.000 dặm là mức bạc và điều đó không thay đổi dựa trên sự thay đổi của dữ liệu hàng năm. Nếu chúng tôi muốn xác định các cạnh bin (25.000 - 50.000, v.v.), chúng tôi sẽ sử dụng
4 để xác định các thùng có kích thước không đổi và để gấu trúc tìm ra cách xác định các cạnh thùng & nbsp;
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:
In [3]: data = np.random.randint(low=1, high=10001, size=1000)
In [4]: df = pd.DataFrame(data=data, columns=["data"])
In [5]: bins = np.array([1,5,25,50,150,250,1000,5000,10000])
4
Đố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:
In [3]: data = np.random.randint(low=1, high=10001, size=1000)
In [4]: df = pd.DataFrame(data=data, columns=["data"])
In [5]: bins = np.array([1,5,25,50,150,250,1000,5000,10000])
5
In [3]: data = np.random.randint(low=1, high=10001, size=1000)
In [4]: df = pd.DataFrame(data=data, columns=["data"])
In [5]: bins = np.array([1,5,25,50,150,250,1000,5000,10000])
6
Hãy cùng nhìn vào & nbsp; phân phối:
In [3]: data = np.random.randint(low=1, high=10001, size=1000)
In [4]: df = pd.DataFrame(data=data, columns=["data"])
In [5]: bins = np.array([1,5,25,50,150,250,1000,5000,10000])
7
In [3]: data = np.random.randint(low=1, high=10001, size=1000)
In [4]: df = pd.DataFrame(data=data, columns=["data"])
In [5]: bins = np.array([1,5,25,50,150,250,1000,5000,10000])
8
Đ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
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ố
In [3]: data = np.random.randint(low=1, high=10001, size=1000)
In [4]: df = pd.DataFrame(data=data, columns=["data"])
In [5]: bins = np.array([1,5,25,50,150,250,1000,5000,10000])
9
số tài khoản
Tên
Giá EXT
cut_ex1
0
141962
Herman LLCLLC
63626.03
màu bạc
1
146832
Kiehn-Spinka
99608.77
vàng
2
163416
Purdy-Kunde
77898.21
vàng
3
218895
Kulas inc
137351.96
(110132.552, 184793.7]
4
239344
Stokes LLCLLC
91535.92
vàng
kim cương
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.
4 để tạo khoảng cách đều nhau & nbsp; phạm vi: phạm vi:
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.
Có một tùy chọn bổ sung để xác định thùng của bạn và đó là sử dụng gấu trúc
Theo kinh nghiệm của tôi, tôi sử dụng một danh sách tùy chỉnh các phạm vi bin hoặc In [1]: import pandas as pd
In [2]: import numpy as np # to create dummy data
01 nếu tôi có một số lượng lớn & nbsp;
4 cho phép tính đặc hiệu hơn nhiều của các thùng, các tham số này có thể hữu ích để đảm bảo các khoảng được xác định theo cách bạn & NBSP;
Phần còn lại của chức năng In [7]: df.head()
Out[7]:
data bucket
0 8754 (5000, 10000]
1 2970 (1000, 5000]
2 6778 (5000, 10000]
3 2550 (1000, 5000]
4 5226 (5000, 10000]
4 tương tự như In [7]: df.head()
Out[7]:
data bucket
0 8754 (5000, 10000]
1 2970 (1000, 5000]
2 6778 (5000, 10000]
3 2550 (1000, 5000]
4 5226 (5000, 10000]
5. Chúng ta có thể trả về các thùng bằng cách sử dụ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')
3 hoặc điều chỉnh độ chính xác bằng đối số data = np.array([v for v in your_dict.values()])
0.
Một thủ thuật cuối cùng tôi muốn trình bày là
data = np.array([v for v in your_dict.values()])
1 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
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:
Bằng cách Defeault data = np.array([v for v in your_dict.values()])
1 sẽ sắp xếp với giá trị cao nhất trước tiên. Bằng cách vượt qua In [1]: import pandas as pd
In [2]: import numpy as np # to create dummy data
15, 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ắt
Làm thế nào để bạn tạo ra một giá trị xô trong Python?
Gán cho các nhóm bạn chỉ cần tạo một khung dữ liệu gấu trúc với dữ liệu của bạn và sau đó gọi hàm cắt tiện dụng, sẽ đặt mỗi giá trị vào một thùng/thùng theo định nghĩa của bạn. Từ tài liệu: 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.create a Pandas DataFrame with your data and then call the handy cut function, which will put each value into a bucket/bin of your definition. From the documentation: Use cut when you need to segment and sort data values into bins.
Xô trong Python là gì?
Xô là một thư viện Python có thể được sử dụng để quản lý dữ liệu mà nó sẽ tổ chức để giữ dữ liệu phù hợp nhất/gần đây nhất và thiếu dữ liệu cũ hơn.Một thùng trong trường hợp này là một người giữ địa điểm cho dữ liệu.Và với xô, bạn có thể quản lý nhiều danh sách xô.Danh sách xô là một danh sách kích thước cố định của xô.a python library which can be used to manage data that it will organize to keep the most relevant/recent data and deprioritize older data. A bucket in this instance is a place holder for data. And with Buckets you can manage multiple bucket lists. A bucket list is a fixed size list of buckets.
Làm thế nào để bạn tạo ra một thùng trong Python?
Hàm Python sau đây có thể được sử dụng để tạo thùng ...
def created_bins (Lower_bound, Width, số lượng): "" "created_bins trả về một phân vùng chiều rộng (khoảng cách) bằng nhau. ....
Bins = created_bins (Lower_bound = 10, Width = 10, Số lượng = 5) BIN ..
Mã trong mã là gì?
Một thùng là một tài liệu không có kích thước xác định mà thông tin quan tâm được thêm vào mà không có cấu trúc.Nhiều gói phần mềm có tệp readme là một thùng chứa thông tin mới nhất.Trong văn hóa IBM, một tệp như vậy được gọi là một cái xô và được mở cho các bản sửa lỗi quan trọng và các gói sửa chữa.a document of no definite size to which information of interest is added with no structure. Many software packages have a README file which is a bucket containing the very latest information. In IBM culture, such a file is known as a bucket and is opened for critical fixes and fix packages.