2024-10-13

Suhyeon Lee·2024년 10월 13일
0

CodeKata

SQL

51. 없어진 기록 찾기

  • 작성한 쿼리
SELECT
  ao.animal_id
  , ao.name
FROM
  animal_outs ao
  LEFT JOIN animal_ins ai
  ON ao.animal_id = ai.animal_id
  WHERE
    ai.animal_id IS NULL
  ORDER BY
    ao.animal_id
  ;
  • JOIN은 데이터가 클 때 큰 트랜잭션을 요구하기 때문에 JOIN을 최대한 쓰지 않으면서 서브쿼리로 조건을 걸어주는 방식으로 쿼리문을 짜는 곳도 많다고 한다.
    • 트랜잭션(Transaction):데이터베이스의 상태를 변환시키는 하나의 논리적 기능 (예 : Update, Delete)을 수행하기 위한 작업의 단위 혹은 일련의 연산
    • Oracle에서는 MINUS를 써 아래와 같이 수행 가능하다고 함
      SELECT B.ANIMAL_ID AS ANIMAL_ID, B.NAME AS NAME FROM ANIMAL_OUTS B
      MINUS
      SELECT A.ANIMAL_ID AS ANIMAL_ID, A.NAME AS NAME FROM ANIMAL_INS A
      ORDER BY ANIMAL_ID
    • 하지만 Mysql에서는 MINUS를 사용할 수 없음
      • 대신 NOT IN을 통해 같은 쿼리문을 만들 수 있다.
SELECT
  animal_id
  , name
FROM
  animal_outs
WHERE
  animal_id
  NOT IN (
    SELECT
      animal_id
    FROM
      animal_ins
  )
ORDER BY
  animal_id
;

→ WHERE절에서 NOT IN의 값으로 (animal_id, name) NOT IN과 같이 2개 이상의 값에 대해서 넣지 않은 이유:
animal_id가 A395451인 개가 animal_out에서는 이름이 Logan인데 animal_ins에서는 Rogan임

select ANIMAL_ID, name
from ANIMAL_OUTS o
where not exists (select 1 from ANIMAL_INS where animal_id = o.animal_id)
order by ANIMAL_ID
;

Python

9. 짝수의 합

  • 작성한 코드
def solution(n):
	return 2*(((n//2)+1)*(n//2))/2

참조: 다른 풀이

def solution(n):
	return sum(range(2, n+1, 2))
# range는 이미 iterable 객체이기 때문에 list comprehension으로 다시 풀어 쓸([i for i in range(2, n + 1, 2)]) 필요 없이 바로 sum 함수에 넣을 수 있습니다.

# 유사한 다른 방법
def solution(n):
     return sum([i if i%2==0 else 0 for i in range(2,n+1)])
def solution(n):
    answer = 0
    for i in range(2, n+1, 2):
        answer += i
    return answer

# 유사한 다른 방법
def solution(n):
    answer = 0
    for i in range(1, n + 1):
        if i % 2 == 0:
            answer += i
    return answer
def solution(n):
    return sum(filter(lambda v: v % 2 == 0, [_ for _ in range(n+1)]))

팀 과제 피드백: 프로젝트 진행 순서

  1. 문제 정의:
    분석의 목적을 명확히 하고, 해결하고자 하는 문제를 정의합니다.
    예를 들어, 매출 감소의 원인을 찾거나 고객 만족도를 평가하는 등의 목표를 설정합니다.

  2. 데이터 수집:
    필요한 데이터를 수집합니다. 데이터는 내부 시스템, 설문조사, 웹 스크래핑, API 등 다양한 출처에서 얻을 수 있습니다.
    수집할 데이터의 종류(정량적, 정성적)를 결정합니다.

  3. 데이터 전처리:
    수집한 데이터의 품질을 높이기 위한 작업입니다.
    결측치 처리, 이상치 제거, 데이터 형식 변환, 데이터 정규화 등을 포함합니다.
    또한, 필요한 경우 데이터 변환(예: 범주형 변수를 더미 변수로 변환)도 진행합니다.

  4. 탐색적 데이터 분석 (EDA):
    데이터의 구조와 패턴을 이해하기 위한 과정입니다.
    시각화 도구(예: 히스토그램, 박스 플롯, 산점도)를 사용하여 데이터를 시각적으로 탐색하고, 통계적 방법을 활용하여 데이터의 특성을 분석합니다.

  5. 모델링:
    분석 목표에 맞는 모델을 선택하고, 데이터를 사용하여 모델을 구축합니다.
    회귀 분석, 분류 알고리즘, 군집화 등 다양한 기계 학습 알고리즘을 적용할 수 있습니다.

  6. 모델 평가:
    구축한 모델의 성능을 평가합니다. 이를 위해 교차 검증, 정확도, 정밀도, 재현율 등의 지표를 사용합니다.
    모델이 실제 데이터에 얼마나 잘 적합되는지 확인합니다.

  7. 결과 해석:
    모델의 결과를 해석하고, 비즈니스적 관점에서 의미를 도출합니다.
    분석 결과를 기반으로 의사결정에 필요한 인사이트를 제공합니다.

  8. 보고 및 시각화:
    분석 결과를 이해하기 쉽게 시각화하고, 관련자들에게 전달합니다.
    대시보드, 프레젠테이션, 리포트 등을 통해 결과를 공유합니다.

  9. 모니터링 및 피드백:
    모델을 실제 환경에서 적용한 후 지속적으로 성능을 모니터링하고, 필요시 수정합니다.
    새로운 데이터나 변화된 환경에 따라 모델을 업데이트합니다.

profile
2 B R 0 2 B

0개의 댓글