[Capstone Study] 머신러닝 완벽 가이드

[머신러닝] 섹션 1.4 데이터 핸들링 - 판다스 (1)

wlalsu_u 2023. 11. 6. 01:43

1.4.1 판다스(Pandas) 란?

 

 

 

 

 

판다스는 기존의 불편한 분석용 데이터 툴을 개선하기 위해, 

 

분석 전문가인 '웨스 매키니'가 개발하였다.

 

 

 

 

 

대부분의 데이터 세트는 행(row)과 열(column)으로 구성된 2차원 데이터인데,

 

(RDBMS의 TABLE이나 엑셀과 같은 형태)

 

 

2차원 데이터는 이해하기 쉽고, 효과적으로 데이터를 담을 수 있어서 많이 사용된다.

 

판다스는 이러한 2차원 데이터를 가공하고 처리할 수 있는 훌륭한 기능을 제공한다.

 

 

 

 

 

 

 

 

즉, 판다스를 한마디로 정리하면 다음과 같다.

 

 

 

 

 

1)  파이썬에서 데이터 처리를 위한 가장 인기 있는 라이브러리

2) 2차원 데이터를 효율적으로 가공/처리 할 수 있는 다양한 기능 제공

 

 

 

 

 

 

 

판다스의 핵심 객체는 여러개의 행과 열로 이루어진 2차원 데이터인 DataFrame 인데,

 

Index와 Series의 개념을 알아보아 DataFrame의 개념을 이해해보자.

 

 

 

 

 

 

 

[ 추가 ] DataFrame 이란?

1)  Index : 개별 데이터를 고유하게 식별하는 key 값 (RDBMS의 FK 와 유사)


2) Series : 칼럼이 하나인 데이터구조로, Index를 key 값으로 가지고 있음

3) DataFrame : 칼럼이 여러개인 데이터 구조체로, Index를 key 값으로 가지고 있음


즉 DataFrame은 여러개의 Series로 이루어져 있으며, Index를 key 값으로 가지고 있는 데이터 구조체이다.

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

1.4.2 판다스 시작 - 파일을 DataFrame으로 로딩, 기본 API

 

 

 

 

 

판다스는 scv, tab 과 같은 파일을 손쉽게 DataFrame으로 로딩할 수 있도록 한다.

 

이를 위한 실습을 진행해보자.

 

 

 

 

 

 

[ 주피터 노트북 사용법 참고 ]

 

https://wlalsu.tistory.com/109

 

[머신러닝] 섹션 1.2 파이썬 머신러닝 생태계를 구성하는 주요 패키지

1.2.1 Python 기반의 머신러닝을 익히기 위해 필요한 일반적인 패키지 1. 머신러닝 패키지 1) 사이킷런 (Scikit-Learn) : 가장 대표적인 머신러닝 패키지로, 데이터 마이닝 기반 머신러닝에서 독보적인

wlalsu.tistory.com

 

 

 

 

 

 

 

 

먼저 판다스 모듈을 import 하기 위해,

 

주피터 노트북을 생성하고 아래의 코드를 입력한다.

 

 

 

 

 

import pandas as pd

 

 

 

 

 

 

관례적으로 판다스를 import 할 때,

 

pandas를 pd 로 alias 하여 임포트한다.

 

 

 

 

 

 

실습을 위해 사용할 데이터베이스는 캐글의 타이타닉 탑승자 파일을 사용하였는데,

 

아래의 사이트에서 로그인 후 다운받을 수 있다.

 

 

 

 

 

 

 

 

https://www.kaggle.com/c/titanic/data

 

Titanic - Machine Learning from Disaster | Kaggle

 

www.kaggle.com

 

 

 

 

 

 

 

 

 

페이지의 하단의 Data Explorer에서 train.csv 파일을 클릭한 후

 

다운로드를 진행한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

이후 다운로드 받은 파일은 titanic_train.csv 이름으로 변경

 

앞서 생성한 주피터 노트북 디렉토리에 저장한다.

 

(기본 폴더 경로는 C:\Users\사용자이름)

 

 

 

 

 

 

 

