본문 바로가기
서비스 기획/☁️ 데이터 분석 공부

[코드잇] 2. 데이터 분석과 시각화: 타이타닉 EDA 퀴즈

by 림뽀 2022. 7. 14.
반응형

데이터 분석과 시각화 과정 중 EDA(탐색적 데이터 분석) 수업 마지막에는 "타이타닉 EDA 퀴즈"가 있다.

titanic.csv 데이터를 탐색한 후, 보기 7개 중에서 맞는 것 고르는 퀴즈를 풀기 위해 답을 찾은 방법을 정리했다.

 

코드잇 Exploratory Data Analysis 퀴즈

 

1) 타이타닉 승객은 30대와 40대가 가장 많다 (X)

- 나이대별 히스토그램으로 시각화했다.

- 기존 파일에는 "나이대" 컬럼이 존재하지 않아 'Age_cat' 컬럼을 만들어서 추가했다.

 

#1. 20,30이 제일 많음 ==> X
sns.distplot(df['Age_cat'])

 

#1 결과

- 나이대 구분 컬럼인 'Age_cat' 만든 방법

 

#나이대 가져오는 함수 만들기
def age_cat(age):
    age = (age//10)*10
    return age
    
Age_cat = df.Age.apply(age_cat) #함수를 적용한 새 필드 만들기
Age_cat = Age_cat.astype('category') #타입을 카테고리로 변경
df.insert(6,'Age_cat',Age_cat) #데이터프레임에 필드 추가하기

 

*참고한 링크: https://steadiness-193.tistory.com/98

 

 

2) 가장 높은 요금을 낸 사람은 30대이다. (O)

- 위에서 만들어준 나이대별 카테고리의 박스 플롯을 그려주었다.

- 30대의 outlier 중 누군가가 엄청나게 높은 요금을 냈다. (바가지 쓴 건가?)

 

#2. 30대 누군가가 가장 큰 돈을 냄 ==> O
sns.catplot(data=df,x='Age_cat',y='Fare',kind='box')

 

#2 결과

 

3) 생존자가 사망자보다 더 많다 (X)

- 'Survived' 컬럼의 파이 플롯을 그려주었다.

- 1이 생존, 0이 사망으로 사망자가 더 많다.

- value_counts()를 적용하지 않고 파이 플롯을 그리면 모든 ID마다 분할되어 나온다. 

 

#3. 사망자가 더 많다 ==> X
df['Survived'].value_counts().plot(kind='pie')

 

#3 시각화

 

 

4) 1등실, 2등실, 3등실 중 가장 많은 사람이 탑승한 곳은 3등실이다. (O)

- 좌석 등급 컬럼인 'Pclass'의 파이 플롯을 위와 같은 방식으로 그려주었다.

 

#4. 가장 많은 사람이 탑승한 곳은 3등실 ==> O
df['Pclass'].value_counts().plot(kind='pie')

 

#4 시각화

 

 

5) 가장 생존율이 높은 객실 등급은 1등실이다. (O)

- 위와 같은 방식으로 파이 플롯을 그려주었다.

- 1등급 객실의 생존 건수가 가장 높다. 

- 4번 선지에서 1,2 등실 탑승객 수는 비슷하고, 3등실 탑승객이 가장 많았으므로 생존율은 1등실이 가장 높다.

- 카테고리(그룹) 별 생존자 수 합계를 구하기 위해 "groupby"를 사용했다. value_counts()를 쓰면 합계를 구할 수 없다. 카테고리(그룹) 별 행의 개수만 알 수 있다.

 

#5.가장 생존율이 높은 객실은 1등급 ==> O
grouped=df.groupby(df['Pclass'])
grouped['Survived'].sum().plot(kind='pie')

 

#5 시각화

 
 

6) 나이가 어릴수록 생존율이 높다. (X)

- 20세 미만의 미성년자 사망률이 오히려 높다.

- 앞에서 만들어둔 'Age_cat'로 그룹 별 생존자 합계의 직선형 plot을 그려주었다.

 

 
#6.0~19세 미성년자의 사망률이 오히려 높음 ==> X
grouped=df.groupby(df['Age_cat'])
grouped['Survived'].sum().plot()

 

#6 시각화

 

 

7) 나이보다 성별이 생존율에 더 많은 영향을 미친다. (O)

- 나이-생존율은 음의 상관관계를 보이고, 성별-생존율은 양의 상관관계를 보인다.

- 성별은 숫자가 아니어서 corr 값을 구할 수 없기에 여자는 1, 남자는 0으로 인코딩한 컬럼 ('Sex_cat')을 추가했다.

 

#7.나이와 생존은 음의 상관관계, 성별과 생존은 양의 상관관계 ==> O
print(df.corr()['Age']['Survived'])
print(df.corr()['Sex_cat']['Survived'])

#결과
# -0.07722109457217756
# 0.5388255930146358

 

*컬럼 추가 방법

df.loc[df['Sex']=='female','Sex_cat']=1
df.loc[df['Sex']=='male','Sex_cat']=0
반응형

댓글