본문 바로가기

데이터분석/pandas

공공데이터 '아파트 분양가격' 동향 파악하기 - final

2015년 8월 이전 데이터를 보겠습니다. 

 

중간에 ... 으로 생략된 게 보이는데요. 

 

pd.options.display.max_columns 로 컬럼이 다 보이게 설정했습니다. 

위 데이터 프레임은 컬럼이 100개는 아니지만 일단 최대치를 df_first 데잍프레임 컬럼보다 많이 늘려놓았기에 모든 컬럼이 이제

보입니다. 

 

최근 데이터 프레임과 예전 데이터 프레임(df_first) 의 양식이 많이 다릅니다. df_first를 최근 데이터 프레임 양식에 맞춰서 합쳐주겠습니다. 

 

df_first 데이터를 살펴보겠습니다. 

 

컬럼 데이터들을 melt 시키겠습니다. 

 

출처:https://pandas.pydata.org/docs/user_guide/reshaping.html#reshaping-by-melt

기존 컬럼을 행으로 녹여내는게 melt 입니다. 

 

melt 시킨 데이터를 다른 이름으로 할당하고 컬럼명 df_lasf 데이터프레임과 맞췄습니다. 

 

연도,월 분리

 

텍스트에서 원하는 글자를 분할 할때 자주 쓰는 메서드는 split 과 replace 입니다. 

df_last 에서는 연도와 월이 단위 없이 들어가 있습니다. 그렇기에 위 코드처럼 필요한 데이터문 분할합니다. 

 

이를 함수로 만들겠습니다. 시리즈 컬럼에 apply 메서드를 적용할 거기때문에 함수로 만들어줄 필요가 있습니다. apply를 쓰면 전체 시리즈의 로우마다 해당 로우의 값을 매개변수로 함수를 적용할 수 있기 때문입니다. 

 

함수가 잘 작동되는 걸 확인했으니 apply 메서드를 이용하여 필요한 값을 추출하여 별도의 컬럼으로 맞춰주겠습니다. 위 코드를 보면 제대로 추출된 것을 확인할 수 있습니다. 

 

df_last에서 column을 가져오는데 to_list 메서드를 이용해서 리스트로 컬럼명만 가져오겠습니다. 이를 별도의 인스턴스로 만들어준 뒤, loc를 이용해서 전용면적이 '전체'인 데이터만 따로 복사합니다. df_first 데이터가 별도의 전용면적으로 구분이 안되었기때문에 '전체' 전용젹먼에 넣기 위해서입니다. 

 

df_first_mel 데이터에서 필요한 컬럼만 cols로 추출하고 이를 복사해줍니다. 

concat 으로 데이터 합치기

그 후 concat 메서드를 이용해서 그대로 붙여줍니다. concat 은 조인이 아닙니다. 그냥 이어붙인다는 느낌으로 데이터 프레임끼리 연결해서 붙여주는 메서드입니다. 예를 들면, 

 

출처:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.concat.html

위 예제를 보시면 그대로 이어붙인다는 게 어떤 건지 확인할 수 있을겁니다. 

 

pivot_table , heatmap 

출처: https://pandas.pydata.org/docs/user_guide/reshaping.html

pivot table 의 개념 그림입니다. 

 

이번에는 Pivot_talbe 메서드를 통해 히트맵을 그려보겠습니다. 

 

 

인덱스와 컬럼, 값 이 3가지 인자를 잘 이해하시면 됩니다. 중요한 건 column인데요. 위에 개념도를 보면 기존 시리즈 단일 컬럼으로 있던 컬럼이 데이터 프레임 전체의 컬럼으로 변합니다. 축이 y->x 로 가는 그림이 머릿속으로 잘 상상이 된다면 피벗테이블에 대한 개념이 잘 잡혔다고 볼 수 있습니다. 

 

heatmap을 그릴 때 기존 피벗테이블을 tranpose 시켜서 그려보았습니다. cmap에서 원하는 색상을 선택할 수 있고, annot은 값이 표현되도록 하는 것입니다. 소수점 이하로 값을 안 보이겡 하려면 fmt (format의 약자) 에서 " .0f "로 설정하면 됩니다. 

 

