R Markdown

R 마크다운은 마크다운 문법과 유사한 문법으로 데이터 분석 보고서를 작성할 수 있습니다. R마크다운으로 보고서를 작성하면 분석 과정과 결과를 자세하게 나타낼 수 있기 때문에 재현성 갖춘 데이터 분석 보고서를 작성할 수 있습니다.

R Studio를 열고 New File 에서 R Markdown 문서를 만들 수 있습니다.

기본값인 HTML로 놓고 파일을 만듭니다.

문법에 맞춰서 작성된 예제가 나옵니다. 이 문서를 워드, HTML, PDF로 배포할 수 있습니다.

HTML로 저장해 보겠습니다. 뜨개질 모양의 knit 버튼을 누르면 저장할 수 있습니다.

R마크다운의 문법

R 마크다운은 기본적으로 일반 마크다운 문법과 유사합니다. 자세한 문법은 R마크다운 Cheetsheet에 나와 있지만 간단히 소개하겠습니다.

https://www.rstudio.com/wp-content/uploads/2015/02/rmarkdown-cheatsheet.pdf

불러오는 중입니다...

  1. 제목 붙이기
    제목을 붙이려면 제목이 될 문장 앞에 # 를 사용하면 됩니다. 1개부터 6개까지 붙일 수 있습니다.

    # 1개
    ## 2개
    ### 3개
    #### 4개
    ##### 5개
    ###### 6개

    1개

    2개

    3개

    4개

    5개
    6개

 

기울임, 굵게, 취소선, 첨자

글자를 기울이려면 * 혹은 _를 기울일 문장 앞 뒤에 하나씩 붙여 주면 됩니다. 굵게 하려면 ** 혹은 __를 굵게 처리할 문장 앞 뒤에 붙여 줍니다. 취소선을 넣으려면 취소선 처리할 문장 앞 뒤에 ~~를 붙여 줍니다.(기본 마크다운에서는 없는 기능 입니다.) 첨자를 넣으려면 첨자 처리할 문장 앞 뒤에 ^를 붙여 줍니다.

*기울임* , _기울임_
**굵게**, __굵게__
~~취소선~~
e^첨자^

기울임 , 기울임 굵게, 굵게

취소선

코드 삽입 기능

코드를 삽입하여 분석 과정을 좀 더 명료하게 기술할 수 있습니다. R마크다운 에서는 inline code 기능과code chunk 기능을 지원합니다.

 

inline code
`a <- 10`

a <- 10

 

code chunk
```{r}
a <- 10
a
```

 

a <- 10
a
## 10

 

'Programming > R' 카테고리의 다른 글

인터렉티브 그래프 만들기 (2)  (0) 2019.05.29
인터랙티브 그래프 만들기 (1)  (0) 2019.05.29
단계 구분도 만들기  (0) 2019.05.29
WordCloud2  (0) 2019.05.27
텍스트 마이닝 - KoNLP  (0) 2019.05.20

인터렉티브 그래프 만들기 (2)

전 포스팅에서는 막대 그래프와 산점도 그래프의 인터렉티브 그래프를 만들어 보았습니다. 이번 글에서는 시계열 그래프를 인터렉티브 그래프로 만드는 방법을 알아보겠습니다.

이번에 사용할 패키지는 dygraphs 패키지 입니다.

install.packages("dygraphs")
library(dygraphs)

 

이번 실습에 사용될 데이터는 ggplot2의 economics 데이터 입니다. economic 데이터는 1967년부터 2015년까지의 미국의 월별 경제 지표를 담은 데이터 입니다.

dygraphs 패키지에서 시계열 그래프를 그리기 위해서는 데이터의 타입이 xts 타입으로 되어있어야 합니다. xts 라이브러리와 xts() 함수를 사용하여 economic 데이터의 실업률(unemploy)를 xts 타입으로 변경합니다.

library(xts)
eco <- xts(economics$unemploy, order.by = economics$date)

 

만들어진 데이터를 dygraph() 함수 내에 넣어 시계열 그래프를 그릴 수 있습니다.

dygraph(eco)

 

dygraph() 함수도 파이프 연산자 %>% 를 사용하여 기능을 추가할 수 있습니다. dyRangeSelector()를 추가하여 그래프 아래에 날짜 범위를 선택하는 기능을 추가합니다.

