제목 붙이기 제목을 붙이려면 제목이 될 문장 앞에 # 를 사용하면 됩니다. 1개부터 6개까지 붙일 수 있습니다.
# 1개
## 2개
### 3개
#### 4개
##### 5개
###### 6개
1개
2개
3개
4개
5개
6개
기울임, 굵게, 취소선, 첨자
글자를 기울이려면 * 혹은 _를 기울일 문장 앞 뒤에 하나씩 붙여 주면 됩니다. 굵게 하려면 ** 혹은 __를 굵게 처리할 문장 앞 뒤에 붙여 줍니다. 취소선을 넣으려면 취소선 처리할 문장 앞 뒤에 ~~를 붙여 줍니다.(기본 마크다운에서는 없는 기능 입니다.) 첨자를 넣으려면 첨자 처리할 문장 앞 뒤에 ^를 붙여 줍니다.
*기울임* , _기울임_
**굵게**, __굵게__
~~취소선~~
e^첨자^
기울임 , 기울임굵게, 굵게
취소선
코드 삽입 기능
코드를 삽입하여 분석 과정을 좀 더 명료하게 기술할 수 있습니다. R마크다운 에서는 inline code 기능과code chunk 기능을 지원합니다.
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() 함수를 적용하여 인터렉티브 그래프로 만들 수 있습니다.
지도 시각화의 한 종류인 단계 구분도를 만들어 보겠습니다. 단계 구분도는 지도 상의 지역 별로 통계치를 색깔의 차이로 표한합니다. R에서는 (당연히) 여러 패키지로 단계 구분도를 만들 수 있지만, 이번 실습에서는 ggiraphExtra 패키지를 사용하여 단계 구분도를 만들어 보겠습니다.
수업시간에는 텍스트 시각화의 방법으로 WordCloud 패키지를 실습하였습니다. 실습한 WordCloud 패키지는 원형의 형태로 데이터를 출력합니다. 이것만으로도 데이터를 시각화하기엔 충분할 수도 있습니다. WordCloud의 후속작인 WordCloud2 패키지는 당연히 후속작 답게 더 다채롭고 다양한 기능으로 데이터를 시각화하는데 도움을 줍니다.
텍스트 마이닝에서 아주 중요한 역할을 하는 것이 형태소 분석 입니다. 형태소란 의미의 최소 단위로, 일정한 의미가 있는 가장 작은 말의 단위입니다. (더 이상 분석하여 분리해 낸다면 뜻이 없어지게 된다는 뜻)
국어 시간이 아니기 때문에 형태소에 대한 설명은 생략하고, 본론으로 들어가겠습니다. 현재는 R을 비롯한 여러 프로그래밍 언어에서 사용할 수 있는 한글 형태소 분석 도구들이 제공되고 있습니다. 우리는 R을 배우는 입장으로, R에서 사용할 수 있는 형태소 분석기인 "KoNLP" 패키지를 알아보겠습니다.
KoNLP : 한글 자연어 분석 패키지 는 한국어를 분석할 수 있는 27개의 함수가 내장되어 있으며, 이 중에서 형태소를 분석할 수 있는 함수를 제공합니다.
KoNLP는 CRAN에서 제공되고 있기 때문에 쉽게 인스톨 할 수 있습니다.
install.packages("KoNLP")
그러나 패키지는 설치되었지만 라이브러리 호출 시 오류가 발생합니다. 왜냐하면 KoNLP는 JAVA로 만들어진 패키지 입니다. 그렇기 때문에 운영체제에 맞는 JAVA와 R에서 자바 패키지를 불러올 수 있는 rJava패키지를 인스톨 해야 합니다.
데이터를 그냥 사용할 수 있으면 정말 좋겠지만 실제 데이터는 클린징을 거쳐야 분석에 사용될 수 있는 경우가 많습니다. 이번 시간에는 결측치와 이상치를 정제하는 방법을 알아보겠습니다.
1. 결측치 정제하기
결측치란 누락된 값, 비어 있는 값, NULL Data 를 의미합니다. 실제 데이터는 데이터 수집 과정에서 발생한 오류 등으로 인해 결측치가 포함되어 있는 경우가 많기 때문에 이 결측치를 정제하는 과정을 거쳐야만 함수 사용에 문제가 발생하지 않고 분석 결과에 왜곡이 없습니다.
데이터 프레임 전체의 결측치를 제거해 주는 함수도 있습니다. na.omit()을 이용하면 변수를 지정하지 않고도 결측치가 있는 행을 제거할 수 있습니다.
mpg_noNa3 <- na.omit(mpg_sample)
함수에서 지원하는 파라미터를 활용해도 됩니다. 여러 함수들이 결측치를 제외하고 연산을 수행해 주는 기능을 가지고 있습니다. na.rm을 T로 설정하면 결측치를 제외하고 함수 연산을 수행합니다.
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 그래프를 이용해서 중심에서 크게 벗어난 값을 극단치로 간주하고 제거하는 실습을 해 보겠습니다.