성동2기 전Z전능 데이터 분석가 19일차[numpy, pandas_02]

2024. 6. 10. 19:13데이터분석 기술블로그

파이썬 기본 규칙

소괄호()

- 함수 호출할 때 사용

- 연산자 우선순위 (-곱셈보다 덧셈 등을 먼저 사용할 때)

- 여러개의 조건절을 구분할 때 

- 튜브(목록과 같은 인덱스 사용)

 

대괄호()

- 리스트, 데이터프레임, 스트링 등에서 일부 데이터를 추출할 때(인덱싱)

- 여러 개의 값의 묶음(그룹화)

 

따옴표 / 쌍따옴표('',"")

- 의미상 차이는 없음.

- 일반적인 스트링의 경우 ""

- 문장에 '가 들어갈 경우는 "" / 반대의 경우는 ''

- 리스트 내에 item의 경우 보통''


데이터 전처리

데이터 전처리는 분석에 적합하게 데이터를 가공하는 작업이며 데이터분석 업무에서 가장 많은 작업 비중을 차지한다고 한다. pandas 패키지는 전처리 작업시에 가장 많이 사용되는 패키지이다.

 

원하는 형태로 데이터 가공하기 (메소드 함수)

query() 행 추출
df[] 열[변수] 추출
sort_values() 정렬
groupby() 집단별로 나누기
assign() 변수 추가
agg() 통계치 구하기
merge() 데이터 합치기(열)
concat() 데이터 합치기(행)

 

조건에 맞는 데이터만 추출하기 : df.query()

query함수는 데이터프레임에서 원하는 행만 추출할 수 있다. 아래 표를 보면 nclass 1에 해당하는 행만 추출하여 표를 구성하는 식이다.

 

(좌) exam 데이터프레임 추출 / (중앙) nclass 1만 뽑아서 추출 / (우) 부정문을 뜻하는 != 를 사용해서 4를 제외한 nclass를 모두 추출

 

별도의 변수를 이용해 행을 추출하려면 변수명 앞에 @를 붙여서 조건 입력

 

데이터 프레임 출력 제한 설정하기 

 

필요한 변수만 추출하기 

변수 추출 : df[]

 

여러 변수 추출 : df_[[]]

 

변수 제거 : df.drop

 

pandas 함수 조합하기

 

query와 [] 조합하기

 

순서대로 정렬하기 

 

df.sort_values()

 

[ 파생변수 추가하기 ]

df.assign()

- 데이터프레임에서 열 추가와 같은 파생변수를 추가할 수 있음.

(좌) 함수 적용 전 / (중앙) 함수 적용 후 / (우)한번에 여러개 파생변수 추가

 

lambda

- 데이터 프레임명(변수명)을 약어로 줄일 수 있음.

- 데이터 프레임명 통일하여 가독성 높아짐 (솔직히 잘 모르겠다.)

 

[ 집단별로 요약하기 ]

agg()

- 요약 통계량을 구할 수 있음.

- 전체를 요약한 값을 구하기보다는 groupby()에 적용하여 집단별 요약값을 구할 때 사용.

agg함수를 통해 데이터 프레임에서 수학 평균을 요약함

 

 

groupby()

- 변수를 지정하여 범주별로 데이터를 분리해서 사용

- 여기에 agg()를 적용하여 집단별 요약 통계량을 구함.

- 집단을 나눈 다음 다시 하위 집단으로 나누기 가능

(좌) groupby에 nclass를 지정하고 각 집단별 평균을 구해줌 / (우) agg()에 자주 사용하는 요약 통계량 함수

 

pandas 함수 조합하기

 

[ 데이터 합치기 ]

가로로 합치기 : df.merge()

1. pd.merge()에 결합할 데이터 프레임명을 나열한다. 

2. how = 'left' : 오른쪽에 입력한 데이터 프레임을 왼쪽 데이터 프레임에 결합한다.

3. on : 데이터를 합칠 때 기준으로 삼을 변수명을 입력한다.

(좌) exam데이터 프레임에 결합할 name 변수를 만듬 / (우) nclass를 기준으로 결합

 

세로로 합치기 : df.concat()

데이터를 합칠 때 인덱스 중복 안되도록 새로 부여하려면 pd.concat()에 ignore_index = True를 입력한다.

(좌) 시험 데이터 만들기 / (우) 데이터 합쳐서 group_all에 할당

 

정리하기


데이터 정제

[ 결측치 정제하기 ]

결측치(missing value)

- 누락된 값, 비어있는 값

- 데이터 수집 과정에서 발생한 오류로 포함될 가능성

- 함수가 적용되지 않거나 분석 결과가 왜곡되는 문제 발생

 

결측치 찾기

- numpy 패키지의 np.nan 입력

- 파이썬에서는 결측치는 NaN로 표시된다.

- 불러온 데이터 파일에 결측치가 있으면 자동으로 NaN이 된다.

 

결측치 제거하기

- df.dropna()에 아무 변수도 지정하지 않으면 모든 변수에 결측치가 없는 행만 남김

- 간편하지만 분석에 사용할 수 있는 데이터까지 제거될 수 있음

- 분석에 사용할 변수 직접 지정하여 결측치 제거하는 방법을 권장

- pd.mean(), pd.sum() / groupby(), agg() : 결측치가 있으면 자동으로 제거하고 연산함.

 

결측치 대체하기

- 결측치가 적고 데이터가 크면 결측치 제거 후 분석 가능

- 데이터가 작고 결측치 많으면 데이터 손실로 인해 분석 결과 왜곡 발생

- 결측치 대처법을 이용하면 보완 가능

 

결측치 대체법(imputation)

- 다른 값을 채워넣을 대표값(평균값, 최빈값 등)을 구해 일괄 대체

- 통계 분석 기법으로 결측치의 예측값 추정 후 대체 

[ 이상치 정제하기 ]

이상치(anomaly): 정상 범위에서 크게 벗어난 값

- 실제 데이터에 대부분 이상치 들어있음

- 제거하지 않으면 분석 결과 왜곡되므로 분석 전에 제거 작업 필요

 

이상치 제거하기 - 극단적인 값

극단치(outlier) : 논리적으로 존재할 수 있지만 극단적으로 크거나 작은값

- 극단치 있으면 분석 결과 왜곡될 수 있으므로 제거 후 분석

- 기준 정하기

   - 논리적 판단 : (ex. 성인 몸무게 40~150kg 벗어나면 매우 드물므로 극단치로 간주)

   - 통계적 판단 : (ex. 상하위 0.3% 또는 +-3 표준편차 벗어나면 극단치로 간주)

   - 상자 그림 : (ex. box plot을 이용해 중심에서 크게 벗어난 값을 극단치로 간주 

 

정리하기

 

 

데이터 전처리에 대한 부분만 해도 굉장히 많은 메소드 함수가 있었다. 그만큼 많이 사용하는 패키지 함수인 것 같다. 오늘은 학습량도 많지만 어려운 개념들을 많이 배워서 다 소화하기까지 시간이 필요할 것 같다.