TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 기초>

[파이썬] 판다스 (Pandas) - 1

by 기록자_Recordian 2024. 5. 25.
728x90
반응형
시작에 앞서
해당 내용은 '<파이썬 머신러닝 완벽 가이드> 권철민 지음. 위키북스' 를 토대로 작성되었습니다. 보다 자세한 내용은 해당 서적을 참고해 주시기 바랍니다.

네이버 도서

책으로 만나는 새로운 세상

search.shopping.naver.com


데이터 핸들링 - 판다스

 
판다스(Pandas)는 파이썬에서 데이터 처리를 위해 존재하는 가장 인기 있는 라이브러리이다. 일반적으로 대부분의 데이터 세트는 행(Row)과 열(Column)으로 구성되어 있는 2차원 데이터이다. 행과 열의 2차원 데이터가 인기 있는 이유는 바로 인간이 가장 이해하기 쉬운 데이터 구조이면서도 효과적으로 데이터를 담을 수 있는 구조이기 때문이다.
판다스는 행과 열로 이뤄진 2차원 데이터를 효율적으로 가공/처리할 수 있는 다양하고 훌륭한 기능을 제공한다.
 
◆ 판다스 vs 넘파이
넘파이는 저수준 API가 대부분이다. 판다스는 많은 부분이 넘파이 기반으로 작성됐는데, 넘파이보다 훨씬 유연하고 편리하게 데이터 핸들링을 가능하게 해준다. 판다스는 파이썬의 리스트, 컬렉션, 넘파이 등의 내부 데이터 뿐만 아니라 CSV 등의 파일을 쉽게 DataFrame 으로 변경해 데이터의 가공/분석을 편리하게 수행할 수 있게 만들어준다.
 
◆ DataFrame, Index, Series
판다스의 핵심 객체는 DataFrame이다. DataFrame은 여러 개의 행과 열로 이뤄진 2차원 데이터를 담는 데이터 구조체이다.
Index는 RDBMS의 PK(Primary Key, 기본키) 처럼 개별 데이터를 고유하게 식별하는 Key 값이다.
Seires 와 DataFrame 은 모두 Index를 Key 값으로 가지고 있으며, 이 둘의 가장 큰 차이는 Series는 칼럼이 하나 뿐인 데이터 구조체이고, DataFrame은 칼럼이 여러 개인 데이터 구조체라는 점이다. (DataFrame은 여러 개의 Series로 이뤄졌다고 할 수 있다.)
 
판다스는 csv, tab 과 같은 다양한 유형의 분리 문자로 칼럼을 분리한 파일을 손쉽게 DataFrame으로 로딩할 수 있게 해준다.


판다스 시작 - DataFrame으로 파일 로딩 (캐글 타이타닉 csv)

 
먼저 판다스 모듈을 import 하고, 데이터 파일을 판다스의 DataFrame으로 로딩
사용할 데이터 파일은 캐글에서 제공하는 타이타닉 탑승자 파일이며, 하단의 링크에서 다운로드
https://www.kaggle.com/c/titanic/data
 
※ 단, 다운로드 전 캐글 계정이 있어야 하며, 로그인을 해야 한다. (구글 계정 연동 가능)

'train.csv' 파일을 다운로드 하면 된다.

 
다운로드할 때, 경로는 본인의 주피터 노트북 디렉터리로 다운로드 받는다.
 
◆ read_csv( )
 
판다스는 다양한 포맷으로 된 파일을 DataFrame으로 로딩할 수 있는 편리한 API를 제공한다.
대표적으로 read_csv( ), read_table( ), read_fwf( ) 등

  • read_csv( ): CSV(칼럼을 ','로 구분한 파일 포맷) 파일 포맷 변환을 위한 API
  • read_table( ) 과 read_csv( )의 가장 큰 차이는 필드 구분 문자가 콤마(,)냐 탭(\t) 이냐의 차이이다.
  • read_fwf( )는 Fixed Width, 즉 고정 길이 기반의 칼럼 포맷을 DataFrame으로 로딩하기 위한 API 이다.

read_csv( )는 CSV 뿐만 아니라 어떤 필드 구분 문자 기반의 파일 포맷도 DataFrame으로 변환이 가능하다. read_csv( )의 인자인 sep에 해당 구분 문자를 입력하면 되는데,
예를들어 탭으로 필드가 구분돼 있다면 read_csv('파일명', sep='\t') 처럼 쓰면 된다.
read_csv( )에서 sep 인자를 생략하면 자동으로 콤마로 할당한다.
 
read_csv(filepath_or_buffer, sep=', ',...) 함수에서 가장 중요한 인자는 filepath 이다.
나머지 인자는 지정하지 않으면 디폴트 값으로 할당되는데, Filepath에는 로드하려는 데이터 파일의 경로를 포함한 파일명을 입력하면 된다.
파일명만 입력되면 파이썬 실행 파일이 있는 디렉토리와 동일한 디렉토리에 있는 파일명을 로딩한다.
 
예.) 변수명 = pd.read_csv('파일경로')
※ 만약 새로운 주피터 노트북과 파일이 같은 디렉터리에 있다고 하면 ('파일명') 만으로도 로딩이 가능하다.


DataFrame 구조 파악하기

 
상단의 DataFrame 객체를 보면 데이터 파일의 첫 번째 줄에 있던 칼럼 문자열이 DataFrame의 칼럼으로 할당되었다.
read_csv( )는 별다른 파라미터 지정이 없으면 파일의 맨 처음 로우를 칼럼명으로 인지하고 칼럼으로 변환한다.
그리고 콤마(,)로 분리된 데이터값들이 해당 칼럼에 맞게 할당된다.
 
맨 왼쪽을 보면 파일에 기재돼 있지 않은 데이터값이 로우 순으로 0, 1, 2... 과 같이 순차적으로 표시돼 있음을 알 수 있는데, 이 데이터들을 바로 판다스의 Index 객체 값이다.

모든 DataFrame 내의 데이터는 생성되는 순간 고유의 Index 값을 가지게 되고, 이 인덱스는 RDBMS의 PK와 유사하게 고유의 레코드를 식별하는 역할을 한다.
 
※ DataFrame.head(N)는 DataFrame의 맨 앞에 있는 N개의 로우를 반환한다.(생략 시 5개)
※ DataFrame의 shape 변수: DataFrame의 행과 열을 튜플 형태로 변환한다.

해당 객체는 891개의 로우와 12개의 칼럼으로 이루어진 것을 알 수 있다

 
※ info( ) 메서드: 총 데이터 건수와 데이터 타입, Null 건수 파악

  • RangeIndex: DataFrame의 인덱스 범위 표시. 전체 Row 수 파악
  • Dtype: 칼럼별 데이터 타입 표시. 이를테면 PassengerId 칼럼의 데이터는 int64 타입
  • Non-Null Count: 몇 개의 데이터가 non-null (Null 값이 아님)인지 표시. 이를테면 Cabin 칼럼에는 총 891개 데이터 중 204개가 Null 이 아니며 나머지 687개 데이터는 null 값임
  • 하단의 dtypes: 전체 12개 칼럼들의 타입 요약. 2개 칼럼이 float64, 5개 칼럼이 int64, 나머지 5개 칼럼이 object 타입

 
※ descirbe( ) 메서드: 칼럼별 숫자형 데이터값의 n-percentile 분포도, 평균값, 최댓값, 최솟값을 나타낸다. 오직 숫자형(int, float 등) 칼럼의 분포도만 조사하여 자동으로 object 타입의 칼럼을 출력에서 제외시킨다.

  • count: Not Null인 데이터 건수
  • mean: 전체 데이터의 평균값
  • std: 표준편차
  • min: 최솟값
  • 25%(50%, 75%): 25(50, 75) percentile 값
  • max: 최댓값

 
또한, describe( ) 해당 숫자 칼럼이 숫자형 카테고리 칼럼인지를 판단할 수 있게 도와준다.
카테고리 칼럼은 특정 범주에 속하는 값을 코드화한 칼럼인데, 가령 성별 칼럼의 경우 '남', '여'가 있고 '남'을 1, '여'를 2와 같이 표현한 것이다. 이러한 카테고리 칼럼을 숫자료 표시할 수도 있는데 이를 확인할 수 있다.

  • PassengerId 칼럼은 승객 ID를 식별하는 칼럼이므로 1~891 까지 숫자가 할당되어서 분석을 위한 의미있는 속성이 아니다.
  • Survived의 경우 min 0, 25~75%도 0, max는 1이므로 0과 1로 이뤄진 숫자형 카테고리 칼럼일 것이다.
  • Pclass의 경우도 min이 1, 25~75%가 2와 3, max가 3 이므로 1, 2, 3으로 이뤄진 숫자형 카테고리 칼럼일 것이다.

 
※ DataFrame의 [ ] 연산자 내부에 칼럼명을 입력하면 Series 형태로 특정 칼럼 데이터 세트가 반환된다.


value_counts, Series

 
※ Series 는 Index와 단 하나의 칼럼으로 구성된 데이터 세트이다. 이렇게 반환된 Series 객체가 어떤 값으로 구성돼 있는지 확인 (head( ) 메서드를 사용하여 앞의 5개만 추출)

왼쪽은 Series의 인덱스, 오른쪽은 Series의 데이터 값

 
이렇게 반환된 Series 객체에 value_counts( ) 메서드를 호출하면 해당 칼럼값의 유형과 건수를 확인할 수 있다.
  value_counts( )는 지정된 칼럼의 데이터값 건수를 반환하고, 데이터의 분포도를 확인하는 데 매우 유용한 함수이다.

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

 
단일 칼럼으로 되어 있는 Series 객체에서 value_counts( ) 메서드를 호출하는 것이 칼럼별 데이터 값의 분포도를 좀 더 명시적으로 파악하기 쉽다.
value_counts( )를 titanic_df의 Pclass 칼럼만을 값으로 가지는 Series 객체에서 호출하여 메서드의 반환값을 다시 확인

 
인덱스는 DataFrame, Series가 만들어진 후에도 변경할 수 있으며, 숫자형 뿐만 아니라 문자형도 가능하다.
단, 모든 인덱스는 고유성이 보장되어야 한다.
 
value_counts( ) 메서드를 사용할 때는 Null 값을 무시하고 결괏값을 내놓기 쉽다는 점을 유의해야 하는데, 이때 Null 값을 포함하여 개별 데이터 값의 건수를 계산할지를 dropna 인자로 판단한다.
dropna의 기본값은 True 이며, Null 값을 무시하고 개별 데이터 값의 건수를 계산한다.
만약 Null 값을 포함하여 value_counts( )를 적용하고자 한다면 dropna의 인자값을 False로 적용하면 된다.

dropna=False 적용 시, NaN 값이 2건 표시되는 것을 볼 수 있다

다음글

[파이썬] 판다스 (Pandas) - 2

728x90
반응형