내일배움캠프

데이터 분석 트랙 13일차 (25.03.06.) TIL

jjaio8986 2025. 3. 6. 21:11

[목차]

  •  (SQL) Window Function, With 함수
  • 아티클 정리 - “기획자도 파이썬을 배워야 하나요? 실전편”

  • (SQL) Window Function, With 함수, 추가적인 함수들

1. Window Function

 1.1. 정의 : 행과 행사이의 관계를 알기 쉽게 표현하기 위해 사용되는 기능으로 불러오는 테이블의 모든 컬럼을 유지하여 연산할 때 주로 사용한다. [최종적으로 이 연산을 통해 새로운 컬럼이 만들어진다!]

 1.2. 역할 : Window 함수를 통해 순위’, ‘집’, ‘평균’, ‘행의 위치’, 등을 조작할 수 있다.

 1.3. 특징 :  Window 함수 중에서 집계함수 외에 Group by와 병행해 사용할 수 없다.

    [ group by는 기준 컬럼을 중심으로 여러 컬럼의 데이터를 압축한다. 그렇다보니 다른 컬럼의 데이터를 잃거나 차후 연산에서 다른 컬럼의 데이터를 사용하기 어려워진다. 윈도우함수는 컬럼의 데이터를 잃지 않으면서 기준 컬럼을 통해 행 사이의 데이터 연산을 수행할 수 있다.]

 1.4. 종류

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

 1.5. 일반적인 형태

 - “Window 함수() OVER(PARTITION BY 컬럼1 ORDER BY 컬럼2 ASC|DESC)”

["컬럼1을 기준("GROUP BY")으로 컬럼2의 대상을 함수를 적용하여 오름차순|내림차순 정렬한다."]

- 여기서 “PARTITION BY 컬럼1”은 생략이 가능하며 이 경우엔 전체 데이터에 대해서 컬럼 2의 데이터의 오름 혹은 내림 차순으로 함수 내용을 수행한다의 의미가 된다.

