초봉5센티미터

TIL 13. 전국 신규 민간 아파트 분양가격 동향 분석 본문

교육/멋쟁이사자처럼 AI School 7기

TIL 13. 전국 신규 민간 아파트 분양가격 동향 분석

삶은돼지고기 2022. 10. 11. 19:14
728x90

str.replace()

- 시리즈에만 사용 가능

- 일부 일치하는 텍스트 대체

- 정규표현식 사용 가능

 

replace()

- 데이터프레임, 시리즈 모두 사용 가능

- 전체 텍스트가 일치해야 대체

- 정규표현식 사용 가능

 

- Tidy Data : 각 변수가 열이고 각 관측치가 행이 되도록 배열된 데이터

- Pandas 는 깔끔한 데이터를 만들기 위해 melt 기능 제공

 


전국 공동주택의 평균 분양가격 공공데이터를 활용해 전혀 다른 두개의 데이터를

전처리하고 병합하며 분석하는 실습을 수행하도록 하겠습니다.

 

수도코드는 다음과 같습니다

1) 2013~2015 연도와 월을 컬럼으로 만들어 줍니다.

 최근 2015~ 데이터와 같은 형태로 만들어 줍니다.


 2) 2015~ 제곱미터당 평균 분양가격 => 3.3 제곱미터당 가격으로 변경합니다.
전용면적을 전체만 사용합니다.


 3) 1), 2) 데이터를 concat 으로 병합해서 하나로 만들어 2013~ 최근까지의 분양가를 분석합니다.

 

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 한글폰트 사용을 위한 설정

import koreanize_matplotlib

# 그래프에 retina display 적용
%config InlineBackend.figure_format = 'retina'

 

공공데이터 포털에서 "주택도시보증공사_전국 평균 분양가격" 파일을 다운로드 받아 실습을 진행하겠습니다.

 

# 총 2개의 파일을 가져와 실습을 진행할 예정이기에 각각 df_last, df_fitst라는 변수에 저장
df_last = pd.read_csv("apt주택도시보증공사_전국 신규 민간아파트 분양가격 동향_20210930.csv", encoding = "cp949")

df_first = pd.read_csv("apt전국 평균 분양가격(2013년 9월부터 2015년 8월까지).csv", encoding = "cp949")
데이터 확인하기 
df_last.head()
	지역명	규모구분	연도	월	분양가격
0	서울	모든면적	2015	10	5841
1	서울	전용면적 60제곱미터이하	2015	10	5652
2	서울	전용면적 60제곱미터초과 85제곱미터이하	2015	10	5882
3	서울	전용면적 85제곱미터초과 102제곱미터이하	2015	10	5721
4	서울	전용면적 102제곱미터초과	2015	10	5879





df_first.head(2)
지역	2013년12월	2014년1월	2014년2월	2014년3월	2014년4월	2014년5월	2014년6월	2014년7월	2014년8월	...	2014년11월	2014년12월	2015년1월	2015년2월	2015년3월	2015년4월	2015년5월	2015년6월	2015년7월	2015년8월
0	서울	18189	17925	17925	18016	18098	19446	18867	18742	19274	...	20242	20269	20670	20670	19415	18842	18367	18374	18152	18443
1	부산	8111	8111	9078	8965	9402	9501	9453	9457	9411	...	9208	9208	9204	9235	9279	9327	9345	9515	9559	9581

데이터를 확인해보면 서로 비슷하면서 다른 데이터 set이라는걸 확인할 수있겠습니다. 

데이터를 하나로 합치기 위한 전처리를 하도록 하겠습니다. 

 

 

 

isnull을 통해 결측치를 확인하겠습니다.

# isnull 을 통해 결측치를 구합니다.
df_last.isnull().sum()

지역명       0
규모구분      0
연도        0
월         0
분양가격    479
dtype: int64

분양가격에 상당히 많은 결측치가 있는것이 보입니다. 

 

 

분양가격의 데이터 타입을 확인해보면 숫자형식의 데이터임에도 object 타입으로 되어있어

