Làm cách nào để kiểm tra dung lượng bộ nhớ của một biến trong python?

Tìm hiểu lượng bộ nhớ được sử dụng bởi khung dữ liệu Pandas có thể cực kỳ hữu ích khi làm việc với khung dữ liệu lớn hơn. Trong bài đăng này, chúng ta sẽ thấy hai ví dụ về ước tính mức sử dụng bộ nhớ của khung dữ liệu Pandas bằng các chức năng của Pandas. Trước tiên, chúng ta sẽ xem cách tìm tổng mức sử dụng bộ nhớ của khung dữ liệu Pandas bằng hàm Pandas info[] và sau đó chúng ta sẽ xem một ví dụ về cách tìm mức sử dụng bộ nhớ của tất cả các biến trong khung dữ liệu bằng hàm Pandas memory_usage[]

Hãy để chúng tôi tải Pandas trước và kiểm tra phiên bản của nó

import pandas as pd
pd.__version__
1.0.0

Chúng tôi sẽ sử dụng tập dữ liệu từ dự án TidyTuesday và tập dữ liệu này là về chi phí học phí đại học trên khắp Hoa Kỳ

data_url="//raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-03-10/tuition_cost.csv"
df = pd.read_csv[data_url]
df.iloc[0:5,0:5]

Chúng ta có thể thấy rằng khung dữ liệu của chúng ta chứa các kiểu dữ liệu khác nhau

        name	state	state_code	type	degree_length
0	Aaniiih Nakoda College	Montana	MT	Public	2 Year
1	Abilene Christian University	Texas	TX	Private	4 Year
2	Abraham Baldwin Agricultural College	Georgia	GA	Public	2 Year
3	Academy College	Minnesota	MN	For Profit	2 Year
4	Academy of Art University	California	CA	For Profit	4 Year

Tổng mức sử dụng bộ nhớ của Pandas Dataframe với thông tin []

Chúng ta có thể sử dụng hàm Pandas info[] để tìm tổng mức sử dụng bộ nhớ của một khung dữ liệu. Hàm thông tin gấu trúc [] chủ yếu được sử dụng cho thông tin về từng cột, loại dữ liệu của chúng và số lượng giá trị không phải là null cho mỗi biến. Chức năng thông tin gấu trúc [] cũng cung cấp cho chúng tôi mức sử dụng bộ nhớ ở cuối báo cáo của nó

Để có được mức sử dụng bộ nhớ đầy đủ, chúng tôi cung cấp đối số memory_usage=”deep” cho info[]

df.info[memory_usage="deep"]

Chúng tôi nhận được tất cả thông tin cơ bản về khung dữ liệu và cuối cùng, chúng tôi cũng nhận được “mức sử dụng bộ nhớ. 1. 1 MB” cho khung dữ liệu

RangeIndex: 2973 entries, 0 to 2972
Data columns [total 10 columns]:
 #   Column                Non-Null Count  Dtype  
---  ------                --------------  -----  
 0   name                  2973 non-null   object 
 1   state                 2921 non-null   object 
 2   state_code            2973 non-null   object 
 3   type                  2973 non-null   object 
 4   degree_length         2973 non-null   object 
 5   room_and_board        1879 non-null   float64
 6   in_state_tuition      2973 non-null   int64  
 7   in_state_total        2973 non-null   int64  
 8   out_of_state_tuition  2973 non-null   int64  
 9   out_of_state_total    2973 non-null   int64  
dtypes: float64[1], int64[4], object[5]
memory usage: 1.1 MB

Sử dụng bộ nhớ của từng cột trong Pandas Dataframe với memory_usage[]

Chức năng thông tin gấu trúc [] đã cung cấp tổng bộ nhớ được sử dụng bởi một khung dữ liệu. Tuy nhiên, đôi khi bạn có thể muốn bộ nhớ được sử dụng bởi từng cột trong khung dữ liệu Pandas

Chúng ta có thể nhận mức sử dụng bộ nhớ của từng cột/cấp biến bằng cách sử dụng hàm Pandas memory_usage[]

df.memory_usage[]

Chúng tôi nhận được bộ nhớ được sử dụng bởi mỗi cột/biến theo byte. Theo mặc định, memory_usage[] bỏ qua dung lượng bộ nhớ của các biến có đối tượng kiểu dữ liệu

Index                     128
name                    23784
state                   23784
state_code              23784
type                    23784
degree_length           23784
room_and_board          23784
in_state_tuition        23784
in_state_total          23784
out_of_state_tuition    23784
out_of_state_total      23784
dtype: int64

