파이썬(Python)/고양시 아파트 현황 조사

[부동산 | Phase2] 아파트 현황조사(고양시) - Python pandas 기본 (4부)

JJ Goh[Certified customs broker] 2020. 6. 9. 20:37

[부동산 | Phase2] 아파트 현황조사(고양시) - Python pandas 기본 (4부)



이제 마지막 물음에 도달하였다.


(3) 공동주택 건물 유형별로 공급되어 있는 세대수는 얼마나 될까?


건물 유형별 공급 세대수는 앞선 포스팅에서와 마찬가지로 groupby.sum()을 이용하면 되겠다.

지난 번 포스팅의 기억을 되살리며,  필요한 series부터 추출해 보자.

a9 = apt_Goyang[['건물유형','세대수','행정동','건령']]
a10 = a9[['건물유형','세대수']].groupby(by="건물유형", as_index=False).sum()
a11 = a10.sort_values(by="세대수", ascending=False)


파이참 터미널로 확인한 결과는 다음과 같다.

             건물유형              세대수

3             아파트                243809

5            연립주택                 8852

6            주상복합                 7058

7        주상복합/아파트            2841

8              주택                       265

0            공동주택                   237

2  다세대주택(도시형생활주택)      87

4              연립                        69

1           다세대주택                  20


 고양시 전체를 대상으로 한 공동주택 유형별 세대수이다.

 아파트가 압도적으로 많고 연립주택, 주상복합의 순서로 세대수가 많은 것으로 나타나고 있다. 

 자세한 의미 분석은 Phase3에서 진행하도록 하자.


 지금까지는 groupby() 함수로 한 개의 데이터 검색 조건에 맞추어 데이터를 집계해 보았다.

 그렇다면, 2개 이상의 검색 조건으로 분할하여 세부데이터를 보는 방법은 없을까? 엑셀에서는 피벗테이블을 만들면 행과 열의 조건으로 세부 데이터를 나누어 살펴 볼 수 있다. pandas에서도 pivot_table() 이라는 함수를 제공하여 해당 기능을 구현하고 있다.



pandas data frame의 pivot_table 작성하기



 그럼 이제 우리 데이터로 피벗테이블을 만들어 보자.


a12 = pd.pivot_table(a9, index='건물유형',columns='행정동', values='세대수', aggfunc='sum')


내가 파이썬을 사랑하는 이유... 코드 한줄로 끝이다. 

pivot_table함수를 호출하면서, data set을 명시하고 옵션을 주어 행과 열의 검색조건을 설정한다.

index로는 행의 검색기준을, columns로는 열의 검색기준을 준다. 그리고 values에는 어떤 값을 각 cell에 나타나게 할 것인지 지정한다. 마지막으로, aggfunc를 통해 각 cell에 나타날 값을 values의 어떤 연산값으로 할 것인지 설정한다. 만약 평균값을 구하고 싶다면 sum 대신 mean을 입력하는 방식으로 설정을 조절하면 되겠다. 당연한 사실이지만 values에는 사칙연산 등이 가능한 int 또는 float의 자료형인 데이터가 선택되어야 오류가 없겠다.



그럼 이제 우리의 코드를 실행하여 나온 결과를 엑셀파일에서 확인해 보자.

a12.to_excel('C:\\Users\\USER\\Desktop\\example\\a12_APTstat_Goyang.xlsx', sheet_name = "sheet1")



건물유형이 행으로, 행정동이 열로 나타난 결과를 확인할 수 있다.


이와 같은 방식으로 건령의 평균값도 확인해 보자.

a13 = pd.pivot_table(a9, index='건물유형',columns='행정동', values='건령', aggfunc='mean')
a13.to_excel('C:\\Users\\USER\\Desktop\\example\\a13_APTstat_Goyang.xlsx', sheet_name = "sheet1")


결측값이 있는 경우를 제외하고 값들이 정상적으로 출력된 것을 확인할 수 있다.

하지만, 테이블 형식의 단점은 눈에 쉽게 들어오지 않는다는 점이다. 데이터에서 Max, Min, 산포도 등 값이 평균보다 튀는 영역의 값들은 Data Visualization을 거치면 우리 눈에 쉽게 들어온다. 


이번 질문에서는 아래의 항목을 습득하였다.

a. pandas data frame의 pivot_table 작성하기




Phase2를 마치며


 우리는 이제껏 Phase 2.  1부에서 4부까지를 통해 Python의 pandas 모듈을 주로 이용하여 데이터의 가공 과정을 진행하였다. 이 정도 수준만으로도 데이터 분석의 많은 부분을 해낼 수 있다. 그런데도, 필자는 새로운 데이터를 다룰 때마다 여전히 생소하고 어려운 부분들을 많이 접한다. 하지만, stackoverflow나 hashcode, 파이썬 관련 주제를 다루는 다른 IT 블로그에서 다양한 유형의 더욱 간결한 문법들을 제공해 주기 때문에 걱정할 부분은 되지 못한다. 답을 얻을 때까지 구글링을 하고 또 하고.. 하다 보면 방법은 언제나 찾을 수 있었다. 독자분들께서도 정답을 찾아나가는 즐거움을 만끽하시길 바라마지 않는다.

 필자는 이미 소개글을 통해 이슈 분석은 Phase1 Data Mining 및 Refining - Phase2 Data Processing - Phase3 Data Visualization 및 Information Analysis의 단계로 진행하겠다고 했었다. 이 포스팅까지 하여 부동산 관련 첫번째 주제인 지역단위 아파트 현황조사의 Phase2까지 종료되었다. 

 다음 포스팅부터는 Phase3로 진입하여 과연 어떤 가치 있는 정보를 취득할 수 있을지 함께 살펴보자. 독자님들이 궁금해 하실 만한 부분도 함께 의견을 교환하며, 그 의미를 찾아나가길 소망한다. 


 




반응형