Khóa học
Trong thế giới phân tích dữ liệu, Python là một ngôn ngữ phổ biến nhờ tính linh hoạt và hệ sinh thái thư viện phong phú. Thao tác dữ liệu và phân tích đóng vai trò then chốt trong việc khai thác insight và đưa ra quyết định sáng suốt. Tuy nhiên, khi các bộ dữ liệu ngày càng lớn và phức tạp, nhu cầu về các giải pháp hiệu năng cao trở nên tối quan trọng.
Xử lý hiệu quả các bộ dữ liệu lớn đòi hỏi những công cụ có thể tính toán nhanh và tối ưu hóa hoạt động. Đây là lúc Polars xuất hiện. Polars là một thư viện mã nguồn mở mạnh mẽ, được thiết kế riêng cho thao tác và phân tích dữ liệu hiệu năng cao trong Python.
Các tính năng của Polars
Polars là một thư viện DataFrame được viết hoàn toàn bằng Rust, xây dựng để trao cho nhà phát triển Python một khung làm việc có khả năng mở rộng và hiệu quả trong xử lý dữ liệu, và được xem như một lựa chọn thay thế cho thư viện pandas rất phổ biến. Nó cung cấp nhiều chức năng hỗ trợ các tác vụ thao tác và phân tích dữ liệu khác nhau. Một số tính năng chính và ưu điểm khi sử dụng Polars gồm:
1. Tốc độ và hiệu năng
Polars được thiết kế chú trọng đến hiệu năng. Nó tận dụng xử lý song song và kỹ thuật tối ưu bộ nhớ, cho phép xử lý các bộ dữ liệu lớn nhanh hơn đáng kể so với các phương pháp truyền thống.
2. Khả năng thao tác dữ liệu
Polars cung cấp một bộ công cụ toàn diện cho thao tác dữ liệu, bao gồm các thao tác thiết yếu như lọc, sắp xếp, nhóm, nối và tổng hợp dữ liệu. Dù có thể chưa đa năng bằng pandas do còn tương đối mới, Polars bao phủ khoảng 80% các thao tác phổ biến trong Pandas.
3. Cú pháp diễn đạt
Polars sử dụng cú pháp cô đọng và trực quan, giúp dễ học và dễ dùng. Cú pháp của nó gợi nhớ đến các thư viện Python phổ biến như pandas, cho phép người dùng nhanh chóng làm quen với Polars và tận dụng kiến thức sẵn có.
4. Cấu trúc DataFrame và Series
Cốt lõi của Polars là các cấu trúc DataFrame và Series, mang đến một trừu tượng quen thuộc và mạnh mẽ để làm việc với dữ liệu dạng bảng. Các thao tác DataFrame trong Polars có thể được xâu chuỗi, giúp biến đổi dữ liệu hiệu quả và gọn nhẹ.
5. Polars hỗ trợ đánh giá lười (lazy evaluation)
Polars tích hợp đánh giá lười, tức là xem xét và tối ưu truy vấn nhằm tăng hiệu năng và giảm tiêu thụ bộ nhớ. Khi làm việc với Polars, thư viện sẽ phân tích truy vấn của bạn và tìm cơ hội đẩy nhanh thực thi hoặc giảm sử dụng bộ nhớ. Ngược lại, Pandas chỉ hỗ trợ đánh giá tức thời (eager), theo đó biểu thức được tính ngay khi gặp.
Vì sao chọn Polars khi đã có pandas?
pandas, một thư viện được sử dụng rộng rãi, nổi tiếng vì tính linh hoạt và dễ dùng. Tuy nhiên, khi xử lý các bộ dữ liệu lớn, Pandas có thể gặp nút thắt hiệu năng do phụ thuộc vào thực thi đơn luồng. Khi kích thước dữ liệu tăng, thời gian xử lý có thể kéo dài quá mức, làm giảm năng suất.
Polars được thiết kế đặc biệt để xử lý hiệu quả các bộ dữ liệu lớn. Với chiến lược đánh giá lười và khả năng thực thi song song, Polars vượt trội trong việc xử lý lượng dữ liệu lớn một cách nhanh chóng. Bằng cách phân tán tính toán trên nhiều lõi CPU, Polars tận dụng tính song song để mang lại mức tăng hiệu năng ấn tượng. Xem bài kiểm thử so sánh tốc độ giữa Pandas và Polars của Yuki.

