2-2. 유동인구 예측 데이터셋

bonvoyage_hy·2019년 11월 27일
0

SKT NUGU Project

목록 보기
3/10

우리 팀은 유동인구 예측을 위해 서울열린데이터광장의 '자치구단위 서울 생활인구 일별 집게표' 데이터셋을 사용하였다.
유동인구 예측의 대략적인 절차는 다음과 같다.

1. 수집할 데이터 결정
2. 오픈API 인증키 받기
3. 인증키와 URL을 통해 파이썬으로 크롤링
4. 예측 알고리즘모듈 사용을 위해 데이터 형태 변환
5. 예측 알고리즘모듈을 통해 유동인구 예측

이중 1~3번 과정은 이번 포스트에서,
3번 이후의 과정은 나중 포스트에서 다룰 예정이다.

1. 수집할 데이터 결정


(링크 : https://data.seoul.go.kr/dataList/datasetView.do?infId=OA-15379&srvType=S&serviceKind=1¤tPageNo=1&searchValue=&searchKey=null)
우리 팀은 서울열린데이터광장에서 제공하는 '자치구단위 서울 생활인구 일별 집계표' 데이터셋을 사용하기로 결정하였다. 선택 기준은 다음과 같다.

  • 오픈API로 데이터를 제공하는가

  • 최대 한달단위로 최신 데이터를 제공하는가

    해당 데이터셋은 오픈API 외에도 CSV, EXCEL, JSON의 형태로 데이터를 제공하고, 매일 데이터가 업데이트되어 기준에 부합되었다.

2. 오픈API 인증키 받기

데이터를 사용할 서울열린데이터광장에서 인증키를 받았다.
인증키는 공개하지 않도록 하겠다.

3. 인증키와 URL을 통해 파이썬으로 크롤링

우선 URL을 통해 데이터 형태를 확인한다. 사용한 URL은 다음과 같다.
http://openapi.seoul.go.kr:8088/(인증키)/xml/SPOP_DAILYSUM_JACHI/1/5/

위 URL에서 위와 같은 내용을 확인할 수 있다. 이 중 우리는 기준일ID인 STDR_DE_ID, 시군구코드인 SIGNGU_CODE_SE, 총생활인구수인 TOT_LVPOP_CO의 데이터만 필요한 것을 확인하였다.
우리 팀은 파이썬을 통해 데이터를 크롤링하기로 결정하였다. 모듈은 pandas, bs4, request, datetime을 사용하였다. 크롤링을 위해 사용한 전체코드는 다음과 같다. 크롤링한 데이터를 'api_result.csv'라는 csv파일에 저장해주었다.

import pandas as pd
from bs4 import BeautifulSoup
import requests
from datetime import datetime


startdate = 20181201
now = str(datetime.today().year) + str(datetime.today().month) + str(datetime.today().day)
enddate = int(now)

codedatelist = []
codeplacelist = []
codepeoplelist = []
CommerceInfor = {}

while startdate <= enddate:
    url = 'http://openapi.seoul.go.kr:8088/(KEY)/xml/SPOP_DAILYSUM_JACHI/1/26/' + str(startdate)
    req = requests.get(url)
    html = req.text
    soup = BeautifulSoup(html,'html.parser')

    codedate = soup.find_all('stdr_de_id')
    codeplace = soup.find_all('signgu_code_se')
    codepeople = soup.find_all('tot_lvpop_co')
    
    for code in codedate:
        codedatelist.append(code.text)
    for code in codeplace:
        codeplacelist.append(code.text)
    for code in codepeople:
        codepeoplelist.append(code.text)
        
    CommerceInfor['Date'] = codedatelist
    CommerceInfor['Place'] = codeplacelist
    CommerceInfor['Total people'] = codepeoplelist

    df = pd.DataFrame(CommerceInfor)
    startdate += 1
    
df_pivot = df.pivot(index='Date', columns='Place', values = 'Total people')
df_pivot.index = pd.to_datetime(df_pivot.index)

df_pivot.to_csv("D:/openapi.csv")

다음은 저장된 csv파일의 일부이다.

본격적인 유동인구 예측에 관한 내용은 나중 포스트에서 다루도록 하겠다!

profile
TourHanyang

0개의 댓글