Machine Learning & Deep Learning/파이썬 머신러닝 완벽 가이드(공룡책)

p39 ~ 04 데이터 핸들링- 판다스

유방울 2023. 5. 21. 15:41

대부분의 데이터 세트는 2차원 데이터

= 행 x 열로 구성 ex) TABLE, 엑셀 시트

Why? 인간이 가장 이해하기 쉬운 데이터 구조, 효과적으로 데이터를 담는 구조

-> 판다스는 데이터를 효율적으로 가공/처리하는 기능 제공

 

판다스

- 넘파이 기반으로 작성

- 넘파이보다 유연하고 편리하게 데이터 핸들링 가능

- 고수준 API 제공

- 파이썬의 리스트, 컬렉션, 넘파이 내부 데이터 + CSV 같은 파일을 쉽게 DataFrame 으로 변경

 

- 핵심 객체 : DataFrame : 여러 개의 행과 열로 이뤄진 2차원 데이터를 담는 데이터 구조체

- Index, Series 객체 이해 필요

- Index : RDBMS의 PK처럼 개별 데이터를 고유하게 식별하는 Key 값

- Series vs DataFrame

  Series  DataFrame(여러 개의 Series로 이뤄짐)
Column 하나 여러개
Index key 값을 가짐 key 값을 가짐

 

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

pandas 모듈 임포트

pd로 에일리어스(alias;가명)해 임포트하는 것이 관례

import pandas as pd

타이타닉 탑승자 데이터 파일

titanic_train.csv는 맨 위 줄 : 칼럼 명, 각각 필드는 콤마로 분리

DataFrame으로 로딩하는 API 제공

read_csv() : 칼럼을 콤마(,)로 구분한 파일 포맷

read_table() : 탭(\t)

read_fwf() : Fixed Width; 고정 길이

 

필드 구분 문자 기반의 파일 포맷도 DataFrame으로 변환 가능

sep 인자 사용

read_csv('파일명', sep=',') : 콤마로 필드 구분, 생략시 자동으로 콤마로 할당

read_csv('파일명', sep='\t') : 탭으로 필드 구분

 

read_csv(filepath, sep',',..)

filepath : 가장 중요한 인자, 나머지는 디폴트 값으로 할당됨

 

way 1

어떤 디렉터리에 파일 저장 -> read_csv(데이터 파일 경로명)

titanic_df = pd.read_csv("C:\Users\eewjd\Downloads\titanic_train.csv")

 

way 2

주피터 노트북과 파일이 모두 같은 디렉터리에 있음 -> read_csv('파일명')

titanic_df = pd.read_csv('titanic_train.csv')

첫 번째 행에 있는 칼럼 문자열이 DataFrame 칼럼명으로 할당됨

 

맨왼쪽에 파일에 기재돼 있지 않는 데이터값이 0부터 순차적으로 표시되어 있음

-> 판다스의 Index 객체로 DataFrame 내의 데이터는 생성될 때 고유의 Index 값을 가짐

head() : 맨앞 3개 행 반환, 디폴트 5개

shape : 행 열 튜플 형대로 반환

891행, 12열

print('DataFrame의 크기 :', titanic_df.shape)

DataFrame의 크기 : (891, 12)

info()

: 총 데이터 건수, 데이터 타입, null 건수를 알 수 있음

세부 설명

인덱스 범위 0 ~890로 행 891

칼럼 12 : 열 12

칼럼별 타입

891개 결측치가 아님

age칼럼 : 714개 결측치가 아님 -> 177개는 결측치라는 의미

칼럼 타입 요약 : float64 2개, int64 5개, object 5개
memory usage: 83.7+ KB : 

titanic_df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
 #   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)
memory usage: 83.7+ KB

describe() : 요약통계량, object 타입 칼럼은 출력에서 제외

숫자형 칼럼의 개략적인 데이터 분포 확인 가능

PassengerID : 승객 ID 칼럼으로 의미 없음

Survived : 1,0 이뤄진 숫자형 카테고리 칼럼

Pclass : 1, 2, 3으로 이뤄진 숫자형 카테고리 칼럼

titanic_df.describe()

	PassengerId	Survived	Pclass	Age	SibSp	Parch	Fare
count	891.000000	891.000000	891.000000	714.000000	891.000000	891.000000	891.000000
mean	446.000000	0.383838	2.308642	29.699118	0.523008	0.381594	32.204208
std	257.353842	0.486592	0.836071	14.526497	1.102743	0.806057	49.693429
min	1.000000	0.000000	1.000000	0.420000	0.000000	0.000000	0.000000
25%	223.500000	0.000000	2.000000	20.125000	0.000000	0.000000	7.910400
50%	446.000000	0.000000	3.000000	28.000000	0.000000	0.000000	14.454200
75%	668.500000	1.000000	3.000000	38.000000	1.000000	0.000000	31.000000
max	891.000000	1.000000	3.000000	80.000000	8.000000	6.000000	512.329200

시리즈.value_counts()

DataFrame과 리스트, 딕셔너리, 넘파이 ndarray 상호 변환

DataFrame <-> 파이썬의 리스트, 딕셔너리, 넘파이 ndarray

파이썬의 리스트, 딕셔너리, 넘파이 ndarray -> DataFrame 변환하기

DataFrame은 리스트,, 넘파이 ndarray와 다르게 칼럼면 가지고 있음

 

data는 리스트, 딕셔너리, 넘파이 ndarray 입력 받기

-> 생성 인자 columns은 칼럼명 리스트를 받아서 DataFrame 생성

 

DataFrame

: 행, 열로 이뤄진 2차원 데이터

: 2차원 이하의 데이터만 변환 가능

 

1차원 형태의 리스트, 넘파이, ndarray의 변환