데이터 전처리: 데이터 프레임과 SQL
ㅁ 데이터 프레임과 SQL
1. Pandas
ㅇ 정의:
파이썬 기반의 데이터 분석 라이브러리로, 표 형태의 데이터 처리를 위한 DataFrame과 Series 자료구조를 제공.
ㅇ 특징:
– 메모리 내 연산으로 속도가 빠르지만 대규모 데이터 처리에는 한계가 있음.
– 풍부한 데이터 조작 함수와 인덱싱 기능 제공.
– CSV, Excel, SQL DB 등 다양한 데이터 소스와 연동 가능.
ㅇ 적합한 경우:
– 수백 MB~수 GB 수준의 데이터 분석.
– 탐색적 데이터 분석(EDA)와 데이터 전처리.
ㅇ 시험 함정:
– Pandas는 분산처리를 지원하지 않음.
– DataFrame과 Series 차이를 혼동하는 경우.
ㅇ 시험 대비 “패턴 보기” 예시:
O: Pandas는 메모리 내에서 데이터프레임 연산을 수행한다.
X: Pandas는 기본적으로 클러스터 기반 분산처리를 지원한다.
2. Dask
ㅇ 정의:
파이썬 병렬 컴퓨팅 라이브러리로, Pandas와 유사한 API를 제공하지만 대규모 데이터 처리가 가능하도록 설계됨.
ㅇ 특징:
– 지연 계산(lazy evaluation) 방식.
– 클러스터 환경에서 병렬 처리 가능.
– 메모리보다 큰 데이터셋을 나누어 처리.
ㅇ 적합한 경우:
– 메모리 초과 데이터 처리.
– 분산 환경에서의 데이터 분석.
ㅇ 시험 함정:
– Dask DataFrame은 Pandas의 모든 기능을 100% 지원하지 않음.
– 즉시 계산이 아닌 지연 계산 방식임을 간과.
ㅇ 시험 대비 “패턴 보기” 예시:
O: Dask는 메모리에 올리지 못하는 대규모 데이터셋을 처리할 수 있다.
X: Dask는 항상 즉시 계산을 수행한다.
3. RAPIDS GPU 가속
ㅇ 정의:
NVIDIA가 개발한 GPU 기반 데이터 과학 라이브러리 모음으로, cuDF, cuML, cuGraph 등을 포함.
ㅇ 특징:
– GPU 메모리를 활용하여 대규모 데이터 처리 속도 향상.
– Pandas와 유사한 API를 제공하는 cuDF.
– 머신러닝, 그래프 분석 등도 GPU로 가속 가능.
ㅇ 적합한 경우:
– GPU 인프라가 갖춰진 환경.
– 대규모 데이터 처리 및 ML/AI 워크로드.
ㅇ 시험 함정:
– GPU 메모리 용량 제한 고려 필요.
– 모든 Pandas 기능이 cuDF에 동일하게 구현된 것은 아님.
ㅇ 시험 대비 “패턴 보기” 예시:
O: RAPIDS의 cuDF는 Pandas와 유사한 API를 제공한다.
X: RAPIDS는 CPU만을 사용하여 연산 속도를 높인다.
4. SQL 쿼리
ㅇ 정의:
관계형 데이터베이스에서 데이터를 조작하고 질의하기 위한 표준 언어.
ㅇ 특징:
– 선언적 언어로, 원하는 결과를 기술.
– SELECT, INSERT, UPDATE, DELETE 등 주요 명령어 제공.
– 집계, 조인, 서브쿼리 등 복잡한 데이터 조작 가능.
ㅇ 적합한 경우:
– 관계형 DB 기반 데이터 분석.
– 대규모 데이터의 조건 검색 및 집계.
ㅇ 시험 함정:
– GROUP BY와 WHERE, HAVING 절의 사용 순서 혼동.
– INNER JOIN과 OUTER JOIN 차이 혼동.
ㅇ 시험 대비 “패턴 보기” 예시:
O: SQL에서 HAVING 절은 GROUP BY 결과에 조건을 적용한다.
X: HAVING 절은 GROUP BY 이전에 조건을 적용한다.
5. 데이터프레임 변환
ㅇ 정의:
데이터프레임 내 컬럼, 행, 인덱스 등을 변경·추가·삭제·형변환하는 작업.
ㅇ 특징:
– 컬럼명 변경, 데이터 타입 변환, 결측치 처리, 인덱스 재설정 등 포함.
– 데이터 전처리의 핵심 단계.
ㅇ 적합한 경우:
– 분석 목적에 맞게 데이터 구조를 재구성할 때.
– 머신러닝 모델 입력 형태로 변환할 때.
ㅇ 시험 함정:
– inplace=True 옵션 사용 시 원본 데이터 변경 여부 혼동.
– 데이터 타입 변환 시 NaN 처리 주의.
ㅇ 시험 대비 “패턴 보기” 예시:
O: 데이터프레임의 컬럼명을 변경하는 것은 데이터프레임 변환에 해당한다.
X: 데이터프레임 변환은 데이터 내용 변경 없이 구조만 변경하는 것을 의미한다.
ㅁ 추가 학습 내용
정리 내용
1. Pandas vs Dask 성능 및 메모리 사용 비교
– Pandas: 단일 머신 메모리에 의존, 데이터가 메모리에 모두 올라와야 함, 소규모~중간 규모 데이터에 적합, 연산 속도는 메모리 내에서 빠름
– Dask: 분산 처리 가능, 데이터가 메모리에 모두 올라오지 않아도 처리 가능(Out-of-core), 대규모 데이터 처리에 유리, 연산 속도는 병렬화와 스케줄링에 따라 다름
– 메모리 사용: Pandas는 데이터 크기 ≈ 메모리 크기 조건 필요, Dask는 청크 단위로 나누어 처리하여 메모리 부담 완화
– 성능: Pandas는 작은 데이터셋에서 오버헤드가 적어 빠름, Dask는 큰 데이터셋에서 병렬 처리로 효율적
2. RAPIDS 구성 요소별 특징 및 GPU 메모리 관리
– cuDF: Pandas 유사 API, GPU에서 데이터프레임 연산 수행, 대규모 데이터 처리 속도 향상
– cuML: Scikit-learn 유사 API, GPU 가속 머신러닝 알고리즘 제공
– cuGraph: NetworkX 유사 API, GPU 가속 그래프 분석 알고리즘 제공
– GPU 메모리 관리:
– 데이터 크기와 GPU 메모리 용량 확인
– 불필요한 객체 삭제 및 gc.collect() 활용
– RMM(RAPIDS Memory Manager)로 메모리 풀 관리
– 데이터 타입 다운캐스팅으로 메모리 사용량 절감
3. SQL 윈도우 함수 및 서브쿼리 예시
– ROW_NUMBER(): 각 파티션 내 행에 순번 부여
– RANK(): 동일 값에 동일 순위 부여, 순위 건너뜀 발생
– PARTITION BY: 그룹별로 윈도우 함수 적용
– 서브쿼리: 메인 쿼리의 FROM, WHERE, SELECT 절에서 하위 쿼리 사용하여 데이터 전처리 또는 조건 필터링
4. 데이터프레임 형태 변환 메서드
– melt: wide → long 변환, id_vars로 식별자 유지, value_vars로 변수 녹임
– pivot: long → wide 변환, index/columns/values 지정
– stack: 컬럼을 인덱스 레벨로 내림, wide → long 유사 변환
– unstack: 인덱스 레벨을 컬럼으로 올림, long → wide 유사 변환
– 차이점: melt/pivot은 명시적 컬럼 지정, stack/unstack은 계층적 인덱스 기반 변환
시험 대비 체크리스트
[ ] Pandas와 Dask의 메모리 처리 방식과 성능 특성 구분 가능
[ ] Pandas와 Dask의 적합한 데이터 크기 및 환경 설명 가능
[ ] cuDF, cuML, cuGraph의 역할과 API 유사성 이해
[ ] GPU 메모리 관리 방법(RMM, 다운캐스팅 등) 설명 가능
[ ] SQL 윈도우 함수(ROW_NUMBER, RANK, PARTITION BY) 기능과 차이 설명 가능
[ ] SQL 서브쿼리의 활용 위치와 목적 설명 가능
[ ] melt, pivot, stack, unstack의 변환 방향과 특징 구분 가능
[ ] melt/pivot과 stack/unstack의 차이점 명확히 설명 가능