dygraph(eco) %>%
			dyRangeSelector()

https://github.com/ark1st/Doit_R_ARKS_CODE/blob/master/Graph3.html

 

ark1st/Doit_R_ARKS_CODE

Do it R 학습 및 블로그 작성에 있어서 가공한 데이터와 코드를 업로드 하는 공간 입니다. - ark1st/Doit_R_ARKS_CODE

github.com

 

 

 

영우, 『쉽게 배우는 R 데이터 분석』, 이지스 퍼블리싱, 2019

이영호, "확률과통계"  가천대학교, 2019

 

'Programming > R' 카테고리의 다른 글

R Markdown  (0) 2019.05.30
인터랙티브 그래프 만들기 (1)  (0) 2019.05.29
단계 구분도 만들기  (0) 2019.05.29
WordCloud2  (0) 2019.05.27
텍스트 마이닝 - KoNLP  (0) 2019.05.20

인터랙티브 그래프 만들기 (1)

plotly 패키지를 사용하면 인터렉티브 그래프를 쉽게 만들 수 있습니다. 인터렉티브 그래프는 마우스 움직임에 실시간으로 반응하여 형태가 변하거나 더 상세한 정보를 사용자에게 전달해 주는 반응형 그래프 입니다. 그래프를 확대, 축소하여 원하는 부분만 상세하게 알아보거나, 정확한 값을 알아볼 수도 있습니다. plotly 패키지의 인터렉티브 그래프는 HTML 포맷을 지원하여, 웹 브라우저에서 열람할 수도 있습니다.

 

인터렉티브 그래프를 만들기 위해서 패키지를 준비합니다.

install.packages("plotly")
library(ploty)

먼저 ggplot2로 그래프를 만드는 작업이 선행되어야 합니다. 그래프 또한 하나의 객체로, 변수에 저장되는 형태를 띌 수 있습니다.

library(ggplot2)
p <- ggplot(data = mpg, aes(x = displ, y = hwy, col = drv)) + geom_point() # 산점도

이 그래프를 plotly 패키지 내의 ggplotly() 함수를 적용하여 인터렉티브 그래프로 만들 수 있습니다.

ggplotly(p)

https://github.com/ark1st/Doit_R_ARKS_CODE/blob/master/Graph1.html

 

 

동일한 방법으로 막대 그래프 또한 만들어 낼 수도 있습니다.

q <- ggplot(data = diamonds, aes(x = cut, fill = clarity)) + geom_bar(position = "dodge") # 막대 그래프
ggplotly(q)

https://github.com/ark1st/Doit_R_ARKS_CODE/blob/master/Graph2.html

 

 

 

 

영우, 『쉽게 배우는 R 데이터 분석』, 이지스 퍼블리싱, 2019

이영호, "확률과통계"  가천대학교, 2019

 

'Programming > R' 카테고리의 다른 글

R Markdown  (0) 2019.05.30
인터렉티브 그래프 만들기 (2)  (0) 2019.05.29
단계 구분도 만들기  (0) 2019.05.29
WordCloud2  (0) 2019.05.27
텍스트 마이닝 - KoNLP  (0) 2019.05.20

단계 구분도

지도 시각화의 한 종류인 단계 구분도를 만들어 보겠습니다. 단계 구분도는 지도 상의 지역 별로 통계치를 색깔의 차이로 표한합니다. R에서는 (당연히) 여러 패키지로 단계 구분도를 만들 수 있지만, 이번 실습에서는 ggiraphExtra 패키지를 사용하여 단계 구분도를 만들어 보겠습니다.

install.packages("ggiraphExtra")
library(ggiraphExtra)

패키지를 불러 옵니다.

 

이번 실습에서는 R에 내장된 USArrest 데이터를 사용하겠습니다. 그러나 USArrest 데이터에는 지역 명 변수가 없는 문제점이 있기 때문에 데이터를 약간 가공하여 줘야 합니다.

이 책에서는 tibble 패키지를 불러와 패키지 내의 rownames_to_column()를 사용하여 지역 명을 붙여 줬습니다.

library(tibble)

crime <- rownames_to_column(USArrests, var = "state")
crime$state <- tolower(crime$state)

 

US데이터 이기 때문에 미국의 지도 데이터가 필요합니다. map 패키지와 mapproj 패키지를 설치하고, map_data() 함수를 사용하여 불러옵니다.

