Advented of SQL 2024 : 펭귄 날개와 몸무게의 상관 계수 (DAY 18)

Hyeon·2024년 12월 17일

SQL 문제 풀이

목록 보기
55/61
post-thumbnail

문제 탐구

날개 길이와 몸무게의 피어슨 상관 계수(Pearson Correlation Coefficient)를 구하는 쿼리를 작성해주세요.

  • 다만, 펭귄 종에 따라 상관 관계의 정도가 다름

  • 쿼리 결과에는 아래 컬럼이 포함되어 있어야 하고, 상관 계수는 소수점 아래 넷째 자리에서 반올림 해 셋째 자리까지 출력

species: 펭귄 종
corr: 날개 길이와 몸무게의 상관 계수

정답 코드

with cte_1 as (select species,avg(flipper_length_mm) as avg_length, avg(body_mass_g) as avg_mass 
from penguins 
where flipper_length_mm is not null and body_mass_g is not null
group by species
),

cte_2 as (select p.species, flipper_length_mm, avg_length,body_mass_g,avg_mass
from penguins p join cte_1 c on p.species = c.species
where flipper_length_mm is not null and body_mass_g is not null)

-- 종별로 상관계수 다르게 진행
select
species,round(sum((flipper_length_mm - avg_length)*(body_mass_g - avg_mass))/ sqrt(sum(power((flipper_length_mm - avg_length),2) )* sum(power((body_mass_g - avg_mass),2)) ),3) as corr
FROM
cte_2
group by species;

실행 결과

주의할 점

1.종별로 상관계수를 구해야한다.
2.길이나 몸무게에 결측값 있으므로 제거하여 평균값 구하고, 상관계수 구할 때도 마찬가지로 결측값 제거한채로 진행하기
3.상관계수 공식

  • sqlite는 corr 적용이 안되는 관계로, power(), sqrt()함수를 사용해서 각 값 곱들의 합계를 구해야함
    이때 species 기준으로 나눠야함 group by species 필수

0개의 댓글