<jupyter_start><jupyter_text>(10분 지각 ppt로 수업하고 있었음 ) 1 산업문제 소개 - 박윤영 주택 용도별 차이점과 기준단독, 다가구, 다세대하고싶은 것 경기도 연면적 300 대지 250 건축연도 2010 도로조건 8 가격 6억원 이런 식으로 조건을 입력했을 떄 이것과 유사한 집들을 보여주는게 가능한지. 유사군 추출어떻게 집들 사이에 유사도를 정의할지.   2 데이터 전처리<jupyter_code>import pandas as pd
import numpy as np
import os
import glob #파일 한꺼번에 부르기 위해서 사용
import re
glob.glob('*.*') #현재 작업하고 있는 파일명 모두
glob.glob(os.path.join("gh-data","*.*"))
filenames = glob.glob(os.path.join("gh-data","단독*.xlsx"))
filenames
re.split('([0-9]+)',filenames[1]) #숫자 연속된거까지 포함해서 숫자 있는 것에서 스플릿
filenames = sorted (filenames, key=lambda s: int(re.split('([0-9]+)',s)[1]),)
filenames
#잘 불러와지나 테스트

df0=pd.read_excel('gh-data/단독다가구(매매)_실거래가_ (1).xlsx',header = 16,encoding='utf-8').fillna(0) #header : 앞에 16줄 제외하려고. fillna(0)은 빈칸을 0으로 만들기 위해서

df0.head()
len(df0)
df0[['시군구','번지']]
df_raw=pd.DataFrame() #빈 데이터 프레임 만들기
for f in filenames:
    data = pd.read_excel(f,header=16,encoding='utf-8').fillna(0)
    df_raw = df_raw.append(data)
len(df_raw)
df_raw.tail()
df_raw.reset_index(inplace=True,drop=True) #인덱스 정리
df_raw.tail()
df_raw.to_excel('gh-data/2018_raw_data_my.xlsx',index=None, encoding='utf-8') #파일 저장
glob.glob(os.path.join('gh-data','*.*'))
df_raw=pd.read_excel('gh-data/2018_raw_data.xlsx',index_col=None,header=0,encoding='utf-8') #파일 불러오기
df=df_raw.copy()
df.head()
df.describe() #내용중 숫자로 된 데이터의 성질을 말해준다. 거래금액, 계약일이 안나오는 이유는 str으로 저장되어있어서 일 수 있음
df.dtypes #각각 column의 값들의 타잎 #연면적 : 층별로 다 바닥면적 합친 것/ 대지면적 : 토지면적을 수평에 정사영한 면적/ 토지면적 : 실제 땅의 면적 = 잔디 깔때 필요한 면적
df['거래금액(만원)']=df['거래금액(만원)'].str.replace(',','').astype(float) #,를 공배으로 바꾸고 float으로 형태 바꾸기
df.head(10)
df['도로조건'].unique() #데이터 어떤 것들 들어가있는지
df['도로조건']=df['도로조건'].replace(['-','m미만','25m이상'],['0','','26'],regex=True).astype(float)
df['도로조건'].unique()
s=df['계약년월'].astype(str)
df['연도']=s.str[0:4].astype(int) #없는 칼럼도 이렇게 바로 만들 수 있음
df['월']=s.str[-2:].astype(int)
# del df['계약년월']
df.head() #여기에 오류나 있는 이유는 한번 돌아간게 다시 돌리는 바람에 '계약년월'칼럼이 없기 때문에
del df['번지']
del df['계약일']
# del df['도로명']
df.head()<jupyter_output><empty_output><jupyter_text>지도 정보 데이터 파일은 오픈소스. 서울지역, 전국지역 각각 있다.<jupyter_code>#지도 데이터 파일과 형식 맞춰주기 위한 과정 : 지역_ID.txt

SiDo = []
SiGunGu = []
DongLi = []

