TIL. (Today I Learned)

Day32. 데이터분석프로세스 / TIL. 20240610

체대이터 2024. 6. 10. 21:15
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별로 그룹화하여 각 그룹의 레코드 수를 계산