본문 바로가기
Python/API

API with Python(feat.공공데이터포털)(4) - Python 데이터 정제 후 Excel로 변환하기

by 지식광부키우기 2019. 9. 11.

이제 API with Python 마지막 시간 입니다. 

 

저번 시간에 데이터 불러오기까지 했으니 지금부터는 데이터를 정제하여 excel 파일로 변환하는 것까지 진행하겠습니다.

 

필요한 라이브러리를 불러옵니다.

from bs4 import BeautifulSoup    
import pandas   

 

BeautifulSoup이나 pandas는 나중에 설명드리겠습니다. 계속 따라해 보세요 

 

저번에 실행했던 response를 넣어줍니다. 

soup = BeautifulSoup(response.text, 'html.parser') 
ItemList=soup.findAll('item') 

 

다음 코드를 실행해보면 

for item in ItemList:
    print(item)
    print("---------------------------")

<item><mntiadd>서울특별시 서대문구 홍은동 </mntiadd><mntiadmin>( - )</mntiadmin><mntiadminnum>( - )</mntiadminnum><mntidetails>북한산이 걸쳐있는 행정구역은 서울, 경기도의 많은 지자체에 걸쳐있는 산이다. 그중 조사대상지역인 서울 서대문구 행정구역의 지형은 서울 서대문구 홍은2동지역을 감싸고 있는 형태이며, 남쪽으로는 홍제천을 바라보고 있다.조사대상지역은 북한산의 남쪽끝자락에 해당되며 능선을 따라 서대문구와 은평구로 행정구역이 나눠어지며, 구기터널 부근부터는 성벽을 따라 서대문구와 종로구로 나눠어진다. 서대문구에 속하는 지역은 지형이 그다지 험하지 않아 쉽게 등산이 가능하나, 조사지역경계 너머 북쪽 지역은 다소 지세가 험한 편이다. 일반등산로의 경우 그다지 등산이 어렵지는 않으나, 바위가 많은 곳은 경사가 심한곳이 많아 등산시 많은 주의가 필요하다.백두산, 지리산, 금간산, 묘향산과 함께 오악(五岳)에 포함될 정도로 자연경관이 매우 뛰어난 편이다. 비록 조사대상지역이 북한산끝자락에 속하지만 북한산 자연경관의 감상하기엔 부족함이 없다.</mntidetails><mntihigh>( - )</mntihigh><mntilistno>114100801</mntilistno><mntiname>북한산</mntiname><mntisname> </mntisname><mntisummary> </mntisummary><mntitop> </mntitop></item> --------------------------- <item><mntiadd>서울특별시 강북구 우이동 </mntiadd><mntiadmin>강북구청</mntiadmin><mntiadminnum>02-901-6114</mntiadminnum><mntidetails>서울의 진산 북한산은 조선조 초기에는 삼각산(三角山)으로 불렀다. 삼각산이란 이름은 〈신증동국여지승람〉에 '삼각산은 양주의 경계에 있다. 일명 화산(華山)이라 하고, 신라 시대에는 부아악(負兒岳)이라고 불렀다. 산은 경성(京城)의 진산으로 동명왕의 아들 온조가 한산(漢山)에 이르러 부아악에 올라가서 만한 곳을 살폈다'는 기록이 있으며, '백운봉(白雲峰, 지금의 백운대), 인수봉(仁壽峰), 만경봉(萬景峰, 지금의 만경대) 봉우리가 있으므로 그렇게 이름한 것이다'라고 유래를 기록하고 있다. 북한산성에 대해서는 〈신증동국여지승람〉과 〈북한지〉에 상세히 기록되어 있다. 북한산성은 백제 온조왕이 터를 잡았고 개루왕 성터를 쌓았다는 기록이 있으며, 조선 시대에 임진왜란, 병자호란을 치른 숙종 37년(1711년)에 시작하여, 6개월 만인 그해 10월에 완공하였다 한다. 북한산성은 험한 산세를 이용하여 정상을 기점으로 서쪽 산자락부터 원효봉, 염초봉, 백운대, 만경대, 용암봉, 문수봉, 나한봉, 나월봉, 용출봉, 의상봉까지 연결하여 쌓은 산성으로 길이가 10km에 달한다. 당시 산성에는 14개의 성문을 냈는데, 산성의 정문 격인 대서문을 중심으로 북쪽으로 수문, 서암문(시구문), 북문, 백운대를 지나 위문, 용암문, 대동문, 보국문, 대성문, 대남문, 청수동암문, 대서문에서 북서쪽으로 이어지는 산성에는, 부황 동암문, 가사동암문이 설치되었다. 현재는 대부분 성문을 복원하였다. 북한산에 수많은 등산로 거미줄 같이 엉켜 있어 산행 주의할 필요가 있는 곳이다. 북한산의 산행 들머리는 대표적으로 여섯 군데를 꼽고 있다. 우이동 기점, 4.19탑 기점, 정릉 기점, 세검정 기점, 불광동 기점, 구파발 북한산성 기점으로 구분할 있다.</mntidetails><mntihigh>( - )</mntihigh><mntilistno>113050202</mntilistno><mntiname>북한산_백운대</mntiname><mntisname> </mntisname><mntisummary> </mntisummary><mntitop> </mntitop></item> ---------------------------

 

