+ α/▶끄적끄적

주말과제 (Parquet & Downcast)

박혀노 2023. 2. 9. 15:45
728x90

과제 한 김에 TIL도 작성

 

0307 (parquet) 

Parquet

 fastparquet와 pyarrow를 설치

✅ 파일을 저장할 때 쓰이는 포맷의 종류( excel, csv, xml등등 )

✅ 복잡한 데이터를 대량으로 처리 & 향상된 성능 & 효율적인 데이터 압축 및 인코딩 체계 제공

✅ Java, C++, Python 등을 포함한 여러 언어를 지원

 

 

Parquet의 강점

✅ 열 단위 압축은 효율적이고 저장 공간을 절약합니다.
✅ 열 값이 동일한 데이터 타입이기 때문에 압축에 유리
✅  특정 열 값을 가져오는 쿼리는 전체 행 데이터를 읽을 필요가 없으므로 성능이 향상
✅  저장방식 snappy & gzip  => gzip이 압축퍼포먼스 좋음

✅ 데이터가 커지면 커질수록 parquet 사용하면 유리! 
✅ 메모리는 다 올려놓고 가져오는거라 메모리의 크기가 감소 X
✅ 로컬드라이브의 용량 효율적으로 사용 & 처리속도 증가 

 

 

csv 파일 : 약 26B
parquet.gzip : 약 2.3 KB
어떻게된걸까...❓▼

더보기

💡 메타정보를 포함하고 있기 떄문에 
데이터가 아주 작을 때는 오히려 그냥 메타정보를 포함하지않는 형식이 유리함

💡 25mb정도 넘어가니 csv보다 확실히 용량이 1/10 가량 줄어듦

 

snappy는 왜 존재하며 언제 쓰면 좋을까 ❓

 

os.path.isfile❓▼

더보기

💡 os 라이브러리 중 읽어올 데이터가 파일이 맞는지 확인하는 함수

 

📝파일이나 url의 인코딩이 어떤 형식인지 어떻게 알 수 있을까? 
1) 그냥 utf-8과 co949 둘다 해본다..
2) chardet 이라는 라이브러리 설치해주고,
url이나 파일을 넣어주면 
어떤 인코딩형식인지 출력해줌!

 

 

👨‍💼 결론 : 확실히 info()불러올 때 처리속도와 파일저장 사이즈에서 차이가 기본 2배이상 난다


0308 (downcast) 

Downcast

✅ 데이터 용량이 너무 커지면 처리속도도 느려지고 공간도 많이 차지하게된다. 메모리를 효율적으로 사용하려면 ?
✅ 메모리부담완화, 데이터 불러올 때 각데이터의 타입(dtype)을 메모리 적게하는 타입으로 불러오기
✅ downcast해주는 것만으로 메모리 효율적으로사용
✅ to_numeric( downcast = )
=> downcast의 문서 확인

더보기

'''

None값이 아니며, 
   numerical타입으로 변경된 상태이면(원래 numerical 타입이거나)
   numerical의 데이터 타입 가장 낮은 호환상태로 결과값 출력

'''

=> 데이터 타입의 변경X 데이터를 훼손X 범위내에서 구현할 수 있는 가장 낮은 데이터 타입 제공

+다운캐스팅은 크기가 큰 경우에만 발생

✅ signed : 수치형 데이터에 마이너스 값 포함되어있을 때
✅ unsigned : 마이너스 아닐 때에만 !
✅ object dtype => category dtype으로 변경해주면 메모리 줄어듦
❗ nunique()값이 너무 많으면 dtype = category 로 변경하는 건 좋지 않음

 

❗ pd.read_csv 로 파일 읽어올 때부터 데이터타입 변경해서 가능
(가져올 때부터 다이어트시켜서 가져올 수있음)
공공데이터는 기본 1000만 행.

 

👨‍💼 결론 : 잘 다루게 되면 정말 유용할 듯하다. 데이터 분석은 분석해야할 데이터 메모리와 용량 줄이기 싸움인 것 같다..

📌Parquet

- 열(컬럼) 단위 압축

- 압축효율 , 데이터 처리속도, 저장공간 절약, 드라이브 공간 활용성 에서 탁월

❗ 데이터의 메모리 감소는 아님!

📌Downcast

- 갖고올 데이터들의 dtype 파악 후, 데이터 분석할 수 있는  최소의 환경만 제공

downcast해주는 것만으로 메모리 효율적으로사용

❗ 데이터의 메모리 감소!

728x90