일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 군집화
- SQLD
- GA4
- jd
- 기초프로젝트
- 최종 프로젝트
- If
- 히트맵
- lambda
- 머신러닝
- 태블로
- Python
- 데이터 분석
- cross join
- Chat GPT
- SQL
- 팀프로젝트
- streamlit
- 프로젝트
- pandas
- 서브쿼리
- da
- data analyst
- 시각화
- 클러스터링
- 프롬프트 엔지니어링
- 기초통계
- 전처리
- 데이터분석
- 크롤링
- Today
- Total
세조목
TIL(Today I Learned)12일차(23.12.13) 본문
1. SQL
1) 프로그래머스 65번 문제
https://school.programmers.co.kr/learn/courses/30/lessons/62284#qna
65번 문제 요구사항이다.
Milk와 Yogurt를 동시에 구입한 장바구니를 출력해야한다.
어떻게 하면 될까?
WHERE NAME = 'Yogurt' or NAME = 'Milk'
로 하면 Yogurt없이 Milk만 / Milk없이 Yogurt만 있는 경우가 발생한다.
WHERE NAME = 'Yogurt' and NAME = 'Milk'
로 하면 NAME 컬럼 안에 Yogurt와 Milk가 모두 들어있는 ID와 CART_ID가 없기때문에 아무런 값도 출력되지 않는다.
WHERE 'NAME = 'Yogurt' and NAME = 'Milk' ' 를 다르게 표현할 수는 없을까?
NAME 컬럼으로만 해결하려고하면 해답을 찾을수가 없다.
NAME컬럼과 CART_ID 컬럼을 함께 활용해야한다.
무슨 말인고하면
우선 WHERE절에 Yogurt든 Milk든 'NAME = ' 조건을 먼저 하나 주고,
바로 이어서 CART_ID가 나머지 조건에 해당하는 조건을 주는 것이다.
예를 들어
WHERE NAME = 'Yogurt' 를 줬다면 이어서
AND CART_ID
(
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'Milk'
)
를 입력하는 것이다.
조금 더 설명을 하자면
WHERE NAME = 'Milk'를 했을때는
이같은 값이 추려진다.
AND CART_ID
(
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'Yogurt'
)
이어서 이 코드를 입력하면
이렇게 NAME이 Yogurt인 CART_ID들만 추려진다.
두 조건을 AND로 묶었기 때문에 두 조건을 모두 만족하는 CART_ID 286, 448, 636만 출력된다.
2) 프로그래머스 66번 문제
https://school.programmers.co.kr/learn/courses/30/lessons/164671#qna
66번 문제의 요구사항이다.
이 문제에서는 조회수가 가장 높은 중고거래 게시물을 찾아내야하는데
처음 문제를 풀 때는
SELECT CONCAT(CONCAT_WS('/','/home/grep/src', A.BOARD_ID, FILE_ID), FILE_NAME, FILE_EXT) 'FILE_PATH'
FROM USED_GOODS_BOARD A JOIN USED_GOODS_FILE B ON A.BOARD_ID = B.BOARD_ID
HAVING MAX(VIEWS)
이렇게 작성하는건가싶었다.
이렇게 할 경우 가장 조회수가 높은 값 딱 하나만 출력이 된다.
그런데 가장 조회수가 높은 게시글이 중복으로 존재할 수 있기때문에
'가장 조회수가 높은 게시글의 조회수를 가진' 이라는 조건을 먼저 만들어 주고
그 조건에 해당하는 값들을 모두 출력하게끔 코드를 작성해야한다.
'가장 조회수가 높은 게시글의 조회수를 가진' 이라는 조건은 어떻게 만들수 있을까?
WHERE VIEWS IN
(
SELECT MAX(VIEWS)
FROM USED_GOODS_BOARD
)
위와 같이 WHERE절에서 만들어 줄 수 있다.
가장 조회수가 높은 게시글의 조회수는 301개이다보니
결국은 WHERE VIEWS IN 301이라는 조건이 만들어지게된다.
그러면 WHERE VIEWS IN 301이라는 조건을 가진 게시글들만을 모두 출력하게된다.
2. PYTHON
1) 데이터 분석 4주차 수업 - 인덱싱
sum_of_students_by_discounted = sparta_data[sparta_data['group']==1]['user_id'].count()
sum_of_students_by_discounted
https://eyeoftheworld1209.tistory.com/entry/TILToday-I-Learned-3%EC%9D%BC%EC%B0%A8231130
TIL 3일차에서 다뤘던 내용이다.
group 열에서 값이 1인 사람들의 수를 구하기 위해서는
sparta_data[sparta_data['group']==1].count( )
을 작성해야한다.
2) 데이터 분석 4주차 수업 - 시각화
문제에서는 '할인받은 그룹', '할인받지못한 그룹' 이렇게 두 개의 그룹이 나온다.
plt.plot(x_list, percentage_of_discounted)
plt.plot(x_list, percentage_of_not_discounted)
시각화 할 때 나는 처음에 위와 같이 코드를 입력했으나 저렇게 입력하는 것이 아니었다.
x_list = ['할인', '정상가격']
y_list = [percentage_of_discounted, percentage_of_not_discounted]
plt.bar(x_list, y_list)
두 개의 그룹이 값으로만 존재한다면
위 코드처럼 x_list와 y_list를 각각 만들어서
plt.bar( ) 안에 넣어줘야한다.
3) 기타
- 결측치 확인 : 변수.isnull( ).sum( )
- 결측치 제거 : 변수.dropna( )
- 행/열 삭제 : 변수.drop('행/열')
- 시각화 단계에서 두 개의 plot을 그려야한다면 plt.plot(index, values)를 각각 입력해주면 됨
'데이터 분석 공부 > TIL(Today I Learned)' 카테고리의 다른 글
TIL(Today I Learned)14일차(23.12.15) (0) | 2023.12.15 |
---|---|
TIL(Today I Learned)13일차(23.12.14) (0) | 2023.12.14 |
TIL(Today I Learned)11일차(23.12.12) (0) | 2023.12.12 |
TIL(Today I Learned)10일차(23.12.11) (1) | 2023.12.11 |
TIL(Today I Learned)9일차(23.12.08) (1) | 2023.12.08 |