6. 데이터 분석하기타이타닉 생존자 예측 (22.07.13)
[상관분석 + 히트맵]
목표:타이타닉호 승객 변수를 분석하여 생존율과의 상관관계를 구하기
- >타이타닉호의 생존자와 관련된 변수의 상관관계 분석, 피어슨 상관계수 사용, 변수간의 상관계수 분석
상관분석이란?: 두 변수가 어떤 선형적 관계에 있는지 분석하는 방법. 상관관계의 정도를 나타내는 단위인 모상관계수 ρ사용
- > 두 변수의 연관정도를 나타낼 뿐 정확한 예측치 계산불가
- > 두개의 변수의 상관관계를 추측하는 단순상관분석과 여러개의 변수의 관계를 측정하는 다중상관분석으로 나뉨
상관계수(ρ)란?:변수 간 관계의 정도(0~1)과 방향(+,-)를 요약해주는 지수로써 (-1 ~ +1)사이의 값을 가진다. 상관계수가 양이면 한변수가 증가할 때 다른 변수도 증가하고, 상관계수가 음이면 한 변수가 증가할 때 다른 변수는 감소한다.
피어슨 상관계수란? 상관계수중에 대표적으로 제일 많이 사용됨.
1.데이터 수집
파이썬 seaborn 라이브버리 패키지에서 제공하는 타이타닉 데이터를 사용.
import seaborn as sns
titanic=sns.load_dataset("titanic")
titanic.to_csv("data/titanic_data/titanic.csv")
2.데이터 정제
파일을 열어보면 age,embarked,deck,embarktown 항목에 결측치가 있다. 이러한 결측치를 채우는 방법도 다양하고 중요한데, 이번실습에서는 age는 중앙값으로, embarked와 embarktown은 최빈값으로 치환하고 deck는 범주형이므로 최빈 범주로 결측값을 대체하였다.
titanic.isnull().sum()
titanic['age']=titanic['age'].fillna(titanic['age'].median())
titanic['embarked'].value_counts()
titanic['embarked']=titanic['embarked'].fillna('S')
titanic['embark_town'].value_counts()
titanic['embark_town']=titanic['embark_town'].fillna('Southampton')
titanic['deck'].value_counts()
titanic['deck']=titanic['deck'].fillna('C')
titanic.isnull().sum()
좌측(결측치 제거전) / 우측(결측치 제거후)
red_df.insert(0,column='type',value='red')
white_df.insert(0,column='type',value='white')
wine=pd.concat([red_df,white_df])
wine.to_csv('data/predict_winequality/wine.csv')
3.데이터 탐색
우선 info()함수를 통해서 기본적인 데이터의 정보를 알아본다.
wine.info()
출력값을 보면 우선 891개의 데이터가 있고, 속성을 나타내는 column은 15개가 존재하며 이름 또한 나와있다.
다음으로는 차트를 그려서 데이터의 정보를 시각적으로 확인해보자.
[성별에 따른 생존율과 사망률]
import matplotlib.pyplot as plt
f,ax=plt.subplots(1,2,figsize=(10,5))
titanic['survived'][titanic['sex']=='male'].value_counts().plot.pie(explode=[0,0.1],autopct='%1.1f%%',ax=ax[0],shadow=True)
titanic['survived'][titanic['sex']=='female'].value_counts().plot.pie(explode=[0,0.1],autopct='%1.1f%%',ax=ax[1],shadow=True)
ax[0].set_title('Survived(male)')
ax[1].set_title('Survived(female)')
plt.show()
[02행]: 한줄에 두개의 차트를 그리도록 크기를 설정한다
[03,04행]: 첫번째 pie차트는 남자승객의 생존율을 두번째 pie차트는 여자 승객의 생존율을 나타낸다.
[05,06행]: 차트의 제목을 설정
성별에 따른 생존율과 사망률
[객실 등급에 따른 생존율과 사망률]
sns.countplot('pclass',hue='survived',data=titanic)
plt.title('Pclass Vs Survived')
plt.show()
[01행]: pclass(1~3등급)을 x축으로하고, survived를 0/1의 개수를 계산하여 y축으로 하는 counterplot을 생성한다.
객실등급에 따른 생존율과 사망률
4.데이터 모델링
다음으로는 타이타닉호 승객의 속성들과 생존율 사이에 어떤 상관관계가 있는지 상관분석을 통해서 알아보자.
titanic_corr=titanic.corr(method='pearson')
titanic_corr
이 상관분석을 통해서 성인남자,객실등급,동행자여부등은 음의상관관계가 존재하며 객실요금은 양의상관관계를 보인다., 그런데 여기서 단순히 이 상관관계만 생각하면 안되는이유가 객실 등급 같은 경우에는 1등급>3등급이므로 숫자가 커질수록 좋은게 아니다. 따라서 생존율과 등급은 음의상관관계지만 실질적으로는 등급이 좋아질수록(낮아질수록) 생존율이 높다는 것이다.
다음으로는 특정변수 사이의 상관관계에 대해서 알아보자.
titanic['survived'].corr(titanic['adult_male'])
titanic['survived'].corr(titanic['fare'])
4.결과 시각화
sns.pairplot(titanic,hue='survived',diag_kind=None)
plt.show()
[01행]:각 데이터 열의 조합을 산점도로 그려준다.hue는 종속변수인 survived를 지정해준다
다음으로는 객실등급과 생존의 상관관계를 시각화해봤다.
sns.catplot(x='pclass',y='survived',hue='sex',data=titanic,kind='point')
plt.show()
마지막으로 변수사이의 사이의 상관계수를 히트맵으로 시각화해보자.
def category_age(x):
if(x<10): return 0
elif(x<20): return 1
elif(x<30): return 2
elif(x<40): return 3
elif(x<50): return 4
elif(x<60): return 5
elif(x<70): return 6
else: return 7
titanic['age2']=titanic['age'].apply(category_age)
titanic['sex']=titanic['sex'].map({'male':1,'female':0})
titanic['family']=titanic['sibsp']+titanic['parch']+1
heatmap_data=titanic[['survived','sex','age2','family','pclass','fare']]
colormap=plt.cm.RdBu
sns.heatmap(heatmap_data.astype(float).corr(),linewidths=0.1,vmax=1.0,square=True,cmap=colormap,linecolor='white',annot=True,annot_kws={"size":10})
plt.show()
[category_age 함수]
age는 각 변수마다 달라서 히트맵으로 나타내기 위해서는 범주형 속성으로 바꿔야하기 때문에 (1~7)값으로 치환한다.
[01행]: age2에 치환한 age값을 넣어준다.
[02행]: female,male str값을 0,1 수치형으로 바꿔준다.
[03행]: 가족의수를 계산하여 새로 넣어준다.
[04행]: 히트맵에 사용할 변수들을 추출한다.
[05행]:히트맵에 사용할 색상맵을 지정한다.
[06행]:corr함수로 구한 상관계수로 히트맵을 지정한다.
'데이터분석실습 > 데이터 과학 기반의 파이썬 빅데이터 분석' 카테고리의 다른 글
파이썬 빅데이터 분석 Day 8 (0) | 2023.10.26 |
---|---|
파이썬 빅데이터 분석 Day 7 (1) | 2023.10.26 |
파이썬 빅데이터 분석 Day 5 (1) | 2023.10.26 |
파이썬 빅데이터 분석 Day 4 (0) | 2023.10.26 |
파이썬 빅데이터 분석 Day 3 (0) | 2023.10.26 |