Để xem so sánh đầy đủ giữa Polars và pandas, hãy xem bài viết riêng của chúng tôi.
Cài đặt Polars
Bạn có thể cài đặt Polars qua pip, trình quản lý gói Python. Mở giao diện dòng lệnh và chạy lệnh sau:
install polars
Nạp một bộ dữ liệu trong Polars
Polars cung cấp các phương thức tiện lợi để nạp dữ liệu từ nhiều nguồn, bao gồm tệp CSV, tệp Parquet và Pandas DataFrame. Các phương thức đọc tệp CSV hoặc Parquet giống với thư viện pandas.
# read csv file
import polars as pl
data = pl.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/diamond.csv')
# check the head
data.head()
Kết quả:

Kiểu của data là polars.DataFrame.
type(data)
>>> polars.dataframe.frame.DataFrame
Kết quả:

Các hàm thao tác dữ liệu thường dùng với Polars
Polars cung cấp một tập chức năng toàn diện cho thao tác dữ liệu, cho phép bạn chọn, lọc, sắp xếp, biến đổi và làm sạch dữ liệu một cách dễ dàng. Hãy cùng khám phá một số tác vụ thao tác dữ liệu phổ biến và cách thực hiện chúng với Polars:
1. Chọn và lọc dữ liệu
Để chọn các cột cụ thể từ một DataFrame, bạn có thể dùng phương thức select(). Ví dụ:
import polars as pl
# Load diamond data from a CSV file
df = pl.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/diamond.csv')
# Select specific columns: carat, cut, and price
selected_df = df.select(['Carat Weight', 'Cut', 'Price'])
# show selected_df head
selected_df.head()
Kết quả:

Lọc các hàng dựa trên điều kiện nhất định có thể thực hiện bằng phương thức filter(). Chẳng hạn, để lọc các hàng có trọng lượng carat lớn hơn 1.0, bạn có thể làm như sau:
import polars as pl
# Load diamond data from a CSV file
df = pl.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/diamond.csv')
# filter the df with condition
filtered_df = df.filter(pl.col('Carat Weight') > 2.0)
# show filtered_df head
filtered_df.head()
Kết quả:

2. Sắp xếp và thiết lập thứ tự dữ liệu
Polars cung cấp phương thức sort() để sắp xếp DataFrame dựa trên một hoặc nhiều cột. Ví dụ:
import polars as pl
# Load diamond data from a CSV file
df = pl.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/diamond.csv')
# sort the df by price
sorted_df = df.sort(by='Price')
# show sorted_df head
sorted_df.head()
Kết quả:

3. Xử lý giá trị khuyết
Polars cung cấp các phương thức tiện lợi để xử lý giá trị khuyết. Phương thức drop_nulls() cho phép bạn loại bỏ các hàng có chứa bất kỳ giá trị khuyết nào:
import polars as pl
# Load diamond data from a CSV file
df = pl.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/diamond.csv')
# drop missing values
cleaned_df = df.drop_nulls()
# show cleaned_df head
cleaned_df.head()
Kết quả:

Ngoài ra, bạn có thể dùng phương thức fill_nulls() để thay thế các giá trị khuyết bằng một giá trị mặc định nhất định hoặc theo phương pháp điền cụ thể.
4. Nhóm dữ liệu theo các cột cụ thể
Để nhóm dữ liệu theo các cột cụ thể, bạn có thể dùng phương thức groupby(). Ví dụ sau nhóm dữ liệu theo cột Cut và tính Price trung bình cho mỗi nhóm:
import polars as pl
# Load diamond data from a CSV file
df = pl.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/diamond.csv')
# group by cut and calc mean of price
grouped_df = df.groupby(by='Cut').agg(pl.col('Price').mean())
# show grouped_df head
grouped_df.head()
Kết quả:

