본문 바로가기
데이터 프레임 시각화

[데이터프레임 분석] 이변량 분석

by Jasonify97 2023. 2. 10.

이변량 분석은 원인과 결과가 있을때 원인의 개수가 2개가 존재한다는 의미임.
데이터를 분석할 때 데이터는 크게 숫자형과 범주형이 있기에 존재하는 경우의 수는 총 4가지이며,
아래 방법에 따라 사용되는 함수의 종류는 달라짐.

  숫자 범주
그래프 통계량 그래프 통계량
숫자 scatter 상관분석 boxplot
Histogram
Densityplot
 
범주 평균비교
barplot
T검정
분산분석
Barplot
Mosaic
카이제곱검사

또한, 위에 표처럼 분석한 것을 나타낼 때는 시각적으로 보여주는 그래프와, 수치적으로 보여주는 통계량이 있음

1. 숫자 - 숫자 이변량 분석

그래프로 나타내기 - scatter
  • 두 숫자형 변수의 관계를 점으로 나타내는 그래프를 산점도라고 함
  • 산점도 그래프를 볼때 중요한 관점은 점들을 이은 직선(Linearity)임

문법

  • scatter를 사용하기 위한 방법에는 2가지가 있음
    • matplotlib
      • plt.scatter(x축 값, y축 값)
      • plt. scatter('x변수', 'y변수', data = df)
    • seaborn
      • sns.scatterplot('x변수, 'y변수', data = df)
plt.scatter(air['Temp'], air['Ozone'])
plt.show()
# plt.scatter('Temp', 'Ozone', data = air)
# sns.scatterplot('Temp', 'Ozone', data = air)

Temp와 Ozone의 scatter

  • 위처럼 Temp와 Ozone의 산점도 그래프를 그려봤는데, 예를 들어 원인이 Temp고 Ozone이 결과라고 한다면 위 그래프가 유의미한 그래프일까?
  • 또한, 유의미한 그래프 = 강한 관계를 가진그래프 인데, 확실한 직선이 안보인다면 한계가 있으며, 관계가 있다고 하더라도 큰 관계를 가지지는 않을 수도 있음

 

  • 따라서 이를 수치적으로 나타내는것을 상관분석이라고 한다.
수치로 나타내기 - 상관분석

상관계수 r을 구하는 공식

위 공식으로 상관계수인 r을 도출 할수 있는데, 파이썬에서 scipy.stats모듈로 r을 나타낼수 있음

import scipy.stats as spst
spst.pearsonr(air['Temp'], air['Ozone'])

>>(0.6833717861490115, 2.197769800200214e-22)

위 함수를 사용하여 상관관계를 나타내보았는데 튜플형태로 2개의 값이 나옴
>> (상관계수 값, p-value)

상관계수 r   p - value
0.5 < |r| <=1 강함 p < 0.05 관계가 있다
0.2 < |r| <=0.5 중간
0.1 < |r| <=0.2 약함 p >= 0.05 관계가 없다
0 < |r| <=0.1 없음

위 표는 대략적인 기준으로 r과 p에 대한 값을 나타낸 값이다.


2. 숫자 - 범주 이변량 분석

sns.kdeplot()을 이용해서 시각화 한다

그래프로 나타내기
sns.kdeplot(x='Age', data = titanic, hue ='Survived'
, multiple = 'fill')
plt.axhline(titanic['Survived'].mean(), color = 'r')
plt.show()


3. 범주 - 숫자 이변량 분석

그래프로 그리기 - bar

sns.barplot(x = 'Survived", y='Age', data = titanic)
plt.grid()
plt.show()

Survived가 0일때의 평균, 1일때의 평균을 그려줌
위의 검은색 직선은 오차범위 = 신뢰구간 을 나타내줌
0과 1의 두 신뢰구간이 차이가 클수록 연관이 있다는 의미임

얼마나연관이 있는지 알아보는법
t-test // anova

t-test는 두개의 평균을 비교할때 사용한다
anova는 분산분석이라고 하며, 셋이상의 평균을 비교할때 사용한다.

t-test

문법

died = temp.loc[temp['Survived']==0, 'Age']
survived = temp.loc[temp['Survived']==1, 'Age']

# 2) t-test
spst.ttest_ind(died, survived)
>>Ttest_indResult(statistic=2.06668694625381,
pvalue=0.03912465401348249)
anova
P_1 = temp.loc[temp.Pclass == 1, 'Age']
P_2 = temp.loc[temp.Pclass == 2, 'Age']
P_3 = temp.loc[temp.Pclass == 3, 'Age']

# 2) 분산분석
spst.f_oneway(P_1, P_2, P_3)
>>lt
F_onewayResult(statistic=57.443484340676214,
pvalue=7.487984171959904e-24)

 


4. 범주 - 범주 이변량 분석

범주와 범주간의 분석은 교차표를 만드는 것부터 시작한다.

교차표를 만드는것은 파이썬에서 pandas를 이용하여 변경할 수 있다.


문법

pd.crosstab(titanic['Survived'], titanic['Sex'], normalize = '')
# pd.crosstab(행, 열, normalize = 'columns') # 열 기준 100%
# pd.crosstab(행, 열, normalize = 'index') # 행 기준 100%
# pd.crosstab(행, 열, normalize = 'all') # 전체 기준 100%
  • normalize = 비율이라고 생각하면 되고 srosstab이 아니라 다른곳에서 나와도 비율이라고 생각해도 됨
  • normalize의 옵션에 대해서는 아래에서 설명함

위 함수로 교차표를 만들었다면 그래프와 수치형으로 나타내보자

그래프로 나타내기 - mosaic

문법

mosaic(titanic, [ 'Pclass','Survived'])
plt.axhline(1- titanic['Survived'].mean(), color = 'r')
plt.show()

  •  범주 - 범주를 그래프로 나타내려면 mosaic를 쓴다. 근데 mosaic는 crosstab을 안써줘도 알아서 교차표로 바꾼후 값을 그래프로 그려주는 함수임

ax = 축 
h = 수평(v = 수직)
1 - titanic['Survived'].mean  타이타닉 생존자들의 평균에서 1뺀값 = 1을 안뺏다면 빨간색 라인이 아래에 위치할 텐데 가독성을 위해 1을 빼줌

수치로 나타내기 - 카이제곱 검정
# 1) 먼저 교차표  만들기
table = pd.crosstab(titanic['Survived’], titanic['Pclass'])
print(table)
print('-' * 50)

# 2) 카이제곱검정
spst.chi2_contingency(table)

카이제곱검정을 하려면 우선 교차표를 만들고, spst.chi2_contigency(table)함수를 이용한다.

① 카이제곱 통제량
② p - value  -  0.05보다 작으면 신뢰성이 있다.
③ 자유도 -  ③  <  *2 일때 관련이 있다. 
④ 기대 빈도

'데이터 프레임 시각화' 카테고리의 다른 글

[데이터프레임 분석] 단변량 분석  (0) 2023.02.10
산점도 분석  (0) 2023.02.09