분석 Python/Pandas Tip
[ Python ] 정형데이터 용량 줄이는 함수 소개 (연속형, 이산형, 문자형)
데이터분석뉴비
2020. 4. 12. 16:53
728x90
광고 한 번씩 눌러주세요! 블로그 운영에 큰 힘이 됩니다 :)
파이썬에서 데이터를 그냥 사용하다 보면, 데이가 엄청 커서 불편할 때가 있다.
그래서 필자는 연속형,이산형,문자형에 따라 용량을 줄여주는 함수를 소개하겠다.
## 데이터 크기 확인 함수
def mem_usage(pandas_obj):
if isinstance(pandas_obj,pd.DataFrame):
usage_b = pandas_obj.memory_usage(deep=True).sum()
else: # we assume if not a df it's a series
usage_b = pandas_obj.memory_usage(deep=True)
usage_mb = usage_b / 1024 ** 2 # convert bytes to megabytes
return "{:03.2f} MB".format(usage_mb)
## 타입별 평균 크기 확인 함수
def type_memory(data) :
for dtype in ['float','int','object']:
selected_dtype = data.select_dtypes(include=[dtype])
mean_usage_b = selected_dtype.memory_usage(deep=True).mean()
mean_usage_mb = mean_usage_b / 1024 ** 2
print("Average memory usage for {} columns: {:03.2f} MB".format(dtype,mean_usage_mb))
## 이산형 데이터 사이즈 축소 함소
def int_memory_reduce(data) :
data_int = data.select_dtypes(include=['int'])
converted_int = data_int.apply(pd.to_numeric,downcast='unsigned')
print(f"Before : {mem_usage(data_int)} -> After : {mem_usage(converted_int)}")
data[converted_int.columns] = converted_int
return data
## 연속형 데이터 사이즈 축소 함소
def float_memory_reduce(data) :
data_float = data.select_dtypes(include=['float'])
converted_float = data_float.apply(pd.to_numeric,downcast='float')
print(f"Before : {mem_usage(data_float)} -> After : {mem_usage(converted_float)}")
data[converted_float.columns] = converted_float
return data
## 문자형 데이터 사이즈 축소 함소
def object_memory_reduce(data) :
gl_obj = data.select_dtypes(include=['object']).copy()
converted_obj = pd.DataFrame()
for col in gl_obj.columns:
num_unique_values = len(gl_obj[col].unique())
num_total_values = len(gl_obj[col])
if num_unique_values / num_total_values < 0.5:
converted_obj.loc[:,col] = gl_obj[col].astype('category')
else:
converted_obj.loc[:,col] = gl_obj[col]
print(f"Before : {mem_usage(gl_obj)} -> After : {mem_usage(converted_obj)}")
data[converted_obj.columns] = converted_obj
return data
데이터 전체 용량 확인 함수
mem_usage(data)
타입별 평균 용량 확인
type_memory(data)
이산형 데이터 축소 후 반환값 받는 함수
int_memory_reduce(data)
연속형 데이터 축소 후 반환값 받는 함수
float_memory_reduce(data)
문자형 데이터 축소 후 반환값(pd.Categorical 사용)
object_memory_reduce(data)
역시 문자형으로 지정한 것이 메모리를 가장 많이 차지 한다.
728x90