이런식으로 item을 기준으로! 나뉘게 됩니다.

 

 

 

다음으로 태그별로 나누어서 깔끔하게 정리해보겠습니다. 

for item in ItemList:
    print(item.find('mntiadd').text)
    print(item.find('mntiadmin').text)
    print(item.find('mntiadminnum').text)
    print(item.find('mntidetails').text)
    print(item.find('mntihigh').text)
    print(item.find('mntilistno').text)
    print(item.find('mntiname').text)
    print(item.find('mntisname').text)
    print(item.find('mntisummary').text)
    print(item.find('mntitop').text)
    print("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ")

서울특별시 서대문구 홍은동 ( - ) ( - ) 북한산이 걸쳐있는 행정구역은 서울, 경기도의 많은 지자체에 걸쳐있는 산이다. 그중 조사대상지역인 서울 서대문구 행정구역의 지형은 서울 서대문구 홍은2동지역을 감싸고 있는 형태이며, 남쪽으로는 홍제천을 바라보고 있다.조사대상지역은 북한산의 남쪽끝자락에 해당되며 능선을 따라 서대문구와 은평구로 행정구역이 나눠어지며, 구기터널 부근부터는 성벽을 따라 서대문구와 종로구로 나눠어진다. 서대문구에 속하는 지역은 지형이 그다지 험하지 않아 쉽게 등산이 가능하나, 조사지역경계 너머 북쪽 지역은 다소 지세가 험한 편이다. 일반등산로의 경우 그다지 등산이 어렵지는 않으나, 바위가 많은 곳은 경사가 심한곳이 많아 등산시 많은 주의가 필요하다.백두산, 지리산, 금간산, 묘향산과 함께 오악(五岳)에 포함될 정도로 자연경관이 매우 뛰어난 편이다. 비록 조사대상지역이 북한산끝자락에 속하지만 북한산 자연경관의 감상하기엔 부족함이 없다. ( - ) 114100801 북한산 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 서울특별시 강북구 우이동 강북구청 02-901-6114 서울의 진산 북한산은 조선조 초기에는 삼각산(三角山)으로 불렀다. 삼각산이란 이름은 〈신증동국여지승람〉에 '삼각산은 양주의 경계에 있다. 일명 화산(華山)이라 하고, 신라 시대에는 부아악(負兒岳)이라고 불렀다. 산은 경성(京城)의 진산으로 동명왕의 아들 온조가 한산(漢山)에 이르러 부아악에 올라가서 만한 곳을 살폈다'는 기록이 있으며, '백운봉(白雲峰, 지금의 백운대), 인수봉(仁壽峰), 만경봉(萬景峰, 지금의 만경대) 봉우리가 있으므로 그렇게 이름한 것이다'라고 유래를 기록하고 있다. 북한산성에 대해서는 〈신증동국여지승람〉과 〈북한지〉에 상세히 기록되어 있다. 북한산성은 백제 온조왕이 터를 잡았고 개루왕 성터를 쌓았다는 기록이 있으며, 조선 시대에 임진왜란, 병자호란을 치른 숙종 37년(1711년)에 시작하여, 6개월 만인 그해 10월에 완공하였다 한다. 북한산성은 험한 산세를 이용하여 정상을 기점으로 서쪽 산자락부터 원효봉, 염초봉, 백운대, 만경대, 용암봉, 문수봉, 나한봉, 나월봉, 용출봉, 의상봉까지 연결하여 쌓은 산성으로 길이가 10km에 달한다. 당시 산성에는 14개의 성문을 냈는데, 산성의 정문 격인 대서문을 중심으로 북쪽으로 수문, 서암문(시구문), 북문, 백운대를 지나 위문, 용암문, 대동문, 보국문, 대성문, 대남문, 청수동암문, 대서문에서 북서쪽으로 이어지는 산성에는, 부황 동암문, 가사동암문이 설치되었다. 현재는 대부분 성문을 복원하였다. 북한산에 수많은 등산로 거미줄 같이 엉켜 있어 산행 주의할 필요가 있는 곳이다. 북한산의 산행 들머리는 대표적으로 여섯 군데를 꼽고 있다. 우이동 기점, 4.19탑 기점, 정릉 기점, 세검정 기점, 불광동 기점, 구파발 북한산성 기점으로 구분할 있다. ( - ) 113050202 북한산_백운대 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

