Micheal Macaulay

Phải biết các chức năng của gấu trúc cho hành trình học máy

Nút nguồn: 1865356

Bài báo này đã được xuất bản như một phần của Blogathon Khoa học Dữ liệu

Giới thiệu

Vâng, có một khả năng tốt là bạn có thể!

Đối với các nhà khoa học dữ liệu sử dụng Python làm ngôn ngữ lập trình chính, gói Pandas là công cụ phân tích dữ liệu bắt buộc phải có. Gói Pandas có mọi thứ mà một nhà khoa học dữ liệu cần và mọi khóa học lúc đầu đều dạy chúng tôi cách sử dụng nó. Nó rất lớn, mạnh mẽ và thực hiện hầu hết mọi thao tác trên bảng mà bạn có thể tưởng tượng. Tuy nhiên, chiều rộng này đôi khi có thể là một bất lợi.

Nó có nhiều tính năng hay giúp giải quyết các trường hợp hiếm gặp, các tình huống khác nhau.

Một trong những nhược điểm chính của gấu trúc là nó phải vật lộn với các tập dữ liệu lớn vì gấu trúc lưu trữ cấu trúc dữ liệu của chúng trong RAM, RAM có thể không đủ khi kích thước dữ liệu tăng lên. Sử dụng PySpark hoặc Dask cho việc này.

Mặc dù gói Pandas được sử dụng rộng rãi nhưng vẫn có nhiều chức năng mà mọi người có thể bỏ qua, có thể do nó ít được sử dụng hoặc do họ không biết đến sự tồn tại của nó. Bài đăng này nhằm mục đích giới thiệu lại cho bạn những tính năng đó và chứng minh rằng Pandas có năng lực hơn nhiều so với những gì bạn đã biết trước đây.

Pipe

Để thực hiện việc dọn dẹp dữ liệu một cách ngắn gọn, gọn gàng trong pandas, người ta có thể sử dụng các hàm Pipe, cho phép bạn kết hợp nhiều chức năng trong một thao tác.

Ví dụ: nếu bạn muốn áp dụng các hàm như drop_duplicates, Encode_categoricals, Remove_outliers chấp nhận các đối số của nó.

df_cleaned = (diamonds.pipe(drop_duplicates). pipe(remove_outliers, ['price', 'carat', 'deep']). pipe(encode_categoricals, ['cut', 'color', 'clarity']) )

Cơ sở dữ liệu

Chức năng này là một giải pháp thay thế cho Bộ mã hóa nhãn Sklearns.

# Lưu ý [0] ở cuối kim cương["cut_enc"] = pd.factorize(diamonds["cut"])[0] >>> kim cương["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 Tên: cut_enc, dtype: int64

Hệ số hóa cho kết quả một bộ giá trị: giá trị được mã hóa và danh sách các danh mục duy nhất.

giá trị, duy nhất = pd.factorize(diamonds["cut"], Sort=True) >>> giá trị[:10] array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> duy nhất ['Lý tưởng', 'Cao cấp', 'Rất tốt', 'Tốt', 'Khá']

Explode

Nổ | chức năng gấu trúc

Photo by Edewaa Foster on Unsplash

Explode là một hàm có cái tên thú vị. Hãy bắt đầu với một ví dụ và sau đó là giải thích:

