[25.03.06]본캠프 13일차 코드타카+윈도우함수+파이썬종합+리터러씨 완강

김명서·2025년 3월 6일
3

TIL_sparta

목록 보기
33/60
post-thumbnail

⌨코드카타

  1. 이건 문제에서 준 예시를 보고, , group by product_id가 아닌걸 알 수 있었고 대체로 추출해야하는 값이 같으며 수직결합이므로 union을 써야할 것 같다는 생각이 들었다. 다만, 오프라인의 널값은 어떻게 처리하지..? 가 나름의 관건이었다..! sales_amount 가 있어서 불러오기만 하면 돼서 서브쿼리를 쓸 필요도 없었다.

해결원리

select null as 컬럼명 

적용한 방법

SELECT date_format(sales_date,'%Y-%m-%d') as sales_date, product_id,
       null as user_id,sales_amount

이렇게 처리해줬다!

복잡한 서브쿼리 다 맞추고 유니온 틀리지 말자 ..!
Union(all) 없는 컬럼에 대해 Null 처리
🔺참고한 링크
.
.
71.조건에 부합하는 중고거래 댓글 조회하기
어려운 문제 아니었다 !
.
.



📢SQL라이브세션-윈도우함수

#윈도우함수의 기본문법

SELECT window Function(함수_적용_열) over (partition by 컬럼 order by 컬럼)
FROM 테이블명
#경우에 따라 `partition by` 그룹열 생략가능

기존 쿼리에서는 select 에서 불러온 컬럼(집계 제외)을 group by에 써줘야할 때가 있었다. 이렇게 되면(group by를 사용하면) 기존의 상세 데이터들을 잃어버리지만 partition by는 기존 행의 세세한 정보들이 사라지지 않고 그대로 유지됨.

쿼리의 작동순서를 생각해보면, 그룹화->h->select이기 때문에 그룹화를 하면서 기존의 상세 데이터들을 잃게 된다. (행이 집약되기 때문에 세부 데이터를 볼 수 없다)

  • Group by 구문은 null값이 존재하는 Row는 제외하고 산출, where절 먼저 수행 후 실행(그룹별집계)
    :또한 Group by 뒤에 오는 속성명은 반드시 Select문의 찾는 속성 중에 존재해야함
    그러다 보니.. group by는
    :윈도우 함수와 절대 함께 사용할 수 없음

🙄💭partition by는?

select절에서 사용된다. 따라서 group by 와는 달리 기존 행의 세세한 정보들은 사라지지 않고 그대로 유지된다.
=> 윈도우 함수를 사용했을 경우, 기존 데이터에 집계된 값이 추가되어 나나탄다.

.
.

종류: 총 4가지

종류함수
순위RANK, DENSE_RANK, ROW_NUMBER
집계SUM, MAX, MIN, AVG, COUNT
순서FIRST_VALUE, LAST_VALUE, LAG, LEAD
비율RATIO_TO_REPROT, PERCENT_RANK, CUME_DIST, NTILE

.

📌순위


1) ROW_NUMBER() : 가장많이 사용 (동일값한 값이어도 고유한 순위 부여)
문법: ROW_NUMBER() OVER(PARTITION BY 컬럼1 ORDER BY 컬럼2)

# 윈도우 함수 - ROW_NUMBER 함수 예제
select *,
ROW_NUMBER() over(partition by JOB order by SALARY)
from basic.window1 

2) RANK() : 문법: RANK() OVER(PARTITION BY 컬럼1 ORDER BY 컬럼2)

# 윈도우 함수 - RANK 함수 예제 
select *,
rank() over(partition by JOB order by SALARY)
from basic.window1 

3) DENSE_RANK() : 문법: DENSE_RANK() OVER(PARTITION BY 컬럼1 ORDER BY 컬럼2)

# 윈도우 함수 - DENSE_RANK 함수 예제
select *,
dense_rank() over(partition by JOB order by SALARY)
from basic.window1 

.
.

📌순서

LAG

나름 외운 tip,, ^^ 아 걸려 -> 렉걸려서 일이 밀림 n칸 미루기

LAG(컬럼1, 숫자) OVER (PARTITION BY 컬럼2 ORDER BY 컬럼3) 
#숫자를 별도로 입력하지 않으면 1이 기본값.
#partition by는 필요 없으면 안써도 됨.

#예시
수업에서 말씀해주신 예시가 100% 이해되지 않아서 더 찾아보며 공부했다.

아 ! 이럴 때 유용해서 실무에서 자주 사용하는구나 !

LEAD

내가 리드할게(당겨오기) n칸 당기기

   LEAD(컬럼1, 숫자) OVER (PARTITION BY 컬럼2 ORDER BY 컬럼3) 
   #숫자를 별도로 입력하지 않으면 1이 기본값.
  #partition by는 필요 없으면 안써도 됨.
SELECT Id
    , RecordDate  -- ORDER 열
    , Temperature  -- 대상 열
 
    -- 미루기
    , LAG(Temperature) OVER (ORDER BY RecordDate) AS 'lag'
 
    -- 당기기
    , LEAD(Temperature) OVER (ORDER BY RecordDate) AS 'lead'
 
