14일차

Suhyeon Lee·2024년 10월 21일
0

CodeKata

SQL

64. 헤비 유저가 소유한 장소

  • 작성 쿼리
WITH temp AS (
  SELECT
    host_id
    , count(*) AS heavy_cnt
  FROM
    places
  GROUP BY
    host_id  
)
SELECT
  p.id
  , p.name
  , p.host_id
FROM
  places p
  JOIN temp t
  ON p.host_id = t.host_id
WHERE
  heavy_cnt >= 2
ORDER BY
  id
;

참고할 만한 다른 풀이

  • 서브쿼리
SELECT
  ID
  , NAME
  , P.HOST_ID
FROM 
  PLACES P 
  JOIN (
    SELECT 
      HOST_ID
      , COUNT(*) COUNT
    FROM
      PLACES
    GROUP BY
      HOST_ID 
    HAVING 
      COUNT >= 2
  ) H
  ON P.HOST_ID = H.HOST_ID
ORDER BY 1
;
  • IN
# 1번
WITH temp AS (
  SELECT
    host_id
    , count(*) cnt 
  FROM
    places
  GROUP BY
    host_id
  HAVING
    cnt >= 2
)

SELECT
  *
FROM
  places 
WHERE
  host_id IN (
    SELECT
      host_id
    FROM
      temp
  )
order by 1
;

# 2번
SELECT 
  *
FROM
  places
WHERE
  host_id IN (
    SELECT
      host_id
    FROM
      places
    GROUP BY
      host_id
    HAVING
      COUNT(host_id) >= 2
  )
;

65. 우유와 요거트가 담긴 장바구니

  • 작성 쿼리
SELECT
  cart_id
FROM
  cart_products
GROUP BY
  cart_id
HAVING
  GROUP_CONCAT(name) LIKE '%Milk%'
  AND GROUP_CONCAT(name) LIKE '%Yogurt%'
ORDER BY
  cart_id
;

REGEXP로 AND를 한 번에 쓸 수는 없나?

참고할 만한 다른 풀이

SELECT 
  M.CART_ID 
FROM (
  SELECT
    CART_ID 
  FROM
    CART_PRODUCTS
  WHERE
    NAME = 'Milk'
  ) M 
  JOIN (
    SELECT
      CART_ID
    FROM
      CART_PRODUCTS
    WHERE
      NAME = 'Yogurt' ) Y
  ON M.CART_ID = Y.CART_ID 
ORDER BY 1
;
SELECT CART_ID
    FROM (SELECT CART_ID
            FROM CART_PRODUCTS
            GROUP BY CART_ID, NAME
            HAVING NAME REGEXP 'Milk|Yogurt') AS S
    GROUP BY CART_ID
      HAVING COUNT(CART_ID) = 2
SELECT cart_id
FROM   cart_products
WHERE  name = 'Milk'
        OR name = 'Yogurt'
GROUP  BY cart_id
HAVING Count(DISTINCT( name )) = 2
ORDER  BY 1
SELECT CART_ID

FROM (SELECT CART_ID, NAME
FROM CART_PRODUCTS
WHERE NAME = 'Milk'

UNION

SELECT CART_ID, NAME
FROM CART_PRODUCTS
WHERE NAME = 'Yogurt') AS A

GROUP BY 1
HAVING COUNT(CART_ID) >= 2
ORDER BY 1
;

Python

17. 자연수 뒤집어 배열로 만들기

  • 작성 코드
def solution(n):
    return [int(i) for i in reversed(str(n))]

참고할 만한 다른 풀이

def digit_reverse(n):
    return list(map(int, reversed(str(n))))
def digit_reverse(n):
    return [int(i) for i in str(n)][::-1]
  • 입력 정수를 문자열로 변환 → 해당 문자를 반복(for)문으로 각 문자를 다시 정수로 변환해서 list형태로 저장 → list에 있는 요소의 순서를 반대로 뒤집고 반전된 목록을 결과로 반환
def digit_reverse(n):
    a=[]
    while n>1:
        a.append(int(n%10))
        n/=10
    return a
def solution(n):
    return list(reversed([int(i) for i in list(str(n))]))
  • reversed는 내장 함수고, 순차적인 인덱스로 접근할 수 없기 때문에 list에 기본적으로 적합한 함수가 아님
  • 따라서 한 번에 함수로 지정은 못 하고, 아래와 같이 list()로 다시 묶어줘야 함(안 쓰면 오류 발생)