install.packages("maps")
library(mpas)
install.packages("mapproj")
library(mapproj)
library(ggplot2)

states_map <- map_data("state")

 

단계 구분도를 만듭니다.

ggChoropleth(data = crime,   
			aes(fill = Murder,  
			map_id = state),
			map = states_map) 

 

 

 

영우, 『쉽게 배우는 R 데이터 분석』, 이지스 퍼블리싱, 2019

이영호, "확률과통계"  가천대학교, 2019

'Programming > R' 카테고리의 다른 글

인터렉티브 그래프 만들기 (2)  (0) 2019.05.29
인터랙티브 그래프 만들기 (1)  (0) 2019.05.29
WordCloud2  (0) 2019.05.27
텍스트 마이닝 - KoNLP  (0) 2019.05.20
그래프 만들기  (0) 2019.04.30

수업시간에는 텍스트 시각화의 방법으로 WordCloud 패키지를 실습하였습니다. 실습한 WordCloud 패키지는 원형의 형태로 데이터를 출력합니다. 이것만으로도 데이터를 시각화하기엔 충분할 수도 있습니다. WordCloud의 후속작인 WordCloud2 패키지는 당연히 후속작 답게 더 다채롭고 다양한 기능으로 데이터를 시각화하는데 도움을 줍니다.

1. 설치

Wordcloud2는 Github를 통해서 설치합니다.

require(devtools)
install_github("lchiffon/wordcloud2")	

 

2. 기능

wordcloud2는 크게 2가지의 기능을 제공합니다.

1) Wordcloud2 : 전통적인 워드 클라우드

전통적인 워드 클라우드의 형태(원 혹은 타원형) 로 워드클라우드를 만듭니다. 특이점은 별도의 파라미터 조작이 없어도 HTML5로 저장한다면 반응형 워드클라우드가 생성된다는 점 입니다.

library(wordcloud2)
wordcloud2(data = demoFreq)

WordCloud2에서 추가된 기능인 이미지 파일을 마스크로 사용하여 이미지 파일에 워드 클라우드를 생성할 수도 있습니다. 단, 이미지 파일에 단어가 들어갈 곳이 진한 색으로 되어 있어야 한다는 점 입니다.

figpath 파라미터를 사용하면 이미지 파일 위에 워드클라우드를 그릴 수 있습니다. 그러나 figpath를 사용하려면 아래 패키지를 추가로 설치해야 잘 동작한다고 합니다.

 

실습에 사용될 파일

install.packages("htmlwidgets")
install.packages("tmltools")
install.packages("jsonlite")
install.packages("yaml")
install.packages("base64enc")

라이브러리를 모두 로딩하고 명령어를 사용하여 워드클라우드를 만듭니다.

library(wordcloud2)
library(htmlwidgets)
library(tmltools)
library(jsonlite)
library(yaml)
library(base64enc)

워드클라우드를 만듭니다.

figPath = system.file("examples/football.png",package = "wordcloud2")
wordcloud2(demoFreq, figPath = figPath, size = 1.5,color = "skyblue")

 

(컴퓨터 사양을 많이 탑니다... 많이 느려요)

2) letterCloud : 문자, 단어로 워드 클라우드

문자나 단어로 워드 클라우드를 만들 수도 있습니다.

letterCloud(demoFreq, word = "R", size = 2)

word 파라미터에 단어를 넣으면 단어 또한 워드클라우드로 만들 수 있지만 컴퓨터의 성능이 좋아야 출력이 원활하게 됩니다. (제 노트북에선 실행조차 안되네요)

 