이번에는 groupby 를 사용해서 히트맵을 그려보겠습니다. 

 

몇 번 앞에서 사용했기에 익숙해졌을 거라고 생각합니다. 여기서 unstack 의 개념도를 보겠습니다. 

 

pivot과 비슷합니다. y축이 x축으로 변하게 하는 것입니다. 

 

이후 과정은 똑같습니다.

2013년부터 최근 데이터까지 시각화

연도별 평당분양가격

 

이제, 위에서 concat 한 데이터를 시각화해보겠습니다. 

 

barplot은 평균값을 보여주고, 검은색 막대는 신뢰구간을 의미합니다. pointplot에서는 연도별로 넘어갈떄 기울기 값을 통해서 증가한 정도를 좀 더 확인할 수 있습니다. 

 

pointplot 을 지역별로 보겠습니다. 어느 지역이 전반적으로 많이 오르고 내려가는지 등이 지역별로 확인이 가능합니다. 

 

이번에는 서울만 분양가를 barplot으로 그려 보겠습니다. 

한 셀 안에 plot을 하나 더 해서 겹쳐서 그릴 수도 있습니다.

이번엔, boxplot, boxenplot, violinplot 을 그려보겠습니다.

 boxenplot은 boxplot의 단점을 보완한 그래프입니다.  하지만 violinplot의 좀 더 나은 것 같습니다. 

 

 

 

lmplot으로 데이터 분포를 자세히 확인하기는 어렵습니다. 이를 자세히 보기 위해 swarmplot을 사용하겠습니다. 

 

swarmplot 이랑 violinplot 을 같이 그릴 수 있습니다. 데이터의 분포를 좀 더 자세히 볼 수 있습니다. 

 

지역별 평당분양가격

 

이번에는 지역별로 평당분양가격을 보겠습니다. 

 

앞에서 그렸던 그래프를 그대로 x축만 바꿔서 해봤습니다. 

이렇게, 공공데이터 민간 아파트 분양가격을 분석해보았습니다. 

 

데이터 정제와 서로 다른 데이터프레임들을 합치고 시각화 하는 등의 작업이 대부분이었습니다.

주로 책에 있는 데이터나 필요한 게 있을때마다 구글링하면서 작업을 하다가 이렇게 전반적으로 정제와 시각화 작업을 한 것은 오랜만인데요. 흐름을 익히는데 더할 나히 없이 좋은 시간이었습니다. 

 

이 프로젝트는 인프런의 박조은 선생님의 '공공데이터 분석하기' 강의를 실습하면서 정리한 포스팅들입니다. 

개인적으로 데이터 분석을 공부하는 비전공자분들이라면 조은 선생님의 인프런 강의는 모두 수강하시면 좋을 것 같습니다. 

더구나, 공공데이터 분석하기 강의가 이번달에 대부분 리뉴얼될 예정이라고 합니다. 현재는 제가 했던 이 아파트 분양가 분석 부분만 리뉴얼되었고, 다른 챕터들도 될 예정이라고 공지사항에 써주셨습니다. 

 

이상 공공데이터 데이터 '아파트 분양가' 분석 프로젝트는 이것으로 마치겠습니다. 

감사합니다 :) 

 

 

https://github.com/JangDaehyuk/basic_data_analysis_tip 

 

위 깃허브에서 final이라고 끝에 써있는 ipynb을 받아주시면 됩니다 :) 

 

--참고 출처--

https://pandas.pydata.org/docs/user_guide/reshaping.html

 

Reshaping and pivot tables — pandas 1.0.1 documentation

Reshaping by Melt The top-level melt() function and the corresponding DataFrame.melt() are useful to massage a DataFrame into a format where one or more columns are identifier variables, while all other columns, considered measured variables, are “unpivote

pandas.pydata.org

https://github.com/corazzon/open-data-analysis-basic