판다스 기초-데이터 통합하기, 저장하기, 집계하기

 저번 판다스pandas 를 이용한 데이터 선택하기에 이어서 이번 포스팅에서는 데이터 통합하기, 저장하기, 집계하기를 공부해보려고 합니다

"판다스 기초-데이터 선택하기" 포스팅을 보실 분들은 아래 링크로 이동해주세요 ▼

https://pyrstudy.blogspot.com/2021/01/blog-post_13.html


저번 포스팅에 이어서 이번에도 sample_1 엑셀 자료를 사용할 예정이고

sample_codemaster.xlsx 과 sample_2.xlsx 도 사용 예정입니다.

다운 하실 분들은 아래 링크를 클릭하시면 됩니다.

(sample_1, sample_2, code_master 순)

https://drive.google.com/file/d/1AWo8p8CUnu5VOcNqNdAkiZFni2s66K_y/view?usp=sharing

https://drive.google.com/file/d/1zpSa2UYorx9E0ge5hNfM27tmbahX7heb/view?usp=sharing

https://drive.google.com/file/d/1qZM5vhui7HUCYvZAWiTfTPLJ0GHxNYqW/view?usp=sharing



데이터 통합하기에는 크게 두 가지 경우로 구분할 수 있습니다.
위 사진과 같이 하나는 옆으로 통합하기이며 나머지 하나는 아래로 통합하기입니다.



 (5) 데이터 통합하기- 옆으로 통합하기 (merge)

예제5-1: left 조건으로 옆으로 통합하기



예제 5-1 에서 사용하는 데이터는 sample_1.xlsxsample_codemaster.xlsx 인데요

sample_1은 앞선 포스팅에서와 마찬가지로 저 조건에 해당하는 부분을 사용할 예정입니다.

또한 앞서 추가한것과 같이 기존 데이터에서 기준년월 데이터가 추가된 데이터를 사용합니다.


데이터를 옆으로 통합할 때에는 pd.merge()함수를 이용합니다.

left =sample_1 은 통합할 때 왼쪽에 위치할 테이블이 sample_1 이다.

right=code_master 은 통합할 때 오른쪽에 위치할 테이블이 code_master 이다.

how='left' 는 왼쪽 테이블(sample_1) 을 기준으로 두 테이블을 통합한다.

left_on='국적코드' , right_on='국적코드' 는 각 테이블의 기준이 국적코드라는 의미입니다.


left 조건으로 통합을 하게 되면 왼쪽 테이블을 기준으로 통합되기 때문에 code_master 의 국적코드에 매칭되는 값 (A31) 이 없는 경우에는 NAN으로 결과가 출력됩니다.


*특정 코드가 국적코드표에 존재하지 않는 이유는 여러가지가 있을 수 있다고 합니다.

단순히 잘못 입력이 되었을 수도 있으며 아직 반영이 안된 값일 수도 있습니다.

따라서 실제 업무에서 이런 경우가 발생한다면 사용자가 데이터를 사용할지 말지를 결정해야 합니다.




예제5-2: inner 조건으로 옆으로 통합하기

예제 5-1에서는 왼쪽 테이블을 기준으로 두 테이블을 통합했다면 (how='left')

예제 5-2 에서는 how='inner' 을 사용해보겠습니다. 이 조건을 사용해주면 두 테이블의 기준 칼럼의 값이

서로 일치하는 경우에만 데이터를 통합하는 옵션입니다.


두 테이블의 기준 칼럼 값이 일치하지 않았던 A31을 제외한 나머지 값들이 출력된 것을 확인할 수 있습니다.




(6) 데이터 통합- 아래로 통합하기 (append)

예제6-1. sample_1_code 와 sample_2_code 준비하기




저희가 통합할 때 사용할 데이터는 sample_1_code sample_2_code 입니다.

그 전에 두 데이터를 만들어줘야하는데요

sample_1_code는 예제5_1에서 만든 데이터이고 sample_2_code도 sample_1_code 만들듯이 만들어줍니다. (기준년월 칼럼생성 & codemaster 자료와 옆으로 통합)

*데이터를 아래로 통합하기 위해서는 칼럼 순서가 동일해야합니다.



예제 6-2: 데이터 아래로 통합하기




append()함수를 이용해 sample_1_code의 칼럼을 기준으로 sample_2_code 데이터를 통합했습니다. 이때 ignore_index=True 인자를 지정하는 것이 좋은데요

