일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- kepler
- covid
- 오류
- 오픈API
- Folium
- 지도
- pipwin
- 인코등
- 라이엇api
- kepler.gl
- 막대그래프
- OSMnx
- 공공데이터포털
- API
- Python
- riotapi
- geopandas설치
- r
- 시각화
- map
- 코로나
- covid19
- 라이엇
- geopandas에러
- matplotlib
- geopnadas
- 파이썬
- 마커클러스터
- 에러
- QGIS라벨링
- Today
- Total
Nerdy
[R] 오픈 API를 활용한 코로나 19 사망자 수 그래프 그리기 본문
공공데이터 포털 사이트에서 신청한 코로나 19 국내발생현황(사망) 오픈 API 데이터를 가지고 간단하게 그래프를 그려보도록 한다.
신청방법은 이전에 올린 글을 참고하면 된다.
https://whiplash-bd.tistory.com/35
먼저 승인된 신청 데이터를 누르고 상세내용을 확인한다.
신청 데이터 상세보기로 들어가면 서비스 정보를 볼 수 있으며 json URL을 얻는 방법은 인증키를 넣어주면 된다.
참고문서에 'Open API활용가이드 코로나19 국내발생현황(사망) 조회서비스 v1.2.docx' 문서를 다운 받고 내용을 보면 데이터 구성을 볼 수 있는 'c)응답 메시지 명세'와 json URL을 얻는 방법을 알 수 있는 'd)요청/응답 메시지 예제'를 잘 보면 된다.
d) 요청/응답 메시지 예제 를 보면 요청메시지에 URL이 있다. 이 URL 뒷쪽에 '=인증키(URL Encode)'라고 적혀 있는데 개발계정 상세보기에 적혀 있는 일반인증키(Encoding)를 복사한 후 이 부분에 붙여서 주소창에 입력을 하면 응답메시지 처럼 똑같은 메시지를 받을 수 있으며 이 주소창이 json URL이라고 보면 된다.
혹시나 본인의 인증키 발급이 없거나 잊어버린 경우 마이페이지에서 인증키 발급현황을 들어가 본인의 인증키 현황을 확인할 수 있고 발급도 가능하다.
이제 json URL도 구했으니 이를 활용한 R plot을 간단하게 만들어보도록 한다.
먼저 오픈 API 데이터 구성은 아래와 같다.
항목명(영문) | 항목명(국문) | 항목크기 | 항목구분 | 샘플데이터 | 항목설명 |
resultCode | 결과코드 | 2 | 1 | 00 | 결과코드 |
resultMsg | 결과메세지 | 50 | 1 | 조회성공 | 결과메시지 |
resultCnt | 결과 개수 | 4 | 1 | 1 | 결과 개수 |
mmddhh | 기준일시 | 20 | 1 | 04.11. 00시 | 데이터 조회 기준 일시 |
mmdd1 | 일자_1 | 10 | 1 | 04.05 | 데이터 조회 기준일 – 6일 |
cnt1 | 일일발생현황_1 | 10 | 1 | 469 | 일일 |
rate1 | 인구 10만명당 발생현황 _1 | 10 | 1 | 0.91 | 인구 10만명당 |
mmdd2 | 일자_2 | 10 | 1 | 04.06. | 데이터 조회 기준일 – 5일 |
cnt2 | 일일발생현황_2 | 10 | 1 | 393 | 일일 |
rate2 | 인구 10만명당 발생현황 _2 | 10 | 1 | 0.76 | 인구 10만명당 |
mmdd3 | 일자_3 | 10 | 1 | 04.07. | 조회 기준일 – 4일 |
cnt3 | 일일발생현황_3 | 10 | 1 | 323 | 일일 |
rate3 | 인구 10만명당 발생현황 _3 | 10 | 1 | 0.63 | 인구 10만명당 |
mmdd4 | 일자_4 | 10 | 1 | 04.08. | 조회 기준일 – 3 |
cnt4 | 일일발생현황_4 | 10 | 1 | 282 | 일일 |
rate4 | 인구 10만명당 발생현황 _4 | 10 | 1 | 0.55 | 인구 10만명당 |
mmdd5 | 일자_5 | 10 | 1 | 04.09. | 조회 기준일 – 2 |
cnt5 | 일일발생현황_5 | 10 | 1 | 287 | 일일 |
rate5 | 인구 10만명당 발생현황 _5 | 10 | 1 | 0.56 | 인구 10만명당 |
mmdd6 | 일자_6 | 10 | 1 | 04.10. | 조회 기준일 – 1일 |
cnt6 | 일일발생현황_6 | 10 | 1 | 237 | 일일 |
rate6 | 인구 10만명당 발생현황 _6 | 10 | 1 | 0.46 | 인구 10만명당 |
mmdd7 | 일자_7 | 10 | 1 | 04.11. | 조회 기준일 |
cnt7 | 일일발생현황_7 | 10 | 1 | 432 | 일일 |
rate7 | 인구 10만명당 발생현황 _7 | 10 | 1 | 0.84 | 인구 10만명당 |
mmdd8 | 일자_8 | 10 | 1 | 주간일평균 | 주간일평균 |
cnt8 | 일일발생현황_8 | 10 | 1 | 346 | 일일 |
rate8 | 인구 10만명당 발생현황_8 | 10 | 1 | 0.67 | 인구 10만명당 |
json을 활용하기 위해 R에서 jsonlite 패키지를 다운 받고 패키지 로딩을 해준 뒤 fromJSON 함수를 사용해 긁어온 json URL를 넣어준다.
install.packages(jsonlite) #패키지 설치
library(jsonlite) # 패키지 로딩
corona_df <- fromJSON("http://apis.data.go.kr/1790387/covid19CurrentStatusDeaths/...") # 이하 생략
객체를 생성하여 넣어준 뒤 구조를 확인한 뒤 사용할 데이터프레임을 추출해서 또 다른 변수에 담는다.
class(corona_df) # 리스트
str(corona_df)
# Result
List of 1
$ response:List of 4
..$ resultMsg : chr "조회성공"
..$ result :'data.frame': 1 obs. of 25 variables:
.. ..$ cnt3 : chr "14"
.. ..$ cnt4 : chr "10"
.. ..$ cnt1 : chr "9"
.. ..$ cnt2 : chr "11"
.. ..$ cnt7 : chr "14"
.. ..$ cnt8 : chr "11"
.. ..$ cnt5 : chr "12"
.. ..$ cnt6 : chr "11"
.. ..$ rate4 : chr "0.02"
.. ..$ rate5 : chr "0.02"
.. ..$ rate6 : chr "0.02"
.. ..$ rate7 : chr "0.03"
.. ..$ rate1 : chr "0.02"
.. ..$ rate2 : chr "0.02"
.. ..$ rate3 : chr "0.03"
.. ..$ rate8 : chr "0.02"
.. ..$ mmdd4 : chr "06.20"
.. ..$ mmdd5 : chr "06.21"
.. ..$ mmdd6 : chr "06.22"
.. ..$ mmdd7 : chr "06.23"
.. ..$ mmdd1 : chr "06.17"
.. ..$ mmdd2 : chr "06.18"
.. ..$ mmdd3 : chr "06.19"
.. ..$ mmdd8 : chr "주간일평균"
.. ..$ mmddhh: chr "6.23.00시"
..$ resultCnt : chr "1"
..$ resultCode: chr "1"
# 사용할 데이터프레임 추출
df <- corona_df$response$result
class(df) # data.frame
추출된 데이터프레임은 정렬이 안되어 있어 따로 정렬 작업을 다시 해줬다.
mmdd <- c(df$mmdd1, df$mmdd2, df$mmdd3, df$mmdd4, df$mmdd5, df$mmdd6, df$mmdd7) # 데이터 조회 기준일
cnt <- c(df$cnt1, df$cnt2, df$cnt3, df$cnt4, df$cnt5, df$cnt6, df$cnt7) # 일일 발생현황
rate <- c(df$rate1, df$rate2, df$rate3, df$rate4, df$rate5, df$rate6, df$rate7) # 인구 10만명당 발생현황
covid_deaths <- data.frame(mmdd, cnt, rate, stringsAsFactors = F)
# mmdd cnt rate
# 1 06.17 9 0.02
# 2 06.18 11 0.02
# 3 06.19 14 0.03
# 4 06.20 10 0.02
# 5 06.21 12 0.02
# 6 06.22 11 0.02
# 7 06.23 14 0.03
일일 발생현황과 인구 10만명당 발생현황을 간단하게 plot을 그려본다.
par(mfrow=c(2,1)) # Multiple plot 2행 1열
# 일일 발생현황 plot
x = covid_deaths$mmdd
y1 = covid_deaths$cnt
plot(x, y1, type = 'l', col = 'red', main = '코로나 19 사망자 일일 발생현황',
xlab = '날짜', ylab = '일일 사망자', cex.main = 2, col.main = "red",
cex.lab = 1.5, col.lab = 'red')
# 인구 10만명당 발생현황 plot
x = covid_deaths$mmdd
y2 = covid_deaths$rate
plot(x, y2, type = 'l', col = 'darkred',
main = '인구 10만명당 코로나 19 사망자 발생현황',
xlab = '날짜', ylab = '인구 10만명당 발생현황',
cex.main = 2, col.main = "darkred", cex.lab = 1.5, col.lab = 'darkred')
■ 결과
'R' 카테고리의 다른 글
R Markdown 사용 방법과 Markdown에 파이썬 코드 넣기 (0) | 2022.07.01 |
---|---|
[R] 코로나 19 누적 데이터를 대상으로 막대 차트 만들기 (0) | 2022.06.23 |
[R] 메모리 부족 시 늘리는 방법 (0) | 2022.06.22 |
[R] Why data.table? (0) | 2022.06.22 |
KOSPI 지수 데이터를 활용한 시계열 분석 (0) | 2022.06.15 |