본문 바로가기

빅데이터분석기사_실기/제1유형: 데이터 전처리

데이터 탐색 실습

데이터 불러오기

from google.colab import drive
drive.mount('/content/drive')
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

file_path = '/content/drive/MyDrive/data/titanic_train.csv'
df = pd.read_csv(file_path)

실습 데이터 중비~


데이터프레임 살펴보기

df


데이터 타입 변환

df.info()

df.info()

Pclass는 숫자형 int 이지만, 범주형 변수 이므로(1등급, 2등급, 3등급) astype 함수를 사용하여 변수 타입을 변환

데이터['컬럼명'] = 데이터['컬럼명'].astype(변환할타입)

  • str: 문자열형
  • int: 정수형
  • float: 실수형
  • bool: 불리언형(참/거짓)
df["Pclass"] = df["Pclass"].astype(str)

데이터탐색

df.info()

df.info()

(Pclass의 데이터타입이 object, 즉 문자열로 변환된 것을 확인할 수 있다.)

또한 df.info() 결과를 보면 전체 레코드(=행, row)는 총 891개이고, 변수(=열, column)은 12개이다.

각 컬럼별 non-null count를 확인해보면 Age, Cabin, Embarked에 결측치(null)가 존재함을 확인할 수 있음

df.describe()

df.describe()

describe(): 데이터셋에 대한 EDA 수행 시 가장 많이 사용하는 함수

데이터셋의 수치형 변수에 대해서 기초통계량(갯수, 평균, 표준편차, 최솟값, 사분위수, 최댓값)을 보여준다.

df.describe(include='all')

df.describe(include='all')

include='all' 옵션을 추가하면 모든 변수(범주형변수 포함됨)에 대한 통계와 분포를 보여준다.

범주형 변수는 unique, top, freq 값 만을 보여준다.(기초통계량은 nan으로 표시됨)

반대로 수치형 변수의 unique, top, freq값은 nan으로 표시됨

  • unique: 범주형 변수의 값의 종류
  • top: 가장 많이 출현하는 값
  • freq: 가장 많이 출현하는 값의 출현빈도수

기초 데이터 분석

  • Pclass(좌석등급) 변수 분석
grouped = df.groupby("Pclass")
grouped.size()

grouped.size()

각 Pclass에 해당하는 탑승객의 빈도수를 groupby(), size()를 이용해서 구한다.

groupby() 함수를 이용하여 Pclass 별로 그루핑하고, size()를 이용하여 그룹별 행의 개수를 구한다.

3등급 객실에 탑승한 승객이 가장 많음을 알 수 있음

 

  • Fare(요금) 변수 분석
plt.hist(df['Fare'])
plt.show()

histogram

탑승객이 지불한 금액을 나타내는 Fare 변수에 대한 히스토그램 생성

#데이터 분리: 생존하지 못한 사람들의 Fare를 보여주는 data_0과 생존한 사람들의 Fare를 보여주는 data_1
data_0 = df[df['Survived'] == 0]['Fare']
data_1 = df[df['Survived'] == 1]['Fare']

#분리된 데이터셋 두 개에 대한 박스플롯 생성
fig, ax = plt.subplots()
ax.boxplot([data_0, data_1])

#축 이름 설정
ax.set_xticklabels(['Not Survived', 'Survived']) #x축에 있는 각 눈금 별 이름
ax.set_xlabel('Survival Status') #x축 전체에 대한 제목
ax.set_ylabel('Fare') #y축 전체에 대한 제목

#박스플롯 제목 설정
plt.title('Fare Distribution by Survival Status')

plt.show()

boxplots

요금별 생존율의 차이가 있는지 파악하기 위해 상자수염그림(boxplot)을 이용한 데이터 시각화 수행

  • 생존자들이 사망한 승객들보다 요금이 더 높지만 큰 차이는 없음
  • 부가적으로 요금에 대한 이상치가 존재함을 확인할 수 있음

 

  • Sex 변수 분석
grouped = df.groupby('Sex')
grouped.size()

result

성별에 따른 빈도수 계산

#성별에 따라 데이터 분리
data_0 = df[df['Sex'] == 'female']['Survived']
data_1 = df[df['Sex'] == 'male']['Survived']

#분리한 데이터들을 Survived 여부에 따라서 그루핑
grouped_0 = pd.DataFrame(data_0).groupby("Survived")
grouped_1 = pd.DataFrame(data_1).groupby("Survived")

#각 데이터의 그루핑된 그룹별 행의 갯수 출력
print(grouped_0.size())
print(grouped_1.size())

result

남성이 여성보다 훨씬 많지만, 생존율은 여성 탑승객이 높음을 알 수 있다.