brunch

You can make anything
by writing

C.S.Lewis

by 박경아 Apr 20. 2021

15. 데이터 분석을 위한 라이브러리, 판다스 (1)

우리는 앞서 수 데이터의 집합을 효율적으로 다룰 수 있는 넘파이에 대해 공부했다. 특히 다차원의 수 행렬 데이터의 경우 파이썬 기본 문법과 데이터 유형(리스트와 같은)만으로 처리하는 것보다 훨씬 간단한 코드로 아이템에 대한 또는 아이템간 연산을 처리할 수 있었고 다양한 수학적 함수를 지원하는 것이 특징이었다.


데이터 분석에서 여러 개의 값을 가진 변수를 벡터라고 하는데 넘파이와 판다스 모두 벡터를 다룬다. 넘파이의 어레이나 판다스의 시리즈와 같은 벡터는 파이썬의 기본 데이터형인 리스트와 달리 바로 요소에 대한 직접적인 연산이나 작업(Operation)이 가능하다고 했다.


판다스는 2008년 미국의 AQR 캐피탈이라는 금융 회사에서 일하던 개발자가 금융 데이터의 효율적인 분석을 위해 만들어진 툴로 기본적으로 여러 개의 시리즈를 컬럼으로 이어붙인 데이터 테이블 형태로 데이터를 분석하고 조작하기 위한 데이터 구조와 작업을 지원한다. 


실제 데이터 분석에서 주로 .csv 데이터를 판다스로 불러와 데이터 테이블 형태로 분석을 하게 되는데, 판다스를 통해 데이터의 종류와 특성을 파악하고 빈 값을 처리하며 데이터 간의 상관관계를 분석할 수 있다. 이러한 데이터 분석을 통해 데이터에 대한 인사이트를 얻고, 또한 데이터에 적절한 알고리즘을 선정할 수도 있다. 


그럼, 판다스의 기본 구조와 판다스로 데이터를 다루는 방법을 배워보자.



시리즈 생성 및 인덱싱


판다스는 기본적으로 2개의 주요 데이터 구조를 가지고 있다.


첫 번째는 시리즈다. 시리즈는 기본적으로 하나의 변수에 여러 개의 값을 가진 벡터로, 넘파이에서 제공하는 1차원 수배열과도 비슷하지만 각 데이터를 가르키는 인덱스(Index)가 있다는 점이 다르다. 


시리즈 = 값(value) + 인덱스(index)


판다스 라이브러리를 임포트하고 pd.Series( ) 함수에 리스트를 집어 넣어 시리즈를 만들어 보자. 시리즈의 데이터 값과 함께 각각의 데이터 값에는 0으로 시작하는 정수형 인덱스가 자동으로 배정되어 있음을 알 수 있다. 


인덱스의 값을 라벨(label) 이라고 하는데, 라벨은 문자열, 정수, 날짜 등으로 별도 지정하는 것도 가능하다. 인덱스를 아래와 같이 문자열 데이터로 바꿔보자. 

시리즈의 인덱스 추가하기


리스트와 마찬가지로 시리즈의 인덱스를 활용해 시리즈의 인덱싱(Indexing)과 슬라이싱(Slicing)을 할 수 있는데, 원래 자동 배정된 정수형 인덱스 외에도 새롭게 지정한 인덱스 라벨을 이용한 인덱싱과 슬라이싱이 모두 가능하다. 


역시, 리스트와 마찬가지로 인덱싱을 통해 데이터를 추가하거나 변경하는 것도 가능하다.

인덱싱을 통한 데이터 변경 및 추가


 

데이터 프레임의 생성 및 인덱싱


시리즈를 여러 개 옆으로 이어 붙여서 만든 직사각형 모양의 데이터 테이블이 데이터프레임이다. 시리즈가 1차원 벡터 데이터에 행방향의 인덱스를 붙인 것이라면, 데이터 프레임은 2차원 행렬 데이터에 행 인덱스 뿐만 아니라 열 인덱스도 가지게 되는 것이다. 


이미 우리는 넘파이를 이용해 리스트의 리스트를 집어 넣어 2차원 수행렬 데이터를 만든 적이 있다. 판다스를 임포트하고 pd.DataFrame( ) 함수에 리스트의 리스트라는 2차원 데이터를 넣어 데이터 프레임을 만들어 보자. 리스트 안의 각 리스트가 행이 되고, 각 리스트 안에서 같은 자리에 있는 수들이 열이 된다. 열의 이름은 함수의 인수로 추가할 수 있다. 

리스트의 리스트로 데이터프레임 만들기

행 이름도 역시 별도 인덱스를 추가할 수 있으며, 별도로 이름을 추가하지 않으면 열과 행 모두 정수형 인덱스를 가지게 된다. 


데이터프레임을 만드는 또 하나의 방법은 하나의 열이 되는 데이터를 리스트나 1차원 수배열 형태로 준비하고, 각각의 열의 이름을 키(Key)로 하는 딕셔너리를 만들어 데이터 프레임을 만드는 것이다. 이 때, 데이터 프레임은 공통 인덱스를 가지는 열의 시리즈를 딕셔너리 자료형으로 묶은 것이라도 할 수 있겠다. 