FROM table


LAG,LEAD참고링크

year이랑 date니까 이해가 잘된다. (노션자료는 prev_sal을 불러온 이유가 뭔지, 무슨 의미를 가지는지 , 뭐랑 비교하고자 하는지.. 잘 모르겠다.)

📌비율

파티션(구간)별로 백분율을 출력해준다.
문법: PERCENT_RANK() OVER (PARTITION BY 컬럼1 ORDER BY 컬럼2)
💡계산방식: (파티션 내 순위 - 1) / (파티션 내 전체 행 개수 - 1)

  • 순위는 RANK 함수 기반입니다.
# 윈도우 함수 - PERCENT_RANK 함수 예제
select *
, PERCENT_RANK() OVER (partition by JOB order BY SALARY)
from basic.window1 


계산방식을 생각해보면, 6~9행이 왜 저렇게 나오는지 알 수 있다.
기존 rank 1,1,3,3
계산 => 0/3, 0/3, 2/3, 2/3


📌with

:SQL 구문에서 사용되는 임시테이블(가상테이블)
✅하나의 테이블이 여러번 필요하다면?
| 문법 |

WITH 임시테이블명 AS
(    SELECT 컬럼1, 컬럼2, ..
     FROM 테이블명
 )
SELECT 임시테이블에서 불러온 컬럼 중 필요한 컬럼 
FROM 임시테이블명 

✔️ 하나의 SQL 구문에서 여러개의 WITH 문 선언 가능

✔️ 하나의 테이블에 대한 여러 조회가 필요한 경우, WITH절 사용으로 1회 조회 및 선언하게 되어 그 가독성 및 쿼리성능이 높음

with는 ,, 아직 한번도 사용한 적 없는데, 사용하면서 더 숙지해야할 듯하다 ..! 설명글만보고는 확 와닿지 않음 ..!!!

.
.
그리고,

📌string 함수

concat 문자열 병합
substring 문자열 자르기
substring_index 문자열을 특정 구분기호를 통해 출력할 때 사용
reverse 문자열 뒤집기

📌Math 함수

abs 절댓값 출력
round 반올림
ceiling 소수점 올림 출력
floor 소수점 내림 출력
truncate 소수점 이하 자릿수에서 버림

📌날짜함수

now 현재 시간+날짜 출력
date_add 날짜에서 기준값 만큼 덧셈
date_sub 날짜에서 기준값 만큼 뺄셈
datediff 두 날짜 뺄셈
date_format 날짜를 형식에 맞게 출력

에 대해서도 배웠다. 🤗


아티클스터디

오늘의 아티클
기획자도 파이썬을 배워야 하나요? -1 이론편

  • 요약 : 기획자에게 필요한 데이터 분석 역량과 파이썬을 배워야하는 이유

  • 주요 포인트 :

💡기획자에게 필요한 데이터 분석 역량

기업에서 원하는 서비스 기획자는…
1) 데이터 추출 2)전처리 3)적절한 테스트 도구로 분석 4)결과해석
파이썬을 사용한다면, 전처리와 분석과정을 더 빠르게 수행 가능

💡기획자가 파이썬을 왜 배워야할까

1)
데이터 크기로 인한 엑셀 버벅거림 + 원하는 테스트 방식의 부재 = 파이썬이 필요하다

2)
데이터 전처리와 분석과정이 복잡하다면, 엑셀은 비효율적이다. 왜냐하면, 엑셀에는 분석 프로세스 자체를 저장하는 기능이 없다. 파이썬은 코드를 짜놓고 새로운 파일을 불러오기만 하면 된다.

3)
결측치 처리가 쉽다. 구글링을 통해 유용한 코드를 참고가능하다.

4)
파이썬은 분석 방법에 대한 자료가 많이 공유되고 있다.

5)
좋은 무료 툴이 있다.

6)
개발자와 소통비용을 줄일 수 있다.

7)
기획자로서 경쟁력을 갖출 수 있다.

💡 이상적인 서비스 기획자의 역량

  • 데이터를 추출하고 (SQL/크롤링)
  • 전처리하고 (SQL,파이썬,EDA)
  • 적절한 테스트 도구로 분석하고 (파이썬, 통계, 데이터 시각화)
  • 결과를 해석하는 역량 (데이터시각화)

💭인사이트

: 나 역시도 기획자가 되고싶어, 본캠프에 참여했다. 이제 sql 걷기 시작하고 파이썬 걸음마를 하고 있는 만큼, 얼른 성장하고싶은 마음이 커지는 아티클이었다. 이 시점에서 이 아티클을 읽은게 되게 좋다고 생각하는 이유는, 쿼리가 복잡하고 코드가 어려울 때.. 내가 지금 이걸 왜 해야하지 라는 생각이 들 때도 있는데, 다시한번 나의 목표와 캠프 참여 의지를 단단하게 해주는 것 같다. 확실히 파이썬의 장점을 이해한 것 같기에, 오늘부터 더 열심히 공부해보려한다!


파이썬 종합

함수 예시들을 강의 보면서 눈, 귀로 이해하는건 어렵지 않다.
코드카타 좀만 풀어보면 알겠지만,
뭘 조건문, 반복문, 정수변환 .. etc 뭘 갖다써야할지는 감이 잡힌다. 하지만 막상 검은화면에 글씨를 쓰려면 뭐부터..써야할지 막막했다.
그래서 오늘은 4주차 함수 강의는, 예시를 복붙이 아닌.. 직접 이해해가며 써보면서 들었다. 시간은 조금 걸렸지만, 결코 아까운 시간이 아니길 바라며.. !🙌
.
.

#함수기본배우기

반복문 in 은 범위 안에서 순회하게 하지만,
조거문 in은 이 안에 존재하는지 아닌지를 확인해준다.
존재하면 t, 존재하지 않으면 f

#함수심화

  • 전역변수 : 프로그램 전체에서 어디서든지 접근할 수 있어, 여러 함수에서 공통적으로 사용되는 값을 저장할 때 유용
  • 지역변수 : 특정 내부(ex.함수내부)에서만 접근 및 사용 가능하기에, 해당 함수에서만 유효하고 다른 함수나 코드 블록에서는 사용할 수 없다.
    *연예인 비유
    .

- 매개변수vs인수 차이

매개변수: 함수를 정의할 때 함수가 받아들이는 값을 지정하는 변수
인수: 함수를 호출할 때 함수에 전달되는 실제 값 (=전달인자,인자)
ex.

def greet(name):  # 여기서 'name'은 매개변수
    print("Hello, " + name + "!")
    
greet("Alice")  # 여기서 "Alice"는 인수

.

-위치 인수

2가지 유형: 위치 인수(positional argument)키워드 인수(keyword argument)

📌위치 인수(positional argument)
인수 값이 함수의 매개변수 순서대로 매핑됨.

📌키워드 인수(keyword argument)
인수를 순서대로 전달하는 대신, 특정 매개변수에 값을 할당하여 전달
⭐키워드 인수와 기본값을 함께 사용하기

def greet(name="Guest", age=25):
    print("이름:", name)
    print("나이:", age)

#키워드 인수를 사용하여 함수 호출
greet(name="Alice", age=30)

#일부 매개변수에만 키워드 인수 사용하여 호출
greet(name="Bob")

.

가변인수 [ args vs kwargs ]

나는 처음에 * 개수에 무슨 의미가 있나?🙄 하고 찾아보다가 좋은 링크를 발견했다.

args : (positional) arguments
✅args 앞에 붙는 * 가 여러 개의 인자를 묶어서 하나의 튜플로 묶어주고 이를 args 에 할당
.
kwargs: keyword arguments
✅kwargs 앞에 붙는 ** 가 여러 개의 키워드 아큐먼트들을 묶어서 하나의 딕셔너리로 묶어주고 이를 kwargs 에 할당

def 함수이름 (*args, **kwargs) 도 가능?

*args**kwargs 순서를 맞춰서(**kwargs 를 먼저 쓰면 안된다!) 쓰면 키워드 아규먼트가 나오기 전까지는 args 가 튜플로 먹고, 뒤 이어오는 키워드 아규먼트는 kwargs 가 딕셔너리로 먹는다.

🔻참고링크
파이썬-args-와-kwargs-가-뭐예요
.
.
.

4주차 quiz

 def mean(data):
  total=0
  for i in data:
      total += i
  return total/len(data)

data = [2, 4, 6, 8, 10]
print(mean(data))

맨처음에

 for i in data:
 total += i
 return total/len(data)

이 부분을 같은 루프 안에 써서, 0.4가 나왔다..!!
정확한 원리를 살펴보자면, for 루프에서 total 첫 값인 2가 누적합이 된다. 하지만 바로 return을 만나버려서 2/5= 0.4가 되어버렸던 것!!

💥루프 주의 !!



회고&느낀점

오늘도 열심히 til을 쓰게돼서...글 하나에 몰아쓰기는 무리라고 생각해서 일단 이 글도 게시한 뒤, 링크를 어제자 til 마지막에 첨부해야겠다~!
오늘 생각보다 윈도우함수를 복습하는데 시간을 많이 썼다. (사전캠프때 했던 기초강의때 윈도우함수는.. 그때 당시 너무 어려워서 gg쳤기 때문..)
벌써 내일이 금요일이라니! 월요일 하루 쉬었다고 시간이 정말 빠르게간다.
1)오늘 계획한 것들을 다 완료한 점과 2)체화한 내용으로 개념정리를 했다는 점이 뿌듯하게 느껴진다.
내일 나의 (저어ㅓㅓㅓㅓ기 밑에 잠재되어있는) 파이썬 흥미를 끌어올려주실 튜터님들의 기초파이썬 라이브세션이 기대가 된다. 반면,,오후에 있을 첫 QCC도 잘해내고 싶다 !!
오느른 여기서 끄읏 -😊💕

profile
경영학도의 데이터분석 성장기💥

0개의 댓글

관련 채용 정보