앞에 태그가 없어지고 내용만 깔끔하게 정제된 것을 보실 수 있습니다. 

 

이제 이것을 list에 넣어주고 

mntiaddList = []
mntiadminList = []
mntiadminnumList = []
mntidetailsList = []
mntihighList = []
mntilistnoList = []
mntinameList = []
mntisnameList = []
mntisummaryList = []
mntitopList = []


for item in ItemList:
    mntiadd = item.find('mntiadd').text
    mntiadmin = item.find('mntiadmin').text
    mntiadminnum = item.find('mntiadminnum').text
    mntidetails = item.find('mntidetails').text
    mntihigh = item.find('mntihigh').text
    mntilistno = item.find('mntilistno').text
    mntiname = item.find('mntiname').text
    mntisname = item.find('mntisname').text
    mntisummary = item.find('mntisummary').text
    mntitop = item.find('mntitop').text


    mntiaddList.append(mntiadd)
    mntiadminList.append(mntiadmin)
    mntiadminnumList.append(mntiadminnum)
    mntidetailsList.append(mntidetails)
    mntihighList.append(mntihigh)
    mntilistnoList.append(mntilistno)
    mntinameList.append(mntiname)
    mntisnameList.append(mntisname)
    mntisummaryList.append(mntisummary)
    mntitopList.append(mntitop)

 

 

데이터를 dataframe으로 바꿔주면 90% 완성입니다. 

data = pandas.concat([pandas.DataFrame(mntiaddList), pandas.DataFrame(mntiadminList), pandas.DataFrame(mntiadminnumList), pandas.DataFrame(mntidetailsList), pandas.DataFrame(mntihighList), pandas.DataFrame(mntilistnoList), pandas.DataFrame(mntinameList), pandas.DataFrame(mntisnameList), pandas.DataFrame(mntisummaryList), pandas.DataFrame(mntitopList)], axis=1) 

 

마지막으로 이제 excel파일로 변환해주면 

data.to_excel("북한산.xlsx")

 

<생성된 북한산 파일>

 

파일이 생성되고 내용을 확인해보면  

<엑셀 내용>

 

이런식으로 API 데이터가 Excel 안으로 들어가 있는 것을 보실 수 있습니다!

 

여기까지 잘 따라오셨다면 공공데이터 API를 Python을 통해 Excel 파일로 변환하는 데 무리가 없으실 거라 믿습니다. 

 

지금까지 고생하셨습니다. 다음번엔 더 좋은 정보로 찾아뵙겠습니다. 감사합니다.

댓글