241007 ~ 241008
In [2]:
## 데이터 전처리_준공일자
In [3]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from statsmodels.graphics.mosaicplot import mosaic
import scipy.stats as spst
import joblib
In [4]:
import matplotlib.font_manager as fm
# 설치된 폰트
font_list = [font.name for font in fm.fontManager.ttflist]
# 맑은고딕이 있는지 확인
'Malgun Gothic' in font_list
Out[4]:
True
In [5]:
plt.rcParams['font.family'] = 'Malgun Gothic'
data = pd.read_excel('data.xlsx')
In [6]:
data.head()
Out[6]:
단지코드단지명총세대수전용면적별세대수지역준공일자건물형태난방방식승강기설치여부단지내주차면수전용면적공급면적(공용)임대보증금임대료실차량수01234
C0001 | 엘에이치 서초4단지 | 78 | 35 | 서울 | 20131204.0 | 계단식 | 개별가스난방 | 전체동 설치 | 120 | 51.89 | 19.2603 | 50758000 | 620370 | 109 |
C0001 | 엘에이치 서초4단지 | 78 | 43 | 서울 | 20131204.0 | 계단식 | 개별가스난방 | 전체동 설치 | 120 | 59.93 | 22.2446 | 63166000 | 665490 | 109 |
C0002 | LH삼성아파트 | 35 | 26 | 서울 | 20130801.0 | 복도식 | 개별가스난방 | 전체동 설치 | 47 | 27.75 | 16.5375 | 63062000 | 458640 | 35 |
C0002 | LH삼성아파트 | 35 | 9 | 서울 | 20130801.0 | 복도식 | 개별가스난방 | 전체동 설치 | 47 | 29.08 | 17.3302 | 63062000 | 481560 | 35 |
C0003 | 강남LH8단지 | 88 | 7 | 서울 | 20131023.0 | 계단식 | 개별가스난방 | 전체동 설치 | 106 | 59.47 | 21.9462 | 72190000 | 586540 | 88 |
In [7]:
data.shape
Out[7]:
(1157, 15)
In [8]:
# 준공일자 -> 준공연도
# 준공일자 NaN
data['준공일자'].isnull().sum()
Out[8]:
54
In [9]:
# NaN -> 0000
# 결측치 -> nan(str)
data['준공일자'] = data['준공일자'].astype(str)
(data['준공일자'] == 'nan').sum()
Out[9]:
54
In [10]:
# nan -> '0000'
data['준공일자'].replace({'nan':'0000'}, inplace = True)
(data['준공일자'] == 'nan').sum()
C:\Users\User\AppData\Local\Temp\ipykernel_22080\2904634826.py:2: FutureWarning: A value is trying to be set on a copy of a DataFrame or Series through chained assignment using an inplace method.
The behavior will change in pandas 3.0. This inplace method will never work because the intermediate object on which we are setting values always behaves as a copy.
For example, when doing 'df[col].method(value, inplace=True)', try using 'df.method({col: value}, inplace=True)' or df[col] = df[col].method(value) instead, to perform the operation inplace on the original object.
data['준공일자'].replace({'nan':'0000'}, inplace = True)
Out[10]:
0
In [11]:
data['준공연도'] = data['준공일자'].str[:4].astype(int)
data['준공연도'].replace({0: 1992}, inplace= True)
C:\Users\User\AppData\Local\Temp\ipykernel_22080\2264956490.py:2: FutureWarning: A value is trying to be set on a copy of a DataFrame or Series through chained assignment using an inplace method.
The behavior will change in pandas 3.0. This inplace method will never work because the intermediate object on which we are setting values always behaves as a copy.
For example, when doing 'df[col].method(value, inplace=True)', try using 'df.method({col: value}, inplace=True)' or df[col] = df[col].method(value) instead, to perform the operation inplace on the original object.
data['준공연도'].replace({0: 1992}, inplace= True)
In [12]:
(data['준공연도'] == 0).sum()
Out[12]:
0
In [13]:
sns.boxplot(y = '준공연도', data = data)
plt.show()

