[데이터분석] 부트캠프 TIL

20260408 TIL

myun0506 2026. 4. 8. 21:18

Today's Study Plans

  • [x] 대용량 데이터 다운로드 실습 (시스템환경)

What I've done

  • [x] gdown 라이브러리를 활용한 구글 드라이브 폴더 다운로드 시도 및 한계 파악
  • [x] Google Drive API + OAuth 2.0 + pydrive2 방식으로 전환하여 안정적 다운로드 구현
  • [x] CSV → Parquet 변환 자동화 코드 작성 및 디스크 용량 최적화
  • [x] 인코딩 이슈(utf-8-sig / cp949), 데이터 타입 충돌, 구분자 이슈 등 실전 트러블슈팅 경험

핵심 학습 내용 요약

1. gdown의 한계

  • download() vs download_folder() 구분 필수
  • 익명 요청 기반이라 Rate Limit에 취약 → FileURLRetrievalError 발생
  • 폴더 단위 '모 아니면 도' 방식이라 파일 하나만 실패해도 전체 중단

2. Google Drive API + OAuth 2.0 (pydrive2)

  • 서비스 계정 키 생성 차단 → OAuth 2.0으로 우회 (사람의 권한을 빌려오는 방식)
  • LocalWebserverAuth() → 브라우저 인증 → Access Token 발급 (휘발성, 안전)
  • drive.ListFile({'q': query}).GetList()로 폴더/파일 목록 조회 후 개별 다운로드
  • 파일 단위 제어 → 실패 지점 정밀 관리 + 이어받기(Resume) 가능

3. CSV → Parquet 변환 (디스크 용량 절감)

  • Parquet = 열(Column) 기반 저장, CSV 대비 용량 80~90% 절감
  • smart_convert() 함수: 인코딩 시도 → 변환 → 원본 CSV 즉시 삭제로 실시간 용량 확보
  • engine='pyarrow', compression='snappy' 조합이 속도/압축률 균형 최적

4. 트러블슈팅 정리

문제 원인 해결

한글 깨짐 (카드 폴더) utf-8-sig로 먼저 읽혀서 에러 없이 통과 cp949로 인코딩 직접 지정
한 컬럼으로 묶임 (카드 폴더) 구분자가 콤마가 아닌 파이프(`\ `)
데이터 타입 충돌 (통신 폴더) 숫자 컬럼에 빈칸/특수문자 혼재 pd.to_numeric(errors='coerce').astype('float32')
astype(str) 문제 Parquet 고유 타입 보존 실패 astype(str) 제거 • 타입 사전 지정
on_bad_lines='skip' 데이터 손실 위험 (몇 행 빠졌는지 확인 불가) 옵션 제거 후 실패 파일 별도 처리

5. 타입 사전 지정의 효과

  • 메모리 절감 (float64 → float32, str → category)
  • 데이터 무결성 (코드성 데이터 문자열 처리, 결측치 대응)
  • 로딩 속도 향상 (판다스 타입 스캔 과정 생략)
  • Parquet 압축 최적화 (타입 명확 → 더 강력한 압축)

What I've not done yet

  • [ ] '카드' 폴더 on_bad_lines='skip' 제거 후 재실행 확인
  • [ ] '통신' 폴더 수치 컬럼 사후 처리 후 에러 해결 여부 최종 확인

'[데이터분석] 부트캠프 TIL' 카테고리의 다른 글

20260410 TIL  (0) 2026.04.10
20260409 TIL  (0) 2026.04.09
20260407 TIL  (0) 2026.04.07
20260406 TIL  (1) 2026.04.06
20260403 TIL  (0) 2026.04.03