Python lưu dữ liệu lớn vào tệp

Sau khi làm việc trên tập dữ liệu và thực hiện tất cả quá trình tiền xử lý, chúng tôi cần lưu dữ liệu đã được xử lý trước vào một số định dạng như trong csv, excel hoặc các định dạng khác

Mã nguồn python này thực hiện như sau.
1. Tạo từ điển dữ liệu và chuyển đổi nó thành khung dữ liệu
2. Lưu nó ở định dạng CSV

Vì vậy, đây là công thức về cách chúng tôi có thể lưu Pandas DataFrame dưới dạng tệp CSV

Bước 1 - Nhập thư viện

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
8

Chúng tôi chỉ nhập gấu trúc cần thiết

Bước 2 - Thiết lập dữ liệu

Chúng tôi đã tạo một từ điển dữ liệu và chuyển nó vào pd. DataFrame để tạo khung dữ liệu với các cột 'first_name', 'last_name', 'age', 'Comedy_Score' và 'Rating_Score'.

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
9

Bước 3 - Lưu DataFrame

Vì vậy, bây giờ chúng ta phải lưu tập dữ liệu mà chúng ta đã tạo. Chúng tôi lưu nó ở nhiều định dạng, ở đây chúng tôi đang thực hiện nó trong csv và excel bằng cách sử dụng hàm to_csv và to_excel tương ứng.

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
0 Vì vậy, đầu ra là hai tệp đã lưu, một ở định dạng csv và một ở định dạng excel

Thiếu CPU, chương trình của bạn chạy chậm hơn; . Nhưng bạn có thể xử lý bộ dữ liệu lớn hơn RAM bằng Python, như bạn sẽ tìm hiểu trong loạt bài viết sau

cấu trúc mã

Kỹ thuật quản lý dữ liệu

gấu trúc

NumPy

Đo mức sử dụng bộ nhớ

Tìm hiểu các kỹ năng kỹ thuật phần mềm Python thực tế mà bạn có thể sử dụng trong công việc của mình

Đăng ký nhận bản tin của tôi và tham gia cùng hơn 6500 nhà phát triển Python và nhà khoa học dữ liệu học các công cụ và kỹ thuật thực tế, từ hiệu suất Python đến đóng gói Docker, với một bài viết mới miễn phí trong hộp thư đến của bạn mỗi tuần

Nếu bạn có một tệp CSV lớn mà bạn muốn xử lý bằng gấu trúc một cách hiệu quả, bạn có một số tùy chọn sẽ được giải thích trong bài đăng này

Vấn đề tốc độ khi xử lý dữ liệu

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
3

Bạn cần có khả năng điều chỉnh dữ liệu của mình trong bộ nhớ để sử dụng gấu trúc với nó. Nếu bạn có thể xử lý các phần của nó cùng một lúc, bạn có thể đọc nó thành nhiều phần và xử lý từng phần. Ngoài ra, nếu bạn biết rằng mình phải có đủ bộ nhớ để tải tệp, thì có một vài gợi ý giúp giảm kích thước tệp

Lưu ý rằng nói chung, bạn nên có dung lượng bộ nhớ gấp ba đến mười lần kích thước của Khung dữ liệu mà bạn muốn thao tác. Bộ nhớ bổ sung sẽ cung cấp cho bạn đủ dung lượng để thực hiện nhiều thao tác phổ biến

1. Kiểm tra bộ nhớ hệ thống của bạn bằng Python

Hãy bắt đầu bằng cách kiểm tra bộ nhớ hệ thống của chúng tôi.

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
4 sẽ hoạt động trên Windows, MAC và Linux. Có thể tải xuống
import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
5 từ trình quản lý gói của Python với cài đặt pip

Trong trường hợp bạn gặp lỗi biên dịch với

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
4 khi cài đặt, hãy thử các bước bên dưới

sudo yum install python3-devel
sudo pip install psutil
# now check the version using
pip freeze | grep psutil

Bây giờ hãy xem bộ nhớ hiện tại của hệ thống của chúng tôi

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB

2. Xác định mức sử dụng bộ nhớ của tệp CSV của chúng tôi

Bây giờ chúng tôi sẽ ước tính toàn bộ tệp sẽ chiếm bao nhiêu bộ nhớ. Tôi đã sử dụng bộ dữ liệu

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
7 từ
import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
8

________số 8

Phương pháp

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
9 hiển thị mức sử dụng bộ nhớ của khung dữ liệu của chúng tôi trong khi
import pandas as pddata = pd.read_csv["tmdb_5000_movies.csv"]# Lets check the memory usage of the file 
print[f" ** Memory usage of the file - {sum[data.memory_usage[]] * 0.000001} MB for {len[data.index]} Rows"]
>> # Output
** Memory usage of the file - 8.453408 MB for 52833 Rows
0 hiển thị tổng số hàng của khung dữ liệu

