2.1 데이터 수집
☑️ 데이터 수집에 따른 프로세스
📌 데이터 수집 단계는 예제 데이터 혹은 회사에 있는 데이터로 진행되기 때문에, 지나치는 경우가 많답니다. 실제로 데이터를 수집하려면 개발을 통해 데이터를 적재하고 수집하는 데이터 엔지니어링 역량이 필요한데, 이 부분은 개발자가 직접 설계하고 저장하게 됩니다. **데이터 분석가**는 이미 존재하는 데이터를 SQL 혹은 Python 로 통해 추출하고 리포팅 혹은 머신러닝을 통한 예측을 담당한다고 할 수 있습니다.
1. Data Source
- OLTP Database: **O**n**L**ine **T**ransaction **P**rocessing 은 온라인 뱅킹,쇼핑, 주문 입력 등 동시에 발생하는 다수의 트랜잭션(데이터베이스 작업의 단위) 처리 유형
- Enterprise Applications: 회사 내 데이터 (ex 고객 관계 데이터, 제품 마케팅 세일즈)
- Third - Party: Google Analytics와 같은 외부소스에서 수집되는 데이터
- Web/Log: 사용자의 로그데이터
2. Data Lake: 원시 형태의 다양한 유형의 데이터를 저장
3. Data Warehouse: 보다 구조화된 형태로 정제된 데이터를 저장
4. Data Marts: 회사의 금융, 마케팅, 영업 부서와 같이 특정 조직의 목적을 위해 가공된 데이터
5. BI/Analytics: business Intelligence(BI)는 의사결정에 사용될 데이터를 수집하고 분석하는 프로세스
📌 **이상치(Outlier)**란 보통 관측된 데이터 범위에서 많이 벗어난 아주 작은 값 혹은 큰 값을 말해요. 크게 2가지 기준이 있어요.
- Extreme Studentized Deviation(ESD) 이용한 이상치 발견
- 데이터가 정규분포를 따른다고 가정할 때, 평균에서 표준편차의 3배 이상 떨어진 값
- 모든 데이터가 정규 분포를 따르지 않을 수 있기 때문에 다음 상황에서는 제한됨
- 데이터가 크게 비대칭일 때( → Log변환 등을 노려볼 수 있음)
- 샘플 크기가 작을 경우
- IQR(Inter Quantile Range)를 이용한 이상치 발견
-
ESD와 동일하게 데이터가 비대칭적이거나 샘플사이즈가 작은 경우 제한됨
-
이상치 발견 방법
- ESD를 이용한 처리
```python
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)
```python
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]`
<aside>
📌 이상치가 분포에 크게 어긋나는 특이한 데이터라면, 결측치(Missing Value)는 존재하지 않는 데이터예요.
- 결측치 처리 방법
- 수치형 데이터
- 평균 값 대치: 대표적인 대치 방법
- 중앙값 대치: 데이터에 이상치가 많아 평균 값이 대표성이 없다면 중앙 값을 이용
Ex) 이상치는 평균 값을 흔들리게 함