분석시각화 대회 코드 공유 게시물은
내용 확인 후
좋아요(투표) 가능합니다.
웹 광고 클릭률 예측 AI 경진대회
데이터 타입 변경을 통한 메모리 사용량 감소!
Pandas는 데이터프레임을 불러올 때 각 변수에 가장 메모리 사용량이 높은 데이터 타입을 부여합니다.
따라서, 변수의 범위에 맞게 데이터 타입을 변경하면 메모리 사용량을 줄일 수 있습니다. ex) int64 -> int8
아래 함수로 수치형 변수들의 데이터 타입을 변경할 수 있습니다.
저의 경우에는 메모리 사용량이 약 20% 감소했네요!
감사합니다.
def reduce_mem_usage(df): start_mem = df.memory_usage().sum() / 1024**2 # Memory usage before optimization print('Memory usage of dataframe is {:.2f} MB'.format(start_mem)) for col in df.columns: col_type = df[col].dtype if str(col_type)=="category": continue # 수치형 데이터 최적화 if col_type != object: c_min = df[col].min() c_max = df[col].max() if str(col_type)[:3] == 'int': if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max: df[col] = df[col].astype(np.int8) elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max: df[col] = df[col].astype(np.int16) elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max: df[col] = df[col].astype(np.int32) elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max: df[col] = df[col].astype(np.int64) else: if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max: df[col] = df[col].astype(np.float16) elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max: df[col] = df[col].astype(np.float32) else: df[col] = df[col].astype(np.float64) else: continue end_mem = df.memory_usage().sum() / 1024**2 # Memory usage after optimization print('Memory usage after optimization is: {:.2f} MB'.format(end_mem)) print('Decreased by {:.1f}%'.format(100 * (start_mem - end_mem) / start_mem)) return df
데이콘(주) | 대표 김국진 | 699-81-01021
통신판매업 신고번호: 제 2021-서울영등포-1704호
서울특별시 영등포구 은행로 3 익스콘벤처타워 901호
이메일 dacon@dacon.io | 전화번호: 070-4102-0545
Copyright ⓒ DACON Inc. All rights reserved