일전에 서울시 공공데이터 포털을 통해서 지하철 승차인원수를 구한 적이 있었다.

이번엔 정부의 공공데이터 포털을 통해서 코로나19 확진자를 구해보자.

방법은 사실 거의 동일하다. 간단히 보면,

  1. 데이터를 url로 부른다.
  2. 불러온 데이터를 데이터프레임에 저장한다.
  3. 데이터프레임으로 보기 좋게 데이터를 손질한다.

1. url로 데이터 받아오기(requests)

요청주소를 참고하여 데이터를 받아온다.

  • 서비스키, 페이지당열갯수(1000개), 데이터 시작/끝 날짜로 url을 만들어서 불러오면 된다. Image

2. 데이터프레임에 저장(XML to DataFrame)

위에서 만든 url을 브라우저로 접속해 보면 아래와 같은 XML 형태의 데이터를 볼 수 있다. 필요한 데이터는 [‘item’] 이하에 포함되어 있다.

Image

xmlObject[‘response’][‘body’][‘items’][‘item’]로 데이터를 불러서 dict_data에 저장하고, 저장된 데이터를 데이터프레임에 담는다.

Image

불러온 데이터 중에는 하루에 두번 이상 데이터가 존재하는 경우가 있는데(예를 들어, 초기에는 오전, 오후 2차례 확진자 발표), 이를 감안하여 하루 중 마지막에 발표한 데이터로 중복 처리 한다.

1
df = df.drop_duplicates(['stateDt']) #중복제거

3. 하루확진자 구하기(DataFrame.diff())

공공데이터포털에서 제공하는 코로나19 데이터의 확진자(‘DECIDE_CNT’)는 누적 데이터이다. 누적 데이터를 일일 확진자 데이터로 바꾸기 위해서는 당일 누적 데이터에서 전일 누적 데이터를 차감하면 되는데, DataFrame.diff()을 이용하면 된다.

  • 불어온 데이터는 최근 데이터가 먼저 불러지기때문에 날짜로 데이터를 다시 정렬한 후에 diff()을 사용한다. Image
  • 최종 데이터로 그래프를 그려본다. 1차, 2차, 3차 파고를 확인해 볼 수 있다.
    • 다만, 1월, 2월 데이터는 데이터포털에 올린 데이터에 오류가 있다. 질병관리청이나 위키피디아 등 다른 소스를 통해서 보정된 데이터로 교체해야 하는데, 여기서는 생략한다. Image

+전체 코드는 아래에서 바로 실행 가능하다.

  • ‘Open in Colab’을 클릭하면, 코랩에 접속하여 코드를 실행해 볼 수 있다.
    • 단, 현재 세비스키로는 하루 데이터 호출 제한이 걸릴 수 있음.