[proDS] 상관분석

Gammi·2022년 11월 25일
0

proDS

목록 보기
10/13

📚 상관 분석


  • 두 변수의 선형 관계 확인

  • 상관계수가 1에 가까울수록 선형관계가 강함

    -> 상관계수가 0일 경우 선형관계 없다고 봄!

    (그렇다고 두 개가 완전히 관계가 없는 건 아님! 그냥 선형관계만 아닌 거...)





✔ pandas - corr()


  • pandas 객체에서 상관계수를 출력해내는 메서드

  • 파라미터 값으로 pearson , kendall, spearman 줄 수 있음

    -> 기본값은 pearson

    -> 특별한 일 없으면 기본으로 출력해도 되는 것 같음!


  1. 기온, 체감온도, 상대습도, 총 자전거 대여 숫자의 상관관계를 분석하였을 때 가장 낮은 상관계수는 얼마인가?

⭐ 입력

import pandas as pd
# 상관계수는 pandas 객체의 메서드 활용하기 때문에
# 다른 라이브러리 안 불러와도 됨
bike = pd.read_csv("bike.csv")
bike[["temp", "atemp", "humidity", "casual"]].corr()
# 하면 상관계수 출력되는데
# 문제 보기에 소수점 둘째자리까지만 나와있어서
bike[["temp", "atemp", "humidity", "casual"]].corr().round(2)
# 나도 소수점 둘째자리까지 출력!

📌 출력

  • 여기서 제일 작은 숫자는 -0.35니까

    가장 낮은 상관계수는 -0.35



  1. 계절별로 체감온도와 자전거 대여 숫자의 상관관계를 알아보고자 한다. 이 때 적절한 상관분석기법을 사용하였을 때 상관계수로 옳은 것은?

⭐ 입력

import pandas as pd
# 얘도 corr() 메서드만 이용함
bike = pd.read_csv("bike.csv")
bike[["season", "atemp", "casual"]].groupby("season").corr().round(3)
# ~별로 나오면 groupby 함수 쓰기!

📌 출력

  • 뭐야 왜 두 줄로 나와 싶은데 잘 보면 숫자 똑같음

  • 좀 더 깔끔하게 보려면 후처리 해주면 되는데 나는 그것까지는 무리인 것 같아...

    이렇게 해도 문제는 풀 수 있으니까...ㅠ



  1. 날씨에 따른 기온과 자전거 대여의 상관계수 변화를 알아보고자 한다. 날씨가 맑은 날과 그렇지 않은 날의 상관계수 차이의 절대값은 얼마인가?
import pandas as pd
bike = pd.read_csv("bike.csv")
bike["sunny"] = (bike["weather"] == 1) +0
# weather 변수에 1이 있을 경우 1을 넣고 아니면 0 값을 넣는 새로운 변수 만듦

bike_corr = bike.groupby("sunny")[["temp", "casual"]].corr
# groupby 함수를 사용해서 sunny랑 묶고 상관계수 출력

  • 아래와 같이 상관계수가 출력되는데 여기서 맑은 날과 그렇지 않은 날의 차이를 구해야함
bike_corr.iloc[1, 0] - bike_corr.iloc[3, 0]
# iloc로 배열에서 값을 꺼내주면 되는데
# 글자 있는 건 다 인덱스라서 숫자만 0, 1, 2, 3 / 0, 1이라고 보면 됨
abs(bike_corr.iloc[1, 0] - bike_corr.iloc[3, 0])
# abs() 메서드 이용해서 절대값 구하기
round(abs(bike_corr.iloc[1, 0] - bike_corr.iloc[3, 0]), 3)
# 문제 보기에 소수점 셋째자리까지 나와있어서 맞춰줬음





✔ scipy - pearsonr()


  • Pearson 상관 분석 실시하는 scipy의 메서드

  • 상관계수와 p-value 차례대로 출력함


import pandas as pd
form scipy.stats import pearsonr

bike = pd.read_csv("bike.csv")
stat, p = pearsonr(bike["casual"], bike["registered"])
print(stat) # 상관계수
print(p) # p-value
profile
개발자가 되었어요⭐️

0개의 댓글