3. 파라미터

  • data : 각 열에 word와 freq가 포함 된 데이터 프레임
  • size : 글꼴 크기, 기본값은 1. 큰 크기는 큰 단어를 의미합니다.
  • fontFamily : 사용할 글꼴.
  • fontWeight : 사용할 폰트의 무게 (예 : normal, bold or 600)
  • color : 텍스트의 색상, 'random-dark'및 'random-light'키워드를 사용할 수 있습니다. Color Vector 도 사용할 수 있습니다.
  • minSize : 자막의 문자열
  • backgroundColor : 배경색.
  • gridSize : 캔버스의 가용성을 표시하기 위한 그리드의 크기 (픽셀 단위) 그리드 크기가 클수록 단어 사이의 간격이 커집니다.
  • minRotation :단어가 회전해야 하는 경우 텍스트가 회전해야하는 최소 회전 (라디안 값)입니다.
  • maxRotation : 단어가 회전해야하는 경우 텍스트가 회전해야하는 최대 회전 (rad). 모든 텍스트를 한 각도로 유지하는 것과 동일한 두 값을 설정하십시오.
  • rotateRatio : 단어가 회전 할 확률. 항상 회전하려면 숫자를 1로 설정하십시오.
  • shape : 그릴 모양의 "구름". 키워드 선물이 될 수 있습니다. 사용할 수있는 선물은 '원형'(기본값), '카디오이드'(사과 또는 심장 모양 곡선, 가장 잘 알려진 극형 방정식), '다이아몬드'(별의 사각형), '삼각형 앞으로', '삼각형', ' 및 '별'.
  • ellipticity : degree of “flatness” of the shape wordcloud2.js should draw
  • figPath : 단어 구름에 사용되는 그림.
  • widgetsize : 위젯의 크기

 

 

출처

https://cran.r-project.org/web/packages/wordcloud2/vignettes/wordcloud.html

https://hwan0447.blog.me/221241027145

 

'Programming > R' 카테고리의 다른 글

인터랙티브 그래프 만들기 (1)  (0) 2019.05.29
단계 구분도 만들기  (0) 2019.05.29
텍스트 마이닝 - KoNLP  (0) 2019.05.20
그래프 만들기  (0) 2019.04.30
데이터 정제하기 (데이터 클린징)  (0) 2019.04.15

텍스트 마이닝 - KoNLP

텍스트 마이닝에서 아주 중요한 역할을 하는 것이 형태소 분석 입니다. 형태소란 의미의 최소 단위로, 일정한 의미가 있는 가장 작은 말의 단위입니다. (더 이상 분석하여 분리해 낸다면 뜻이 없어지게 된다는 뜻)

국어 시간이 아니기 때문에 형태소에 대한 설명은 생략하고, 본론으로 들어가겠습니다. 현재는 R을 비롯한 여러 프로그래밍 언어에서 사용할 수 있는 한글 형태소 분석 도구들이 제공되고 있습니다. 우리는 R을 배우는 입장으로, R에서 사용할 수 있는 형태소 분석기인 "KoNLP" 패키지를 알아보겠습니다.

KoNLP : 한글 자연어 분석 패키지 는 한국어를 분석할 수 있는 27개의 함수가 내장되어 있으며, 이 중에서 형태소를 분석할 수 있는 함수를 제공합니다.

KoNLP는 CRAN에서 제공되고 있기 때문에 쉽게 인스톨 할 수 있습니다.

install.packages("KoNLP")

그러나 패키지는 설치되었지만 라이브러리 호출 시 오류가 발생합니다. 왜냐하면 KoNLP는 JAVA로 만들어진 패키지 입니다. 그렇기 때문에 운영체제에 맞는 JAVA와 R에서 자바 패키지를 불러올 수 있는 rJava패키지를 인스톨 해야 합니다.

자바 다운로드

https://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html

rjava 다운로드

install.packages("rJava")

 

KoNLP는 형태소 분석 이외에도 27개의 함수가 내장되어 R에서 한국어 자연어 분석 기능을 제공합니다. 함수에 대한 설명은 Rdocumentation 웹사이트에 안내되어 있습니다.

https://www.rdocumentation.org/packages/KoNLP/versions/0.80.1

 

중점적으로 알아볼 함수들을 소개하겠습니다.

1. 명사 추출

nones <- extractNones(text.txt)

2. 사전 선택

#시스템 디폴트 사전을 사용합니다.
useSystemDic()
#NIA 사전을 사용합니다.
useNIADic()
#세종 사전을 사용합니다.
useSejongDic

3. 사전 제작

#데이터로 자신의 사전을 만들수도 있습니다.
buildDictionary()

4. 자음 모음 추출

#자모 추출
is.jamo()
#자음 추출
is.jaeum()
#모음 추출
is.moeum()

 

'Programming > R' 카테고리의 다른 글

단계 구분도 만들기  (0) 2019.05.29
WordCloud2  (0) 2019.05.27
그래프 만들기  (0) 2019.04.30
데이터 정제하기 (데이터 클린징)  (0) 2019.04.15
데이터 전처리  (0) 2019.04.14

