데이터 전처리: 데이터 프레임과 SQL – Pandas
ㅁ 데이터 프레임과 SQL
ㅇ 정의:
데이터 프레임과 SQL은 구조화된 데이터를 효율적으로 조회, 가공, 집계하기 위한 데이터 처리 방식으로, 데이터 분석 환경에서 주로 사용된다.
ㅇ 특징:
– 행과 열 구조를 기반으로 하며, 인덱스를 통해 데이터에 접근 가능
– SQL은 선언형 질의 언어로, 데이터베이스에서 데이터를 검색·조작
– 데이터 프레임은 메모리 내에서 다양한 연산과 변환 지원
ㅇ 적합한 경우:
– 정형 데이터 분석 및 전처리
– 대규모 데이터 조회 및 필터링, 집계
ㅇ 시험 함정:
– SQL과 Pandas의 문법 차이를 혼동
– Pandas의 inplace 연산과 반환 방식 혼동
ㅇ 시험 대비 “패턴 보기” 예시:
O: “Pandas는 메모리 내에서 데이터프레임 연산을 수행한다.”
X: “SQL은 메모리 내에서만 동작한다.”
================================
1. Pandas
ㅇ 정의:
Python에서 데이터 분석을 위해 제공되는 라이브러리로, Series(1차원)와 DataFrame(2차원) 자료구조를 핵심으로 하여 데이터 조작과 분석 기능을 제공한다.
ㅇ 특징:
– 다양한 데이터 소스(CSV, Excel, SQL DB 등)로부터 데이터 읽기/쓰기 가능
– 행/열 단위의 슬라이싱, 필터링, 그룹핑, 집계 지원
– 결측치 처리, 데이터 타입 변환, 병합/조인 기능 제공
– 벡터화 연산으로 빠른 처리 속도
ㅇ 적합한 경우:
– 메모리 내에서 중간 규모(수백만 행 수준)의 데이터 전처리
– 데이터 탐색적 분석(EDA) 및 가공
ㅇ 시험 함정:
– loc와 iloc의 차이 혼동
– inplace=True 사용 시 반환값이 없는 점 간과
– axis=0과 axis=1의 의미 혼동
ㅇ 시험 대비 “패턴 보기” 예시:
O: “Pandas의 DataFrame은 2차원 자료구조이며, 열 단위 연산이 가능하다.”
X: “iloc은 라벨 기반 인덱싱을 사용한다.”
ㅁ 추가 학습 내용
Pandas 주요 메서드와 동작 방식 정리
1. DataFrame.apply(), map(), applymap() 차이
– apply(): DataFrame의 행 또는 열 단위로 함수를 적용
– map(): Series 객체에 원소 단위로 함수를 적용
– applymap(): DataFrame의 모든 원소에 함수를 원소 단위로 적용
2. groupby()와 집계 함수
– groupby()로 그룹화 후 sum(), mean(), count(), agg() 등의 집계 함수 적용 가능
– agg()를 사용하면 여러 함수를 동시에 적용 가능
3. merge와 join의 차이
– merge(): SQL의 JOIN과 유사, on 키 지정 가능, how 파라미터로 join 방식 선택(inner, outer, left, right)
– join(): 인덱스를 기준으로 결합, 기본은 left join, on 파라미터로 컬럼 지정 가능
4. pivot과 pivot_table의 차이
– pivot(): 인덱스, 컬럼, 값 지정으로 데이터 재구조화, 중복 값이 있으면 오류 발생
– pivot_table(): pivot과 유사하지만 중복 데이터 처리 가능, 집계 함수 지정 가능(기본 평균)
5. melt 함수 활용
– wide 형태 데이터를 long 형태로 변환
– id_vars로 고정할 컬럼, value_vars로 변환할 컬럼 지정
6. 결측치 처리 방법
– dropna(): 결측치가 있는 행 또는 열 삭제
– fillna(): 결측치를 지정한 값이나 메서드로 채움(method=’ffill’, ‘bfill’ 등)
7. astype을 통한 데이터 타입 변환
– astype() 메서드로 Series나 DataFrame 컬럼의 자료형 변환 가능
8. Pandas와 SQL 연계 사용
– pandas.read_sql(): SQL 쿼리 실행 결과를 DataFrame으로 불러오기
– to_sql(): DataFrame을 SQL 테이블로 저장
9. 성능 최적화 기법
– 카테고리형 변환: 문자열 컬럼을 category 타입으로 변환하여 메모리 절약
– chunk 단위 처리: read_csv 등에서 chunksize 지정하여 대용량 데이터 분할 처리