일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- ai school
- 캐글데이터분석
- OneHotEncoding
- 데이터 분석
- 소프트맥스함수
- 2022 AI 온라인 실무 교육
- ai 스쿨 7기
- 시그모이드함수
- 데이터분석가
- AI 데이터 분석 트랙
- 멋사 ai
- 고객데이터분석
- 코드업 기초100제
- 멋쟁이사자처럼 ai school 7기
- RFM
- 기초100제
- 코딩테스트
- 코드업
- 딥러닝
- 앨리스
- RFM분석
- 머신러닝
- Python
- Onehot인코딩
- 데이터분석
- 멋쟁이사자처럼
- 코드업100제
- 데이터마케팅분석
- 파이썬
- 고객세그먼트
- Today
- Total
초봉5센티미터
TIL 16. 다운캐스팅 본문
downcast
- 데이터 형식을 다운그레이드하여 메모리 사용량 감소.
Parquet - 특징
- 효율적인 데이터 저장 및 검색을 위해 설계된 오픈 소스, 열 지향 데이터 파일 형식
- 복잡한 데이터를 대량으로 처리하기 위해 향상된 성능과 함께 효율적인 데이터 압축 및 인코딩 체계를 제공
csv => 행단위
parquet => 열단위
- 열 단위 값은 동일한 데이터 타입이기에 압축에 유리하다
- 열 단위 압축은 효율적이고 저장 공간을 절약 가능하다.
히스토그램에서 범주형, 수치형 구분 기준
-> 그래프의 모형을 보고 판단
-> 수치형 - 연속적으로 붙어있음
-> 범주형 - 따로따로 띄어져있음
sns.barplot 에는 연산 기능이 있다
plotly 에서 barplot 처럼 연산을 할 수 있는 그래프
-> histogram
histogram에서 연산을 하는 옵션
-> histfunc
downcasy - 메모리 부담 줄이기
# data/HP_2020_sample.csv 파일을 로드
df = pd.read_csv("HP_2020_sample.csv")
df.shape
# dtypes 를 통해 데이터의 타입만 봅니다.
df.dtypes
기준년도 int64
가입자 일련번호 int64
처방내역일련번호 int64
일련번호 int64
성별코드 int64
연령대코드(5세단위) int64
시도코드 int64
요양개시일자 object
약품일반성분명코드 object
1회 투약량 float64
1일투약량 int64
총투여일수 int64
단가 float64
금액 int64
데이터 공개일자 object
dtype: object
성별코드는 1과 2 두개로 이루어져 있음. 하지만 int64로 되어있어 메모리용량을 차지함
df.info()
dtypes: float64(2), int64(10), object(3)
memory usage: 36.5+ MB
현재 36.5MB의 용량을 차지한다.
성별코드의 dtype을 바꾸면 용량을 줄일 수 있다!
int8 or uint8로 변경가능
downcast 를 사용하면 데이터 타입 변경 가능하다.
# downcast = "unsigned"로 데이터 타입 크기 줄이기
df["성별코드"] = pd.to_numeric(df["성별코드"],downcast = "unsigned")
info로 살펴보면 데이터용량이 줄어듦
downcast는 pd.to_numeric을 사용한다.
bool => int8
int => unsigned
float => float
다음은 반복문을 사용해 컬럼단위로 순회하며 전체 컬럼의 데이터 용량을 줄어보자.
# 조건문과 반복문을 활용해서 int, float, object 대해서 downcast
# df[col].dtype.name 으로 데이터 타입명을 가져옵니다.
# 각 컬럼의 데이터 타입 이름이 int, float 으로 시작하는지를 봅니다.
for col in df.columns:
dtype_name = df[col].dtypes.name
if dtype_name.startswith("int"):
if df[col].min() >=0: #unsigned는 0보다 큰값만 지정가능
df[col] = pd.to_numeric(df[col],downcast = "unsigned") # 0보다 큰값은 unsigned
else:
df[col] = pd.to_numeric(df[col],downcast = "integer") # 0보다 작은값 integer
elif dtype_name.startswith("float"):
df[col] = pd.to_numeric(df[col],downcast = "float") # float 타입 변경
elif dtype_name == "bool":
df[col] = df[col].astype("int8")
elif dtype_name == "object":
df[col] = df[col].astype("category")
# 메모리 크기가 줄어든 것을 확인
df.info()
dtypes: category(3), float32(2), uint16(2), uint32(3), uint8(6)
memory usage: 10.7 MB
36.5MB에서 10.7MB까지 줄어든것을 확인할 수 있다.
처음 메모리용량을 줄일 수 있다고해서 1/10정도 줄어들려나? 라고 생각했는데
생각보다 엄청많은 용량이 줄어든것을 볼 수있다.
* 본글은 멋쟁이사자처럼 AI school 강의자료와 내용을 토대로 제작되었습니다.
'교육 > 멋쟁이사자처럼 AI School 7기' 카테고리의 다른 글
TIL 18.머신러닝(2) (0) | 2022.10.25 |
---|---|
TIL 17. 머신러닝(1) (0) | 2022.10.24 |
TIL 15. 의약품처방정보 전처리 (1) | 2022.10.13 |
TIL 14. EDA: KOSIS 데이터 (0) | 2022.10.12 |
TIL 13. 전국 신규 민간 아파트 분양가격 동향 분석 (1) | 2022.10.11 |