그래프 만들기

데이터를 보기 쉽게 그림으로 표현한 것을 '그래프' 라고 합니다. 데이터의 원 자료나 통계표 보다는 시각화된 그래프가 의미와 특징을 더 쉽게 파악할 수 있습니다.

우리는 R의 ggplot2 패키지를 사용하여 그래프를 그리는 방법을 알아보겠습니다.

 

ggplot2

ggplot2는 레이어 구조의 문법 체계를 가지고 있습니다. 배경을 만들고, 그 위에 그래프를 그리고, 그래프의 축 범위, 색, 표식을 추가하는 순서로 그래프가 만들어지게 됩니다.

ggplot2를 사용하려면 당연히 ggplot2 패키지를 불러와야만 합니다.

library(ggplot2)

 

1. 산점도

레이어 구조 순서로 산점도를 만듭니다.

# 배경 만들기
ggplot(data = mpg, aes(x = displ, y = hwy)) + 
	geom_point() # 배경에 산점도 추가

 

그래프 설정을 변경하는 코드를 추가하여 축 범위를 설정하여 보겠습니다.

# 배경 만들기
ggplot(data = mpg, aes(x = displ, y = hwy)) + 
	geom_point() + # 배경에 산점도 추가
	xlim (3,6) +
	ylim (10, 30)

 

2. 막대 그래프

집단별 평균표를 만들어서 막대 그래프를 그릴 수 있습니다.

library(ggplot2)
library(dplyr)

df_mpg <- mpg %>%
	group_by(drv) %>%
	summarise(mean_hwy = mean(hwy))

ggplot(data = df_mpg, aes(x = drv, y = mean_hwy)) + geom_col()

 

크기 순으로 정렬하려면 reorder() 함수를 사용하면 막대를 크기 순으로 정렬할 수 있습니다.

ggplot(data = df_mpg, aes(x = reorder(drv, -mean_hwy), y = mean_hwy)) + geom_col()

 

빈도 막대 그래프 또한 그릴 수 있습니다. geom_bar() 를 사용하면 됩니다.

ggplot(data = mpg, aes(x = drv)) + geom_bar()

연속 변수를 x에 지정하면 값의 분포를 파악할 수 있습니다.

ggplot(data = mpg, aes(x = hwy)) + geom_bar()

 

3. 선 그래프

데이터를 선으로 표현한 그래프를 선 그래프라고 합니다. 주로 시간에 따라 달라지는 데이터를 표현할 때 선 그래프를 이용합니다.

ggplot(data = economics, aes(x = data, y =umemploy)) + geom_line()

 

4. 상자 그림 (Boxplot)

상자그림은 데이터의 분포를 직사각형의 상자 모양으로 표현한 그래프 입니다. qplot 에서의 상자그림은 한 변수의 분포만 볼 수 있었지만 ggplot2 의 상자그림은 여러 변수를 비교하여 볼 수 있습니다.

ggplot(data = mpg, aes(x = drv, y = hwy)) + geom_boxplot()

 

 

// 참고자료

영우, 『쉽게 배우는 R 데이터 분석』, 이지스 퍼블리싱, 2019

이영호, "확률과통계"  가천대학교, 2019

'Programming > R' 카테고리의 다른 글

WordCloud2  (0) 2019.05.27
텍스트 마이닝 - KoNLP  (0) 2019.05.20
데이터 정제하기 (데이터 클린징)  (0) 2019.04.15
데이터 전처리  (0) 2019.04.14
변수 조작하기  (0) 2019.04.10

데이터를 그냥 사용할 수 있으면 정말 좋겠지만 실제 데이터는 클린징을 거쳐야 분석에 사용될 수 있는 경우가 많습니다. 이번 시간에는 결측치와 이상치를 정제하는 방법을 알아보겠습니다.

1. 결측치 정제하기

결측치란 누락된 값, 비어 있는 값, NULL Data 를 의미합니다. 실제 데이터는 데이터 수집 과정에서 발생한 오류 등으로 인해 결측치가 포함되어 있는 경우가 많기 때문에 이 결측치를 정제하는 과정을 거쳐야만 함수 사용에 문제가 발생하지 않고 분석 결과에 왜곡이 없습니다.

 

 

Data Download

https://github.com/ark1st/Doit_R_ARKS_CODE/blob/master/sample_NoNA.csv

 

ark1st/Doit_R_ARKS_CODE

Do it R 학습 및 블로그 작성에 있어서 가공한 데이터와 코드를 업로드 하는 공간 입니다. - ark1st/Doit_R_ARKS_CODE

github.com

 

 

 

결측치 실습에는 mpg 데이터 중 class, cty, hwy만 뽑아 임의로 수정한 파일을 실습에 사용하겠습니다.

sample.csv를 다운로드 하여 불러오기 합니다.

mpg_sample <- read.csv("sample_NoNA.csv")

 

1.1. 결측치 확인하기

View(mpg_sample)로 데이터를 확인해 보니 빠진 데이터들이 존재 합니다. R에서는 결측치를 대문자 NA로 표시하는 것을 알 수 있습니다.

View(mpg_sample)

 

결측치를 정제하기 위해서는 결측치가 들어 있는지 확인해야 합니다. 결측치를 확인하기 위해서는 is.na()를 사용합니다. 혹은 is.na()table() 에 적용하면 데이터에 결측치가 몇 개 들어있는지 출력해 줍니다.

is.na(mpg_sample) #결측치 전체 출력 (결과는 생략)
table(is.na(mpg_sample)) #결측치 테이블 출력

## FALSE  TRUE 
##  689    13 

위 TRUE 빈도에서 13개의 결측치가 확인되었습니다.

 

결측치를 정제하기 위해서는 데이터 전체보다는 구체적으로 어느 변수에 결측치가 있는지 확인하는 것이 좋습니다. table(is.na()에 변수명까지 지정하면 해당하는 변수에 결측치가 몇 개 있는지 반환하여 줍니다.

table(is.na(mpg_sample$cty))

## FALSE  TRUE 
##  226     8 

cty 변수에는 결측치가 8개 있는 것으로 확인됩니다. 이때 이 결측치가 포함된 상태 그대로 함수를 적용하여 데이터 분석을 한다면 오류가 발생하거나 왜곡된 값이 출력됩니다.

av = mean(mpg_sample$cty)
av

## [1] NA 

 

1.2. 결측치 제거하기

결측치를 제거하기 위해서 filter()is.na()를 적용해 보겠습니다. cty 변수를 기준으로 결측치를 제거해 보겠습니다.

library(dyplr)
mpg_Nona <- mpg_sample %>% filter(!is.na(cty))

 

여러 변수 동시에 결측치를 제거하려면 논리 연산자 & 를 사용합니다.

mpg_Nona2 <- mpg_sample %>% filter(!is.na(cty) & is.na(hwy))

 


 

데이터 프레임 전체의 결측치를 제거해 주는 함수도 있습니다. na.omit()을 이용하면 변수를 지정하지 않고도 결측치가 있는 행을 제거할 수 있습니다.

mpg_noNa3 <- na.omit(mpg_sample)

 


함수에서 지원하는 파라미터를 활용해도 됩니다. 여러 함수들이 결측치를 제외하고 연산을 수행해 주는 기능을 가지고 있습니다. na.rmT로 설정하면 결측치를 제외하고 함수 연산을 수행합니다.

mean(mpg_sample, na.rm = 'T')

 


데이터가 큰 경우에는 결측치를 제거하고 분석해도 문제가 없습니다. 그러나 데이터가 작고 결측치가 많은 경우에는 결측치를 모두 제거하면 데이터가 손실되어 분석 결과가 왜곡됩니다. 그래서 결측치를 다른 값으로 대체하여 연산하기도 하는데 이것을 결측치 대체법이라고 합니다. 결측치를 대체할 때에는 평균이나 최빈값 등의 대표값을 대체하거나 결측치의 예측값을 추정하여 대체할 수 있습니다.

그러나 지금은 바로 결측치를 대체할 수 없습니다. 왜냐하면 지금의 데이터 상태로는 평균을 구하면 엄청난 왜곡이 있기 때문입니다.

 

2. 이상치 정제하기

mpg_sample 데이터를 확인해 보면 9999 등의 값이 들어 있는 것을 확인할 수 있습니다. 이렇듯 정상 범주에서 크게 벗어난 값을 이상치라고 합니다. 데이터를 수집할 때 오류가 발생하였거나 굉장히 드물게 극단적인 값이 나타날 수도 있습니다. 이러한 이상치가 포함되어 있으면 분석 결과가 왜곡되기 때문에 분석에 앞서 이상치를 제거해야 합니다.

 

2.1. 논리적으로 존재할 수 없는 경우

이 경우는 대부분 범주형 변수에서 볼 수 있는 경우입니다. 성별의 경우 남성은 1, 여성은 2로 설정 되어 있을 때 3이라는 값이 들어 있거나, 논리값 T, F로 결정된 경우에 이상한 값이 들어 있는 경우입니다. 혹은 연속형 변수에서 문자 값이 들어있다거나 하는 경우에도 논리적으로 존재할 수 없는 경우에 해당됩니다.

이 경우에는 table()로 이상치를 확인한 후에 ifelse() 를 사용하여 결측치로 바꾸어 줍니다.

data2 <- ifelse(data$sex == 3, NA, data$sex)

 

2.2. 극단적인 값

논리적으로 존재할 수는 있지만 극단적으로 크거나 작은 값을 극단치라고 합니다. 주로 연속형 변수에서 나타날 수 있습니다. 예를 들어 몸무게 변수에 200kg의 값이 들어 있다면 그것이 논리적으로 존재할 수는 있지만 너무 극단적인 값이기 때문에 분석 결과가 왜곡될 수도 있습니다.

이때에는 정상 범위를 판단하여 정상 범위에서 벗어나는 값을 삭제하여 극단치를 제거합니다. 이때 정상치를 선정하는 기준이 정말 중요합니다. 이 정상치를 선정할 때 납득할 만한 근거가 있어야 통계에는 신빙성이 생기기 때문입니다.

우리는 boxplot 그래프를 이용해서 중심에서 크게 벗어난 값을 극단치로 간주하고 제거하는 실습을 해 보겠습니다.

 

boxplot(mpg_sample$cty)

 

여기서 각 항목이 의미하는 내용입니다.

상자그림 설명
상자 아래 세로 점선 아랫수염 하위 0 ~ 25% 내에 해당하는 값
상자 밑면 1사분위수(Q1) 하위 25% 위치 값
상자 내 굵은 선 2사분위수(Q2) 하위 50% 위치 값(중앙값)
상자 윗면 3사분위수(Q3) 하위 75% 위치 값
상자 위 세로 점선 윗수염 하위 75 ~ 100%내에 해당하는 값
상자 밖 가로선 극단치 경계 Q1, Q3 밖 1.5 IQR 내 최댓값
상자 밖 점 표식 극단치 Q1, Q3 밖 1.5 IQR 내 벗어난 값

 

이때 이것을 수치값으로 확인하고 싶으면 함수 뒤에 $stats 를 삽입하면 됩니다.

boxplot(mpg_sample$cty)$stats
boxplot(mpg_sample$hwy)$stats

 

정상 범위를 파악한 후 이 범위를 벗어난 값을 결측 처리합니다.

mpg_sample$cty <- ifelse(mpg_sample$cty < 9 | mpg_sample$cty > 26, NA, mpg_sample$cty)
mpg_sample$hwy <- ifelse(mpg_sample$hwy < 9 | mpg_sample$hwy > 26, NA, mpg_sample$hwy)

 

다시 평균을 구해봅시다.

meancty <- mean(mpg_sample$cty)

 

1.3. 결측치 대체하기

결측치를 정상적인 평균값으로 대체할 수 있게 되었기 때문에 결측치를 대체하여 보겠습니다.

mpg_sample$cty <- ifelse(is.na(mpg_sample$cty),meancty, mpg_sample$cty)

 

 

Source Code

https://github.com/ark1st/Doit_R_ARKS_CODE/blob/master/NA_Outl

 

// 참고자료

김영우, 『쉽게 배우는 R 데이터 분석』, 이지스 퍼블리싱,

2019 이영호, "확률과통계" 가천대학교, 2019.03.21

'Programming > R' 카테고리의 다른 글

텍스트 마이닝 - KoNLP  (0) 2019.05.20
그래프 만들기  (0) 2019.04.30
데이터 전처리  (0) 2019.04.14
변수 조작하기  (0) 2019.04.10
데이터 파악하기  (0) 2019.04.09

+ Recent posts