11.20(수) 사전캠프 6일째 기록

Laña·2024년 11월 20일
0
post-thumbnail

<아티클 스터디>
'현재까지 진행한 데이터 분석과 관련된 아티클 중에서 이번이 가장 이해하고 정리하는 것이 제일 어려웠다...'

  • 데이터 분석가란 정확한 지표를 가지고 전체 상황을 파악해야 하고, 올바른 의사결정을 도와주는 일을 한다. 하지만 늘 데이터 분석이 명확한 것은 아니고, 데이터 분석을 통한 올바른 의사결정을 지속적으로 하다보면 데이터 분석에 기반한 의사결정이 아니더라도 충분히 좋은 결과가 나올 수있다.
    전사적인 차원에서도 데이터를 쉽게 활용하게 하는 것도 중요하지만, 데이터 분석가도 한 곳에 머물지 않고 지속적으로 도메인에 관심을 가지거나 다양한 시각으로 지표를 설정할 수 있어야 한다.
    +데이터 분석가가 되어보니 중요한 것들

<오늘 배운 것 요약>

  • SQL 5주차
    조회한 데이터에 아무 값이 없을때?
    테이블에 잘못된 값이 들어있거나, 값이 없는 경우!
    방법
    1. 없는 값 제외해주기 (NULL값 제외)
    Mysql - 사용할 수 없는 값 -> 해당 값 연산 제외 (0으로 간주)
    기본 구조
    Where 컬럼명 is not null
    2. 다른 값 대신 사용하기
    - 다른 값이 있을 때 조건문 이용하기
    if(컬럼명>조건, 컬럼명, 대체값)
    - null 값일 때
    coalesce(컬럼명,대체값)

    조회한 데이터가 상식적이지 않은 값을 가지고 있다면?
    예) 음식 주문 고객은 20세 이상 성인이 많음 BUT, 데이터에서는 2세와 같이 이상한 값이 있음
    예) 결제 일자 최근것 아니라 1970년대 ..?
    방법: 조건문으로 값의 범위 지정하기
    - 조건문으로 상식적 수준 안에서 가장 큰 값, 가장 작은 값 범위 지정

    SQL로 Pivot Table 만들기
    Pivot table?
    2개 이상의 기준으로 데이터 집계 -> 보기 쉽게 배열하여 보여주는 것 의미
    기본 구조

    기본 구조 max()
    select 첫 기준이 되는 행 컬럼명,
    max() 조건1,
    max(
    ) 조건2
    from
    ( - subquery
    -
    ) a
    group by 컬럼명
    order by 정렬 기준

    Window Function - RANK,SUM
    Window Function??
    그룹을 나누어 그룹 내 연산을 쉽게 만들어줌
    => 여러범늬 연산 대신 자체적으로 제공해주는 Window Function 이용
    기본구조
    Window_funcion(argument) over (partition by 그룹 기준 컬럼 order by 정렬기준)

    sum,avg 같은 거 사용 가능 대신 over(~)는 무조건 작성!

    • RANK(N번째까지의 대상을 조회하고 싶을 때)
      rank() over(partition by 그룹 기준 컬럼 order by 정렬기준)
    • SUM(전체에서 차지하는 비율, 누적합을 구할때)
      sum(컬럼명) over(partition by 그룹 기준 컬럼 (+order by 정렬기준))날짜 포맷과 조건까지 (포맷 함수)
      - 날짜 데이터의 여러 포맷
      yyyy-mm-dd 형식 컬럼 -> date type 변경
      select date(date) date_type,
      date
      from payments
      date type -> date_format 년,월,일,주 로 조회하기
      select date(date) date_type,
      a. 년(Y-4자리)/(y-2자리)
      date_format(date(date), '%Y') "년"
      b. 월(M,m)
      date_format(date(date), '%m') "월"
      c. 일(d,e)
      date_format(date(date), '%d') "일"
      d. 요일(w)
      date_format(date(date), '%w') "요일"

      이때 요일은 0(일요일)~6(토요일)

  • 5주차 숙제
    문제: 음식 타입별, 연령별 주문건수 pivot view 만들기 (연령은 10~59세 사이)
    <지시사항>

  1. SQL 기본구조 작성하기
  2. Pivot view 를 만들기 위해 필요한 데이터 가공하기
  3. Pivot view 문법에 맞추어 수정하기
select cuisine_type,
       max(if(age=10, order_count, 0)) "10대",
       max(if(age=20, order_count, 0)) "20대",
       max(if(age=30, order_count, 0)) "30대",
       max(if(age=40, order_count, 0)) "40대",
       max(if(age=50, order_count, 0)) "50대"
from 
(
select a.cuisine_type,
       case when age between 10 and 19 then 10
            when age between 20 and 29 then 20
            when age between 30 and 39 then 30
            when age between 40 and 49 then 40
            when age between 50 and 59 then 50 end age,
       count(1) order_count
from food_orders a inner join customers b on a.customer_id=b.customer_id
where age between 10 and 59
group by 1, 2
) t
group by 1
profile
SQL, Python, Code Kata

0개의 댓글