빅데이터분석기사 실기 대비 [작업형 1] 문법 정리

jihyelee·2024년 6월 15일

bigdata

목록 보기
2/4

시험 준비

빅데이터 분석기사 실기 준비를 하면서, 시험 직전에 볼 간단한 문법 정리집이 필요했다.
실제 시험 준비는 많은 분들처럼 캐글 놀이터를 활용했는데, 나같은 경우는

  • python은 익숙하지만 pandas는 낯설어서 정답을 따라서 손코딩을 해보고
  • 학습한 내용을 바탕으로 직접 문제를 풀어보는 식으로 공부했다.

작업형 1의 경우에는 아래의 문법을 숙지하고 있다면 어렵지 않게 풀 수 있다.

Simple EDA (데이터분석)

  • 데이터 크기 파악: df.shape
    • (행, 열)의 형태로 출력
  • 데이터 일부 예시: df.head(N)
    • 데이터 상위 N개값 출력
    • 기본값 5
  • 데이터 일부 예시: df.tail(N)
    • 데이터 하위 N개값 출력
    • 기본값 5
  • 컬럼별 결측값 확인: df.isnull().sum()
  • 컬럼별 non-null 개수, 데이터타입 확인: df.info()
  • 컬럼별 개수, 평균, 표준편차, 최솟값, 최댓값 등 확인: df.describe()
  • numpy array 형태로 값 확인: df.values
    • df.to_numpy() 사용을 추천

Pandas 함수

기본 조건문

  • &: and 조건 표현
  • |: or 조건 표현
  • ~: not 조건 표현

기본 통계

  • 최댓값: df[컬럼].max()
  • 최솟값: df[컬럼].min()
  • 평균: df[컬럼].mean()
  • 중앙값: df[컬럼].median()
  • 최빈값: df[컬럼].mode()[0]
  • 합: df[컬럼].sum()
  • 곱: df[컬럼].prod()
  • 데이터 갯수: df[컬럼].count()
    • 결측값 제외
  • 분산: df[컬럼].var()
  • 표준편차: df[컬럼].std()
  • 절대값: df[컬럼].abs()

심화 통계

  • 평균의 표준오차: df[컬럼].sem()
  • 평균의 절대편차: df[컬럼].mad()
  • 누적합: df[컬럼].cumsum()
  • 누적곱: df[컬럼].cumprod()
  • 누적 최댓값: df[컬럼].cummax()
  • 누적 최솟값: df[컬럼].cummin()
  • 사분위수: df[컬럼].quantile()
    • 1사분위수: df[컬럼].quantile(.25)
    • 3사분위수: df[컬럼].quantile(.75)
    • 사분범위(IQR): 3사분위수 - 1사분위수, 중앙값을 기준으로 데이터의 흩어진 정도
    • 이상치: 1사분위수-1.5*IQR보다 작거나, 3사분위수+1.5*IQR보다 큰 값
  • 왜도: df[컬럼].skew()
    • 분포의 비대칭도를 나타냄
    • 오른쪽 꼬리가 길면(평균 < 중앙값) 양수, 왼쪽 꼬리가 길면(평균 > 중앙값) 음수
  • 첨도: df[컬럼].kurt()
    • 분포의 뾰족함 혹은 완만한 정도 (= 중심에 얼마나 몰려있는가)
    • 뾰족하면 양수, 완만하면 음수
  • 상관관계: df.corr()
    • -1~1 사이의 값, 0에 가까울수록 상관관계 없음

데이터 조회

  • 순서 기반: df.iloc[행 인덱스, 열 인덱스]
  • 이름 기반: df.loc[행 값, 열 값]
  • 유니크한 데이터값 확인: df[컬럼].unique()
  • 컬럼 내 값의 개수 확인: df[컬럼].value_counts()
    • 유니크한 값에 대해서 개수 확인, 내림차순 출력
    • df[컬럼].value_counts().index[0]일 경우 최빈값의 인덱스
    • df[컬럼].value_counts().idxmax()도 마찬가지
    • df[컬럼].value_counts()[0]은 최빈값

삭제, 변경, 정렬

  • 컬럼 삭제: df = df.drop(columns=['컬럼명'])
    • df = df.drop(['컬럼명'], axis=1)도 동일
  • 중복 제거: df = df.drop_duplicates(subset=['컬럼명'], keep='first')
    • keep의 경우 어떤 값을 유지할지 결정 (first, last)
  • 치환: df[컬럼] = df[컬럼].replace('원래 값', '변경 값')
  • 함수 적용: df[컬럼] = df[컬럼].apply(함수)
    • axis=1일 경우 row, axis=0일 경우 column
  • 정렬: df = df.sort_values(by='컬럼명', ascending=True)
    • ascending=True일 경우 오름차순, False일 경우 내림차순

결측치 처리

  • 특정 컬럼 내 결측치 삭제: df = df.dropna(subset=['컬럼명'])
  • 결측값 채우기: df[컬럼] = df[컬럼].fillna('값')
    • 이후 값으로 채우기: df[column] = df[column].fillna(method='bfill')
    • 이전 값으로 채우기: df[column] = df[column].fillna(method='pad')

