Data analysis/데이터 분석 및 시각화

[데이터 분석 및 시각화] 8. 이변량분석 - (수치형 -> 범주형)

endingo 2025. 4. 5. 12:35

★ 수치형 -> 범주형 시각화: Histogram, Density plot (x와 hue로 줘야됨! y로 주면 이상한 그래프 나옴)

★ 수치형 -> 범주형 수치화: 로지스틱 회귀모델(p-value)

 

 

1. 시각화

 

- Seaborn 사용

 

1) histplot()

Age(수치형) -> Survived(범주형)

hue를 사용해야된다.

sns.histplot(x='Age', hue='Survived', data=titanic, bins=20)
plt.show()

 

Fare(수치형) -> Survived(범주형)

sns.histplot(x='Fare', hue='Survived', bins=20, data=titanic)
plt.show()

 

2) Density Plot

 

- Seaborn 사용

kdeplot()

 

Age(수치형) -> Survived(범주형)

sns.kdeplot(x='Age', hue='Survived', data=titanic)
plt.show()

 

Age의 가운데 부분(20~30대) 들이 많이 탑승하였고 사망했다는 것을 볼 수 있다.

생존자 < 사망자

 

Fare(수치형) -> Survived(범주형)

sns.kdeplot(x='Fare', hue='Survived', data=titanic)
plt.show()

 

Fare을 적게 낸 집단이 많이 사망했다는 것을 확인 할 수있다.

 

common_norm= False로 하면 각각의 면적이 1이기에 common_norm =True 하는게 좋다

sns.kdeplot(x='Age', hue='Survived', data=titanic, common_norm=False)
plt.show()

3) multiple='fill'

 

histogram, kdeplot은 multiple='fill'을 지정하여 색을 칠해 비율을 비교할 수 있다.

 

- kdeplot

sns.kdeplot(x='Age', hue='Survived', data=titanic, multiple='fill')
plt.axhline(titanic['Survived'].mean(), color='r')
plt.show()

사망자(파란색) 생존자(주황색) 20대~30대 부분을 보면 파란색이 압도한 것을 알 수 있다.

 

sns.kdeplot(x='Fare', hue='Survived', data=titanic, multiple='fill')
plt.axhline(titanic['Survived'].mean(), color='r')
plt.show()

 

 

Fare을 적게 낸(0에 가깝게) 사람들이 많이 사망했다는 점을 볼 수있다.

Pclass와도 관계가 있어보인다.

 

- histplot(~multiple='fill')

 

sns.histplot(x='Age', hue='Survived', data=titanic, bins=16, multiple='fill')
plt.axhline(titanic['Survived'].mean(), color='r')
plt.show()

 

히스토그램은 정확하게 끊어서 빈도수를 확인 할 수 있다.

 

2. 수치화

 

- sm 사용

Logit(): 로지스틱 회귀모델로부터 p-value 구하기

 

- Age(수치형) -> Survived(범주형)

model = sm.Logit(titanic['Survived'], titanic['Age'])
result = model.fit()
print(result.pvalues)

 

 

Age(수치형) -> Survived(범주형): 나이별로 살아있는 사람의 수가 확연한 차이가 있다.

 

- Sex(수치형으로 만들어짐) -> Survived(범주형)

model = sm.Logit(titanic['Survived'], titanic['Sex'].map({'male': 1, 'female': 0}))
result = model.fit()
print(result.pvalues)

 

Sex(수치형) -> Survived(범주형): 성별별로 살아있는 사람의 수가 확연한 차이가 있다.