Nerdy

[R] 코로나 19 누적 데이터를 대상으로 막대 차트 만들기 본문

R

[R] 코로나 19 누적 데이터를 대상으로 막대 차트 만들기

뚱인데요? 2022. 6. 23. 18:04
728x90

코로나 공식홈페이지에 누적 데이터(엑셀)를 다운 받을 수 있다. 이 데이터를 가지고 R에서 분류를 한 후 막대 차트를 만들어보도록 하자

 

데이터는 첫 확진 날부터 시작해서 현재 날짜까지 누적된 엑셀화 데이터이며 연도별, 월별이 아닌 일별로 나눠져 있어 최근 날짜인 2022년 6월 데이터만 대상으로 코드 작성을 한다.

 

http://ncov.mohw.go.kr/

 

코로나바이러스감염증-19

코로나바이러스감염증-19 정식 홈페이지로 발생현황, 국내발생현황, 국외발생현황, 시도별발생현황, 대상별 유의사항, 생활 속 거리 두기, 공적마스크 공급현황, 피해지원정책, 홍보자료, FAQ, 관

ncov.mohw.go.kr

 

다운로드를 누르면 누적 데이터 엑셀 파일을 받을 수 있다.

 

엑셀 파일을 다운 받으면 '발생별(국내 + 해외유입), 사망' 시트부터 시작해 총 5개 시트가 구성 되어 있으며 해당 엑셀 파일을 가지고 csv 파일 변환을 한 후 R에서 파일을 읽을 예정이다.

 

COVID-19.csv
0.03MB
COVID-19_2020.csv
0.01MB
COVID-19_2021.csv
0.01MB
COVID-19_2022.csv
0.01MB

(해당 파일은 '발생별(국내 + 해외유입), 사망' 시트를 csv로 변환한 파일이며 원본 엑셀 파일에 2번째 행은 삭제 했다.)

 

R에서 사용할 'COVID-19.csv' 파일을 read.csv() 함수를 사용해 df 객체에 담고 잘 담겨져 있는지 확인한다.

df <- read.csv('COVID-19.csv', header = T)
head(df)

  X       일자 계.명. 국내발생.명. 해외유입.명. 사망.명.
1 2 2020-01-20      1            0            1        0
2 3 2020-01-21      0            0            0        0
3 4 2020-01-22      0            0            0        0
4 5 2020-01-23      0            0            0        0
5 6 2020-01-24      1            0            1        0
6 7 2020-01-25      0            0            0        0

 

df 컬럼 중 이따가 그릴 bar plot에서 사용할 x축인 '일자' 컬럼 데이터는 날짜를 의미하는 문자형 데이터가 담겨져 있다.

날짜라는 것을 인식해주기 위해 as.Date를 사용해준다.

df$일자 <- as.Date(df$일자)

 

# 엑셀 파일을 csv 파일을 변환하면서 담겨져 있는 컬럼별 데이터들이 전부 문자형 데이터들이였고 특수문자(, -)가 담겨져 있어 gsub으로 제거 및 대체를 해준 후 숫자형으로 변환을 해줬습니다. 아래 코드는 사용했던 코드를 적은거니 참고하시길 바랍니다.

# 특수기호 0으로 대체 및 제거 및 숫자형 변환
# df2는 엑셀을 csv로 변환한 파일을 담은 객체

df2$계.명. <- gsub(',', '', df2$계.명.)
df2$계.명. <- as.numeric(df2$계.명.)

df2$국내발생.명. <- gsub('-', 0, df2$국내발생.명.)
df2$국내발생.명. <- gsub(',', '', df2$국내발생.명.)
df2$국내발생.명. <- as.numeric(df2$국내발생.명.)

df2$해외유입.명. <- gsub('-', 0, df2$해외유입.명.)
df2$해외유입.명. <- as.numeric(df2$해외유입.명.)

df2$사망.명. <- gsub('-', 0, df2$사망.명.)
df2$사망.명. <- as.numeric(df2$사망.명.)

View(df2)

 