In [14]:
data['준공연도'].min()
Out[14]:
1111
In [15]:
data.loc[data['준공연도'] == 1900, '단지명']
Out[15]:
476 남산휴먼시아1단지
477 남산휴먼시아1단지
478 남산휴먼시아1단지
Name: 단지명, dtype: object
In [16]:
data.loc[data['준공연도'] < 1992]['단지명'].unique()
Out[16]:
array(['푸른숨 9단지 10년 공공임대', '남산휴먼시아1단지', '광명역세권 휴먼시아2단지', '광명역세권 휴먼시아1단지'],
dtype=object)
In [17]:
temp = data.loc[data['단지명'].isin(['푸른숨 9단지 10년 공공임대', '남산휴먼시아1단지', '광명역세권 휴먼시아2단지', '광명역세권 휴먼시아1단지'])]
temp.drop_duplicates(subset = ['단지명'])
Out[17]:
단지코드단지명총세대수전용면적별세대수지역준공일자건물형태난방방식승강기설치여부단지내주차면수전용면적공급면적(공용)임대보증금임대료실차량수준공연도214476888894
C0061 | 푸른숨 9단지 10년 공공임대 | 756 | 200 | 강원 | 19700101.0 | 계단식 | NaN | NaN | 764 | 51.95 | 21.9539 | 27586000 | 322710 | 902 | 1970 |
C0156 | 남산휴먼시아1단지 | 499 | 276 | 대구경북 | 19000101.0 | 혼합식 | 개별가스난방 | 전체동 설치 | 507 | 51.81 | 22.7388 | 31360000 | 213230 | 568 | 1900 |
C0278 | 광명역세권 휴먼시아2단지 | 754 | 116 | 경기 | 11111111.0 | 복도식 | 지역난방 | 전체동 설치 | 683 | 39.79 | 17.7940 | 22830000 | 189840 | 807 | 1111 |
C0279 | 광명역세권 휴먼시아1단지 | 1354 | 420 | 경기 | 11111111.0 | 복도식 | 지역난방 | 전체동 설치 | 999 | 39.79 | 18.1471 | 22830000 | 189840 | 1295 | 1111 |
In [18]:
# 이상치 1992로 채우기
data.loc[data['준공연도']<1992, '준공연도'] = 1992
In [19]:
data['준공연도'].min()
Out[19]:
1992
In [20]:
# 준공일자 제거
data.drop(columns = ['준공일자'], inplace = True)
In [21]:
data
Out[21]:
단지코드단지명총세대수전용면적별세대수지역건물형태난방방식승강기설치여부단지내주차면수전용면적공급면적(공용)임대보증금임대료실차량수준공연도01234...11521153115411551156
C0001 | 엘에이치 서초4단지 | 78 | 35 | 서울 | 계단식 | 개별가스난방 | 전체동 설치 | 120 | 51.89 | 19.2603 | 50758000 | 620370 | 109 | 2013 |
C0001 | 엘에이치 서초4단지 | 78 | 43 | 서울 | 계단식 | 개별가스난방 | 전체동 설치 | 120 | 59.93 | 22.2446 | 63166000 | 665490 | 109 | 2013 |
C0002 | LH삼성아파트 | 35 | 26 | 서울 | 복도식 | 개별가스난방 | 전체동 설치 | 47 | 27.75 | 16.5375 | 63062000 | 458640 | 35 | 2013 |
C0002 | LH삼성아파트 | 35 | 9 | 서울 | 복도식 | 개별가스난방 | 전체동 설치 | 47 | 29.08 | 17.3302 | 63062000 | 481560 | 35 | 2013 |
C0003 | 강남LH8단지 | 88 | 7 | 서울 | 계단식 | 개별가스난방 | 전체동 설치 | 106 | 59.47 | 21.9462 | 72190000 | 586540 | 88 | 2013 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
C0356 | 덕유마을 주공1단지 | 956 | 956 | 경기 | 복도식 | 지역가스난방 | 전체동 설치 | 202 | 26.37 | 12.7500 | 9931000 | 134540 | 243 | 1994 |
C0358 | 화천신읍(공공실버) 영구임대 | 120 | 66 | 강원 | 복도식 | NaN | 전체동 설치 | 40 | 24.83 | 15.1557 | 2129000 | 42350 | 47 | 2020 |
C0358 | 화천신읍(공공실버) 영구임대 | 120 | 54 | 강원 | 복도식 | NaN | 전체동 설치 | 40 | 33.84 | 20.6553 | 2902000 | 57730 | 47 | 2020 |
C0359 | 영천야사4 | 447 | 149 | 대구경북 | 복도식 | 중앙유류난방 | 전체동 설치 | 89 | 26.37 | 13.3800 | 7134000 | 118880 | 78 | 1994 |
C0359 | 영천야사4 | 447 | 298 | 대구경북 | 복도식 | 중앙유류난방 | 전체동 설치 | 89 | 31.32 | 13.8500 | 8122000 | 131140 | 78 | 1994 |
1157 rows × 15 columns
In [ ]: