👩🏻💻 Point of Today I LEARNED
📌 SQL
● QCC 복습
📌 Python
● standard 세션 2회차 복습
오늘은 거의 QCC 복습, 응용 연습하는 데에 시간을 쏟았다.
후기는 아래에 계속 ,,

1. SQL
1-1. QCC 복습
QCC 3회차
1번. 임직원 로그인 빈도 분석제출한 코드 (오답)select cnt as unique_logins, count(employee_id) as employee_countfrom(select l.employee_id, count(l.login_id) cntfrom logins ljoin employees eon l.employee_id = e.employee_idwhere l.login_time
rosenps3.tistory.com
아쉽다. 너무 아쉽다.
1번에 date_format만 걸어줬어도 만점인데 !!!!!!
하지만..
4번 문제 풀면서 서버 문제로 몇 차레 시험이 중단됐고,
그만큼 생각할 시간을 벌었기 때문에..
사실상 공평한 시험은 아니었다고 생각한다.
그래서 4번 문제 맞힌 것도 100% 실력은 아니라고 본다.
(본인에게 엄격한 편..?)
✅ QCC 3회차 포인트
1. with 구문을 잘 활용하면 쿼리 짤 때 훨씬 간결해지고 헷갈리지 않을 것 같아서 모든 문제를 CTE 만들어서 새로 풀어보았다. 코드카타 풀 때도 의식적으로 써봐야겠음
2. ⭐️⭐️⭐️ datetime 형식의 데이터에 조건 걸 때는 반드시 date_format 걸어서 문자열로 형변환해주자. 그래야 원하는대로 정확하게 결과를 추출할 수 있다.
3. rank와 dense_rank의 차이
4. ⭐️ limit 찾을 행 개수(n) offset 시작 행(s) ➜ s행부터 시작해서 n개 행 추출
5. case when에 직접 sum 붙여줄 수 있음
6. ⭐️⭐️ 조건필터링한 테이블을 CTE로 만들어서 INNER JOIN 시키면 굳이 where ~ in 서브쿼리 안해줘도 됨
2. Python
2-1. standard 세션 2회차 복습
1) 파이썬의 Window 함수 (➊Shift, ➋Rolling, ➌Expanding)
Shift
- SQL의 lag, lead 기능과 비슷
- df.shift(periods=n , freq=None, axis=0, fill_value = ' ')
- 파라미터
- periods : 이동할 기간(n)
- 양수면 n번 앞 행의 날짜
- 음수면 n번 뒤 행의 날짜
- freq : Y M D H T S / Timestamp / 'Infer' 등
- axis : 연산 축 방향 지정
- axis=0 (기본값) : 행
- axis=1 : 열
- fill_value : 결측치 대체값 지정
- periods : 이동할 기간(n)
Rolling
- SQL의 range between interval n day preceding and current row 기능과 비슷
- df.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, close=None, method = 'single').집계메서드()
- 파라미터
- window : 계산할 행/열의 개수
- min_periods : 계산할 최소 크기(기간), 기본적으로 window값과 동일
- center
- False (기본값)
- True : 중간 행 기준 계산
- win_type : 가중치 적용
- on : 시계열/시계열 느낌 나는 열을 지정해서 이 열 기준으로 연산 수행
- axis : 연산 축 방향 지정
- axis=0 (기본값) : 행
- axis=1 : 열
- closed : 연산 닫히는 방향 지정 (거의 안씀)
- right (기본값) : 오른쪽 값 포함
- left : 왼쪽 값 포함
- both : 양쪽 다 포함
- neither : 양쪽 다 미포함
- method : 연산 방식 지정 (현재 single만 사용 가능)
Expanding
- df.expanding(min_periods=1, axis=0, method='single').집계메서드()
- 누적값 출력
- Rolling의 일부분이라고 보면 됨 (범위 지정 불가한 누적)
- 파라미터
- min_periods : 연산 수행할 요소의 최소 개수
- axis : 연산 축 방향 지정
- axis=0 (기본값) : 행
- axis=1 : 열
- method : 연산방식
- single (기본값) : 한 줄씩 연산
- table : 전체 테이블에 대한 연산 → import numba 필요
2) 데이터 타입별 상관관계

피어슨 상관계수
- 연속형 ↔ 연속형
- df.corr(method='pearson')
- 1에 가까우면 비례관계, -1에 가까우면 반비례관계, 0이면 아무런 상관 관계 없음
- 즉 |상관계수|가 1에 가까울수록 높은 상관관계를 가진다는 의미
- 현업에서 보통 0.7 이상이면 높다고 판단, 0.5이하는 거의 관계 없다고 판단

