8일차는 다양한 시각화 수치화 도구들과 함께 데이터의 해석력을 기르는 공부를 했습니다.
x와 y의 관계에 대해 그래프로 분석하기 위한 도구가 많이 있습니다. 하지만 도구들마다 한계가 있으니 꼭 그래프가 정답이라고 생각해서는 안됩니다.
시각화하는 방법을 먼저 알아보겠습니다.
▶scatter(산점도)
산점도란 수치를 그대로 점으로 찍어서 그래프로 나타내는 것을 산점도라고 합니다. 이때 중요한 것은 얼마나 직선모양에 가까운지가 중요합니다.
문법은 아래와 같습니다.
plt.scatter(데이터프레임명['컬럼명1'], 데이터프레임명['컬럼명2'])
plt.show()
데이터프레임의 컬럼명1, 2의 관계를 알 수 있습니다. x축은 컬럼명1, y축은 컬럼명2로 설정해주었습니다.
※강한 관계와 약한 관계※
만약 더 강한 관계의 변수이면 산점도의 그래프 모양이 직성 모양에 가깝습니다. 약한 관계일 경우에는 직선에 비해 더 퍼진 모양의 그래프로 나타납니다.
▶pairplot
데이터프레임을 통으로 집어넣으면 숫자형 변수에 대한 모든 산점도를 보여주는 시각화 도구입니다.
sns.pairplot(데이터프레임명)
하지만 시간이 걸린다는 단점이 있고 일일이 확인하기 어렵다는 단점이 있어 실전에서는 잘 사용하지 않습니다.
▶joinplot
joinplot
은 산점도와 히스토그램을 같이 보여주는 시각화 도구입니다.
sns.jointplot(x='컬럼명1', y='컬럼명2', data = 데이터프레임명)
plt.show()
위와 같이 사용하면 산점도뿐 아니라 히스토그램도 같이 보여줍니다.
▶regplot
산점도와 직선을 같이 보여주는 시각화 도구입니다.
sns.regplot(x='컬럼명1', y='컬럼명2', data = 데이터프레임명)
plt.show()
수치화하는 방법을 알아보겠습니다.
수치화란 눈으로 그래프를 살펴보면 관계를 한번에 파악하기 어렵다는 단점이 있습니다. 그래서 관계를 숫자로 계산해서 비교합니다.
관계를 수치화하는 것은 상관계수 상관계수가 유의미한지를 검사하는 것이 상관분석ㅇㅂ니다.
▶covariance(공분산), correlation coefficient(상관계수)
각 점들이 얼마나 직선에 모여있는지를 계산합니다.
▶상관계수
상관계수는 'r'로 표현이 됩니다. -1 에서 1사이의 값이며 상관계수끼리 비교가 가능합니다. -1 또는 1에 가까울수록 강한 상관관계를 의미합니다. 상관계수의 크기로 판단할 수는 없지만 상관분석을 통해서 test(검증)가 가능합니다.
▶상관분석
scripy.stats
를 이용하여 상관분석을 할 수 있습니다.
사용환경 세팅은 아래와 같습니다.
import scipy.stats as spst
scripy.stats
를 사용하면 상관계수와 p-value를 구할 수 있습니다.
문법은 아래와 같습니다.
spst.pearsonr(데이터프레임['컬럼명'], 데이터프레임['컬럼명'])
위 코드를 실행하면 검색결과가 튜플형태로 나오는데 첫번째 값은 상관관계의 수치를 알려주고 두번째 값은 p-value를 알려줍니다.
상관관계가 어느정도면 강한관계인지 중간인지 약한인지 궁금할 수 있습니다. 아래의 기준은 절대적인 기준이 아닌 대략적인 기준이므로 그냥 참고만 하면 됩니다.
절대값 상관계수를 기준으로 0.5에서 1 사이이면 강한관계 0.2에서 0.5사이이면 중간 0.1에서 0.2면 약한 0에서 0.1이면 거의 관계가 없다고 참고만 하시면 됩니다.
p-value란 관계를 수치화한 값(상관계수)이 유의미한지 판단하는 숫자가 바로 p-value입니다.
만약 p-value의 값이 0.05보다 작다면 두 변수간의 관계가 있다고 판단하고 0.05보다 크거나 같다면 두 변수간의 관계는 없다고 판단합니다.
▶corr
데이터프레임의 수치형 변수들을 한번에 비교하여 상관계수를 구해줍니다.
데이터프레임명.corr()
위와 같이 코드를 작성해주면 한번에 데이터프레임의 모든 수치형 변수에 대해서 상관계수를 구해줍니다.
※NaN 결측치를 확인하는 방법※
데이터프레임명.info()
를 사용해주면 각 변수의 데이터 건수를 보면 전체 행보다 적은 데이터 건수를 가지고 있는 변수들은 NaN 즉 결측치가 존재함을 알 수 있습니다. 또는 데이터프레임명.isna().sum()
을 사용해주면 NaN만 몇 개가 있는지 알려줍니다.
※상관계수의 한계※
상관계수는 직선의 관계만 수치화 해주기 때문에 직선의 기울기와 비선형의 관계를 고려하지 않습니다.
x가 범주, y가 수치형인 데이터를 시각화하고 수치화해서 분석합니다. 범주와 숫자를 비교하는 방법으로는 평균비교가 있습니다. 평균비교에는 barplot이 있고 범주가 2개 있는 경우에는 두 평균의 차이를 비교하고 범주가 3개 이상인 경우에는 전체 평균과 각 범주의 평균을 비교합니다.
분산과 표준편차
한 집단을 설명하기 위해서 대푯값으로 평균을 계산했을 때 평균으로부터 얼마나 벗어났는지를 의미합니다.
※표본을 뽑는 이유는 모집단을 추정하기 위한 목적입니다. 예를들어 표본을 가지고 평균을 냈다는 것은 모집단의 평균을 알고 싶어서 하는 것이라고 이해하면 됩니다.
시각화 도구에 대해 알아보겠습니다.
▶barplot
평균을 비교하는 barplot 시각화 도구입니다.
두 평균의 차이가 크고, 신뢰구간이 겹치지 않으면 대립가설이 맞다고 볼 수 있습니다.
신뢰구간은 오차범위라고도 하며 좁을수록 믿을 수 있습니다. 데이터가 많을수록 편차가 적을수록 신뢰구간은 좁아집니다.
수치화 도구에 대해 알아보겠습니다.
▶t-test와 anova
둘 다 범주형 x와 숫자형 y의 관계를 검정하는 도구입니다. 평균을 비교하여 차이를 testing합니다.
▶t-test
두 그룹간 평균에 차이가 있는지 비교합니다. t통계량은 두 그룹의 평균 간 차이를 표준오차로 나눈 값입니다. 두 평균의 차이라고 생각해도 됩니다.
t-test를 실행하면 t통계량과 p-value를 구할 수 있는데 p-balue가 0.05보다 잗으면 차이가 있다고 보면 됩니다.
died = temp.loc[temp['Survived']==0, 'Age']
survived = temp.loc[temp['Survived']==1, 'Age']
spst.ttest_ind(died, survived)
예시로 타이타닉의 데이터를 사용했습니다. 자세히 살펴보면 died와 survived로 그룹을 나누어 생존인 경우의 나이와 죽은사람의 나이로 두 개의 그룹을 만들고 두 그룹에 대한 t-test를 하는 코드입니다.
▶분산 분석 (ANalysis Of VAriance 줄여서 ANOVA)
여러 집단 간의 차이를 비교할 때 사용합니다. 기준을 전체평균으로 잡습니다. 분포를 알면 판정을 할 수 있습니다. 만약 값이 2~3이상이면 차이가 있다고 판정할 수 있습니다.
분산 분석은 각 그룹간 차이가 있는 지 없는 지에 대해서만 알려주기 때문에 어느 그룹간에 차이가 있는지 알 수 없습니다. 따라서 사후분석을 진행해주어야 합니다.(사후분석은 각 그룹별로 t-test를 진행하는 것을 의미)
temp2 = titanic.loc[titanic['Embarked'].notnull()]
s = temp2.loc[titanic['Embarked'] == 'S', 'Fare']
c = temp2.loc[titanic['Embarked'] == 'C', 'Fare']
q = temp2.loc[titanic['Embarked'] == 'Q', 'Fare']
spst.f_oneway(s,c,q)
temp2는 타이타닉의 결측치를 제거한 데이터프레임입니다. 3개 이상의 변수이기 때문에 분산분석을 사용한 코드입니다. 3개 이상의 변수일 경우 f_oneway
를 사용합니다.
이번 수업에는 다양한 도구들과 이변량 분석에 대해 배웠습니다. 익숙해야될 것이 점점 많아져서 너무 행복합니다.
※공부하고 있어 다소 틀린점이 있을 수 있습니다. 언제든지 말해주시면 수정하도록 하겠습니다.
※용어에 대해 조금 공부 더 해서 수정하겠습니다.