인덱스 설정, 원복

  • 인덱스 설정하기: df = df.set_index('값')
  • 인덱스 원복하기: df = df.reset_index()
    • 그룹함수, sort_values 등 인덱스의 값이 변화한 경우 기본 인덱스로 전환 가능
    • drop=True일 경우 바꾸기 전 인덱스 값을 삭제함 (컬럼에 넣는 대신)

병합, 구간 나누기, 재구조화

  • 병합: df = pd.merge(left=df1, right=df2, how='left', on='label')
    • how(병합 방법) 옵션으로는 left, right, outer, inner, cross
    • on(병합 기준)에는 컬럼 혹은 인덱스 이름 사용
  • 구간 나누기: df[컬럼1] = pd.qcut(df[컬럼2], q=N, labels=[...])
    • pd.cut은 절대평가, pd.qcut은 상대평가
    • q는 숫자를 작성해도 되고, [0, .25, .5, .75, 1.]과 같이 비율로 작성할 수 있음
    • label은 나눠진 구간의 레이블
  • 재구조화: pd.melt
    • id_vars 옵션은 identifier variable로 사용할 컬럼
    • value_vars 옵션은 unpivot할 컬럼 (=통합할 컬럼)
    • 예를 들어 컬럼명과 상관없이 전체(혹은 일부)에서 상위 N개 값을 찾는 문제에 적합

문자열 처리

  • 문자열 자르기: df[컬럼1] = df[컬럼2].str[:n]
  • 문자열 포함여부: df[컬럼].str.contains(‘값‘)
    • True, False로 리턴 (개수 셀 때 sum 활용)
  • 문자열 치환: df[컬럼].str.replace(‘이전 값‘, ‘대체할 값’)
  • 문자열 길이: df[컬럼].str.len()

그룹함수

  • 그룹합계: df = df.groupby(['컬럼1', '컬럼2']).sum()
  • 그룹평균: df = df.groupby(['컬럼1', '컬럼2']).mean()

시계열 데이터

  • 시계열 데이터로 전환: pd.to_datetime(df[컬럼])
    • format=“%Y%m%D” 사용하면 연-월-일로 형식 지정됨
    • pd.read_csv를 할 때 parse_dates를 사용해줘도 무방
  • 연도 추출하기: df['year'] = df[컬럼].dt.year
  • 월 추출하기: df['month'] = df[컬럼].dt.month
  • 일 추출하기: df['day'] = df[컬럼].dt.day
  • 요일 추출하기: df['dayofweek'] = df[컬럼].dt.dayofweek
  • 소요시간 계산: df['duration'] = (df[컬럼1] - df[컬럼2]).dt.total_seconds()
    • 해당값을 60으로 나눠주면 소요시간을 분으로 계산한 값
  • 시계열 데이터 리샘플링: df.resample(rule)
    • 빈도를 변환하기 위한 편리한 방식 = 원하는 주기로 나눠줌
    • 예를 들어, 주단위 합계 계산을 위해서 df.resample('W').sum()과 같이 작성 가능
    • rule은 Y, M, D, H, T(min), S 등을 조합해서 사용 가능하며, 3min과 같이 특정 값도 가능
  • 원하는 기간만큼 쉬프트: df.shift(periods)
    • periods는 이동할 기간
    • freq가 None(기본값)일 경우 데이터가, 입력하면 인덱스가 이동 (Y, M, D, H, T, S 등)
    • fill_value는 shift로 인해 생긴 결측치를 대체할 값

Numpy 함수

  • 올림: np.ceil(df[컬럼])
  • 내림: np.floor(df[컬럼])
    • 음수일 경우, -1.5의 내림은 -2
  • 버림: np.trunc(df[컬럼])
    • 음수일 경우, -1.5의 버림은 -1
  • 로그 변환: np.log1p(df[컬럼])
  • exponential: np.exp(‘값‘)
  • 절대값: np.abs('값')
  • 최댓값: np.maximum(‘값1’, ‘값2’)

Scikit-learn 함수

데이터 전처리

  • 표준화 (Z-score normalization)
    • 평균 0, 분산 1
    • from sklearn.preprocessing import StandardScaler
    • df[컬럼] = StandardScaler().fit_transform(df[[컬럼]])
  • 최소-최대 정규화
    • from sklearn.preprocessing import MinMaxScaler
    • df[컬럼] = MinMaxScaler().fit_transform(df[[컬럼]])
  • 여-존슨 변환 / 박스-칵스 변환 (출제 가능성 낮음)
    • from sklearn.preprocessing import power_transform
    • df[컬럼] = power_transform(df[[컬럼]], method='yeo-johnson')
    • df[컬럼] = power_transform(df[[컬럼]], method='box-cox')

Useful Tips

  • 어떤 기능을 어떻게 사용할 수 있을지 도움받기
    • dir: 어떤 기능이 있는지 확인
    • help: 어떻게 사용할 수 있는지 확인 (e.g. 필요한 인자 등)
profile
Graduate student at Seoul National University, majoring in Artificial Intelligence (NLP). Currently AI Researcher and Engineer at LG CNS AI Lab

0개의 댓글