- Window 함수 뒤 소괄호와 OVER()는 문법요소 반드시 있어야한다. Window 함수 뒤 소괄호에는 컬럼명이 들어가나 안쓰고 사용이 가능하다.

 1.6. 함수별 의미 및 특징

  A. 순위

   a. “RANK” [RANK() OVER(PARTITION BY 컬럼1 ORDER BY 컬럼2]

    - “PARTITION BY 컬럼1”을 사용해 컬럼1의 순위 혹은 사용하지 않고 전체 데이터의 순위를 구하는 함수이다.

    - 동일 값에 대해서는 같은 순위를 부여한다. [이때 그 다음에 매겨지는 순위는 중복되는 순위를 제외한 순위가 부여된다. ex. 1, 2, 2, 4, 4, ......]

 

   b. "DENSE_RANK" [DENSE_RANK() OVER(PARTITION BY 컬럼1 ORDER BY 컬럼2]

    - 전체 혹은 특정 컬럼의 순위를 구하는 Window 함수!

    - 동일 값에 대해서는 같은 순위가 부여된다. [이때 다음에 매겨지는 순위는 RANK와 달리 순서대로 부여된다. ex. 1, 2, 2, 2, 3, 3, .....]

 

   c. “ROW_NUMBER” [ROW_NUMBER() OVER(PARTITION BY 컬럼1 ORDER BY 컬럼2]

    - 전체 혹은 특정 컬럼의 순위를 구하는 Window 함수이다.

    - 동일 값에 대해서 서로 다른! 고유한! 순위를 (랜덤하게)부여한다.

    [로우넘버 함수는 특히 자주 사용되는데, 랭킹이나 댄스랭킹과는 달리 순위가 겹치면 안 되며, 숫자가 겹치면 안되는 경우에 사용된다. “피해보상금을 피해 순위별로 주어야 할 경우!]

 

cf) ROW_NUMBER로 부여하는 순위와 limit, order by를 사용한 순위는 차이가 있다. [파티션별로 순위를 부여하는 그룹핑 요소]

 

  B. 순서

   a. "LAG" [LAG(컬럼1, 숫자) OVER(PARTITION BY 컬럼2 ORDER BY 컬럼3) AS 컬럼X]

    - Window 함수 수행을 통해서 새롭게 만들어지는 컬럼XN번째 행의 값을 컬럼1(N-숫자)번째의 행으로부터 가져와 파티션 컬럼2를 기준으로 구분하고 컬럼3을 기준으로 오름차순으로 정렬한다는 의미의 함수. [, Window 함수의 소괄호 숫자가 1이면 새롭게 만들어 지는 컬럼X의 첫 행은 컬럼10번째 행의 값을 가져와야 한다. 하지만 값이 없으니 Null]

    - 숫자의 기본값은 1이며 최대 3까지 이다. 숫자부분은 생략이 가능하다

    - 가져올 컬럼의 행에 해당하는 값이 없으면 Null 혹은 Null대체값을 반환한다.

    - Null 대체 값은 숫자 부분 이후에 적는다.

 

   b. "LEAD" [LEAD(컬럼1, 숫자) OVER(PARTITION BY 컬럼2 ORDER BY 컬럼3) AS 컬럼X]

    - Window 함수 수행을 통해서 새롭게 만들어지는 컬럼XN번째 행의 값을 컬럼1(N+숫자)번째의 행으로부터 가져와 파티션 컬럼2를 기준으로 구분하고 컬럼3을 기준으로 오름차순으로 정렬한다는 의미의 함수. [, Window 함수의 소괄호 숫자가 1이면 새롭게 만들어 지는 컬럼X의 첫 행은 컬럼12번째 행의 값을 가져와야 한다. 가져올 값이 없는 행은 Null 혹은 대체값을 반환한다.]

    - 숫자의 기본값은 1이며 최대 3까지 이다. 숫자부분은 생략이 가능하다

    - 가져올 컬럼의 행에 해당하는 값이 없으면 Null 혹은 Null대체값을 반환한다.

    - Null 대체 값은 숫자 부분 이후에 적는다.

 

cf) laglead는 상당히 유용하며 현업에 많이 쓰이는 기능이다.

 

   c. "FIRST_VALUE" [FIRST_VALUE(컬럼1) OVER(PARTITION BY 컬럼2 ORDER BY 컬럼3)]

    - 파티션[컬럼2 혹 전체 데이터] 별로 가장 먼저 나온 값을 반환, 출력한다.

    - MIN함수를 쓰는 것과 결과가 동일!

   d. "LAST_VALUE" [LAST_VALUE(컬럼1) OVER(PARTITION BY 컬럼2 ORDER BY 컬럼3)]

    - 파티션[컬럼2 혹 전체 데이터] 별로 가장 나중에 나온 값을 반환, 출력한다.

    - MAX함수를 쓰는 것과 결과가 동일!

 

  C. 비율

   a. "PERCENT_RANK" [PERCENT_RANK() OVER(PARTITION BY 컬럼1 ORDER BY 컬럼2]

    - 파티션[컬럼1 혹은 전체 데이터]별로 백분율을 출력한다.

    - 백분율은 최대 1 최소 0 이며, “(파티션 내 순위-1) / (파티션 내 전체 행 개수 -1)”로 계산한다. [순위는 RANK의 계산방식을 따른다. 사용 영역 예시 : 한 학년의 반을 기준으로 성적 상위 백분율 구하기]

    - 파이썬으로도 구현이 가능하다.

 

cf)중요! 집계함수도 그룹바이가 아닌 윈도우 펑션으로서 사용 가능하다!

 

2. “WITH” [“WITH 임시 테이블명1 AS 내용1, 임시 테이블명2 AS 내용2, ....”의 형식으로 별도로 닫는 구문이 없이 내용을 적은 뒤 내용을 소괄호로 묶으면 끝난다.]

2.1. 정의 : SQL에서 사용하는 임시테이블[파이썬의 def()와 유사하다.]

2.1. 특징 및 장점

- 하나의 구문에서 여러개의 위드문 선언이 가능하다!

- 복잡한 연산을 미리 위드문에 저장할 수 있다!

- 컴퓨터 계산을 빠르게 하고 분석가들의 쿼리 가독성을 높인다.

- ( ; )으로 구분된 부분에서 WITH구문의 저장이 끝나 새로 저장해야 한다???

 

3. “STRING" 함수

 3.1. CONCAT(‘붙일 문자’, ‘스페이스바’, 숫자형 데이터 컬럼명) : 문자열 병합에 사용한다.

 3.2. SUBSTR(‘문자열’, 자르기 시작하는 위치, 길이) : 문자열을 자를 때 사용한다.

 3.3. SUBSTR_INDEX('문자!문자열‘. ’!(=글자 구분 지점 흔히 특수기호사용), ‘숫자‘) : 문자열을 특정 지점을 기준으로 숫자에 해당하는 글자만 출력한다. [문자]

cf) 서브스트링 인덱스가 파이썬과 유사함 그런데 sql은 순서가 1, 2, 3, ..... 으로 나간다!(0부터 카운팅 안한다!)


  • 아티클 정리 - “기획자도 파이썬을 배워야 하나요? 실전편”

https://yozm.wishket.com/magazine/detail/1365/

 

기획자도 파이썬을 배워야 하나요? - 2실전편 | 요즘IT

PM이라면 데이터 분석에 꽤 많은 시간을 쏟으실 거예요. 오늘은 파이썬이 PM의 빠른 업무에 도움이 되는 이유를, 제가 실무에서 수행했던 데이터 업무로 예를 들어 엑셀과 1:1로 비교해볼게요.

yozm.wishket.com

[목차]

1. 아티클 요약 및 주요 포인트

2. 아티클 핵심 개념 및 용어

3. 인사이트

 

1.아티클 요약 및 주요 포인트

 - 요약 : 파이썬 자체가 갖는 장점에도 불구하고, 기획자인 PM익숙하고, 다양하게 활용 가능한엑셀을 포기하는 이유는 무엇인가? 파이썬의 효용성은 무엇인가? 실전에서의 파이썬은 엑셀과 대비되어 분석 목표 도출 과정의 간소화”, “분석상의 오류 수정의 용이성”, “압도적인 컴퓨터 연산 속도”, “효율적이고, 신속한 테이블 머지[병합]”의 이점을 보여준다.

그러한 효용성에도 불구하고 파이썬을 배우기 위한 시간(기회비용)투자에 의문이 들 수 있다. 하지만 그 필요 수준은 기초에 불과하고, 습득 과정에서 구성해 볼 수 있는 데이터 분석 코드들을 따로 저장하여 실전에 언제든 활용해볼 수 있기에 파이썬 습득에 있어 의문점은 없어 보인다.

 - 주요 포인트 : 엑셀 대비 파이썬이 갖는 장점들

 

2. 아티클 핵심 개념 및 용어

 2.1. 핵심개념 : PM, 파이썬, 엑셀, 데이터 분석

 2.2.용어정리

  - PM(Product Manager) : 제품의 전략, 로드맵, 개발에서 출시까지의 전체 프로세스를 관리

  - unique : (현 아티클 관점에서) 분석하고자 하는 목표에 해당하는 데이터의 고윳값을 의미

 - VLOOKUP 함수 : [엑셀] 참조 범위 내에서 가장 왼쪽에 있는 인수를 기준으로 동일한 행에 위치한 데이터를 검색해 주는 함수

 - pandas : 파이썬에서 사용하는 데이터 분석 라이브러리

 

3. 개인 인사이트

  - 기획자의 시각에서도 엑셀의 친숙함보다 파이썬의 유용성이 앞선다고 생각한다는 점에서 이미 이루어졌을지 잘 모르겠지만, 파이썬이 현업의 엑셀의 자리를 대체하며 점차 일반화, 대중화되겠다는 생각이 들었다.

 - 현재 배우는 SQL 코드나 파이썬 코드를 정리해 필요한 지표를 구하기 위한 코드를 만들고, 모아둬야겠다는 생각이 들었다..