일전에 서울시 공공데이터 포털을 통해서 지하철 승차인원수를 구한 적이 있었다.
이번엔 정부의 공공데이터 포털을 통해서 코로나19 확진자를 구해보자.
방법은 사실 거의 동일하다. 간단히 보면,
- 데이터를 url로 부른다.
- 불러온 데이터를 데이터프레임에 저장한다.
- 데이터프레임으로 보기 좋게 데이터를 손질한다.
1. url로 데이터 받아오기(requests)
요청주소를 참고하여 데이터를 받아온다.
- 서비스키, 페이지당열갯수(1000개), 데이터 시작/끝 날짜로 url을 만들어서 불러오면 된다.
2. 데이터프레임에 저장(XML to DataFrame)
위에서 만든 url을 브라우저로 접속해 보면 아래와 같은 XML 형태의 데이터를 볼 수 있다. 필요한 데이터는 [‘item’] 이하에 포함되어 있다.

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

불러온 데이터 중에는 하루에 두번 이상 데이터가 존재하는 경우가 있는데(예를 들어, 초기에는 오전, 오후 2차례 확진자 발표), 이를 감안하여 하루 중 마지막에 발표한 데이터로 중복 처리 한다.
|
|
3. 하루확진자 구하기(DataFrame.diff())
공공데이터포털에서 제공하는 코로나19 데이터의 확진자(‘DECIDE_CNT’)는 누적 데이터이다. 누적 데이터를 일일 확진자 데이터로 바꾸기 위해서는 당일 누적 데이터에서 전일 누적 데이터를 차감하면 되는데, DataFrame.diff()을 이용하면 된다.
- 불어온 데이터는 최근 데이터가 먼저 불러지기때문에 날짜로 데이터를 다시 정렬한 후에 diff()을 사용한다.
- 최종 데이터로 그래프를 그려본다. 1차, 2차, 3차 파고를 확인해 볼 수 있다.
- 다만, 1월, 2월 데이터는 데이터포털에 올린 데이터에 오류가 있다. 질병관리청이나 위키피디아
등 다른 소스를 통해서 보정된 데이터로 교체해야 하는데, 여기서는 생략한다.
- 다만, 1월, 2월 데이터는 데이터포털에 올린 데이터에 오류가 있다. 질병관리청이나 위키피디아
등 다른 소스를 통해서 보정된 데이터로 교체해야 하는데, 여기서는 생략한다.
+전체 코드는 아래에서 바로 실행 가능하다.
- ‘Open in Colab’을 클릭하면, 코랩에 접속하여 코드를 실행해 볼 수 있다.
- 단, 현재 세비스키로는 하루 데이터 호출 제한이 걸릴 수 있음.