df = pd.Series([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("bẩn") >>> df
dữ liệu | chức năng gấu trúc
Hình ảnh của tác giả

Cột tính năng có hai hàng được biểu thị bằng danh sách. Loại dữ liệu này có sẵn trong các cuộc khảo sát trong đó một số câu hỏi chấp nhận nhiều lựa chọn.

>>> df.explode("bẩn", ign_index=True)
bùng nổ dữ liệu
Hình ảnh của tác giả

Hàm này lấy một ô có một mảng giá trị và phân chia thành nhiều hàng. Để duy trì thứ tự của chỉ mục số, hãy sử dụng ign_index là True.

Giữa

Để lập chỉ mục các tính năng số boolean trong một phạm vi, đây là một hàm tiện dụng:

# Nhận những viên kim cương có giá từ 3500 đến 3700 đô la kim cương[diamonds["price"].between(3500, 3700, include="nboth")].sample(5)
giữa dữ liệu | chức năng gấu trúc
Hình ảnh của tác giả

 

T

DataFrame có một thuộc tính T đơn giản, được gọi là chuyển vị. Chúng tôi có thể không sử dụng nó thường xuyên, phương pháp mô tả rất hữu ích khi xem các khung dữ liệu.

>>> boston.describe().T.head(10)
hoán vị
Hình ảnh của tác giả

 

Tùy chọn gấu trúc

Người ta có thể sử dụng cài đặt chung của gấu trúc để giúp điều chỉnh và thay đổi các hành vi mặc định.

>>> dir(pd.options) ['compute', 'display', 'io', 'mode', 'plot']

Nó bao gồm 5 mô-đun. Hãy xem các tùy chọn có sẵn dưới màn hình. Có nhiều tùy chọn nhưng tôi chủ yếu sử dụng max_columns.

>>> dir(pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... 'chính xác', 'show_dimensions', 'unicode' , 'chiều rộng']

Hầu hết mọi người sử dụng max_columns và độ chính xác

# Bỏ giới hạn hiển thị số cols pd.options.display.max_columns = Không # Chỉ hiển thị 5 số sau số thập phân pd.options.display.precision = 5 # loại bỏ ký hiệu khoa học

Chuyển đổi_dtypes

Tất cả chúng ta đều biết rằng gấu trúc có thói quen khó chịu khi đánh dấu một số cột là kiểu dữ liệu đối tượng. Thay vì xác định trực tiếp kiểu của chúng, bạn có thể sử dụng phương thức chuyển đổi dtypes, phương thức này cố gắng suy ra kiểu dữ liệu tốt nhất:

sample = pd.read_csv("data/station_day.csv",usecols=["StationId", "CO", "O3", "AQI_Bucket"]) >>> sample.dtypes Đối tượng StationId CO float64 O3 float64 Đối tượng AQI_Bucket dtype: đối tượng >>> sample.convert_dtypes().dtypes Chuỗi StationId CO float64 O3 float64 Chuỗi AQI_Bucket dtype: object

Chọn_dtypes

Ngay từ cái tên, tôi tin rằng chức năng này đã rõ ràng. Bạn có thể sử dụng các tùy chọn bao gồm và loại trừ để chỉ định các cột bao gồm hoặc bỏ qua các loại dữ liệu cụ thể.

Chỉ chọn các cột số có np.number, ví dụ:

# Chỉ chọn các cột số kim cương.select_dtypes(include=np.number).head()
chọn dtype
Hình ảnh của tác giả

 

Mask

Hàm này giúp thay thế các giá trị không thỏa mãn điều kiện tùy chỉnh.

# Tạo dữ liệu mẫu age = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("ages") age
mặt nạ | dữ liệu
Hình ảnh của tác giả

Sau khi thực hiện thao tác trên.

mặt nạ được thực hiện
Hình ảnh của tác giả

Tối thiểu và Tối đa

Mặc dù min và max đã được biết rõ nhưng nó có một số thuộc tính tốt hơn cho một số trường hợp biên.

chỉ mục = ["Kim cương", "Titanic", "Iris", "Bệnh tim", "Mặc định cho vay"] thư viện = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) cho lib trong thư viện}, index=index ) >>> df
tối thiểu và tối đa
Hình ảnh của Tác giả 

DataFrame hư cấu ở trên hiển thị kết quả của bốn thư viện tăng cường độ dốc khác nhau trên năm bộ dữ liệu. Chúng tôi đang tìm kiếm gói hoạt động tốt nhất trên mỗi tập dữ liệu. Đây là cách thực hiện nó với max một cách đẳng cấp:

>>> df.max(axis=1) Diamonds 99.52684 Titanic 99.63650 Iris 99.10989 Bệnh tim 99.31627 Mặc định cho vay 97.96728 dtype: float64

N lớn nhất và N nhỏ nhất