Chúng ta có thể thấy rằng 52833 hàng sử dụng khoảng hơn 8 MB bộ nhớ. Nếu chúng tôi có một tỷ hàng, thì sẽ chiếm khoảng hơn 151 GB bộ nhớ. Bây giờ, đó là một ý tưởng tồi để phù hợp với mọi thứ vào bộ nhớ và khiến nó bị treo, đừng làm điều đó

3. Hiểu các loại dữ liệu trong tệp csv của chúng tôi

Các tệp CSV không chứa thông tin về các loại dữ liệu, không giống như cơ sở dữ liệu, gấu trúc cố gắng suy ra các loại cột và suy ra chúng từ NumPy

Làm thế nào nó làm?

Bây giờ, hãy xem giới hạn của các loại dữ liệu này

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
1

4. Chuyển đổi kiểu dữ liệu số

Hãy chạy phương thức

import pandas as pddata = pd.read_csv["tmdb_5000_movies.csv"]# Lets check the memory usage of the file 
print[f" ** Memory usage of the file - {sum[data.memory_usage[]] * 0.000001} MB for {len[data.index]} Rows"]
>> # Output
** Memory usage of the file - 8.453408 MB for 52833 Rows
1 để xác thực chuyên sâu các loại dữ liệu của chúng ta

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
3

Bây giờ, hãy tóm tắt các loại dữ liệu và số lượng cột và xem cách gấu trúc phân loại dữ liệu của chúng tôi

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
4

Chúng tôi sẽ tập trung vào các loại dữ liệu

import pandas as pddata = pd.read_csv["tmdb_5000_movies.csv"]# Lets check the memory usage of the file 
print[f" ** Memory usage of the file - {sum[data.memory_usage[]] * 0.000001} MB for {len[data.index]} Rows"]
>> # Output
** Memory usage of the file - 8.453408 MB for 52833 Rows
2 và
import pandas as pddata = pd.read_csv["tmdb_5000_movies.csv"]# Lets check the memory usage of the file 
print[f" ** Memory usage of the file - {sum[data.memory_usage[]] * 0.000001} MB for {len[data.index]} Rows"]
>> # Output
** Memory usage of the file - 8.453408 MB for 52833 Rows
3, nghiên cứu dữ liệu/độ chính xác và chuyển đổi chúng

Tôi sẽ sử dụng tham số `dtype` để yêu cầu gấu trúc sử dụng các loại số nhỏ hơn thay vì 64 bit mặc định, bây giờ bạn đã hiểu tại sao bước hiểu các loại dữ liệu trước lại quan trọng ở trên

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
7

Như bạn có thể thấy bằng cách thay đổi các loại dữ liệu để sử dụng các loại số nhỏ hơn đã tiết kiệm cho chúng tôi 23% Tiết kiệm, bạn cũng có thể sử dụng

import pandas as pddata = pd.read_csv["tmdb_5000_movies.csv"]# Lets check the memory usage of the file 
print[f" ** Memory usage of the file - {sum[data.memory_usage[]] * 0.000001} MB for {len[data.index]} Rows"]
>> # Output
** Memory usage of the file - 8.453408 MB for 52833 Rows
4 nếu bạn đang giữ một dữ liệu nhỏ có thể giúp tiết kiệm thêm

Chúng tôi hiện ở mức 67% so với kích thước ban đầu. Đó là khoảng 23% bộ nhớ được lưu

5. Chuyển đổi kiểu dữ liệu đối tượng

Các kiểu dữ liệu đối tượng coi các giá trị là chuỗi. Giá trị chuỗi trong gấu trúc chiếm nhiều bộ nhớ vì mỗi giá trị được lưu trữ dưới dạng chuỗi Python, Nếu cột không phải là số, gấu trúc sẽ chuyển đổi nó thành cột đối tượng

Chuyển đổi các loại dữ liệu Đối tượng thành phân loại sẽ sử dụng ít bộ nhớ hơn vì Pandas chỉ lưu trữ chuỗi một lần, thay vì tạo chuỗi mới cho mỗi hàng

Điều đầu tiên, hãy kiểm tra phương pháp

import pandas as pddata = pd.read_csv["tmdb_5000_movies.csv"]# Lets check the memory usage of the file 
print[f" ** Memory usage of the file - {sum[data.memory_usage[]] * 0.000001} MB for {len[data.index]} Rows"]
>> # Output
** Memory usage of the file - 8.453408 MB for 52833 Rows
5 của các cột đối tượng. Bạn có thể chuyển đổi chúng thành các cột phân loại để tiết kiệm nhiều bộ nhớ hơn Nếu chúng có số lượng thẻ thấp

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
0

Bản số không cao, tôi sẽ bắt đầu chuyển đổi các loại dữ liệu Đối tượng thành Danh mục

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
1