Trong kết quả trên, bạn có thể thấy giá trung bình của kim cương theo chiều Cut.
5. Nối và kết hợp các DataFrame
Polars cung cấp các tùy chọn linh hoạt để nối và kết hợp DataFrame, cho phép bạn hợp nhất và ghép dữ liệu từ các nguồn khác nhau. Để thực hiện phép nối, bạn có thể dùng phương thức join(). Ví dụ sau minh họa phép nối trong (inner join) giữa hai DataFrame dựa trên một cột khóa chung:
import polars as pl
# Create the first DataFrame
df1 = pl.DataFrame({
'id': [1, 2, 3, 4],
'name': ['Alice', 'Bob', 'Charlie', 'David']
})
# Create the second DataFrame
df2 = pl.DataFrame({
'id': [2, 3, 5],
'age': [25, 30, 35]
})
# Perform an inner join on the 'id' column
joined_df = df1.join(df2, on='id')
# Display the joined DataFrame
joined_df
Kết quả:

Trong ví dụ này, chúng ta tạo hai DataFrame (df1 và df2) bằng hàm dựng pl.DataFrame. DataFrame đầu tiên df1 chứa các cột id và name, còn DataFrame thứ hai df2 chứa các cột id và age. Sau đó, chúng ta thực hiện phép nối trong trên cột id bằng phương thức join(), chỉ định cột id là khóa nối.
Tích hợp và khả năng tương tác
Polars mang đến khả năng tích hợp liền mạch với các thư viện Python phổ biến khác, cho phép nhà phân tích dữ liệu tận dụng nhiều công cụ và chức năng. Hãy cùng khám phá hai khía cạnh chính của tích hợp: làm việc với các thư viện khác và khả năng tương tác với Pandas.
Tích hợp Polars với các thư viện Python khác
Polars tích hợp thuận tiện với các thư viện như NumPy và PyArrow, giúp người dùng kết hợp thế mạnh của nhiều công cụ trong quy trình phân tích dữ liệu. Với tích hợp NumPy, Polars chuyển đổi dễ dàng giữa Polars DataFrame và mảng NumPy, tận dụng khả năng tính toán khoa học mạnh mẽ của NumPy. Sự tích hợp này đảm bảo quá trình chuyển đổi dữ liệu mượt mà và cho phép nhà phân tích áp dụng trực tiếp các hàm NumPy lên dữ liệu Polars.
Tương tự, bằng cách tận dụng PyArrow, Polars tối ưu việc truyền dữ liệu giữa Polars và các hệ thống dựa trên Arrow. Sự tích hợp này cho phép làm việc liền mạch với dữ liệu lưu ở định dạng Arrow và khai thác khả năng thao tác dữ liệu hiệu năng cao của Polars.
Chuyển đổi Polars DataFrame sang pandas DataFrame
Polars hỗ trợ chuyển đổi liền mạch từ Polars DataFrame sang Pandas DataFrame. Dưới đây là ví dụ minh họa việc chuyển đổi từ Polars sang pandas.
import polars as pl
import pandas as pd
# Create a Polars DataFrame
df_polars = pl.DataFrame({
'column_A': [1, 2, 3],
'column_B': ['apple', 'banana', 'orange']
})
# Convert Polars DataFrame to Pandas DataFrame
df_pandas = df_polars.to_pandas()
# Display the Pandas DataFrame
df_pandas
Kết quả:

Kết luận
Polars là một thư viện mạnh mẽ dành cho thao tác và phân tích dữ liệu hiệu năng cao trong Python. Tốc độ và các tối ưu hiệu năng khiến nó trở thành lựa chọn lý tưởng để xử lý hiệu quả các bộ dữ liệu lớn.
Với cú pháp diễn đạt và cấu trúc DataFrame, Polars mang đến giao diện quen thuộc và trực quan cho các tác vụ thao tác dữ liệu. Hơn nữa, Polars tích hợp liền mạch với các thư viện Python khác như NumPy và PyArrow, mở rộng khả năng và cho phép người dùng tận dụng một hệ sinh thái công cụ đa dạng.
Khả năng chuyển đổi Polars DataFrame sang pandas DataFrame đảm bảo tính tương tác và giúp tích hợp Polars vào các quy trình hiện có. Dù bạn đang làm việc với kiểu dữ liệu phức tạp, xử lý các bộ dữ liệu lớn hay tìm kiếm cải thiện hiệu năng, Polars cung cấp một bộ công cụ toàn diện để khai mở toàn bộ tiềm năng cho các nỗ lực phân tích dữ liệu của bạn.
