본문 바로가기

R/R을 이용한 데이터 처리&분석 실무

(39)
상관 분석 상관 분석(Correlation Analysis)은 두 확률 변수 사이의 관련성을 파악하는 방법이다. 상관 계수(Correlation Coefficient)는 두 변수 간 관련성의 정도를 의미하며, 이를 계산하는 방법에는 피어슨 상관 계수, 스피어만 상관 계수, 켄달의 순위 상관 계수 등이 있다. 그러나 흔히 상관 계수라고하면 피어슨 상관 계수를 뜻한다. 상관 계수 값이 크면 데이터 간의 관계가 존재한다는 의미며, 보통 한쪽 값이 커질 때 다른 쪽 값이 커지는 정도가 크다. 그러나 상관 계수가 크다고 해서 변수 간에 인과관계가 있음을 뜻하지는 않는다. A가 커짐에 따라 B가 커지는 것을 보고 A가 B를 야기한다고 판단했으나 실제로는 또 다른 변수 C가 A와 B를 동시에 증가시키고 있거나(이를 교락 변수(..
분할표 분할표(Contingency Table)는 명목형(Categorical) 또는 순서형(Ordinal) 데이터의 도수(frequency)를 표 형태로 기록한 것이다. 분할표가 작성되면 카이 제곱 검정(Chi Square Test)으로 변수 간에 의존 관계가 있는지를 독립성 검정으로, 도수가 특정 분포를 따르는지를 적합도 검정(Goodness of Fit)으로 살펴볼 수 있다. 분할표가 사용되는 한 가지 경우는 기계 학습으로 데이터의 양성(Positive), 음성(Negative)을 예측할 때다. 예를 들어, 이메일 텍스트를 보고 해당 이메일이 스팸인지 아닌지를 예측하는 경우를 생각해보자. 이때 두 가지 변수는 예측값(모델로 스팸인지를 판단한 결과)과 실제 값(실제로 해당 이메일이 스팸인지 여부)이다. 이런..
표본 추출 현대의 데이터는 기하급수적으로 증가하고 있다. 예를 들어, 구글에서 사용자들이 검색하는 질의를 분석하는 경우를 생각해보자. 특정 알고리즘이 검색을 개선하는지를 알아보기 위해 사용자들이 입력한 모든 질의를 분석하는 것은 아무리 분산 컴퓨터 능력이 받쳐준다 할지라도 낭비에 가깝다. 그보다는 특정 기간에 있었던 질의만 분석한다거나, 특정 조건을 만족하는 질의만 분석하는 것이 효율적일 것이다. 이처럼 전체 데이터(모집단,Population) 중 일부를 표본(샘플, Sample)으로 추출하는 작업은 데이터 분석에서 필수다. 표본 추출(샘플링,Sampling)은 훈련 데이터(Training Data)와 테스트 데이터(Test Data)의 분리에서도 중요하다. 전체 데이터 중 80%를 훈련 데이터, 20%를 테스트 ..
기초 통계량 이 절에서는 데이터의 가장 기본적인 특징을 알려주는 기초 통계량을 계산하는 방법을 알아본다. 이 절에서 설명할 통계량은 표본 평균, 분산, 표준 편차, 다섯 수치 요약, 최빈값 등이다. 표본 평균, 표본 분산, 표본 표준 편차 표본 평균, 표본 분산, 표본 표준 편차는 표본 X1, X2, …, Xn의 n개 표본이 있을 때 다음과 같이 계산한다. 수식은 책의 표 7-3을 참고하기 바란다. 분산의 계산에서 분모에 n이 아니라 n-1을 사용하고 있다는 점에 유의하기 바란다. R에서 기본적으로 계산하는 분산과 표준 편차는 전체 데이터 중 일부를 샘플로 추출한 뒤 이에 대해 분산과 표준 편차를 계산하는 표본 분산과 표본 분산과 표본 표준 편차다. 따라서 n-1을 분모로 사용한다. 아래에 평균, 표본 분산, 표본 ..
난수 생성 및 분포 함수 R은 주어진 통계 분포를 따르는 난수를 발생시키는 다양한 함수를 제공한다. 이 함수들은 난수(random)를 뜻하는 r 뒤에 분포명을 붙인 형태이다. 아래는 이항분포, F분포, 기하분포 등 주요 분포에 대한 함수를 정리했다. 전체목록은 도움말 help("distributions")로 볼 수 있다. 확률 분포 난수 발생 함수 이항(Binomial)분포 rbinom F 분포 rf 기하(Geometric)분포 rgeom 초기하(Hypergeometric)분포 rhyper 음 이항(Negative Binomial)분포 rmbinom 정규(Normal)분포 rnorm 포아송(Poisson)분포 rpois t분포 rt 연속 균등IUniform)분포 runif 이 함수들의 인자는 원하는 난수의 개수와 각 확률 분포의..
코드 수행 시간 측정 코드가 생각보다 느리게 실행된다면 속도 향상에 앞서 어떤 부분에 시간이 오래 걸리는지를 조사할 필요가 있다. 이런 목적으로 코드 성능을 평가하는 방법에는 system.time()을 사용해 간단히 함수의 수행 시간을 출력해보는 방법과 Rprof() 함수를 사용해 좀 더 본격적인 보고서를 출력해보는 방법이 있다. 명령문 실행 시간 측정 system.time()은 인자로 주어진 명령이 수행하는 데 걸린 시간을 측정한다. -system.time : 표현식을 평가하는 데 걸린 CPU 시간을 구한다. system.time( expr #평가할 표현식 ) 다음은 1부터 N까지 더하는 함수인 sum_to_n( )의 수행 시간을 N=10,000, N=100,000, N=1,000,000인 경우에 대해 각각 측정해본 예다...
데이터 구조의 변형과 요약 reshape2(참고자료 [4], [5] 참고)는 데이터의 모양을 바꾸거나 그룹별 요약 값을 계산하는 함수들을 담고 있는 패키지다. 변환된 데이터는 측정치를 variable과 value라는 두 컬럼으로 표현하므로 데이터의 통계치 계산이 편리해진다. reshape2가 제공하는 볂환은 크게 melt()와 cast() 두 함수로, 이 둘은 4장에서 다른 stack(), unstack() 함수와 유사한 기능을 한다. 다음 표에 이 두 함수의 역할에 대해 정리하였다. 함수 의미 melt() 여러 컬럼으로 구성된 데이터를 데이터 식별자(id), 측정 변수(variable), 측정값(value)이라는 3개 컬럼으로 변환한다. 만약 한 데이터에 대해 다수의 측정 변수와 측정값이 있다면 이들은 여러 행으로 표현된다. 이..
데이터 정렬 이 절에서는 데이터를 정력하는 함수인 sort()와 order()를 설명한다. sort()는 주어진 데이터를 직접 정렬해주는 함수며, order()는 데이터를 정렬했을 때의 순서를 반환한다. sort() sort()는 주어진 벡터를 정렬한 결과를 반환한다. -sort : 벡터를 정렬한다. sort( x, #정렬할 벡터 decreasing=FALSE, # 내림차순 여부 # na.last는 NA 값을 정렬한 결과의 어디에 둘 것인지를 제어한다. n.last=TRUE는 NA값을 #정렬한 결과의 마지막에 두고, na.last=FALSE는 정렬한 값의 처음에 둔다. #기본값인 na.last=NA는 NA값을 정렬 결과에서 제외한다. na.last=NA ) 다음ㅁ은 임의의 값이 저장된 벡터를 각각 오름차순과 내림차순..