얼레벌레

[3주차] 데이터 전처리 및 분석 본문

취업/KT AIVLE SCHOOL

[3주차] 데이터 전처리 및 분석

__Lucie__ 2022. 8. 19. 18:41

3주차 내용정리

8월 8일-9일: 데이터 전처리

9월 10일-12일: 데이터 분석 및 의미찾기

 

다른 블로그들 보면 교육 프로그램을 주차별로 정리하시던데,

난 주차별로 말고 1일치씩 정리해야지~! 라고 다짐을 했는데..ㅎ

한 3주차에 접어드니까 드는 생각은 시간이 너무너무너무 할애가 돼서 부담스럽다는 것이다;; (주객전도가 되어버림)

그래서 그냥 나도 주차별로 정리해야겠다 ㅋㅋ

 

ML 프로세스

  1. 비즈니스에 대한 이해
  2. 데이터 자체에 대한 이해 => 8월 10-12일
  3. 데이터 전처리 => 8월 8-9일
  4. 모델링
  5. 학습과 평가
  6. 적용

 

데이터 전처리

  • 중요한 Crispy-DM 표
  • x, y 분할 ( x를 feature, y를 target)
  • feature engineering: 우리가 가지고있는 데이터, 도메인지식을 통해 현재 없는 feature를 만들어내는 작업
  • pd.merge(df1, df2, how= ,  on= )
    • how : left, right, outer, inner
    • on : 중심으로 merge할 컬럼
  • crosstab
  • heatmap
  • pivot
  • pd.to_datetime()
  • concat
  • rolling, shift 함수 사용법 - 시리얼 데이터를 김밥 말듯 마는 느낌
  • NaN 처리
    • 제거 : dropna(axis = )
    • 채우기 : fillna(method = ‘ffill’/’bfill’)
      .interpolate(method=’linear’)
      우리가 값을 지정하기도 함. .fillna(0) / .fillna(평균) / 범주형 데이터의 최대 빈도를 알아내기 위하여 mode()
  • dummy variable : 계절을 생각해보자. (가변수화) => 범주형 데이터에 적용
    pd.get_dummies(x, columns=[], prefix= , drop_first=True)
  • 스케일링 : 각 feature 별로 range가 다를 수 있는데, 그거를 통일시켜가지고 학습이라던가 예측의 왜곡을 막아보려는 시도
    • min-max 스케일링
      거치면 데이터가 0~1 사이 값으로 변환됨 (최솟값 0, 최댓값 1으로)
    • standardization 스케일링
      평균을 0으로 두고 표준편차를 1로 잡는 스케일링 방법
      ⇒ 평균에 가까워질수록 0에 가까워지는 건가요?
      컬럼의 데이터 자체를 평균을 0으로 만들고, 평균에 가까워질수록 0에 가까워짐, 맞음.

 

데이터 분석 및 의미 찾기

목표: 데이터가 주어지면 파악 방법을 알고, 파악을 통해 해석하기

  • 원본 식별 : 데이터가 내부에 있냐 외부에 있냐
  • EDA & CDA : 가설이 진짜냐
    • 데이터 파악 2가지 방법 => 수치화, 시각화
    • 데이터 종류 2가지 => 숫자형, 범주형

단변량 분석 (개별 변수 분포)

  1. 숫자형
    • 수치화 : (숫자로 요약) min, max, mean, std, 사분위수 => df.describe()
    • 시각화 : 히스토그램, density plot, box plot => plt.hist(), sns.kdeplot(), plt.boxplot()
  2. 범주형
    • 수치화 :  범주별 빈도수, 범주별 비율 => df.value_counts(), df.value_counts()/df.shape[0]
    • 시각화 : bar plot, pie chart

이변량 분석 (가설 x->y 확인)

  1. x(feature)이 숫자임
    • y(target)이 숫자임
      • 시각화 : 산점도 구하기 => plt.scatter() 
      • 수치화 : 상관계수 분석 => spst.pearsonr()
    • y(target)이 범주임
      • 시각화 : boxplot, density plot, histogram
      • 수치화 : logistic 회귀
  2. x(feature)가 범주임
    • y(target)이 숫자임
      • 시각화 : 평균 비교 barplot => sns.barplot()
      • 수치화(기본적으로 평균을 비교)
        • 범주가 2개라면 : t-test(T-검정) => spst.ttest_ind()
        • 범주가 3개 이상이라면 : anova(분산분석) => spst.f_oneway(P_1, P_2, P_3) 
          𝐹 통계량 = (집단 간 분산)/(집단 내 분산) = (전체 평균 − 각 집단 평균)/(각 집단의 평균 − 개별 값)
          F 통계량이 대략 2-3차이면 '차이가 있다'(대립가설 채택)고 판단.
          기준은 집단 간 분산이 커야 하고, 집단 내 분산은 작아야 함
    • y(target)이 범주임
      • 시각화 : 100% stacked bar(crosstab으로 집계 후 .plot.bar), mosaic plot 
      • 수치화 : 카이제곱 검정 (crosstab으로 집계 후 spst.chi2_contingency() )

 

 

이변량 분석 부분은 반복학습을 해야겠다..!!