일자별로 구성된 데이터들을 조금 더 편하게 관리할 수 있도록 연도별, 그리고 좀있다 사용할 2022년 6월 날짜만 걷어낸다.(해당 파일은 위에 올렸음)

# 연도별로 걷어내기
y_2020 <- subset(df, 일자 <= "2020-12-31")
y_2021 <- subset(df, 일자 >= "2021-01-01" & 일자 <= "2021-12-31")
y_2022 <- subset(df, 일자 >= "2022-01-01" & 일자 <= "2022-06-22")

# 2022년 6월만
y_2022_6 <- subset(y_2022, 일자 >= "2022-06-01")

 

분류를 다 했으면 막대 차트를 그릴건데 총 4가지를 그려볼려고 한다. 그래프에 적용할 색상은 미리 만들어서 객체에 담았다.

plot_col1 <- rgb(1, 0, 0, seq(1, 0, length = 20))
plot_col2 <- rgb(1, 0, 0, seq(0, 1, length = 20))

 

1. 6월 COVID-19 국내외 확진자 및 사망자 수

barplot(y_2022_6$계.명., names = y_2022_6$일자,
        main = '6월 COVID-19 국내외 확진자 및 사망자 수',
        xlab = '일자', ylab = '확진 및 사망 수(명)', col = plot_col1,
        cex.main = 2.5, col.main = "red",
        cex.lab = 1.5, col.lab = 'red')

 

2. 6월 COVID-19 국내 확진자 수'

barplot(y_2022_6$국내발생.명., names = y_2022_6$일자,
      main = '6월 COVID-19 국내 확진자 수',
      xlab = '일자', ylab = '국내발생(명)', col = plot_col1,
      cex.main = 2.5, col.main = "red",
      cex.lab = 1.5, col.lab = 'red')

 

3. 6월 COVID-19 해외 유입 확진자 수

barplot(y_2022_6$해외유입.명., names = y_2022_6$일자,
        main = '6월 COVID-19 해외 유입 확진자 수',
        xlab = '일자', ylab = '해외유입(명)',
        ylim = c(0, 100), col = plot_col2,
        cex.main = 2.5, col.main = "red",
        cex.lab = 1.5, col.lab = 'red')

 

4. 6월 COVID-19 사망자 수

barplot(y_2022_6$사망.명., names = y_2022_6$일자,
        main = '6월 COVID-19 사망자 수',
        xlab = '일자', ylab = '사망자(명)',
        ylim = c(0, 25), col = plot_col1,
        cex.main = 2.5, col.main = "red",
        cex.lab = 1.5, col.lab = 'red')

 

■ 전체 코드

par(mfrow = c(2,2))
barplot(y_2022_6$계.명., names = y_2022_6$일자,
        main = '6월 COVID-19 국내외 확진자 및 사망자 수',
        xlab = '일자', ylab = '확진 및 사망 수(명)', col = plot_col1,
        cex.main = 2.5, col.main = "red",
        cex.lab = 1.5, col.lab = 'red')

barplot(y_2022_6$국내발생.명., names = y_2022_6$일자,
      main = '6월 COVID-19 국내 확진자 수',
      xlab = '일자', ylab = '국내발생(명)', col = plot_col1,
      cex.main = 2.5, col.main = "red",
      cex.lab = 1.5, col.lab = 'red')

barplot(y_2022_6$해외유입.명., names = y_2022_6$일자,
        main = '6월 COVID-19 해외 유입 확진자 수',
        xlab = '일자', ylab = '해외유입(명)',
        ylim = c(0, 100), col = plot_col2,
        cex.main = 2.5, col.main = "red",
        cex.lab = 1.5, col.lab = 'red')

barplot(y_2022_6$사망.명., names = y_2022_6$일자,
        main = '6월 COVID-19 사망자 수',
        xlab = '일자', ylab = '사망자(명)',
        ylim = c(0, 25), col = plot_col1,
        cex.main = 2.5, col.main = "red",
        cex.lab = 1.5, col.lab = 'red')

■ 결과

# mfrow 함수를 사용해 총 4개 그림을 2행 2열 방식으로 넣었음

728x90