다운로드한 csv 파일을 확인해보면

 

맨 위 줄에는 칼럼명이 작성되어 있고, 아래에는 각 필드가 콤마로 분리되어 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[ 추가 ] 판다스에서 다양한 포맷 파일을 DataFrame으로 로딩하는 API


1)  read_csv()

- 칼럼을 콤마 ( , )로 구분한 CSV 파일 포맷 변환


- CSV 뿐만 아니라 sep 에 구분 문자를 입력하여 어떠한 파일 포맷도 변환 가능

   ex) read_csv('파일명', sep='\t')


2) read_table()

- 칼럼을 탭 ( \t )으로 구분한 파일 포맷 변환


3) read_fwf()

- 고정 길이 기반 (fixed width) 칼럼 포맷 변환

 

 

 

 

 

 

 

 

 

앞선 판다스의 API 중 가장 기본적인 read_csv 로 실습을 진행한다.

 

read_csv() 사용 방법에 대해 더 자세하게 알아보자.

 

 

 

 

 

 

 

 

read_csv()

 

 

 

 

- 칼럼을 콤마 ( , )로 구분한 CSV 파일 포맷 변환

 

- sep 인자에 구분 문자를 입력하여 어떠한 파일 포맷도 변환 가능

 

- 파일명 인자로 들어온 파일을 로딩하여 DataFrame 객체로 반환

 

- 파라미터를 지정하지 않으면 파일의 맨 첫 row를 칼럼명으로 변환

 

 

 

 

 

 

 

 

read_csv() 함수에서 가장 중요한 인자는 filepath 이다.

 

(나머지 인자는 지정하지 않을 시 디폴트 값)

 

 

 

 

 

read_csv(filepath or buffer, sep=', ', ...)

 

 

 

 

 

 

 

filepath 에는 로드하는 데이터 파일의 경로와 파일명을 함께 입력해야 한다.

 

 

 

 

파일경로를 입력하지 않을 시,

 

파이썬 실행 파일이 있는 디렉토리에 있는 파일을 로딩한다.

 

 

 

 

앞서 우리는 csv 파일을 새로 생성한 주피터 노트북의 디렉토리에 저장하였으므로

 

단순히 read_csv('titanic_train.csv') 만으로 DataFrame 으로 로딩할 수 있다.

 

 

 

 

 

실제로 titanic_df 를 호출해보면

 

아래와 같이 DataFrame이 모든 데이터가 출력되는 것을 확인할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

출력 값에서 가장 왼쪽의 0, 1, 2, ... 순서대로 표시되어 있는 값은

 

판다스의 Index 객체로, 데이터가 생성되는 순간 고유의 값을 가진다.

 

 

 

 

 

 

 

 

 

head()

 

 

 

 

- 모든 데이터를 한번에 보기 어려울 때에 일부 데이터 반환

 

- 기본적으로 상위 5개의 값 반환

 

- 괄호 안에 숫자를 입력하여, 표출하고 싶은 데이터의 개수 지정 가능

 

 

 

 

 

DataFrame.head()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

shape

 

 

 

 

- DataFrame의 행과 열의 크기 반환

 

- 행과 열을 튜플 형태로 반환

 

 

 

 

 

DataFrame.shape

 

 

 

 

 

 

 

 

 

앞선 titanic_df는 891개의 row와 12개의 column을 가지고 있는 것을 확인할 수 있다.

 

 

 

 

 

 

 

 

info()

 

 

 

 

- 총 데이터 건수, 데이터 타입, null 건수 확인 가능

 

- RangeIndex : index의 범위 (row와 colun의 수)

 

- column / not-null count : 몇 개이 데이터가 null이 아닌지 나타냄

 

- dtype : 칼럼별 데이터 타입 표현

 

- dtypes : 모든 칼럼의 타입을 요약

 

 

 

 

 

 

DataFrame.info()

 

 

 

 

 

 

 

 

 

 

describe()

 

 

 

 

- 오직 숫자형칼럼의 분포도만 조사 (object 타입은 제외)

 

