Day32. 데이터분석프로세스 / TIL. 20240610
To do list.
- 코드카타
-머신러닝 활용 심화
-통계 세션 라이브 강의
데이터분석 프로세스
ML
1.지도
-회귀(숫자를 맞춤)
-분류(범주)
2.비지도
3.강화
데이터 수집
-회사 내 데이터가 존재한다면
SQL 혹은 Python 을 통해 데이터 마트를 생성
-회사 내 Data가 없다면 → 데이터 수집 필요
방법1: CSV, EXCEL 파일 다운로드
방법2: API를 이용한 데이터 수집
방법3: Data Crawling
데이터 전처리
🚩밑의 코드블럭의 이상치발견식은 어느정도 외워두기
Extreme Studentized Deviation(ESD) 이용한 이상치 발견
데이터가 정규분포를 따른다고 가정할 때, 평균에서 표준편차의 3배 이상 떨어진 값
ESD를 이용한 처리
import numpy as np
mean = np.mean(data)
std = np.std(data)
upper_limit = mean + 3*std
lower_limit = mean - 3*std
IQR(Inter Quantile Range)를 이용한 이상치 발견
ESD와 동일하게 데이터가 비대칭적이거나 샘플사이즈가 작은 경우 제한됨
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
SQL 코드카타
SELECT MONTH(START_DATE) AS MONTH,
CAR_ID,
COUNT(*) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE MONTH(START_DATE) BETWEEN '08' AND '10' AND
CAR_ID IN (
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE MONTH(START_DATE) BETWEEN '08' AND '10'
GROUP BY CAR_ID
HAVING COUNT(*) >= 5
)
GROUP BY MONTH, CAR_ID
ORDER BY MONTH, CAR_ID DESC ;
WHERE 조건
MONTH(START_DATE) BETWEEN '08' AND '10': START_DATE의 월이 8월, 9월 또는 10월인 레코드만 선택
(시작일 기준이라고 문제에서 언급했기에 END_DATE컬럼을 고려하지 않아도 된다... / 이것때문에 계속 헷갈렸다)
CAR_ID IN (...): 서브쿼리에서 반환된 CAR_ID 값이 포함된 레코드만 선택
서브쿼리:
SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE MONTH(START_DATE) BETWEEN '08' AND '10' GROUP BY CAR_ID HAVING COUNT(*) >= 5:
대여 기록에서 START_DATE의 월이 8월, 9월 또는 10월인 레코드를 선택함
GROUP BY CAR_ID:
CAR_ID별로 그룹화
HAVING COUNT(*) >= 5:
각 차량이 최소 5번 이상 대여된 경우만 선택
GROUP BY 구문:
GROUP BY MONTH, CAR_ID: 월과 차량 ID별로 그룹화하여 각 그룹의 레코드 수를 계산