for i in range(0,len(df['시군구'])):
    tmp = df['시군구'][i].split()  # 띄어쓰기로 split
    SiDo.append(tmp[0])            # 시/도
    SiGunGu.append(tmp[1])         # 시/군/구
    if len(tmp) > 3:
        DongLi.append(tmp[-1]+'('+tmp[2]+')')
    else:
        DongLi.append(tmp[-1])
df['SiDo'] = SiDo 
df['SiGunGu'] = SiGunGu
df['DongLi'] = DongLi

def cut_char_sigu(name):
    return name if len(name)==2 else name[:-1]
sido_candi =  df['SiDo'] #파일에서 특별시에는 '관악' 이런식이 아니라 '서울 관악' 이렇게 되어있기 떄문에 맞춰주려는 것
sido_candi = [name[:2] if name[:2] in ['서울','부산','대구','광주','인천','대전','울산','세종'] else '' for name in sido_candi]

sigun_candi = ['']*len(df)
for n in df.index:
#     print(n)
    each = df['SiGunGu'][n]
    if each[:2] in ['수원', '성남','안양','안산','고양','용인','청주','천안','전주','포항','창원']: #여기도 '분당' 아니라 '성남 분당' 이렇게 되어있는 곳들
        sigun_candi[n] = each[:2] + ' ' + each[2:-1] #re.split('시', each)[0]+' '+ cut_char_sigu(re.split('시', each)[1])
    else:
        sigun_candi[n] = cut_char_sigu(each)
        
ID_candi = [sido_candi[n]+' '+sigun_candi[n] for n in range(0,len(sigun_candi))]
ID_candi = [name[1:] if name[0]==' ' else name for name in ID_candi]
ID_candi = [name[:2] if name[:2]=='세종' else name for name in ID_candi]
df['ID'] = ID_candi
df.head() #박사님이 빠트린 부분 있다고 내일 다른 박사님이 얘기해줄거라고 함
df.to_excel('gh-data/2018_modified_data_my.xlsx',index=None,encoding='utf-8')
house_data=pd.read_excel('gh-data/2018_modified_data.xlsx', index_col=None, header=0,encoding='utf-8')
house_data.head()<jupyter_output><empty_output><jupyter_text>zillow.com 이라는 해외 사이트가 있는데. 사는건지 렌탈인건지 금액 방개수 설정해서 집 타입 화장실 개수 등등 조건 넣어서 조건에 해당되는 집 추천해주고 있다.정보가 꽤나 다양히 있다. 네이버 부동산에는 꽤나 정보가 다양하게 있긴 함. 직방은 한 세대 단위로만 매매하기 떄문에 건물 매매는 안나와있다. 건물안에 있었던 매매 정보라든지 학교정보 쭉 나와있다.서울 열린 데이터 광장, 등등 추천. 조금 쉬었다가 끝내겠따.  Data cleaning and Visualization<jupyter_code>import seaborn as sns
from pandas.plotting import scatter_matrix
import matplotlib.pyplot as plt
%matplotlib inline
del house_data['시군구']
import matplotlib as mpl
mpl.rc('font',family='Malgun Gothic')
house_type=house_data['주택유형'].unique()
num1=house_data['주택유형'][house_data['주택유형']=='단독'].count()
num2=house_data['주택유형'][house_data['주택유형']=='다가구'].count()
fig_pie=plt.figure(figsize=(8,8))
num_type=[num1,num2]
plt.rcParams['text.color']='Navy'
a, b=[plt.cm.Blues, plt.cm.Reds] 
plt.pie(num_type, labels=house_type, #그림은 여기줄만 해도 된다고 함
        colors=[a(0.6),b(0.6)],
        autopct='%.2f',  #자동으로 퍼센트 계산해서 해주라는 것
        wedgeprops={'linewidth':7,'edgecolor':'white'},
        textprops={'fontsize':18})
plt.show()<jupyter_output><empty_output>