발제 확인

데이터 전처리 & 시각화

  • 데이터 전처리

    • 데이터 분석이나 컴퓨터 프로그램에서 사용할 수 있도록 데이터를 준비하는 과정
    • 데이터 준비 과정
      • 수집 → 정제 → 통합 → 축소 → 변환
    • 이번 강의에서는 과정을 배우는 것보다 각각의 데이터를 핸들링하는 방법을 익히는 것을 목표로 하기
    • 데이터 분석의 80%는 데이터 전처리, 20%가 분석
  • 데이터 분석의 기본 전제

    • GIGO(Garbage In, Garbage OUT)
      • 쓰레기를 넣으면 쓰레기가 나온다!
      • "데이터 분석을 마치 쓰레기를 황금으로 바꾸는 연금술과 같다고 생각할 수 있지만, 사실이 아닙니다. 쓰레기는 여전히 쓰레기이고, 황금은 황금입니다. 그러나 데이터 분석은 어떤 것이 황금일 가능성이 가장 높은지 알려줄 수 있습니다."
  • 데이터 시각화

    • 스포츠와 데이터 시각화가 만나면?
    • 복잡한 데이터를 간결하고 명확하게 표현하여 인사이트를 도출하고 의사소통 하는 데 사용
    • 비교
      • 데이터 포인트들 간의 차이점이나 유사점을 보여주고 싶을 때
    • 추세
      • 데이터의 시간에 따른 변화를 보여줄 때
    • 구성
      • 전체에서 각 부분이 어떤 비중을 차지하는지 보여주는 차트
    • 분포
      • 데이터가 어떤 범위 내에서 어떻게 분포하는지 보여주기 위한 시각화
    • 상관관계
      • 두 개 이상의 변수 간의 상관관계나 연결성을 파악
    • 흐름
      • 데이터가 시간이나 공간을 통해 어떻게 이동하고 변화하는지를 보여주기 위한 시각화
  • 학습 목적

    • Pandas를 활용해서 간단하게 데이터를 전처리 하는 방법을 학습
    • Matplotlib을 활용해서 데이터를 시각화 하는 방법을 학습
    • 데이터 분석가의 역할에 대해서 방향성을 생각
  • 학습 목표

    • Pandas 라이브러리를 활용해서 데이터를 전처리하는 방법을 이해
    • 데이터 시각화를 어떤 목적으로 해야할지를 이해하고 데이터 시각화 방법 습득
    • 데이터 분석가는 어떤 일을 하는지 알아보고 앞으로의 목표를 설정
  • 데이터의 목적은 결국 설득

    • 설득하기 위해서 데이터를 잘 전달해야 함
    • 잘 전달하기 위한 방법 중 하나가 ‘시각화’
    • 데이터를 통해 무엇을 해야할지를 고민하기

QCC(Query Challenge Cycle, 쿼리 챌린지 사이클)

  • 실제 쿼리 테스트에 대비할 수 있도록 구성된 프로그램

    • 월요일부터 목요일까지는 코드카타를 통해 주중 동안 쿼리 문제를 해결하는 훈련을 진행
    • 금요일에는 그동안 쌓은 실력을 바탕으로 쿼리 테스트를 진행
  • 1회차 쿼리 테스트 일정 및 안내

    • 10/25 (금) 11:00 ~ 12:00 (1시간)
      • 쿼리 테스트 해설 : 14:00 ~
    • 진행 방식 : 시작 전 공개 예정
    • 1회차는 데이터를 제공하며 2가지 문제를 해결할 예정

4주차 학습 일정

날짜내용
10/21데이터 전처리 & 시각화 강의 수강 + 실습 예제 풀이
Python 라이브 세션 - 1회차
10/22데이터 전처리 & 시각화 강의 수강 + 실습 예제 풀이
10/23데이터 전처리 & 시각화 실습 예제 풀이
Python 개인 과제 해설
Python 라이브 세션 - 2회차
10/24강의 및 세션 복습
쿼리 테스트 준비
10/25QCC - 1회차
Python 라이브 세션 - 3회차

데이터 전처리 & 시각화

1주차
2주차
3주차

예제로 익히는 Python

1회차

profile
2 B R 0 2 B

0개의 댓글