본문 바로가기
카테고리 없음

데이터 애널리스트_데이터 분석과 EDA 프로세스 과정

by 그 해 우리는 2024. 11. 25.

 

1. 데이터분석 프로세스

 

2.1 데이터 수집

☑️ 데이터 수집에 따른 프로세스

<aside> 📌 데이터 수집 단계는 예제 데이터 혹은 회사에 있는 데이터로 진행되기 때문에, 지나치는 경우가 많답니다. 실제로 데이터를 수집하려면 개발을 통해 데이터를 적재하고 수집하는 데이터 엔지니어링 역량이 필요한데, 이 부분은 개발자가 직접 설계하고 저장하게 됩니다. 데이터 분석가는 이미 존재하는 데이터를 SQL 혹은 Python 로 통해 추출하고 리포팅 혹은 머신러닝을 통한 예측을 담당한다고 할 수 있습니다.

</aside>

대표사진 삭제

사진 설명을 입력하세요.

  1. Data Source
  • OLTP Database: OnLine Transaction Processing 은 온라인 뱅킹,쇼핑, 주문 입력 등 동시에 발생하는 다수의 트랜잭션(데이터베이스 작업의 단위) 처리 유형
  • Enterprise Applications: 회사 내 데이터 (ex 고객 관계 데이터, 제품 마케팅 세일즈)
  • Third - Party: Google Analytics와 같은 외부소스에서 수집되는 데이터
  • Web/Log: 사용자의 로그데이터
  1. Data Lake: 원시 형태의 다양한 유형의 데이터를 저장
  2. Data Warehouse: 보다 구조화된 형태로 정제된 데이터를 저장
  3. Data Marts: 회사의 금융, 마케팅, 영업 부서와 같이 특정 조직의 목적을 위해 가공된 데이터
  4. BI/Analytics: business Intelligence(BI)는 의사결정에 사용될 데이터를 수집하고 분석하는 프로세스

 

 

실제 데이터 수집

  • 회사 내 데이터가 존재한다면
  • SQL 혹은 Python 을 통해 데이터 마트를 생성
  • 회사 내 Data가 없다면 → 데이터 수집 필요
  • 방법1: CSV, EXCEL 파일 다운로드
  • 방법2: API를 이용한 데이터 수집
  • 방법3: Data Crawling

 

2.2 탐색적 데이터 분석(EDA)

<aside> 📌

탐색적 데이터 분석(Exploratory Data Analysis, EDA)는 데이터의 시각화, 기술통계 등의 방법을 통해 데이터를 이해하고 탐구하는 과정입니다. 이 과정에서 데이터에 대한 정보를 얻을 수도 있고, 적절한 모델링에 대한 정보도 얻을 수 있습니다. 예측 모델링이 아니더라도 데이터 분석에서는 반드시 필요한 과정입니다. 다만, 이전 데이터 분석과 시각화 강의에서 들었다고 가정하고 시각화는 seaborn라이브러리를 활용 간단하게 알아보도록 할게요.

</aside>

 

기술통계를 통한 EDA 예시

대표사진 삭제

사진 설명을 입력하세요.

시각화를 이용한 EDA 예시

  • tips 데이터

 

  1. countplot: 범주형 자료의 빈도 수 시각화
  • 방법: 범주형의 데이터의 각 카테고리별 빈도수를 나타낼 때
  • Ex) 상점에서 판매되는 제품의 카테고리별 판매수 파악
  • x축: 범주형 자료
  • y축: 자료의 빈도수

2.barplot: 범주형 자료의 시각화

  • 방법: 범주형 데이터의 각 카테고리에 따른 수치 데이터의 평균을 비교
  • Ex) 다양한 연령대별 평균소득을 비교할 때
  • x축: 범주형 자료
  • y축: 연속형 자료

3. boxplot: 수치형 & 범주형 자료의 시각화

  • 방법: 데이터의 분포, 중앙값, 사분위 수, 이상치 등을 한눈에 표현하고 싶을 때
  • Ex) 여러 그룹간 시험 점수 분포를 비교할 때
  • x: 수치형 or 범주형
  • y: 수치형 자료

4.histogram: 수치형 자료 빈도 시각화

  • 방법: 연속형 분포를 나타내고 싶을 때, 데이터가 몰려있는 구간을 파악하기 쉬움
  • Ex)고객들의 연령 분포를 파악 할 때
  • x축: 수치형 자료
  • y축: 자료의 빈도수

5.scatterplot: 수치형끼리 자료의 시각화

  • 방법: 두 연속형 변수간의 관계를 시각적으로 파악하고 싶을 때
  • Ex) 키와 몸무게 간의 관계를 나타낼 때
  • x축: 수치형 자료
  • y축: 수치형 자료

 

6. pairplot: 전체 변수에 대한 시각화

  • 방법: 한 번에 여러 개의 변수를 동시에 시각화 하고 싶을 때
  • x축: 범주형 or 수치형 자료
  • y축: 범주형 or 수치형 자료
  • 대각선: 히스토그램(분포)

2.3 데이터 전처리