* 딕셔너리는 Key와 Value를 한 쌍으로 갖는 자료형이다. {Key1:Value1, Key2:Value2, ...}

딕셔너리로 데이터프레임 만들기


마지막으로 실제 가장 많이 쓰는 방법이겠지만 .csv 데이터를 판다스로 불러와 데이터 프레임을 만드는 것이다. BC카드 등 국내 11개의 업체가 운영하는 금융 빅데이터 플랫폼에서 ‘전국 아파트별 외식, 배달, 온라인 식품 매출’ 샘플 데이터를 다운로드 받아 불러와보자.


요즘 배달 사업이 핫하다 보니 ‘앱세권’이라는 말이 뜨고 있는데 어떤 아파트가 외식 혹은 배달 매출 비중이 높은지 알 수 있는 재미있는 데이터라 생각한다. 금융 빅데이터 플랫폼에서 제공하는 시각화 자료에서는 원하는 지역을 선택해 볼 수 있지만, 데이터는 우선 샘플 데이터만 다운로드 할 수 있다.


우리동네 배달순위


캐글에 샘플 데이터를 업로드하니 한글이 모두 깨져서 급하게 영어로 바꿨다…;; pd.read_csv( ) 함수를 이용해 csv 파일을 데이터 프레임으로 읽어보자. 원본 데이터에는 별도 행 인덱스가 지정되어 있지 않은데 데이터 프레임으로 불러오니 자동으로 정수형 인덱스가 생긴다. 


혹시 이미 csv 파일에 인덱스가 포함되어 있는 경우 판다스가 자동으로 파일의 인덱스를 픽업하지 않기 때문에 파일의 인덱스를 그대로 사용하고 싶다면 index.col이라는 인수를 이용해 인덱스 컬럼을 지정할 수 있다.


판다스의 데이터 프레임을 생성했다면 앞서 리스트나 넘파이 어레이와 마찬가지로 원하는 열 또는 행의 데이터를 선택할 수 있는 인덱싱과 슬라이싱을 연습해 보자. 


먼저 열 인덱싱이다. 기본적으로 데이터 프레임은 열방향 인덱스 값을 가지고 있으므로 이를 활용해 원하는 열을 인덱싱 할 수 있다. 열 인덱스 값을 하나를 넣으면 해당 시리즈 전체가 반환된다. 

df[‘column’]
df. column


열 인덱싱
df[‘column’] or df. column    # 둘 다 가능. 단, 열 이름에 띄어쓰기가 있는 경우 전자의 방법만 가능
열 슬라이싱
df[리스트]   #파이썬 기본 문법인 (:)을 사용하는 것이 아니라 라벨의 리스트를 넣는 데 주의


시리즈 인덱싱과 다른 점은 시리즈의 경우 별도 행 인덱스가 있는 경우 원래 정수형 인덱스와 라벨 인덱스를 모두 사용할 수 있는데, 데이터프레임의 열 인덱싱의 경우 열 인덱스를 이용한 라벨 인덱싱을 하고 정수형 인덱싱은 행을 인덱싱할 때 사용한다는 것이다. 


물론, 열의 라벨 자체가 정수형일 때는 행보다 우선해 열을 가르키는 인덱싱으로 사용된다. 


데이터 프레임의 행 인덱싱은 정수형 인덱스를 사용해 가능한데, 다만 행 인덱싱을 위해서는 항상 슬라이싱 형태로 사용해야 하는 것에 주의하자. 하나의 정수로 행 인덱싱을 실행하면 오류를 반환한다. 행 인덱스 역시 인덱스 라벨을 추가해 라벨로도 슬라이싱 할 수 있는데, 라벨로 슬라이싱할 경우에는 마지막 값도 포함된다. 


행 인덱싱
df[정수형 슬라이싱]을 이용


마지막으로 데이터 프레임의 열 데이터를 갱신하거나 추가, 삭제하는 방법을 알아보자. 열 인덱스를 활용해 인덱싱을 하고 값을 입력하면 특정 열의 값을 모두 한 번에 바꿀 수 있고, 새로운 열을 추가할 수 있다.


다음 판다스편에서는 캐글에 올라와 있는 자동차 보험회사의 고객 데이터를 이용해 데이터 특성과 종류를 파악하고 특정 조건을 만족하는 데이터를 추출하거나 통계 계산을 하는 등 판다스 조작법을 익혀 보도록 하자. 


판다스 시리즈 및 데이터프레임 연습하러 가기

https://www.kaggle.com/kyungapark/pandas-series-dataframe




# 참고자료

1. Learn Pandas Tutorials

https://www.kaggle.com/learn/pandas

2. 판다스(Pandas) and 넘파이(Numpy) and 맷플롭립(Matplotlib)

https://wikidocs.net/32829

3. 10 minutes to pandas

https://pandas.pydata.org/docs/user_guide/10min.html#min

4. 데이터사이언스 스쿨 -  판다스 패키지 소개 편

https://datascienceschool.net/

매거진의 이전글 14. 통계를 위한 파이썬 라이브러리, 넘파이 (2)
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari