제주 탈출 일지

빅데이터 분석 - 선형 그래프 그리기 본문

빅데이터 분석

빅데이터 분석 - 선형 그래프 그리기

귀건 2020. 9. 24. 02:56
728x90
반응형

이번 포스팅에서는 R을 통해 선형그래프를 그리는 것을 정리해보도록 하겠다. 이 포스팅을 따라하면 아래와 같은 예쁜 그림을 얻을 수 있다. 시작하겠다.

연도별요양기관별보험청구건수_2001_2013_세로.csv
0.00MB

 

완성된 선형 그래프^^

 

먼저 선형 그래프는 이와같이 여러가지 항목의 연도별 변화를 관찰하는데 용이하다. 결국 자신이 분석할 데이터에 가장 잘 맞는다고 판단되는 그래프를 선정해야 하므로 예제를 생각하며 하는것을 권한다.

 

 

Step 1. 파일을 불러오고 형태를 확인한다.

 

count <- read.csv("연도별요양기관별보험청구건수_2001_2013_세로.csv", stringsAsFactors = FALSE)
  count
  colname <- count$년도
  v1 <- count[,2]/100000
  v2 <- count[,3]/100000
  v3 <- count[,4]/100000
  v4 <- count[,5]/100000  
  v5 <- count[,6]/100000  
  v6 <- count[,7]/100000
  v7 <- count[,8]/100000
  v8 <- count[,9]/100000
  v9 <- count[,10]/100000
  v10 <- count[,11]/100000
  
  v1

 

다음은 데이터를 read.csv를 통해 불러왔을 때, 확인한 형태이다.

   년도 상급종합병원 종합병원     병원 요양병원      의원 치과병원 치과의원 보건기관 한방병원   한의원
1  2004     15583978 25177454 18242052   308855 247545398   831809 31550525 11998632  1167354 30359202
2  2005     15967303 26846886 19572867   556888 259203708   911653 32247062 12028815  1161308 32585757
3  2006     17014445 28466480 21402364   906495 274452725  1066661 32929058 14628337  1045650 35081895
4  2007     18001309 30480172 24113643  1515366 362304188  1235259 40495113 14598704  1078144 54945811
5  2008     19084837 33390693 26601460  1964108 468198761  1371121 49529829 14630679  1057888 80278823
6  2009     23521523 35544045 30732776  2447613 495396105  1572912 51022765 16000157  1191822 89161158
7  2010     26088048 39074514 34437415  2666027 504417806  1805304 51835860 15232748  1296015 90060199
8  2011     26960401 40803979 37347054  2978828 510867833  2001164 52151423 14578392  1467392 90542681
9  2012     37478189 55860792 64356977  4817074 524890875  2751766 52957117 15841288  3282584 93096375
10 2013     38877052 58851945 68077999  5232408 515038775  2955361 55593617 14537614  3421751 97704335

 

굉장히 큰 숫자들을 볼 수가 있다. 십만 ~ 억단위의 숫자들을 처리하기에는 한눈에 보기가 어려우므로 십만단위로 나누어준다. 나누는 과정에서 count[,숫자] 형태로 나누어 vN 벡터에 넣어주게 되는데, 한 열의 자료끼리 묶어서 나누기 위함이다. 궁금하다면 count[1,1], count [2,1] ... 들의 값의 변화가 어떻게 일어나는 지 확인해보면 바로 이해할 수 있다.

 

colname$변수(변수라고 표현하는 것이 맞는지 모르곘다.)를 하게 되면 해당 속성의 값들이 추출되게 된다. colname$년도는 2004년부터 2013년까지의 값이 하나의 벡터로 추출된다.

 

v1을 확인해보면 다음과 같은 데이터가 나오게 된다.

>   v1
 [1] 155.8398 159.6730 170.1445 180.0131 190.8484 235.2152 260.8805 269.6040 374.7819 388.7705

Step 2. plot을 그린다.

plot(v1,xlab="",ylab="",ylim=c(0,6000),axes=FALSE,col="violet",type="o",lwd=2, 
		main=paste("연도별 요양 기관별 보험 청구 건수(단위:십만건)","\n","출처:건강보험심사평가원"))
axis(1,at= 1:10,label=colname, las=2)
axis(2, las=1)  

이전 barplot을 잘 공부했다면 크게 다른 것은 없다. 다만, type="o" 를 통해 선그래프를 그릴 것인데, 이 인자는 선과 점을 동시에 표현하여 그래프를 그려준다. 그러면 v1의 인자의 값을 하나하나 점으로 찍고, 점과 점을 선으로 이어주는 그래프가 하나 나오게 된다.

 

아직은 아무것도 없다.

이제 축을 그려야 하는데, 사실 plot 함수에서도 axes=TRUE로 한다면 축을 그릴 수 있다. 편의사항이지만, 나는 축을 따로 그려주는 것이 훨씬 예쁘게 그릴 수 있다고 느껴진다. 또한, 하나의 plot 함수에 너무 많은 인자가 들어가서 보기 어려워지므로 axis함수를 통해 그냥 따로 그리는 것을 추천한다.

 

axis함수의 첫번째 인자 1은 x축을 나타낸다. 2는 당연히 y축이다. (3은 천장 x축, 4는 오른쪽  y축이다.)

우리는 x축에 연도를 표시하려한다. 2004년부터 2013년까지 10개의 레이블이 필요하다. 그래서 at = 1:10으로 x축 값 10개를 표시하고, 그 후 colname$연도를 통해 생성해두었던 벡터를 레이블로 사용하여 표시를 해주게 된다. 또 y축의 레이블 스타일을 축의 수직방향으로 우리가 보기 편하도록 las=1을 통해 설정하게 된다.

 

축까지 완성.!


Step 3. 나머지 항목들을 그린다.

 

이미 v1은 그렸으므로 그리지 않은 v2 ~ v10까지를 그려야 한다. 

 

  lines(v2, col="blue", type= "o", lwd =2)
  lines(v3, col="red", type= "o", lwd =2)
  lines(v4, col="black", type= "o", lwd =2)
  lines(v5, col="orange", type= "o", lwd =2)
  lines(v6, col="green", type= "o", lwd =2)
  lines(v7, col="cyan", type= "o", lwd =2)
  lines(v8, col="yellow", type= "o", lwd =2)
  lines(v9, col="brown", type= "o", lwd =2)
  lines(v10, col="pink", type= "o", lwd =2)

 

이제는 plot을 미리 그렸으므로 lines함수를 통해 plot 위에 덧씌울 것이다. 인자도 이전 plot과 크게 다르지 않다.

모든 선이 표시되었다!


Step 4. 격자와 범례를 그린다.

 

선 그래프의 항목들을 쉽게 파악하기 위해 격자와 범례를 그려주면 좋다. 보는 사람이 편해질 것이다.

abline(h=seq(0,6000,500), v=seq(1,10,1), lty=3, lwd= 0.2)
col <- names(count[1, 2:10])  
colors <- c("violet", "blue", "red", "black", "green", "cyan", "yellow", "brown", "pink")  
legend(1, 6000, col, cex=0.8,col=colors, lty=1, lwd = 2, bg ="white")

 

먼저 격자를 그리는 것은 가로, 세로를 통해 그리게 된다. 인자를 보면 h, v가 있는데 각각 horizental, vertical의 약자이다. 즉, 선을 그리는 너비와 높이를 주고, 선의 형태를 어떤식으로 그릴것인지에 대한 인자를 주는 것이다. h=seq(0,6000,500), v=seq(1,100,1)했으므로 높이는 0부터 500씩 마다 그릴 것이고, 너비는 1부터 10까지 1씩마다 그릴것이다.(2004부터 2013이 아니다. 2004와 같은 값들은 실제 값이 아니라 C에서의 열거형과 같은 느낌이라고 생각하면 좋겠다.)

 

격자 ON

그 후 범례를 그리는데, 범례에서 우리가 사용한 색상에 맞게 대응되어야 한다. 그를 위해 우리가 필요한 요양 기관에 대한 이름과, 색상을 순서에 맞게 얻어야 한다.

col <- names(count[1, 2:10])  
colors <- c("violet", "blue", "red", "black", "green", "cyan", "yellow", "brown", "pink")  

이 코드에서 첫번쨰 col <- names()함수는 우리가 원하는 부서를 얻어주고, colors <- c()에서는 우리가 가내수공업으로 v1부터 사용한 순서대로 적어놓은 것을 볼 수가 있다. 처음부터 사용할 때 이런식으로 정해주고 사용하는 것이 더 편리할 것이다.(벡터의 []연산을 이용하여 반복문으로 차례차례 선을 그릴 수 있을 것이다.)

legend(1, 6000, col, cex=0.8,col=colors, lty=1, lwd = 2, bg ="white")

legend 함수에서 사용된 인자는 (x 좌표, y 좌표, 사용할 데이터(요양 부서), 글자크기(cex), 선의 타입(대쉬), 선의 너비, 배경(하얀색)) 이런식으로 대응된다. 이제는 이러한 인자를 많이 접했기 떄문에 크게 어려움이 없으리라 생각된다.

최종 결과물 !!


이렇게 선 그래프를 R로 그리는 예제를 포스팅해보았다. 빅데이터 처리는 하나의 실무적인 과정으로 이해보다는 숙달하는 것이 중요하다고 판단된다. 까먹을 때마다 반복해서 몸으로 체득하는 것이 중요하겠다.^^

728x90
반응형
Comments