Giá trị lớn nhất và nhỏ nhất rất hữu ích để xem các giá trị N hoặc ~(N trên cùng) trên cùng của một biến.

kim cương.n lớn nhất(5, "giá")
lớn nhất và nhỏ nhất
Hình ảnh của tác giả
kim cương.nsmallest(5, "giá")
nhỏ nhất
Hình ảnh của tác giả

 

Idxmax và Idxmin

Pandas trả về số lớn nhất/nhỏ nhất khi bạn gọi max hoặc min trên một cột. Tuy nhiên, có những tình huống khi bạn cần vị trí tối thiểu/tối đa mà các chức năng này không cung cấp.

Thay vào đó, bạn có thể sử dụng idxmax/idxmin:

>>> kim cương.price.idxmax() 27749 >>> kim cương.carat.idxmin() 14

Giá trị_Đếm

Một cách phổ biến để tìm phần trăm của các giá trị còn thiếu là kết hợp isnull và tổng rồi chia cho kích thước của mảng.

Tuy nhiên, value_counts với các đối số liên quan cũng thực hiện điều tương tự:

housing = pd.read_csv("train.csv") >>> housing["FireplaceQu"].value_counts(dropna=False, normalize=True) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 Ex 0.01644 Po 0.01370 Tên: FireplaceQu, dtype: phao64

Cái cặp

Chức năng clip giúp tìm ra các ngoại lệ bên ngoài phạm vi và thay thế chúng bằng các giới hạn cứng.

>>> age.clip(50, 60)
dữ liệu cho clip
Hình ảnh của tác giả

 

At_time và Giữa_time

Các hàm này rất hữu ích khi làm việc với chuỗi thời gian có độ chi tiết cao.

at_time giúp nhận giá trị vào một ngày hoặc giờ cụ thể.

