- Today
1. 미니프로젝트
> 추출해낸 결과물을 가지고 어떤 분석을 해볼 수 있는지, 어떤 특이점이 있는지 예상해보기
2. SQL, 파이썬 코드카타
- Today I Learned
SQL
특정 기간동안 대여 가능한 자동차들의 대여비용 구하기
SELECT c.car_id
, c.car_type
, ROUND(c.daily_fee * 30 * (100-p.discount_rate)/100) FEE
FROM CAR_RENTAL_COMPANY_CAR c JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN p
ON c.car_type=p.car_type AND p.duration_type = '30일 이상'
WHERE c.car_type IN ('세단', 'SUV') AND c.car_id NOT IN
(SELECT car_id
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE end_date >= '2022-11-01' AND start_date <= '2022-11-30')
GROUP BY 1 -- GROUP BY 는 제외 가능
HAVING FEE >= 500000 AND FEE < 2000000
ORDER BY 3 DESC, 1, 2 DESC
GROUP BY 없이 HAVING 단독으로 올 수 있다.
테이블 전체가 한 개의 그룹이 되는 경우 사용 가능하다.
having 조건을 where 절에 넣어줄 경우 오류 발생
파이썬
약수의 개수와 덧셈
우선 left 의 약수를 구해보았다.
def solution(left, right):
answer = []
for i in range(1,left+1):
if left%i == 0:
answer.append(i)
return answer
left 의 갯수는 구해졌는데..
right 까지가 필요한거니까 while 를 사용해야할까? 싶었고
left 부터 right 까지 이기 때문에 range 안에 (left,right+1) 까지는 입력하였으나 이 뒤는 막혀서 구글링!
def solution(left, right):
answer = 0
for i in range(left,right+1):
count = 0
for n in range(1,i+1):
if i%n == 0:
count += 1
if count %2 == 0:
answer += i
else:
answer -= i
return answer
for 반복절 안에 for 을 또 사용 할 수 있었다 ..
그리고 count 라는 매개변수를 준 것 처럼 for 구문 안에서의 매개변수도 줄 수 있다
프로젝트
다운 받았던 원본파일이 오입력 등의 이유로 이상치들이 있어 데이터 전처리 과정을 진행해주었다.
오입력 된 행 데이터 찾기
SELECT *
FROM US2020
WHERE LENGTH(Product_Name) > 100;
우선 다운 받은 데이터를 파악하기 위해
분기별로 총 매출액과 판매량,수익, 수익률을 계산해주었다.
SELECT CASE WHEN MONTH(Order_Date) BETWEEN 1 AND 3 THEN '1분기'
WHEN MONTH(Order_Date) BETWEEN 4 AND 6 THEN '2분기'
WHEN MONTH(Order_Date) BETWEEN 7 AND 9 THEN '3분기'
WHEN MONTH(Order_Date) BETWEEN 10 AND 12 THEN '4분기'
END '분기'
, ROUND(SUM(sales),2) Total_sales -- 총 매출액
, SUM(Quantity) Total_quantity -- 총 판매량
, ROUND(SUM(profit),2) Total_profit -- 총 수익
, ROUND(SUM(profit)/SUM(sales)*100,2) profit_rate -- 수익률
FROM us2020
GROUP BY 1
매출액이 높은데에 비해 순이익이 적은 분기가 있다.
그 분기에 판매되었던 상품 및 할인율에 따라 변화가 있을 수 있다.
월 별 분석
select case when Order_Date like '2020-01%' then '1월'
when Order_Date like '2020-02%' then '2월'
when Order_Date like '2020-03%' then '3월'
when Order_Date like '2020-04%' then '4월'
when Order_Date like '2020-05%' then '5월'
when Order_Date like '2020-06%' then '6월'
when Order_Date like '2020-07%' then '7월'
when Order_Date like '2020-08%' then '8월'
when Order_Date like '2020-09%' then '9월'
when Order_Date like '2020-10%' then '10월'
when Order_Date like '2020-11%' then '11월'
ELSE '12월' end "월별",
round(sum(Sales),2) Total_Sales,
sum(Quantity) Total_Quantity,
round(sum(Profit),2) Total_Profit,
round(sum(Profit)/sum(Sales)*100,2) Profit_rate
from US2020
group by 1
category 별 분석
select Category,
round(sum(Sales),2) Total_Sales,
sum(Quantity) Total_Quantity,
round(sum(Profit),2) Total_Profit,
round(sum(Profit)/sum(Sales)*100,2) Profit_rate
from US2020
group by 1
order by 5 DESC
# 수익률이 높은 상품 중 수익이 가장 높은 상품인 'Technology' 의 판매자 관점에서
가장 이윤이 높은 판매 방식을 찾아보기로 했다
1. 어떤 상품을 우선으로 판매하는 것이 좋을지?
> 서브카테고리별로 비교
> 1순위 'Accessories'
select subCategory,
round(sum(Sales),2) Total_Sales,
sum(Quantity) Total_Quantity,
round(sum(Profit),2) Total_Profit,
round(sum(Profit)/sum(Sales)*100,2) Profit_rate
from US2020
WHERE Category = 'Technology'
group by 1
order by 5 DESC
2. 해당 서브카테고리를 선택한 이유?
> 판매량, 수익, 수익률, 매출액, 판매수량
2-1 꾸준한 판매량
SELECT case when month(Order_Date)=1 then 1
when month(Order_Date)=2 then 2
when month(Order_Date)=3 then 3
when month(Order_Date)=4 then 4
when month(Order_Date)=5 then 5
when month(Order_Date)=6 then 6
when month(Order_Date)=7 then 7
when month(Order_Date)=8 then 8
when month(Order_Date)=9 then 9
when month(Order_Date)=10 then 10
when month(Order_Date)=11 then 11
else 12 end "월별",
subCategory,
round(sum(Sales),2) tot_sales,
sum(Quantity) tot_quantity,
round(sum(Profit),2) tot_profit,
round(sum(Profit)/sum(Sales)*100,2) profit_rate
FROM us2020
WHERE Category = 'Technology'
GROUP BY 1, 2
ORDER BY 1, 4 desc;
# 'Accessories' 상품의 경우 매달 꾸준히 판매되고 있다.
2-2~4 높은 수익률, 수익, 매출액, 판매수량
select subCategory,
round(sum(Sales),2) Total_Sales,
sum(Quantity) Total_Quantity,
round(sum(Profit),2) Total_Profit,
round(sum(Profit)/sum(Sales)*100,2) Profit_rate
from US2020
WHERE Category = 'Technology'
group by 1
order by 5 DESC,4 DESC, 2 DESC, 3 DESC
# 전체 카테고리에서 2위 이지만 1위엔 'Copiers' 의 경우 판매가 되지 않았던 달이 있고
분석에 필요한 Quantity 값이 부족하기 때문에 'Accessories' 로 선택하였다.
3. 정가를 파악하고 가격대별로 Segmentation 을 하였을 때 가장 많이 팔리는 가격대 알아보기
4. 해당 제품의 월 별 매출/할인/판매량/수익/수익률 확인
5. 이윤을 남기기 위해 어떤 방법을 사용할 것인지 결정
6. 1년 동안의 매출/판매량/수익/수익률 예측
7. 해당 카테고리에 대한 분석결과를 토대로 우리 기업이 가장 많은 이윤을 추구할 수 있는 계획 수립
* 새롭게 알게 된 꿀팁!
ID 나 code 등의 경우 varchar 또는 string 형식으로 만든다!
- Next
1. 프로젝트 준비
2. SQL, 파이썬 코드카타
'TIL' 카테고리의 다른 글
2024-04-18 (1) | 2024.04.18 |
---|---|
2024-04-17 (0) | 2024.04.17 |
2024-04-15 (0) | 2024.04.15 |
2024-04-12 (0) | 2024.04.12 |
2024-04-11 (0) | 2024.04.11 |