1. 파이썬으로 주소 분류 하기 ( 대, 중, 소 까지만 분류)
1)파일불러오기
import pandas as pd
import json
pd.set_option('display.max_columns',None)
pd.set_option('display.max_rows',None)
data = pd.read_csv('jusoDevide.csv', sep=',')
################
#1단계 : 파일 불러와서 원하는 컬럼 지정하고, 정상영업하는데만 골라서 중간에 null값있으면 다 날리고 새로운 이름으로 저장
################
data = pd.read_csv('nomalshop.csv', encoding='CP949', sep=',')
print(data.head(10))
data = data[['영업상태명','소재지전체주소','사업장명','업태구분명','좌표정보(x)','좌표정보(y)']]
print(data.head())
subdata = data.loc[data['영업상태명']=='영업/정상']
subdata = subdata.dropna(axis=0)
subdata.to_csv("newdatas.csv",encoding='utf-8-sig')
- 파일을 불러와서 원하는 컬럼만 뽑아낸 후 영업 상태가 정상영업인 row만 추출 하여 새로 저장
2)newdatas 파일 열어서 인덱스 컬럼을 없애주고, 대분류/중분류/소분류 컬럼을 직접 지정해줌
3)주소를 나눠서 각각 컬럼 채워주기
data = pd.read_csv('newdata_indexreset.csv', encoding='CP949', sep=',')
print(data.head())
maxrow = data.shape[0]
print(maxrow)
bigcity = ["고양시","성남시","수원시","안산시","안양시","용인시"
,"청주시","천안시","포항시","창원시","전주시"]
for i in range(0,maxrow):
juso = data.at[i,'소재지전체주소']
# print(i, " 번째")
# print(juso)
jl = juso.split(' ', 4)
if (jl[0]=='세종특별자치시'):
data.at[i, '대분류'] = jl[0]
data.at[i, '중분류'] = '세종시'
data.at[i, '소분류'] = jl[1]
else:
if (jl[1] in bigcity) :
data.at[i, '대분류'] = jl[0]
data.at[i, '중분류'] = jl[1]+" "+jl[2]
data.at[i, '소분류'] = jl[3]
else :
data.at[i, '대분류'] = jl[0]
data.at[i, '중분류'] = jl[1]
data.at[i, '소분류'] = jl[2]
data.to_csv("jusoDevide.csv",encoding='utf-8-sig')
- 큰 중도시의 경우 구를 시에 포함한다 '수원시 팔달구' 처럼
- 세종시의 경우 대분류에서 소분류로 넘어가기에 중분류에 '세종시'를 넣어주었다.
4)주소 분류를 JSON 파일로 만들기
biglist = data['대분류'].unique()
bigdict = dict()
for i in biglist:
print(i)
middata = data.loc[data['대분류']==i]
midlist = middata['중분류'].unique()
middict = dict()
for j in midlist:
print(i , " in ", j)
lowdata = middata.loc[data['중분류']==j]
middict[j] = lowdata['소분류'].unique().tolist()
bigdict[i] = middict
# print(bigdict)
with open('./data.json','w') as f:
json.dump(bigdict, f, ensure_ascii=False, indent=4)
- 서울시에 어떤 구들이 있는지, 홍성군에 어떤 읍/면이 있는지를 알 수 있게 Json화 시켰다.