본문 바로가기
IT/Data Analysis with python

데이터 정제 및 준비

by Cyber_ 2024. 6. 14.

1. 누락된 데이터(NA) 처리하기

  • dropna(): 누락된 데이터가 있는 축을 제외한다. 어느 정도 누락 데이터까지 용인할 것인지 지정할 수 있다.
  • fillna(): 누락된 데이터를 대신할 값을 채우거나 ffill이나 bfill 같은 보간 메서드를 적용한다.
  • isna(): 누락되거나 NA인 값을 알려주는 불리언 값을 반환한다.
  • notna(): isna와 반대되는 메서드. NA가 아닌 값에는 True를 반환하고, NA 값에는 False를 반환한다.

1) 누락된 데이터 골라내기

pandas.isna나 불리언 색인을 사용해 직접 골라내는 방법도 있지만, dropna를 사용하면 매우 쉽게 작업할 수 있다.

2) 결측치 채우기

누락된 값을 제외하지 않고(잠재적으로 다른 데이터도 함께 버려질 가능성이 있다.) 데이터 상의 '구멍'을 어떻게 든 매우고 싶다면 fillna를 사용한다. 평균값이나 중간값을 넘겨서 데이터를 채우는 방법을 사용할 수 있다.

2. 데이터 변형

1) 중복 제거하기

duplicated 메서드를 사용하여 각 행이 중복인지 아닌지 알려주는 불리언 Series 객체를 반환한다.
drop_duplicates는 duplcated 배열이 False인 DataFrame을 반환

2) 함수나 매핑을 이용해서 데이터 변형하기

data["animal"] = data["food"].map(meat_to_animal)

def get_animal(x):
    return meat_to_animal[x]

data["food"].map(get_animal)

3) 값 치환하기

fillna 메서드로 누락된 값을 채우는 작업은 일반적인 값 치환 작업이라고 볼 수 있다. 앞서 살펴봤듯이 한 객체 안에서 값의 부분집합을 변경하는 데 map메서드를 사옹했지만, replace 메서드는 동일한 작업을 더 간단하고 유연한 방식으로 제공한다.
data.replace 메서드는 문자열 치환을 항복단위로 수행하는 data.str.replace와 구별된다.

4) 축 색인 이름 바꾸기

Series의 값처럼 축 이름도 함수나 새롭게 바꿀 값을 이용해서 변형할 수 있다. 새로운 자료구조를 만들지 않고 그 자리에서 바로 축이름을 변경할 수 있다.

5) 이산화

연속되는 데이터는 종종 개별로 분할하거나 분석을 위해 그룹으로 나누기도 한다. pandas.cut을 활용하여 데이터를 그룹별로 나눌 수 있다.
반환된 판다스 객체는 Categorical(범주형)이라는 특수형 객체이다.

6) 이상치를 찾고 제외하기

배열을 연산할 때는 이상치를 제외하거나 적당한 값으로 대체하는 것이 중요하다. 예를 들어 절대값이 3이 넘어가는 값들을 any 또는 불리언을 통해 찾고 제외할 수 있다.
np.sign(data)는 data가 양수인지 음수인지에 따라 1이나 -1이 담긴 배열이다.

7) 뒤섞기와 임의 샘플링

numpy.randompermutation 함수를 이용하면 Series나 DataFrame의 행을 임의의 순서대로 쉽게 재배치 할 수 있다. 순서를 바꾸고 싶은 만큼의 길이를 permutatio함수에 전다랗면 순사가 바뀐 정수배열을 생성한다.
iloc 기반의 색인이나 take 함수에서 사용 가능하다.

8) 표시자, 더미 변수 계산하기

만약 DataFrame의 한 열에 k가지의 값이 있다면 k개의 열이 있는 DataFrame이나 행렬을 만들고 값으로 1과 0을 채워 넣을 것이다.

3. 확장 데이터의 유형

판다스는 원래 수치 데이터를 다루는 데 사용하는 배열 컴퓨터 라이브러리인 넘파이의 기능 기반으로 만들어졌다. 이로 인한 단점이 있는데

  • 정수나 불리언형을 가진 누락된 데이터처리가 불완전하다. 그로 인해 결측치가 생성되는 경우 판다스는 자료형을 float64로 변경하고 np.nan을 이용해서 null값을 표현한다. 이는 판다스 알고리듬에 미묘한 이슈를 유발했고 복합적인 영향을 끼쳤다.
  • 대량의 문자열 데이터 셋의 계산 비용이 높고 메모리를 많이 사용한다.
  • 시간 간격이나 시간 차이, 시간대가 포함된 타임스탬프 같은 일부 자료헹에서 계산 비용이 높은 파이썬 객체를 사용하지 않고는 효과적으로 처리하는 것이 불가능 하다.

최근 판다스는 넘파이에서 기본적으로 지원하지 않는 자료형이더라도 사용할 수 있또록 하는 확장형 시스템을 개발했다.

4. 문자열 다루기

1) 파이선 내장 문자열 객체 메서드

  • 문자열은 split()을 이용해서 분리
  • 공백을 제거하는 strip과 split은 종종 같이 사용된다.

    2) 정규표현식

    정규표현식은 텍스트에서 문자열 패턴을 찾는 유연한 방법을 제공한다. 흔히 regex라 부르는 단일 표현식은 정규 표현식 언어로 구성된 문자열이다. 파이썬에 내장된 re 모듈이 문자열과 관련된 정규 표현식을 처리한다.

5. 범주형 데이터

1) 개발배경

하나의 열에서 특정 값이 반복되는 경우가 많다. 앞서 배열 내의 유일한 값을 추출하거나 특정 값이 얼마나 많이 존재하는지 확인하는 unique와 value_counts 메서드를 살펴봤다. 데이터 웨어하우스, 통계 컴퓨팅 등 여러 다양한 데이터 시스템은 중복된 데이터를 얼마나 효율적으로 저장하고 계산할 수 있는가를 중점으로 개발 되었다. 데이터 웨어하우스에서는 구별되는 값을 담은 차원 테이블(dimension table)과 이를 참조하는 정수 키를 사용한다.
별개의 값을 담은 배열은 범주형, 딕셔너리형 또는 단계별 데이터라고 부른다. 이를 범주형 데이터라고 칭하기로 했고 범주형 데이터를 가리키는 정숫값은 범주 코드 또는 단순히 코드라고 일컫는다.
범주형 표현을 사용하면 작업에서 엄청난 성능 향상시킬 수 있다.

2) 판다스의 Categorical 확장형,연산, 메서드

(생략)