일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- If
- 태블로
- data analyst
- 전처리
- 군집화
- 히트맵
- jd
- 데이터 분석
- 시각화
- Python
- cross join
- 프롬프트 엔지니어링
- 팀프로젝트
- streamlit
- da
- 프로젝트
- 크롤링
- 클러스터링
- pandas
- SQLD
- 기초프로젝트
- lambda
- 기초통계
- SQL
- 머신러닝
- 최종 프로젝트
- Chat GPT
- 서브쿼리
- 데이터분석
- GA4
- Today
- Total
세조목
TIL(Today I Learned)8일차(23.12.07) 본문
1. SQL
1) 프로그래머스 42번 문제
https://school.programmers.co.kr/learn/courses/30/lessons/151136
42번 문제 요구사항이다.
- 자동차 종류 : SUV
- 평균 일일 대여 요금
* 소수 첫 번째 자리에서 반올림
* 컬럼명은 AVERAGE_FEE
select round(avg(daily_fee)) 'AVERAGE_FEE'
from car_rental_company_car
where car_type = 'SUV'
입력해야하는 코드 자체는 간단하다.
하지만 이번 문제에서 반올림 기능이 있는 ROUND 함수에 대해서 처음 알게 됐다.
입력해야하는 인자는 아래와 같다.
ROUND(값, 몇번째 소수점까지 표시할지)
문제에서는 소수 첫 번째 자리에서 반올림(=소수점 표시 X)이기 때문에 두번째 인자 자리에 별도의 숫자는 입력하지 않았다.
2) 프로그래머스 43번 문제
43번 문제 요구사항이다.
- 완료된 중고 거래
- 총금액이 70만원 이상
43번 문제의 경우 이전에 한번 정리한적이 있는데
where절에 집계함수나 별칭으로 만든 함수를 사용할 수 없다는 점을 놓쳤다.
요구사항 중 하나인 '총 금액이 70만원 이상'을 코드로 작성하면 'total(price) >= 700000' 인데 집계함수이기때문에
where 절에 작성할 수 없다. 그래서 이 코드는 having 절에 적어주고
where절에는 status='DONE'을 적어줘야한다.
그렇게 했을때 코드는 아래와 같다.
select b.user_id,
b.nickname,
sum(a.price) 'TOTAL_SALES'
from used_goods_board a join used_goods_user b on a.writer_id = b.user_id
where status = 'DONE'
group by 1
having sum(a.price) >=700000
order by sum(a.price)
3) 프로그래머스 44번 문제
https://school.programmers.co.kr/learn/courses/30/lessons/131530
문제에서는 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL문을 작성하라고 요구한다.
동시에 가격대 정보는 각 구간의 최소금액(EX. 10,000 이상~20,000 미만 구간의 경우 10,000 표시)으로 표시해야한다.
처음에는 CASE WHEN으로 각각의 구간을 모두 나눠봤는데 너무 코드가 길어져서 다른 코드를 찾아보던 중
CASE WHEN을 사용하지 않고도 요구사항을 충족할 수 있는 코드가 있었다.
바로 '% 10000'를 사용하는 것이다.
%는 나눗셈 했을때 나머지를 나타내는 기호이다.
SELECT (PRICE - (PRICE % 10000)) 'PRICE_GROUP',
COUNT(PRODUCT_ID) 'PRODUCT'
FROM PRODUCT
GROUP BY 1
ORDER BY 1
%를 적용했을때의 코드는 위와 같은데
예를 들어 PRICE가 13000원이라고 했을때 나머지는 3000이다.
3000을 13000에다가 빼주면 남는 값은 10000이된다.
어떤 숫자를 입력해도 각 구간의 최소금액이 나온다.
4) 프로그래머스 45번 문제
https://school.programmers.co.kr/learn/courses/30/lessons/131120
45번 문제 요구사항이다.
- 생일이 3월
- 성별이 여성
- 전화번호가 NULL인 경우는 제외
모두 WHERE절에 작성하는데 전화번호가 NULL인 경우는 제외해야하기때문에
WHERE TLNO IS NOT NULL 로 적어준다.
알고 있던 내용이긴하나 보통 WHERE 절에서 = 를 많이 쓰는 나이기에 IS NOT을 사용하는걸
깜박할수도 있을것 같아서 이렇게 정리해본다.
2. PYTHON
https://youtu.be/u_X6a61KQNQ?si=-srPxCGfHc-JX9sr
어제와 마찬가지로 오늘도 코드 뜯어보기 영상을 보면서 python공부를 했다.
1.
cluster[cluster['price_per_sqft'] < 756]
→ cluster['price_per_sqft'] < 756 인 애들을 인덱싱 해주는 코드임
테이블명[ ] 이 인덱싱하는 코드니까
2.
if절에서 print만 작성하면 저장은 안 됨
저장하려면 return을 적어줘야 함
3.
def로 새로 만든 get_group(x)에는 하나의 값만 입력할 수 있기때문에
x에 sf.neighborhood를 넣으면 error가 난다.
여러개의 값을 넣고자 할 때 필요한 것이 apply함수이다.
sf['group'] = sf.neighborhood.apply(get_group)
4.
def get_group2(x):
if x['price_per_sqft'] < 756:
return 'low_price'
elif (x['price_per_sqft'] >= 756) & (x['freq'] < 123):
return 'high_price_low_freq'
else:
return 'high_price_high_freq'
cluster.apply(get_group2)
apply로 함수를 적용해주면 indexing값을 행단위로 먼저 검색하기때문에 오류가 남
그래서 axis = 1을 적어줘서 열 순서로 검색하게끔 만들어줘야함
cluster.apply(get_group2, axis = 1)
5.
sf.merge(group2)
sf테이블에 group2 테이블을 결합
6.
pd.get_dumies( )
텍스트로된 변수들을 0과 1로 변환
'데이터 분석 공부 > TIL(Today I Learned)' 카테고리의 다른 글
TIL(Today I Learned)10일차(23.12.11) (1) | 2023.12.11 |
---|---|
TIL(Today I Learned)9일차(23.12.08) (1) | 2023.12.08 |
TIL(Today I Learned)7일차(23.12.06) (4) | 2023.12.06 |
TIL(Today I Learned)6일차(23.12.05) (4) | 2023.12.05 |
TIL(Today I Learned) 5일차(23.12.04) (0) | 2023.12.04 |