만약 ignore_index=True 조건을 사용하지 않는다면 세번째 사진처럼 두 테이블의 인덱스값이 그대로 합쳐져 버려 애매?해집니다. ignore_index=True인자를 이용하면 두 테이블이 한 테이블처럼 인덱스 값을 갖게 됩니다.



(7) 데이터 저장하기

예제7-1: sample 데이터를 엑셀 파일로 저장하기



데이터 통합하기에 이어서 데이터 저장하기를 공부해보려고 합니다.
데이터 판다스를 처음 배웠을 때 파이썬으로 엑셀 파일을 불러왔다면
이번에는 파이썬에서 만든 데이터를 엑셀 파일로 저장하는 법을 공부해 볼 예정입니다.

예제 6-2에서 만든 sample 데이터를 저장해보았습니다.
sample.to_excel()을 이용하면 됩니다. 
() 안에는 파일 경로를 입력하면 됩니다.
저의 경우 저장할 위치 C:\Users\user\Desktop\pyr 데이터분석
와 파일명을 합쳐 \sample.xlsx 
C:\Users\user\Desktop\pyr 데이터분석 \sample.xlsx 을 입력했습니다.

실행을 한 뒤 실제로 해당 폴더를 확인해보면 sample 이라는 엑셀 파일이 저장된 것을 볼 수 있습니다. 







데이터를 저장할 때 index=False 를 인자로 지정하게 되면 

엑셀 파일로 저장할 때 index 번호를 제외하고 저장을 할 수 있습니다. 



(8) 데이터 집계하기 pivot_table

엑셀에서 데이터를 다루면서 가장 많이 활용하는 기능 중 하나가 바로 피벗테이블 기능인데요

이를 판다스를 이용해 파이썬에서 사용하는 방법을 배워보도록 하겠습니다.


피벗테이블이란 기존 데이터의 칼럼을 재구성해서 데이터에 대한 통계를 한 눈에 파악할 수 있게 정리한 표를 의미합니다. 예를 들어 "데이터를 연령별로 추출하기" 등과 같이 특정 조건에 따라 데이터를 집계할 때 유용하게 사용되는 기능입니다.


예제 8-1: 피벗 테이블 함수 활용1-국적과 기준년월에 따라 입국객수의 평균값 추출




sample 데이터를 사용했습니다.
sample.pivot_table()은 sample 데이터를 피벗화한다.
value='입국객수'은 피벗 테이블 내부에 들어갈 값은 입국객수로 한다.
index='국적명'은 피벗테이블에서 로우에 국적명을 배치한다. (액셀 기준 행)
columns='기준년월'은 칼럼에 기준년월에 배치한다. (엑셀 기준 열)
aggfunc='mean' 은 vaules(입국객수)를 index(국적명)와 columns (기준년월) 기준으로
평균을 계산한다
라는 의미입니다.

aggfunc 에는 평균, 합계, 최솟값, 중앙값, 최댓값, 개수, 중복을 제거한 후 개수 등의 옵션을 사용할 수 있습니다. (mean, sum, min, median, max, count, nunique)

이 예제의 경우 입국객수의 평균을 구했는데요
실제로 일본에 2019년 11월에 입국한 입국객수에 해당하는 인덱스 0,1 데이터를
평균을 내보면 (106320+191436)/2=148,878 의 값이 나옵니다.



예제 8-2: 피벗 테이블 함수 활용2-국적에 따른 최대 입국 객수



이번 예제에서는 국적을 기준으로 최대 입국객수를 알아보려고 합니다.

입국객수를 알아보려고 하기 때문에 -> value 에는 입국객수 설정을

예제 8-1과 달리 이번에는 기준이 국적 하나이기 때문에 -> index 에만 국적 설정을 해주었습니다. 

(index를 생략하고 columns에 국적 설정을 해줘도 무관합니다. 보통 index를 많이 쓰는것 같아요)

최댓값을 구하기 때문에 -> aggfunc에는 max 를 설정해주었습니다.



오늘은 이렇게 데이터 선택하기에 이어서 데이터 통합하기, 저장하기, 집계하기를 공부해보았습니다. 다음 글에서는 웹 크롤링 기초를 공부할 예정입니다. 감사합니다 :)








댓글 1개:

PyR Intro - 신입생OT학기제