티스토리 뷰
https://www.kaggle.com/c/titanic
Titanic | Novice
Kaggle profile for Titanic
www.kaggle.com
위 데이터를 이용해 시각화로 변수 간의 관계를 알아봄으로써 Python의 시각화 라이브러리인 matplotlib과 seaborn을 연습해 보겠습니다.
데이터 설명
Definition | Key | Definition | Key | ||
PassengerId | Age | Age in years | |||
Survived | Survival | 0 = No, 1 = Yes | SibSp | # of siblings / spouses aboard the Titanic | |
Pclass | Ticket class | 1 = 1st, 2 = 2nd, 3 = 3rd | Parch | # of parents / children aboard the Titanic | |
Name | Name | Ticket | ticket number | ||
Sex | Sex | Fare | Passenger fare | ||
Cabin | Cabin number | Embarked | Port of Embarkation | C = Cherbourg, Q = Queenstown, S = Southampton |
data shape : (891,12)
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 PassengerId 891 non-null int64
1 Survived 891 non-null int64
2 Pclass 891 non-null int64
3 Name 891 non-null object
4 Sex 891 non-null object
5 Age 714 non-null float64
6 SibSp 891 non-null int64
7 Parch 891 non-null int64
8 Ticket 891 non-null object
9 Fare 891 non-null float64
10 Cabin 204 non-null object
11 Embarked 889 non-null object
dtypes: float64(2), int64(5), object(5)
1. 범주형 변수의 사망 여부에 따른 빈도 확인
Sex, Embarked, Cabin 칼럼에서 사망 여부에 따른 빈도수를 막대그래프로 확인하기
def bar_chart(feature):
survived = data[data['Survived']==1][feature].value_counts() #생존한 사람의 빈도 수
dead = data[data['Survived']==0][feature].value_counts() #사망한 사람의 빈도 수
df = pd.DataFrame([survived, dead])
df.index = ['Survived', 'Dead']
return df.plot(kind='bar', stacked=True, figsize=(4,4)) #각 빈도수를 막대 그래프로 표현
성별에 따르면 생존자 중에는 여성이 많지만, 사망자 중에는 남성이 많은 것을 확인할 수 있습니다.
Embarked에 따르면 생존자와 사망자 모두 Embarked S가 다수인 것을 확인할 수 있습니다.
Pclass에 따르면 사망자 중에서는 3등급인 사람이 다수인 것을, 생존자 중에서는 1등급과 3등급이 빈도 수가 비슷한 것을 확인할 수 있습니다.
2. 연속형 변수에 대한 분포 확인
Fare, Age, SibSp, Parch에 대한 분포를 kdeplot을 통해 확인함으로써 데이터가 Scaling이 필요한지 확인할 수 있습니다.
fig, ax = plt.subplots(2,2, figsize=(4,4),constrained_layout=True)
sns.kdeplot(data=data['Fare'], ax=ax[0][0], shade=True,alpha=1)
sns.kdeplot(data=data['Age'], ax=ax[0][1], shade=True,alpha=1)
sns.kdeplot(data=data['SibSp'], ax=ax[1][0], shade=True,alpha=1)
sns.kdeplot(data=data['Parch'], ax=ax[1][1], shade=True,alpha=1)
plt.show()
seaborn의 kdeplot은 연속형 변수의 분포를 확인할 수 있습니다. Age 변수를 제외한 나머지 변수도 모양이 정규 분포와 거리가 멀기에 정규화가 필요한 것을 확인할 수 있습니다.
3. 범주형 변수에 따른 Age와 Fare 간의 관계 확인
Sex, Pclass, 생존 여부에 따른 Age와 Fare 간의 관계를 lmplot을 통해 확인하여 상관관계가 존재하는지 확인할 수 있습니다.
sns.lmplot(data=data, x='Age', y='Fare', hue='Sex', palette='Set2',
markers=['o','v'], height=4, aspect=1.5,scatter_kws={'s':100, 'alpha':0.7})
sns.lmplot(data=data, x='Age', y='Fare', hue='Survived', palette='Set2',
markers=['o','v'], height=4, aspect=1.5,scatter_kws={'s':100, 'alpha':0.7})
sns.lmplot(data=data, x='Age', y='Fare', hue='Pclass', palette='Set2',
markers=['o','v', '*'], height=4, aspect=1.5,scatter_kws={'s':100, 'alpha':0.7})
plt.show()
위처럼 seaborn의 lmplot은 hue 매개변수를 이용해 각 범주형 변수에 따른 연속형 변수들의 관계를 확인해 전반적인 추세를 확인할 수 있습니다.
4. 생존 여부와 범주형 변수 별 Age, Fare 추이
seaborn의 barplot을 이용해 카테고리 별로 Age와 Fare의 추이를 확인할 수 있습니다.
#생존여부와 Pclass별 Age, Fare 추이
fig, ax = plt.subplots(2,1,figsize=(5,4),constrained_layout=True)
sns.barplot(x='Survived', y='Fare', hue='Pclass', data=data, palette='Set2',
capsize=0.2, errorbar=('ci',99), ax=ax[0])
sns.barplot(x='Survived', y='Age', hue='Pclass', data=data, palette='Set2',
capsize=0.2, errorbar=('ci',99), ax=ax[1])
plt.show()
#생존여부와 Sex별 Age, Fare 추이
fig, ax = plt.subplots(2,1,figsize=(5,4),constrained_layout=True)
sns.barplot(x='Survived', y='Fare', hue='Sex', data=data, palette='Set2',
capsize=0.2, errorbar=('ci',99), ax=ax[0])
sns.barplot(x='Survived', y='Age', hue='Sex', data=data, palette='Set2',
capsize=0.2, errorbar=('ci',99), ax=ax[1])
plt.show()
#생존여부와 Embarked별 Age, Fare 추이
fig, ax = plt.subplots(2,1,figsize=(5,4),constrained_layout=True)
sns.barplot(x='Survived', y='Fare', hue='Embarked', data=data, palette='Set2',
capsize=0.2, errorbar=('ci',99), ax=ax[0])
sns.barplot(x='Survived', y='Age', hue='Embarked', data=data, palette='Set2',
capsize=0.2, errorbar=('ci',99), ax=ax[1])
plt.show()
seaborn의 barplot으로 각 범주형 변수의 카테고리 별의 연속형 변수 추이를 확인해 값의 크기 차이를 확인할 수 있습니다.
- 생존여부와 Pclass에 따른 Fare 추이에서 생존한 1등급 인원들의 Fare이 가장 높습니다. 특히 1등급에서 생존한 사람과 사망한 사람의 Fare차이가 다른 Pclass에 비해 크다는 것을 알 수 있습니다.
- 생존여부와 Pclass에 따른 Age 추이에서 사망한 1등급 인원들의 나이가 가장 높습니다. 특히 생존여부에 무관하게 1,2,3등급 순으로 나이가 많은 것을 확인할 수 있습니다.
- Fare는 생존한 인원이 사망한 인원보다 더 높습니다. 사망한 인원은 성별에 무관하게 Fare 차이가 거의 나지 않지만, 생존한 인원은 여성의 Fare가 남성의 Fare보다 크다는 것을 알 수 있습니다.
- 나이는 사망한 남성이 여성보다 더 많지만 반대로 생존한 여성의 나이는 생존한 남성보다 많은 것을 알 수 있습니다.
- 생존여부와 무관하게 C,S,Q순으로 Fare가 높은 것을 알 수 있습니다. 특히 Embarked Q는 생존여부와 무관하게 Fare 추이가 비슷하지만 Embarked C는 생존여부에 따라 Fare 차이가 큰 것을 알 수 있습니다.
- 생존여부와 Embarked에 따라 사망한 인원의 나이가 더 많은 것을 알 수 있습니다. 생존한 인원 중 Embarked S가 Q보다 나이가 더 많지만 사망한 인원 중 Embarked S와 Q의 차이는 거의 나지 않습니다.
5. Pclass에 따른 Fare 시각화
Pclass에 따라 Fare의 분포를 boxplot을 이용해 시각화하여 등급별 Fare가 얼마나 차이가 나는지 알 수 있습니다.
#Pclass에 따른 Fare 시각화
fig, ax = plt.subplots(1,3,figsize=(14,4),constrained_layout=True)
value1 = data[data['Pclass']==1]
sns.boxplot(y=value1['Fare'], ax=ax[0],palette='Set2')
value2 = data[data['Pclass']==2]
sns.boxplot(y=value2['Fare'], ax=ax[1],palette='Set2')
value3 = data[data['Pclass']==3]
sns.boxplot(y=value3['Fare'], ax=ax[2],palette='Set2')
plt.show()
seaborn의 boxplot은 각 칼럼의 중앙값, 25%,75% 값, 이상치를 확인할 수 있습니다. 3등급의 Fare가 2등급보다 큰 것이 존재하므로 각 등급별로 Fare 구간이 명확하게 나눠지지 않은 것을 확인할 수 있습니다.
'프로젝트' 카테고리의 다른 글
[Classification] 부동산 허위매물 분류 예측 프로젝트 (0) | 2025.03.09 |
---|---|
[Regression] Used Car Price Prediction (0) | 2025.03.01 |
[Time Series Forecasting] FinaceDataReader을 이용한 LSTM 시계열분석 (1) | 2024.06.21 |
[Computer Vision] Deepfake classification (0) | 2024.06.19 |
- ridge #lasso #정규화모델 #머신러닝
- 머신러닝 #xgboost #
- html #javascript #구구단 출력
- 파이썬 #코딩테스트 #프로그래머스 #스택 #큐
- 잘라서 배열로 저장하기 #2차원으로 만들기
- seaborn #데이터시각화 #타이타닉
- #seq2seq #encoder #decoder #teacher forcing
- #자연어 처리 #정수 인코딩 #빈도 수 기반
- 프로젝트 #머신러닝 #regression #eda #preprocessing #modeling
- gan #생성자 #판별자 #적대적 신경 신경망 #딥러닝 #computer vision
- rnn #딥러닝 #시계열 데이터 #장기의존성 문제
- subquery #sql 코딩테스트
- 파이썬 #시각화 #matplotlib
- nlp #토큰화 #nltk #konply
- 딥러닝 #오차역전파 #연쇄법칙 #계산그래프 #최적화
- 로지스틱 회귀 #오즈비 #최대우도추정법 #머신러닝
- python #deque #프로그래머스 #공 던지기 #문자열 계산하기 #코딩테스트
- 자연어 처리 #정제 #정규표현식 #어간 추출 #표제어 추출
- #python #프로그래머스 #외계어사전 #itertools #순열과조합
- pca #주성분분석 #특이값분해 #고유값분해 #공분산행렬 #차원의 저주
- randomforest #bagging #머신러닝 #하이퍼파라미터 튜닝
- #opencv #이미지 읽기 #이미지 제작 #관심영역 지정 #스레시홀딩
- python #프로그래머스 #리스트 #인덱싱
- python #프로그래머스 #겹치는선분의길이
- #tf idf
- 딥러닝 #mobilenetv2 #linear bottleneck #inverted residual #depthwise separable convolutions #computer vision
- 머신러닝 #project #classification #dacon
- #물고기 종류별 대어 찾기 #즐겨찾기가 가장 많은 식당 정보 출력하기 #mysql #programmers
- #opencv #이미지 연산 #합성
- 머신러닝 #lightgbm #goss #ebf