[ Python ] 정형데이터 용량 줄이는 함수 소개 (연속형, 이산형, 문자형)
2020. 4. 12. 16:53ㆍ분석 Python/Pandas Tip
광고 한 번씩 눌러주세요! 블로그 운영에 큰 힘이 됩니다 :)
파이썬에서 데이터를 그냥 사용하다 보면, 데이가 엄청 커서 불편할 때가 있다.
그래서 필자는 연속형,이산형,문자형에 따라 용량을 줄여주는 함수를 소개하겠다.
## 데이터 크기 확인 함수
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
'분석 Python > Pandas Tip' 카테고리의 다른 글
pandas apply를 사용하여 다중 컬럼(multiple columns) 만들기 (0) | 2020.06.09 |
---|---|
pandas 의 filter 함수로 변수 선택하기 (0) | 2020.05.19 |
pandas describe에 결측데이터 개수 포함해서 표현해보기 (0) | 2020.04.08 |
[ Python ] pandas 읽고 쓰기 비교 (to_csv , to_pickle , to_feather) (1) | 2019.12.21 |
[ Python ] Pandas idxmin , idxmax, pd.cut 함수 알아보기 (0) | 2019.10.29 |