계산을 위해 수치 데이터로 변환하도록 하겠습니다. 

# df_last["분양가격"]astype(int) # 바꿀수 없는 값들이 포함되어 있어 astype는 안됨
df_last["분양가격"] = pd.to_numeric(df_last["분양가격"],errors="coerce")
#errors="coerce" 문자가 포함되어 있으면 강제로 Nan 값으로 변경
df_last["분양가격"].describe()

분양가격에는 공백등의 문자가 포함되어 있어 astype을 통한 데이터 타입 변환이 되지않아

pd.go_numeric을 통해 변경하였습니다.

errores = "coerce"를 통해 문자가 포함되어 있는 데이터도 강제로 Nan값으로 변환하였습니다.

 

 

 

2013년 부터의 데이터는 분양가격이 아닌 평당분양가격으로 되어있기에 데이터셋 결합을 위해

df_last에 있는 분양가격 컬럼을 평당분양가격으로 변경하도록 하겠습니다. 

분양가격을 평당으로 변환하기 위해서 * 3.3을 하도록 하겠습니다.

df_last["평당분양가격"] = df_last["분양가격"] * 3.3

	지역명	규모구분	연도	월	분양가격	평당분양가격
0	서울	모든면적	2015	10	5841.0	19275.3
1	서울	전용면적 60제곱미터이하	2015	10	5652.0	18651.6

 

 

수치데이터로 변경된 새로 생성한 평당분양가격 컬럼을 요약하여 살펴보겠습니다.

# 수치데이터로 변경된 분양가격 컬럼을 요약합니다.
df_last["평당분양가격"].describe()

count     5625.000000
mean     11415.748960
std       4658.860978
min       6164.400000
25%       8494.200000
50%      10121.100000
75%      12942.600000
max      45655.500000
Name: 평당분양가격, dtype: float64

 

 

df_last의 데이터프레임에는 규모구분컬럼에 전용면적에 대한 내용이 들어가있습니다. 

규모규분보다는 전용면적이 좀더 직관적이기 때문에 전용면적이라는 컬럼을 새로 만들어 

기존의 규모규분의 값에서 안에 데이터를 더 간결하게 변경하도록 하겠습니다.

 

# 규모구분을 전용면적으로 변경하기
# 전용면적, 제곱미터이하 필요없어서 제거
# regex = True는 경고메시지 출력 없애줌, 결과는 같음
# 제곱미터 초과라는 글자를 ~ 로 변경해서 깔끔하게 만들어주기
df_last["전용면적"] = df_last["규모구분"].str.replace("전용면적|제곱미터이하", "",regex=True)
df_last["전용면적"] = df_last["전용면적"].str.replace("제곱미터초과","~")
df_last["전용면적"] = df_last["전용면적"].str.replace(" ","")
df_last["전용면적"]

0         모든면적
1           60
2        60~85
3       85~102
4         102~
         ...  
6115      모든면적
6116        60
6117     60~85
6118    85~102
6119      102~
Name: 전용면적, Length: 6120, dtype: object

기존의 '전용면적 85제곱미터 초과 102제곱미터이하' 라는 데이터가 85~102로 변경된 것을 확인할 수 있습니다.

 

 

drop을 통해 전처리 해준 컬럼을 제거합니다. 

exis 0은 행 기준이고 1은 열 기준임을 명심합니다.

 

# 필요없는 규모구분, 분양가격 삭제
# df_last.drop(labels = ["규모구분", "분양가격"], axis = 1)
df_last = df_last.drop(columns=["규모구분","분양가격"])

 

# 제거가 잘 되었는지 확인 합니다.
df_last.head(2)

	지역명	연도	월	평당분양가격	전용면적
0	서울	2015	10	19275.3	        모든면적
1	서울	2015	10	18651.6	60

 

 

* 본글은 멋쟁이사자처럼 ai스쿨의 강의내용과 자료를 토대로 제작되었습니다.

Comments