Point biserial 상관계수 (점이연 상관계수)
- 연속형 ↔ 범주형 (범주 2개(이분형))
- 범주를 0,1로 코딩해서 숫자형으로 변환 ➜ 피어슨 상관계수 계산
- (범주형 독립변수) 쇼핑레터 구독 (예/아니오) → 예(0), 아니오(1)
- (연속형 종속변수) 총 구매 가격
- scipy 라이브러리의 pointbiserialr 함수
- stats.pointbiserialr(df['컬럼'],df['컬럼'])
- 상관계수(r), p-value 동시에 반환
- 상관계수가 통계적으로 유의미한지 p-value를 통해 판단
Q. 두 집단의 차이를 비교한다는 점에서 독립표본 t-검정과 비슷하다고 느껴진다. 뭐가 다른거지?
✔︎ 독립표본 t-검정 : 두 집단 간의 평균의 차이(얼마나 다른지)가 통계적으로 유의미한지 확인 (t, p-value)
✔︎ Point biserial 상관계수 : 두 변수 간의 상관 정도(얼마나 연관되어있는지)를 정량적으로 측정 (r, p-value)
✅ 정리
1. t-검정 결과 t값이 높게 나왔고, p-value가 0.05 이하로 나와서 두 그룹 간 차이가 유의미하게 크다는 게 증명됨
(= 쇼핑레터 구독을 한 그룹과 안 한 그룹 간의 총 구매 가격의 평균 차이가 크다.)
2. Point biserial 상관계수를 산출했을 때 쇼핑레터 구독한 그룹~총구매가격의 상관계수가 1에 가깝게 나왔고, p-value가 0.05이하로 나와서 두 변수 간의 상관정도가 높다는 게 증명됨
(= 쇼핑레터 구독할수록 더 많이 구매한다.)
ANOVA (분산 분석, Analysis of Variance)
- 연속형 ↔ 범주형 (범주 3개 이상)
- (Polyseiral도 가능) 하지만 범주형이 순서형일 때 적합
- 분석할 때 보통 명목형 데이터가 더 많고, 현재 python에서 Polyseiral 지원 X
- 범주형 변수에 따라 연속형 변수들의 '평균'의 차이가 얼마나 나는지 검정
- (범주형 독립변수) 나라별 (한국, 미국, 프랑스, ...)
- (연속형 종속변수) 총 매출액
- scipy 라이브러리의 f_oneway 함수
- stats.f_oneway(df['컬럼'],df['컬럼'])
- f-statistic, p-value 동시에 반환
- f값이 통계적으로 유의미한지 p-value를 통해 판단
- 결과값
| F-Statistic | 해석 |
| F < 1 | 무의미 |
| 1 ≤ F < 3 | 거의 무의미 |
| 3 ≤ F < 10 | 경우에 따라 유의미 |
| 10 ≤ F < 50 | 유의미 (강한 차이) |
| F > 50 | 거의 확실한 유의미 (아주 강한 차이) |
| F >= 100 | 확실한 유의미 (매우 강한 차이) |
✅ t-검정 vs ANOVA
t-검정 : 변수 2개 (독립변수:범주형, 종속변수:연속형)
ANOVA : 변수 3개 이상 (독립변수:범주형, 종속변수:연속형)
✅ 카이제곱검정 vs ANOVA
카이제곱검정 : 범주형 데이터의 비율 비교 (독립변수, 종속변수 모두 범주형)
ANOVA : 범주형 데이터에 따른 연속형 데이터의 평균 비교 (독립변수:범주형, 종속변수:연속형)
파이 상관계수
- 범주형(이분형) ↔ 범주형(이분형)
- 두 범주 모두 이분형 & 명목형(순서가 없는)일 때만 사용 가능
- 범주를 0,1로 코딩해서 숫자형으로 변환 ➜ 피어슨 상관계수 계산
Cramer's V
- 범주형 ↔ 범주형
- 변수 중 하나라도 범주가 3개 이상일 때 사용
- 범주 각각 LabelEncoding ➜ define a function ➜ 혼동행렬 생성
- scipy, sklearn 라이브러리
- 결과값
| Cramer's V 계수 | 해석 |
| 0 ~ 0.1 | 무시해도 되는 관계 |
| 0.1 ~ 0.2 | 약한 상관관계 |
| 0.2 ~ 0.4 | 보통 상관관계 |
| 0.4 ~ 0.6 | 약한 상관관계 |
| 0.6 ~ 0.8 | 강한 상관관게 |
| 0.8 ~ 1.0 | 매우 강한 상관관계 |
'데이터 분석' 카테고리의 다른 글
| [250408] 머신러닝 - 데이터 전처리, 모델링(회귀) (0) | 2025.04.08 |
|---|---|
| [250407] 데이터타입별 검증법/상관계수, 회귀, 머신러닝 개요 (0) | 2025.04.07 |
| [day47] 하루가 너무 빨리 지나간다. 할 게 무진장 많기 때문이다. (0) | 2025.04.03 |
| [day46] 통계야 놀자 . . . ? (0) | 2025.04.02 |
| [day45] 막상 가보면 아무 것도 아닌 게 너무 많다. (0) | 2025.04.01 |