Chúng ta có thể nhận được mức sử dụng bộ nhớ không bao gồm kiểu dữ liệu đối tượng bằng cách sử dụng đối số deep=True cho hàm memory_usage[]

df.memory_usage[deep=True]

Chúng tôi nhận được các byte được sử dụng bởi mỗi biến, nhưng lần này nó cung cấp cho bộ nhớ sử dụng các kiểu dữ liệu đối tượng

________số 8

Vì hàm memory_usage[] trả về một khung dữ liệu về mức sử dụng bộ nhớ, nên chúng ta có thể tính tổng để có được tổng bộ nhớ đã sử dụng

df.memory_usage[deep=True].sum[]
1112497

Chúng ta có thể thấy rằng mức sử dụng bộ nhớ được ước tính bởi Pandas info[] và memory_usage[] với tùy chọn deep=True phù hợp. Thông thường, các biến đối tượng có thể có dung lượng bộ nhớ lớn. Bằng cách chuyển đổi biến đối tượng của kiểu chuỗi thành phân loại, người ta có thể giảm dung lượng bộ nhớ

Bài đăng này là một phần của loạt bài về Pandas 101, hướng dẫn bao gồm các mẹo và thủ thuật sử dụng Pandas để thu thập và phân tích dữ liệu

Với

data_url="//raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-03-10/tuition_cost.csv"
df = pd.read_csv[data_url]
df.iloc[0:5,0:5]
3, bạn có thể kiểm tra việc sử dụng bộ nhớ của một đối tượng. Để làm như vậy, trước tiên hãy nhập mô-đun
data_url="//raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-03-10/tuition_cost.csv"
df = pd.read_csv[data_url]
df.iloc[0:5,0:5]
4

data_url="//raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-03-10/tuition_cost.csv"
df = pd.read_csv[data_url]
df.iloc[0:5,0:5]
0

Woah… đợi đã… tại sao danh sách khổng lồ này chỉ có 48 byte?

Đó là bởi vì hàm phạm vi trả về một đối tượng có thể lặp lại chỉ hoạt động như một danh sách các số, nhưng bên trong chỉ đơn giản là giữ số lần lặp lại cuối cùng. Một phạm vi có cường độ bộ nhớ hiệu quả hơn so với sử dụng danh sách số thực tế

Bạn có thể tự mình xem bằng cách sử dụng khả năng hiểu danh sách để tạo danh sách Python thực tế gồm các số từ cùng một phạm vi

data_url="//raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-03-10/tuition_cost.csv"
df = pd.read_csv[data_url]
df.iloc[0:5,0:5]
1

Đó là khoảng 87KB cho 10.000 số

Không chính xác lắm

Một điều cần lưu ý. phương pháp này không chính xác lắm.

data_url="//raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-03-10/tuition_cost.csv"
df = pd.read_csv[data_url]
df.iloc[0:5,0:5]
5 sẽ không tính toán đệ quy mức sử dụng bộ nhớ của tất cả các đối tượng trong danh sách hoặc từ điển. Vì vậy, khi yêu cầu kích thước của danh sách, bạn chỉ yêu cầu kích thước của chính danh sách đó và tất cả các tham chiếu của nó đến nội dung, nhưng kích thước của tất cả các số nguyên đó không được tính đến. e. g. , một số nguyên Python tự chiếm 28 byte

data_url="//raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-03-10/tuition_cost.csv"
df = pd.read_csv[data_url]
df.iloc[0:5,0:5]
2

10K số nguyên sẽ chiếm thêm 280K byte bộ nhớ, ngoài kích thước danh sách là 87K

Làm cách nào để kiểm tra kích thước bộ nhớ trong Python?

Trong Python, chức năng cơ bản nhất để đo kích thước của một đối tượng trong bộ nhớ là sys. getsizeof[] .

Một biến chiếm bao nhiêu bộ nhớ trong Python?

int z=1; . 001[31 số 0 và một số 1]. 4 bytes= 32 bits allocated for z, and the bits are arranged as 00. 001[31 0's and one 1].

Chức năng nào được sử dụng để phát hiện lượng bộ nhớ mà biến sử dụng?

memory_get_usage[] — Trả về dung lượng bộ nhớ được phân bổ cho PHP. memory_get_peak_usage[] — Trả về mức cao nhất của bộ nhớ được cấp phát bởi PHP.

Chủ Đề