일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 기초통계
- jd
- 전처리
- 서브쿼리
- streamlit
- Chat GPT
- 데이터분석
- 프로젝트
- cross join
- SQLD
- 태블로
- 클러스터링
- da
- 데이터 분석
- 기초프로젝트
- 최종 프로젝트
- 크롤링
- 팀프로젝트
- 히트맵
- pandas
- data analyst
- 시각화
- 프롬프트 엔지니어링
- If
- 군집화
- lambda
- Python
- SQL
- GA4
- 머신러닝
- Today
- Total
세조목
TIL(Today I Learned) 4일차(23.12.01) 본문
1. SQL 예제
1) CASE WHEN 절, WHERE 절에 두 개 이상의 조건 값을 넣으려면?
(1) CASE WHEN
https://school.programmers.co.kr/learn/courses/30/lessons/59409
문제에서 동물들의 중성화 여부를 파악하려고한다.
SEX-UPON_INTAKE 열에 Neutered 또는 Spayed 라는 단어가 포함되어있으면 중성화가 되어있다는 의미이므로 O를 표시하고 그렇지 않은 경우에는 X를 표시하란다.
SEX_UPON_INTAKE 열에 Neutered 또는 Spayed가 포함되어있는 경우를 어떻게 뽑아낼 수 있을까?
맞다. CASE WHEN 절을 이용할 수 있다.
처음에는 하나의 CASE WHEN 절 안에 두 개의 조건 값을 넣을 수 없는줄 알고 아래와 같이 코드를 입력했다.
이렇게 입력해도 정답이 출력되긴한다.
그런데 같은 출력값인 O를 두 개의 절에 나눠서 적는다는 것은
편하게 쓰라고 만들어놓은 조건문을 제 용도에 맞춰서 쓰고 있지 않다는 느낌이 들어
하나의 절에 두 개의 조건 값을 넣을수 있는 방법을 찾아봤다.
IN 을 사용하면 하나의 절에 두 개의 조건 값을 넣을 수 있다.
그렇게 코드를 작성하면
이렇게 코드가 5줄에서 4줄로 줄어들었다.
컬럼명 다음에 in을 쓰고 괄호를 열어준 다음 걸어주고싶은 조건 값을 넣어주고서 다시 괄호를 닫는다.
(2) WHERE
WHERE에서도 조건 값을 여러 개 지정할 수 있다.
CASE WHEN에서 IN을 썼다면
WHERE에서는 OR를 쓰면 된다.
https://school.programmers.co.kr/learn/courses/30/lessons/132203
예를 들어 위 문제에서는 흉부외과이거나 일반외과인 의사의 이름, 의사ID, 진료과, 고용일자를 조회하는 SQL문을 작성하라고 요구한다.
어느과 소속인지는 MCDP_CD열에서 확인이 가능한데 각각 CS, GS로 표시된다.
테이블에는 흉부외과, 일반외과 외 다른 과들도 포함되어있기때문에 우리는 흉부외과와 일반외과 의사만을 뽑아내야한다.
그래서 WHERE절을 사용하는 것이다.
앞에서 언급한것처럼 OR를 사용하면 하나의 WHERE절에 두 개의 조건 값을 넣을 수 있다. 아래처럼
2) 문자를 날짜로 변경, & 연·월·일 추출
테이블을 확인해보니 날짜로 보이는 값들이 보인다.
그런데 날짜가 아니다. 문자다.
만약 저기서 특정 연, 월, 일을 추출해내고싶다면 어떻게 해야할까?
우선 문자를 날짜로 바꿔야하는데 이 때 쓰이는 함수는 DATE 함수이다.
함수 사용방법은 간단하다.
DATE('컬럼 명')이다.
그렇게 문자를 날짜로 바꾼 다음에는 연, 월, 일을 추출하는 함수를 적용해야하는데
DATE_FORMAT을 활용할 수 있다.
DATE_FORMAT('컬럼 명', 추출하고자 하는 부분(연, 월, 일 中))인데 위 예시에 적용해보면 아래와 같다.
DATE_FORMAT(DATE(DATE), '%Y-%m)
연, 월, 일, 요일 각각 % 뒤에 Y, M, D, W를 넣어주면 되는데 대문자냐, 소문자냐에따라서 출력값이 달라진다.
예시는 아래와 같다.
요일의 경우 소문자 W를 쓰면 일요일부터 토요일까지의 순서에따라서 숫자가 표시되는데
0부터 시작한다는 점 유의해야한다.
2. PYTHON
1) 피벗테이블 함수의 aggfunc
python에는 피벗 테이블을 만들수 있는 함수가 두 개있다.
PIVOT과 PIVOT_TABLE이 그 두개이다.
무슨 차이일까??
PIVOT_TABLE에는 PIVOT에는 없는 aggfunc와 fill_value가 있다.
그럼 언제 PIVOT 함수를 쓰고 언제 PIVOT_TABLE 함수를 쓰는걸까??
결론부터 얘기하면 하나의 테이블 안에 모든 값들이 들어있는지 여부가 기준이 된다.
PIVOT 함수 : 하나의 테이블 안에 모든 값이 들어있음
PIVOT_TABLE : 그렇지 않음
먼저 PIVOT 함수를 살펴보자
위와 같은 테이블로 출력되는 cohort_data라는 변수가 있고 이 테이블을 피벗테이블로 바꾸고싶을때는
PIVOT 함수를 쓰면 된다.
왜??
하나의 테이블에 모든 값들이 들어가 있으니까
다음으로 PIVOT_TABLE함수를 살펴보자
위 이미지는 요일별 데이터, 아래 이미지는 시간별 데이터이다.
PIVOT 함수 예시때처럼 cohort_data라는 하나의 테이블에 모든 값이 들어가있는 경우가 아니다.
이 경우 위와같이 PIVOT_TABLE함수를 사용하여 피벗테이블을 만들어줘야한다.
여기서 한 가지 더 궁금증이 생긴다.
aggfunc는 뭘까??
PIVOT에는 없는 PIVOT_TABLE에만 있는 aggfunc
나의 추측인데 아마 aggregation function의 약자이지 않을까 싶다.
aggregation은 결합, 종합
function은 기능
을 뜻하므로 결합기능을 가지는 기능인데
PIVOT_TABLE은 두 개의 서로 다른 그룹을 하나의 테이블로 합치는 거니까
aggfunc가 접착제 역할을 하는 것 같다.
위 예시에서는 count 다시말해 세아리는 것으로 결합하고 있다.
그렇게 했을때 결과물(피벗테이블)은 아래와 같다.
예에쓰~~~~
'데이터 분석 공부 > TIL(Today I Learned)' 카테고리의 다른 글
TIL(Today I Learned)6일차(23.12.05) (4) | 2023.12.05 |
---|---|
TIL(Today I Learned) 5일차(23.12.04) (0) | 2023.12.04 |
TIL(Today I Learned) 3일차(23.11.30) (2) | 2023.11.30 |
TIL(Today I Learned) 2일차(23.11.29) (1) | 2023.11.29 |
TIL(Today I Learned) 1일차(23.11.28) (0) | 2023.11.28 |