chỉ mục = pd.date_range("2021-08-01", Period=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >> > df.head()
ví dụ at_time | chức năng gấu trúc
Hình ảnh của tác giả

>>> df.at_time(“15:00”)

.at_time | chức năng gấu trúc
Hình ảnh của tác giả

between_time dùng để tìm nạp các hàng trong phạm vi tùy chỉnh.

từ datetime nhập datetime >>> df.between_time("09:45", "12:00")
giữa_thời gian
Hình ảnh của tác giả

 

Bdate_range

Chức năng này giúp tạo các chỉ số chuỗi thời gian với tần suất trong ngày làm việc. Thế giới tài chính có loại tần số này. Vì vậy, chức năng này có thể hữu ích tại thời điểm lập chỉ mục lại chuỗi thời gian bằng chức năng reindex.

series = pd.bdate_range("2021-01-01", "2021-01-31") # Khoảng thời gian một tháng >>> len(series) 21

Tại và Iat

Hai trình truy cập này nhanh hơn đáng kể so với loc và iloc. Tuy nhiên, họ có một nhược điểm. Chúng chỉ cho phép bạn chọn hoặc thay thế một giá trị tại một thời điểm:

# [chỉ mục, nhãn] >>> kim cương.at[234, "cut"] 'Lý tưởng' # [chỉ mục, chỉ mục] >>> kim cương.iat[1564, 4] 61.2 # Thay thế hàng thứ 16541 của cột giá >> > kim cương.at[16541, "giá"] = 10000

Argsort

Hàm này giúp trích xuất các chỉ mục sắp xếp một mảng các tính năng.

mẹo.reset_index(inplace=True, drop=True) Sort_idx = Tips["total_bill"].argsort(kind="mergesort") # Bây giờ, sắp xếp `tips` dựa trên Total_bill Tips.iloc[sort_idx].head()
arg_sort
Hình ảnh của tác giả

 

Phụ kiện mèo

Gấu trúc cho phép các hàm tích hợp của python về ngày và chuỗi bằng cách sử dụng các bộ truy cập như str hoặc dt.

>>> kim cương.dtypes carat float64 loại cắt loại màu loại rõ ràng loại độ sâu float64 bảng float64 giá int64 x float64 y float64 z float64 cut_enc int64 dtype: object

Người ta có thể sử dụng nhiều chức năng đặc biệt bằng cách sử dụng trình truy cập mèo trên các cột phân loại. Nó có các chức năng như danh mục để tìm duy nhất, đổi tên_categories để đổi tên các tính năng.

kim cương["new_cuts"] = kim cương["cut"].cat.rename_categories(list("ABCDE")) >>> kim cương["new_cuts"].cat.categories Index(['A', 'B', ' C', 'D', 'E'], dtype='đối tượng')

Hãy xem phần này để biết thêm danh sách các chức năng trong phụ kiện mèo.

Bóp

Bóp là một chức năng được sử dụng trong các trường hợp hiếm gặp nhưng nghiêm trọng hơn.

Khi một giá trị duy nhất được trả về từ một điều kiện được sử dụng để tập hợp con một DataFrame, đây là một trong những trường hợp này. Hãy xem xét tình huống sau:

tập hợp con = Diamonds.loc[diamonds.index >> tập hợp con
giá

Ngay cả khi chỉ có một ô, hãy trả về DataFrame. Thật bất tiện vì bây giờ bạn phải sử dụng.loc với cả tên cột và chỉ mục để lấy giá.

Bạn không cần phải làm vậy nếu bạn biết cách bóp. Có thể xóa một trục khỏi Khung dữ liệu hoặc Chuỗi một ô bằng cách sử dụng chức năng này. Hãy xem xét tình huống sau:

>>> subset.squeeze() 326

Có thể chỉ định trục cần loại bỏ. Bây giờ nó chỉ trả về vô hướng.

>>> subset.squeeze("columns") # hoặc "rows" 0 326 Tên: price, dtype: int64

Lưu ý chức năng này chỉ hoạt động đối với Chuỗi hoặc DataFrame với các giá trị đơn.

Excel_writer

Đây là lớp chung để tạo tệp excel và ghi DataFrame trong đó. Hãy xem xét, chúng tôi có hai bộ dữ liệu này.

# Tải hai tập dữ liệu kim cương = sns.load_dataset("diamonds") mẹo = sns.load_dataset("tips") # Viết vào cùng một tệp excel với pd.ExcelWriter("data/data.xlsx") với tư cách là người viết: kim cương.to_excel (nhà văn, sheet_name="diamonds") mẹo.to_excel(nhà văn, sheet_name="tips")

Nó có các thuộc tính để chỉ định định dạng DateTime sẽ sử dụng, cho dù bạn cần một tệp mới hay sửa đổi tệp hiện có, điều gì sẽ xảy ra nếu một trang tính tồn tại. Kiểm tra điều này tài liệu hướng dẫn để biết thêm chi tiết.

Kết luận

Nó không phải là một cái nhìn tổng quan đầy đủ về gấu trúc và tài liệu hướng dẫn chứa nhiều thông tin hơn về mã và tính năng. Tôi khuyên bạn nên thử nghiệm các biến thể khác nhau của đoạn mã được cung cấp ở đây cũng như các tham số khác nhau. Người ta có thể hiểu đầy đủ sức mạnh của gấu trúc bằng cách làm điều này.

Các thư viện như Dask và datatable đang dần thay thế Pandas bằng các tính năng mới hào nhoáng để xử lý các tập dữ liệu lớn, Pandas vẫn là công cụ thao tác dữ liệu được sử dụng rộng rãi nhất trong cộng đồng khoa học dữ liệu Python. Do nó phù hợp tốt như thế nào với ngăn xếp SciPy hiện tại nên thư viện này đóng vai trò là mô hình cho các gói khác noi theo và xây dựng.

Tôi hy vọng bạn thấy bài viết này sâu sắc và cảm ơn bạn đã đọc.

Phương tiện hiển thị trong bài viết này không thuộc sở hữu của Analytics Vidhya và được sử dụng theo quyết định của Tác giả.

Nguồn: https://www.analyticsvidhya.com/blog/2021/08/must-know-pandas-functions-for-machine-learning-journey/

Dấu thời gian:

Thêm từ Phân tích Vidhya