pandas.pivot_table
- pandas 피봇테이블은 크게 index, columns, values, aggfunc으로 구성된다.
- 피봇테이블을 그려 볼 데이터를 가져왔다.
- pd.pivot_table() 로도 가능하지만, 해당 데이터프레임(df)이 있다면, df.pivot_table()로 만들 수 있다.
- 피봇테이블을 만들었을 때, 숫자데이터만 취합된다. 문자로 된 것들은 보여주지 않는다.
- 인덱스 설정은, index="인덱스"로 한다.
df.pivot_table(index="name")
- 멀티 인덱스도 가능하다. 2개 이상의 인덱스를 넣을 때는 리스트로 감싸서 넣어주면 된다.
df.pivot_table(index=["Name", "Rep", "Manager"])
- values 설정은 values=""의 형태로 해주면 된다.
- values를 지정하면 평균이 아니라 그 값 그대로가 출력된다.
- 함수는 보통 리스트로 넣고, ""는 쓰지 않는다.
df.pivot_table(index=["Manager", "Rep"], values="price", aggfunc=[np.sum, len])
- Columns까지 지정하고, 약간의 서식을 더 지정하려고 한다.
- 값이 없는 경우에는 fill_value=0을 코딩해서 0으로 출력되도록 한다.
- 엑셀의 부분합 기능과 비슷하게, 피봇테이블의 각 요소들의 부분합을 표시하기 위해서, margins=True
# 아래로 내려서 기재할 때는, 꼭 콤마(,) 잊지말자.
df.pivot_table(
index=["Manager", "Rep"],
columns="Product",
values=["Price", "Quantity"],
aggfunc=np.sum,
fill_value=0,
margins=True
)
- 기본적으로 이 정도만 숙지하고 우리 데이터로 피봇 테이블을 만들어본다.
피봇테이블 만들기 전에 데이터 준비하기
- 시민들에게 오픈되어 있는 유용한 공공데이터들이 많다.
- 보통 그런 데이터들은 분석 이전에 NaN 값이나 불필요한 것들을 제거하는 작업들이 필요하다.
- 우리도 서울시 범죄 현황 데이터(공공 데이터)를 공유 받아서 해당 작업을 해봤다.
- 일단 pandas, numpy 모듈을 임포트한다.
import pandas as pd
import numpy as np
- 그리고 해당 데이터(csv)를 Jupyter notebook으로 읽는다.
# encoding="cp949"에서 euc-kr로 적용해도 된다.
# thousand는 천 단위의 콤마를 제거해주려고 쓴다. - 나중에 발견하면 귀찮아진다.
crime_raw_data = pd.read_csv("../ds_study/data/02._crime_in_Seoul.csv", thousand=",", encoding="cp949")
- 데이터프레임의 정보를 보기 위해 .info()를 활용했다.
- 범죄현황과 관련한 데이터이기 때문에, '죄종' 기준으로 보기로 한다.
- 죄종이 모든 인덱스에 들어 있는지 유니크(.unique())로 확인해보려고 한다.
crime_raw_data["죄종"].unique()
- 죄종에 NaN값을 없애주기 위해서, 다음과 같이 처리했다.
# 죄종이 not null 이냐 물어보는 .notnull()을 적용하면 boolean 값으로 나온다.
# boolean에 따라서 crime_raw_data를 볼 수 있다.
crime_raw_data = crime_raw_data[crime_raw_data["죄종"].notnull()]
서울시 범죄현황 데이터 - 피봇 테이블 만들기
- index를 구분, column을 죄종, 발생검거, aggfunc을 총합으로 지정해서 피봇테이블을 작성한다. (crime_station에 저장)
crime_station = crime_raw_data.pivot_table(
index="구분",
columns=["죄종","발생검거"],
aggfunc=np.sum
)
crime_station.head()
- 해당 피봇테이블의 상단 2줄은 쓸모가 없어보인다. droplevel을 활용해서 삭제한다.
crime_station.columns = crime_station.columns.droplevel([0,1]) #0, 1번 삭제
- 결과적으로 crime_station 피봇테이블은 다음과 같다.
시각화 넷째 날 후기
csv나 excel 파일을 그냥 불러와서 작업할 때,
가끔은 이렇게 정돈되지 않은 데이터가 올 수 있을텐데 어떻게 하지 생각했었던 적이 있었다.
피봇테이블을 활용하면 데이터를 깔끔하고 이해하기 쉽게 정리하기 좋을 것 같다.
- 네카라쿠배 데이터사이언스 오프라인 1기 수강 中
'Data Science' 카테고리의 다른 글
[seaborn] 데이터 정리 및 다양한 시각화 실행 (0) | 2021.10.14 |
---|---|
[matplotlib] colormap 형태의 산점도와 선형 회귀식, 그리고 오차 표현 (0) | 2021.10.13 |
[matplotlib] 데이터 다듬어서 간단한 시각화 다뤄보기 (0) | 2021.10.13 |
[pandas] DataFrame(데이터프레임) 쪽지시험;Quiz 후기 (0) | 2021.10.07 |
[Pandas] DataFrame(데이터프레임) 알아보기 (0) | 2021.10.06 |
댓글