📌 데이터 전처리는 전체 분석 프로세스에서 90%를 차지 할 정도로 노동, 시간 집약적인 단계에요. 이번 장에서 해당 부분을 직접적으로 알아 볼게요.

 

☑️ 이상치(Outlier)

📌 **이상치(Outlier)**란 보통 관측된 데이터 범위에서 많이 벗어난 아주 작은 값 혹은 큰 값을 말해요. 크게 2가지 기준이 있어요.

 

  1. Extreme Studentized Deviation(ESD) 이용한 이상치 발견
  • 데이터가 정규분포를 따른다고 가정할 때, 평균에서 표준편차의 3배 이상 떨어진 값
  • 모든 데이터가 정규 분포를 따르지 않을 수 있기 때문에 다음 상황에서는 제한됨
  • 데이터가 크게 비대칭일 때( → Log변환 등을 노려볼 수 있음)
  • 샘플 크기가 작을 경우

존재하지 않는 이미지입니다.

사진 삭제

사진 설명을 입력하세요.

  1. IQR(Inter Quantile Range)를 이용한 이상치 발견
  • ESD와 동일하게 데이터가 비대칭적이거나 샘플사이즈가 작은 경우 제한됨

존재하지 않는 이미지입니다.

사진 삭제

사진 설명을 입력하세요.

  • Box plot: 데이터의 사분위 수를 포함하여 분포를 보여주는 시각화 그래프, 상자-수염 그림이라고도 함
  • 사분위 수: 데이터를 순서에 따라 4등분 한 것

 

  • 이상치 발견 방법
  • ESD를 이용한 처리
  • import numpy as np mean = np.mean(data) std = np.std(data) upper_limit = mean + 3*std lower_limit = mean - 3*std
  • IQR을 이용한 처리(box plot)
  • Q1 = df['column'].quantile(0.25) Q3 = df['column'].qunatile(0.75) IQR = Q3 - Q1 uppper_limit = Q3 + 1.5*IQR lower_limit = Q1 - 1.5*IQR
  • 조건필터링을 통한 삭제(a.k.a. boolean Indexing): df[ df['column'] > limit_value]
  • 📌 이상치는 사실 주관적인 값입니다. 그 데이터를 삭제 할지 말지는 분석가가 결정할 몫 입니다. 다만, 이상치는 도메인과 비즈니스 맥락에 따라 그 기준이 달라지며, 데이터 삭제 시 품질은 좋아 질 수 있지만 정보 손실을 동반하기 때문에 이상치 처리에 주의해야 합니다. 단지, 통계적 기준에 따라서 결정 할 수도 있다는 점 알아두세요

또한, 이상 탐지(Anomaly Detection)이라는 이름으로 데이터에서 패턴을 다르게 보이는 개체 또는 자료를 찾는 방법으로도 발전 할 수 있습니다. 예를 들면 사기탐지, 사이버 보안 등 입니다.

 

 

☑️ 결측치(Missing Value)

📌 이상치가 분포에 크게 어긋나는 특이한 데이터라면, **결측치(Missing Value)**는 존재하지 않는 데이터예요.

 

  • 결측치 처리 방법
  • 수치형 데이터
  • 평균 값 대치: 대표적인 대치 방법
  • 중앙값 대치: 데이터에 이상치가 많아 평균 값이 대표성이 없다면 중앙 값을 이용 Ex) 이상치는 평균 값을 흔들리게 함
  • 평균은 만능이 아니라는 점 알겠죠?
  • 범주형 데이터
  • 최빈값 대치

 

  • 사용 함수
  • 간단한 삭제 & 대치
  • df.dropna(axis = 0): 행 삭제
  • df.dropna(axis = 1): 열 삭제
  • Boolean Indexing
  • df.fillna(value): 특정 값으로 대치(평균, 중앙, 최빈값)
  • 알고리즘을 이용
  • sklearn.impute.SimpleImputer:평균, 중앙, 최빈값으로 대치
  • SimpleImputer.statistics_ : 대치한 값 확인 가능
  • sklearn.impute.IterativeImputer: 다변량대치(회귀 대치)
  • sklearn.impute.KNNImputer: KNN 알고리즘을 이용한 대치 📌 위와 같이 간단하게 결측치를 대치할 수도 있지만, 알고리즘을 이용해 대치할 수 도 있습니다. 이는 Imputation이라는 방법론으로 통계학에서도 많이 발전되었고, 석사 전공으로도 따로 있답니다.

예를 들면, 대표적인 알고리즘인 K- Nearest Neighbors(k 최근접 이웃)이라는 방법이 있습니다. 이 부분은 모델 심화에서 다루도록 할게요!

 

 

 

☑️ 범주형 데이터 전처리 - 인코딩(Encoding)

📌 인코딩의 사전적 뜻은 어떤 정보를 정해진 규칙에 따라 변환하는 것을 뜻합니다. 반면, 우리가 만든 머신러닝 모델은 숫자를 기반으로 학습하기 때문에 반드시 인코딩 과정이 필요합니다.

 

  1. 레이블 인코딩(Label Encoding)
  • 정의: 문자열 범주형 값을 고유한 숫자로 할당
  • 1등급 → 0
  • 2등급 → 1
  • 3등급 → 2
  • 특징
  • 장점: 모델이 처리하기 쉬운 수치형으로 데이터 변환
  • 단점: 실제로는 그렇지 않은데, 순서 간 크기에 의미가 부여되어 모델이 잘못 해석 할 수 있음

 

  • 사용 함수
  • sklearn.preprocessing.LabelEncoder
  • 메소드
  • fit: 데이터 학습
  • transform: 정수형 데이터로 변환
  • fit_transform: fit과 transform을 연결하여 한번에 실행
  • inverse_transform : 인코딩된 데이터를 원래 문자열로 변환

 

  • 속성
  • classes_: 인코더가 학습한 클래스(범주)
  1. 원-핫 인코딩(One-Hot Encoding)
  • 정의: 각 범주를 이진 형식으로 변환하는 기법
  • 빨강 → [1,0,0]
  • 파랑 → [0,1,0]
  • 초록 → [0,0,1]
  • 특징
  • 장점: 각 범주가 독립적으로 표현되어, 순서가 중요도를 잘못 학습하는 것을 방지, 명목형 데이터에 권장
  • 단점: 범주 개수가 많을 경우 차원이 크게 증가(차원의 저주) , 모델의 복잡도를 증가, 과적합 유발
  • 사용 함수
  • pd.get_dummies
  • sklearn.preprocessing.OneHotEncoder
  • 메소드(LabelEncoder와 동일)
  • categories_: 인코더가 학습한 클래스(범주)
  • get_feature_names_out(): 학습한 클래스 이름(리스트)
  • # CSR 데이터 데이터프레임으로 만들기 csr_df = pd.DataFrame(csr_data.toarray(), columns = oe.get_feature_names_out()) # 기존 데이터프레임에 붙이기(옆으로) pd.DataFrame([titaninc_df,csr_df], axis = 1)

 

☑️ 수치형 데이터 전처리 - 스케일링(Scaling)

📌 인코딩이 범주형 ****자료에 대한 전처리라고 한다면, 스케일링은 수치형 자료에 대한 전처리입니다. 머신러닝의 학습에 사용되는 데이터들은 서로 단위 값이 다르기 때문에 이를 보정한다고 생각해주세요.

 

  1. 표준화(Standardization)
  • 각 데이터에 평균을 빼고 표준편차를 나누어 평균을 0 표준편차를 1로 조정하는 방법
  • 수식
  • $$ x_{new} = \frac{x-x_{mean}}{x_{std}} $$
  • 함수: sklearn.preprocessing.StandardScaler
  • 메소드
  • fit : 데이터학습(평균과 표준편차를 계산)
  • transform: 데이터 스케일링 진행
  • 속성
  • mean_: 데이터의 평균 값
  • scale_, var_: 데이터의 표준 편차,분산 값
  • n_features_in_: fit 할 때 들어간 변수 개수
  • feature_names_in_: fit 할 때 들어간 변수 이름
  • n_samples_seen_ : fit 할 때 들어간 데이터의 개수
  • 특징
  • 장점
  • 이상치가 있거나 분포가 치우쳐져 있을 때 유용.
  • 모든 특성의 스케일을 동일하게 맞춤. 많은 알고리즘에서 좋은 성능
  • 단점
  • 데이터의 최소-최대 값이 정해지지 않음.
  1. 정규화(Normalization)
  • 정의: 데이터를 0과 1사이 값으로 조정(최소값 0, 최대값 1)
  • 수식
  1. $$ x_{norm} = \frac{x-x_{min}}{x_{max}-x_{min}} $$
  • 함수: sklearn.preprocessing.MinMaxScaler
  • (표준화와 공통인 것은 제외)
  • 속성
  • data_min_: 원 데이터의 최소 값
  • data_max_: 원 데이터의 최대 값
  • data_range_ : 원 데이터의 최대-최소 범위
  • 특징
  • 장점
  • 모든 특성의 스케일을 동일하게 맞춤
  • 최대-최소 범위가 명확
  • 단점:
  • 이상치에 영향을 많이 받을 수 있음(반대로 말하면 이상치가 없을 때 유용)

 

 

  1. 로버스트 스케일링(Robust Scaling)
  • 정의: 중앙값과 IQR을 사용하여 스케일링.
  • 수식
  1. $$ x_{robust} = \frac{x-median}{IQR} $$
  • 특징
  • 장점: 이상치의 영향에 덜 민감
  • 단점: 표준화와 정규화에 비해 덜 사용됨
  • 함수: sklearn.preprocessing.RobustScaler
  • 속성
  • center_: 훈련 데이터의 중앙값

 

2.4 (실습) 탐색적 데이터분석과 데이터전처리

  • 탐색적 데이터 분석: tips 데이터
  • 데이터전처리
  • 이상치 처리, 결측치 처리(titaninc 데이터)
  • 범주형 변수 - 인코딩
  • 연속형 변수 -스케일링
대표사진 삭제

사진 설명을 입력하세요.