데이터를 불러와서 모델링을 하다보면 데이터가 너무 커서 속도가 너무 오래걸리거나, 메모리 초과(OOM: out-of-memory) 오류가 발생하는 경우가 종종 있는데욥!
이를 해결하기 위해 데이터 사이즈를 줄이는 다운캐스팅(Downcasting) 방법을 이용할 수 있습니다!!
파이썬(Python)에서는 정수, 부동소수점 변수 저장시 메모리에서 차지하는 바이트에 기반하여 데이터 타입을 선택하게되는데욥 데이터 값을 손상시키지 않으면서 각 변수를 저장하는 가장 용량이 적은(메모리를 적게 사용하는) 데이터 타입으로 저장하여 데이터의 총 사이즈를 줄일 수 있습니다. 즉, 무손실 압축(lossless compression)이 가능합니다!
예) int64 타입을 int32, int16, int8로 다운캐스팅
float64를 float32나 float16으로 다운캐스팅
# 장점
데이터 처리 속도 빨라짐, 사용하는 메모리 공간 줄어듦
ver1
defdowncast(df, verbose=True):
start_mem=df.memory_usage().sum() /1024**2
forcolindf.columns:
dtype_name=df[col].dtype.name
ifdtype_name=='object':
pass
elifdtype_name=='category': # Use 'category' for categorical dtype
pass
elifdtype_name=='bool':
df[col] =df[col].astype('int8')
elifdtype_name.startswith('int') or (df[col].dtype =='float'and (df[col] %1==0).all()):