- 칼럼별 숫자형 데이터값의 n-percentile 분포도, 평균값, 최댓값, 최솟값 반환

 

- 정확한 분포도는 알기 어렵지만, 대략적인 분포도 확인 가능

 

- 해당 칼럼이 숫자형 카테고리 칼럼인지 확인 가능

 

 

 

 

 

 

[ 추가 ] 칼럼별 데이터의 의미


- count : Not Null 인 데이터 개수

- mean : 전체 데이터 평균값

- std : 표준편차

- min / max : 최솟값 / 최댓값

- (숫자)% : (숫자)percentile 값 

 

 

 

 

 

 

 

 

 

DataFrame.describe()

 

 

 

 

 

 

 

 

 

 

 

앞서 describe() 를 통해

 

해당 숫자 칼럼이 숫자형 카테고리 칼럼인지 판단할 수 있다고 하였다.

 

 

 

 

 

숫자형 카테고리 칼럼이란 특정 범주에 속하는 값을 코드로 나타낸 것이다.

 

가령 남자는 1, 여자는 0으로 나타내는 경우가 해당된다.

 

 

 

 

 

위의 예시를 살펴보면

 

Pclass의 경우 min값은 1이고, 25~75%가 2, max가 3이므로

 

1, ,2 ,3 값을 가지는 숫자형 카테고리 칼럼이라고 판단할 수 있다.

 

 

 

 

 

 

 

실제로 Pclass의 데이터 값을 확인해보자. 

 

 

 

 

 

 

 

 

 

 

 

 

 

실제로 Pclass의 데이터 값은

 

3이 491개, 2는 216개, 1은 184개로 이루어진 것을 확인할 수 있다.

 

 

 

 

 

앞서 Pclass 데이터 값을 확인하기 위해 사용한

 

2가지 함수에 대해 자세하게 알아보자.

 

 

 

 

 

 

 

 

 

 

DataFrame [칼럼명]

 

 

 

 

 

- 해당 칼럼에 해당하는 Series 객체 반환

 

 

 

 

 

 

 

 

 

 

 

 

value_counts()

 

 

 

 

- 지정된 칼럼의 데이터 값 건수(Series 객체) 를 반환

 

- 많은 건수 순서로 정렬되어 값을 반환

 

- dropna 인자를 사용하여 null 값 포함 여부 설정 가능 (기본값은 True = null 무시)

 

- 판다스 버전 1.1.0 이후부터는 Series 뿐만 아니라 DataFrame 객체에서도 호출 가능

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

출력된 데이터 값에 대해 더 자세하게 알아보자.

 

 

 

 

 

반환 값의 왼쪽에 위치 하고 있는 3, 2, 1 은 Series 의 Index 값에 해당하고,

 

오른쪽에 위치한 491, 216, 184는 Series의 데이터 값을 의미한다.

 

 

(* Series는 Index와 단 하나의 칼럼으로 구성된 데이터 세트)

 

 

 

 

 

 

여기서 Index값에 대해 더 자세히 알아보면,

 

인덱스는 단순히 0부터 시작하는 순차 값이 아닌,

 

고유성이 보장된다면 의미 있는 데이터 값이나 문자열으로도 할당 가능하다.

 

 

 

 

 

 

 

또한 인덱스는 DataFrame이나 Series가 만들어진 후에도 변경 가능하다.

 

 

 

 

 

 

 

또한 앞서 dropna 인자를 사용하여 null 값 포함 여부 설정 가능하다고 하였다.

 

dropna 인자의 기본 값은 True로 Null 값을 무시하고 데이터 건수를 계산한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

위의 예시를 살펴보면

 

 

Embarked 칼럼의 전체 데이터는 891 건이지만, 

 

dropna 가 기본값인 True로 설정되어 있는 경우, 2건의 Null 데이터가 표시되지 않고,

 

dropna 값을 False로 설정하는 경우, 모든 데이터 값을 포함하고 있는 것을 확인할 수 있따.

 

 

 

 

 

 

 

 

 

 

 

 

 

권철민 '파이썬 머신러닝 완벽 가이드 (개정2판)' 책을 기반으로 작성하였습니다.