Các tập tin pickle python có được nén không?

Lưu trữ dữ liệu trên đám mây có thể tiêu tốn của bạn một khoản tiền khá lớn. Đương nhiên, bạn sẽ muốn tránh xa định dạng lưu trữ dữ liệu được biết đến rộng rãi nhất - CSV - và chọn thứ gì đó nhẹ hơn một chút. Đó là, nếu bạn không quan tâm đến việc xem và chỉnh sửa các tệp dữ liệu một cách nhanh chóng

Hôm nay bạn sẽ tìm hiểu về một trong những cách đơn giản nhất để lưu trữ hầu hết mọi thứ trong Python — Pickle. Pickling không chỉ giới hạn ở các bộ dữ liệu, như bạn sẽ thấy ngay sau đây, nhưng mọi ví dụ trong bài viết đều dựa trên các bộ dữ liệu

Pickle chính xác là gì?

Trong Python, bạn có thể sử dụng mô-đun pickle để tuần tự hóa các đối tượng và lưu chúng vào một tệp. Sau đó, bạn có thể giải tuần tự hóa tệp được tuần tự hóa để tải lại chúng khi cần

Pickle có một lợi thế lớn so với các định dạng khác — bạn có thể sử dụng nó để lưu trữ bất kỳ đối tượng Python nào. Đúng vậy, bạn không bị giới hạn dữ liệu. Một trong những chức năng được sử dụng rộng rãi nhất là lưu các mô hình máy học sau khi đào tạo xong. Bằng cách đó, bạn không phải đào tạo lại mô hình mỗi khi chạy tập lệnh

Tôi cũng đã sử dụng Pickle nhiều lần để lưu trữ mảng Numpy. Đó là một giải pháp đơn giản để thiết lập một số loại điểm kiểm tra trong mã của bạn

Âm thanh như một định dạng lưu trữ hoàn hảo? . Pickle có một vài thiếu sót bạn nên biết

  • Hỗ trợ đa ngôn ngữ không được đảm bảo — Pickle dành riêng cho Python, vì vậy không ai có thể đảm bảo bạn sẽ có thể đọc các tệp được chọn bằng ngôn ngữ lập trình khác
  • Các tệp được chọn dành riêng cho phiên bản Python — Bạn có thể gặp sự cố khi lưu tệp trong một phiên bản Python và đọc chúng trong phiên bản khác. Cố gắng làm việc trong các phiên bản Python giống hệt nhau, nếu có thể
  • Pickling không nén dữ liệu — Pickling một đối tượng sẽ không nén nó. Chắc chắn, tệp sẽ nhỏ hơn khi so sánh với CSV, nhưng bạn có thể nén dữ liệu theo cách thủ công để đạt hiệu quả tối đa

Bạn sẽ sớm thấy cách khắc phục để nén dữ liệu. Tiếp theo hãy xem cách làm việc với Pickle trong Python

Làm cách nào để làm việc với Pickle trong Python?

Hãy bắt đầu bằng cách nhập các thư viện cần thiết và tạo một tập dữ liệu tương đối lớn. Bạn sẽ cần Numpy, Pandas, Pickle và BZ2. Bạn sẽ sử dụng cái cuối cùng để nén dữ liệu

import numpy as np
import pandas as pd
import pickle
import bz2

np.random.seed = 42
df_size = 10_000_000

df = pd.DataFrame[{
'a': np.random.rand[df_size],
'b': np.random.rand[df_size],
'c': np.random.rand[df_size],
'd': np.random.rand[df_size],
'e': np.random.rand[df_size]
}]
df.head[]

Đây là cách tập dữ liệu trông như thế nào

Hình ảnh 1 - Bộ dữ liệu giả ngẫu nhiên [hình ảnh của tác giả]

Hãy lưu nó cục bộ tiếp theo. Bạn có thể sử dụng lệnh sau để chọn DataFrame

with open['10M.pkl', 'wb'] as f:
pickle.dump[df, f]

Tệp được lưu cục bộ ngay bây giờ. Bạn có thể đọc nó theo cách tương tự — chỉ cần thay đổi chế độ từ wb sang rb

with open['10M.pkl', 'rb'] as f:
df = pickle.load[f]

Thật tuyệt vời. Như đã đề cập trước đó, Pickle sẽ không thực hiện bất kỳ thao tác nén nào theo mặc định. Bạn sẽ phải chăm sóc nó theo cách thủ công. Python làm cho nó trở nên dễ dàng một cách ngu ngốc với mô-đun bz2

with open['10M_compressed.pkl', 'wb'] as f:
compressed_file = bz2.BZ2File[f, 'w']
pickle.dump[df, compressed_file]

Nó chỉ là một dòng mã bổ sung, nhưng nó có thể giúp bạn tiết kiệm thời gian sử dụng đĩa. Quá trình tiết kiệm sẽ lâu hơn đáng kể, nhưng đó là sự đánh đổi mà bạn sẽ phải chấp nhận

