본문 바로가기
카테고리 없음

230312 WIL

by hbIncoding 2023. 3. 13.

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화 시켰다.