Chúng tôi hiện ở mức 46% so với kích thước ban đầu. Đó là khoảng 54% bộ nhớ được lưu

6. Xác định và loại bỏ các bản sao trong Pandas

Có nhiều khả năng xảy ra các bản sao trong tệp nguồn mà bạn đang xử lý, việc loại bỏ chúng nếu không cần thiết sẽ giúp bạn tiết kiệm thêm một số bộ nhớ.
Trong trường hợp của tôi, để tăng kích thước tệp, tôi phải lặp lại các bản ghi. ]

Hãy xác thực số lượng mục nhập trùng lặp trong tệp nguồn của chúng tôi trước khi loại bỏ chúng

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
2

import pandas as pddata = pd.read_csv["tmdb_5000_movies.csv"]# Lets check the memory usage of the file 
print[f" ** Memory usage of the file - {sum[data.memory_usage[]] * 0.000001} MB for {len[data.index]} Rows"]
>> # Output
** Memory usage of the file - 8.453408 MB for 52833 Rows
6 xuất ra tổng số hàng trong khung dữ liệu trong khi len[dataframe. drop_duplicates[]] sẽ xuất các giá trị duy nhất trong DataFrame

Nên file của mình như đã nói ở trên có khá nhiều file trùng lặp, bỏ đi sẽ đỡ tốn bộ nhớ

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
0

Chà, đó là một số tiết kiệm sau khi xóa các bản sao. Nếu bạn có các bản sao và muốn loại bỏ chúng thì hãy sử dụng bước này

7. Xóa các cột không mong muốn

Nếu có các cột mà bạn biết có thể bỏ qua, hãy chỉ định tham số

import pandas as pddata = pd.read_csv["tmdb_5000_movies.csv"]# Lets check the memory usage of the file 
print[f" ** Memory usage of the file - {sum[data.memory_usage[]] * 0.000001} MB for {len[data.index]} Rows"]
>> # Output
** Memory usage of the file - 8.453408 MB for 52833 Rows
7 để bao gồm các cột bạn muốn tải

Ở đây, chúng ta sẽ bỏ qua các cột "trang chủ", "từ khóa",
"origin_title" và "khẩu hiệu".

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
1

Chúng tôi hiện ở mức 32% so với kích thước ban đầu. Đó là khoảng 68% bộ nhớ được lưu

8. Xử lý khối dữ liệu với Pandas

Nếu bạn có thể xử lý các khối dữ liệu tại một thời điểm và không cần tất cả dữ liệu đó trong bộ nhớ, bạn có thể sử dụng tham số kích thước khối. Cá nhân tôi khuyên đây là lựa chọn cuối cùng của bạn

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
2

Chúng tôi hiện ở mức 14% so với kích thước ban đầu. Đó là khoảng 86% bộ nhớ được lưu

Cảm ơn bạn đã đọc qua bài viết. Đó là nó cho tôi ngày hôm nay. Nếu bạn thích bài viết này và nếu nó giúp bạn theo bất kỳ cách nào, vui lòng theo dõi tôi

Là lông tốt hơn dưa chua?

Feather là cách đọc và viết nhanh nhất . Ngay cả các tệp Pickle cũng chậm hơn đáng kể so với Feather. Một lần nữa, JSON mất quá nhiều thời gian để tải vào bộ nhớ vì nó chiếm dung lượng lưu trữ đĩa lớn. Feather cũng tốt hơn nhiều so với CSV về hiệu suất viết.

Python xử lý các tệp dữ liệu lớn như thế nào?

3 cách xử lý tập dữ liệu lớn trong Python. Là một nhà khoa học dữ liệu, tôi thấy mình ngày càng phải đối mặt với “dữ liệu lớn”. .
Giảm mức sử dụng bộ nhớ bằng cách tối ưu hóa các loại dữ liệu. .
Chia dữ liệu thành nhiều khối. .
Tận dụng đánh giá lười biếng

HDF có nhanh hơn CSV không?

Một quan sát thú vị ở đây là hdf hiển thị tốc độ tải thậm chí còn chậm hơn tệp csv trong khi các định dạng nhị phân khác hoạt động tốt hơn rõ rệt.

Cách tốt nhất để lưu trữ dữ liệu trong Python là gì?

Sử dụng đối tượng Tệp có sẵn của Python , có thể ghi dữ liệu chuỗi vào tệp đĩa và đọc từ tệp đó. Thư viện tiêu chuẩn của Python, cung cấp các mô-đun để lưu trữ và truy xuất dữ liệu được tuần tự hóa trong các cấu trúc dữ liệu khác nhau như JSON và XML. DB-API của Python cung cấp cách tương tác tiêu chuẩn với cơ sở dữ liệu quan hệ.

Chủ Đề