Đọc một tệp nén yêu cầu một dòng mã bổ sung

with open['10M_compressed.pkl', 'rb'] as f:
compressed_file = bz2.BZ2File[f, 'r']
df = pickle.load[compressed_file]

Chỉ cần đảm bảo không làm rối các chế độ tệp, vì cung cấp wb khi đọc tệp sẽ xóa tất cả nội dung của tệp. Tốt nhất là viết các hàm trợ giúp cho các thao tác đọc và ghi, để bạn không bao giờ làm chúng rối tung lên

Phần sau đây bao gồm so sánh với định dạng tệp CSV — về kích thước tệp, thời gian đọc và ghi

CSV so với. Dưa chua - Bạn nên sử dụng loại nào?

Trả lời câu hỏi này không phải là dễ dàng như nó có vẻ. Chắc chắn rồi, CSV cung cấp đặc quyền xem và chỉnh sửa vì bất kỳ ai cũng có thể mở chúng. Đó cũng có thể được coi là một nhược điểm, vì những lý do rõ ràng. Ngoài ra, bạn không thể lưu các mô hình máy học vào tệp CSV

Tuy nhiên, hãy so sánh cả hai về kích thước tệp, thời gian đọc và ghi

Biểu đồ sau đây cho thấy thời gian cần thiết để lưu DataFrame từ phần cuối cục bộ

Hình ảnh 2 — CSV so với. Pickle tiết kiệm thời gian cục bộ tính bằng giây [CSV. 34. 9; . 32. 7; . 0. 44] [ảnh của tác giả]

Đó là tốc độ tăng khoảng 80 lần, nếu bạn không quan tâm đến việc nén

Tiếp theo, hãy so sánh thời gian đọc — mất bao lâu để đọc các bộ dữ liệu giống hệt nhau ở các định dạng khác nhau

Hình ảnh 3 — CSV so với. Thời gian đọc dưa chua tính bằng giây [CSV. 3. 71; . 15. 3; . 0. 339] [ảnh của tác giả]

Pickle lần này nhanh hơn khoảng 11 lần, khi không nén. Quá trình nén là một vấn đề lớn khi đọc và lưu tệp. Nhưng, hãy xem nó tiết kiệm được bao nhiêu dung lượng ổ đĩa

Đó là những câu trả lời trực quan hóa sau đây

Hình ảnh 4 — CSV so với. Kích thước tệp dưa chua tính bằng MB [CSV. 963. 5; . 381. số 8; . 400] [ảnh của tác giả]

Kích thước tệp giảm khi so sánh với CSV là đáng kể, nhưng quá trình nén không tiết kiệm được nhiều dung lượng ổ đĩa trong trường hợp này

Tóm lại, chuyển từ CSV sang Pickle mang lại những lợi thế rõ ràng. Điều không rõ ràng 100% là Pickle cho phép bạn lưu trữ các đối tượng khác — bất kỳ thứ gì được tích hợp trong Python, mảng Numpy và thậm chí cả các mô hình máy học. CSV và các định dạng chỉ chứa dữ liệu khác không có khả năng đó

Suy nghĩ và trải nghiệm của bạn với Pickle là gì?

Thích bài viết? . Tôi sẽ nhận được một phần phí thành viên của bạn nếu bạn sử dụng liên kết sau mà không phải trả thêm phí

Dưa chua Python có được nén không?

Tệp được chọn dành riêng cho phiên bản Python — Bạn có thể gặp sự cố khi lưu tệp trong một phiên bản Python và đọc chúng trong phiên bản kia. Cố gắng làm việc trong các phiên bản Python giống hệt nhau, nếu có thể. Pickling không nén dữ liệu — Pickling một đối tượng sẽ không nén nó.

Dưa chua có sử dụng nén không?

Dưa trăn tiêu chuẩn, được bao bọc mỏng bằng các thư viện nén tiêu chuẩn . Gói pickle tiêu chuẩn cung cấp một công cụ mặc định tuyệt vời để tuần tự hóa các đối tượng python tùy ý và lưu trữ chúng vào đĩa. Python tiêu chuẩn cũng bao gồm nhiều gói nén dữ liệu.

Các tệp dưa chua có nhỏ hơn CSV không?

dưa chua. Pickle là định dạng gốc của python phổ biến cho tuần tự hóa đối tượng. Ưu điểm của pickle là nó cho phép mã python triển khai bất kỳ loại cải tiến nào. Nó nhanh hơn nhiều so với các tệp CSV và giảm kích thước tệp xuống gần một nửa so với các tệp CSV bằng kỹ thuật nén của nó

Các tập tin pickle con người có thể đọc được không?

Mô-đun pickle Python là một cách khác để tuần tự hóa và giải tuần tự hóa các đối tượng trong Python. Nó khác với mô-đun json ở chỗ nó tuần tự hóa các đối tượng ở định dạng nhị phân, có nghĩa là kết quả không thể đọc được .

Chủ Đề