본문 바로가기
Database & Bigdata/공공 빅데이터 청년 인턴십

[DAY 4] R로 배우는 통계 이해 - 탐색적 데이터 분석, 데이터 표본 분포

by jionee 2020. 8. 27.
SMALL

[ 2.1 정형화된 데이터의 요소 ]

- 정형 데이터의 종류

  • 수치 데이터 
    • 연속형 데이터 : ex) 풍속, 지속 시간 등 실수 데이터
    • 이산형 데이터 : ex) 사건의 발생 빈도 등 정수 데이터
  • 범주형 데이터 :
    • 비순서형 (명목형) 범주 데이터 : 예) 도시명(대전, 부산, 서울), 참/거짓 등
    • 순서형 범주 데이터 : 예) 평점 등

 

[ 2.2  테이블 데이터 ]

- 테이블 데이터

  • 데이터 분석에서 가장 대표적으로 사용되는 형태 
  • ex) 엑셀 - 스프레드시트, 데이터베이스 - 테이블
  • 열 : 피처/특징/속성/변수
  • 행 : 레코드 / 관측값/사례/기록값

 

[ 2.3  위치 추정  -  평균 ]

- 데이터를 살펴보는 가장 기초적인 단계는 각 피쳐(변수)의 '대푯값'을 구하는 것

대푯값 : 대부분의 값이 어디쯤에 위치하는지 (중심경향성)을 나타내는 추정값

 

  • 평균 : 전체 합 / 개수
  • 절사 평균 : 값들을 크기 순으로 정렬한 후, 양끝에서 일정 개수의 값들을 삭제한 후 남은 값을 가지고 구한 평균 (특잇값/극단값의 영향을 제거)
  • 가중 평균 : 각 데이터 값에 가중치를 곱한 값들의 총합을 다시 가중치의 총합으로 나눔 (부족한 소수 그룹에 대해 더 높은 가중치 적용)

 

[ 2.3  위치 추정  -  중간값 ]

  • 중간값
    • 데이터를 일렬로 정렬했을 때, 한 가운데에 위치하는 값
    • 만약, 데이터가 짝수라면 한가운데 위치한 두개의 값의 평균
    • 결과를 왜곡할 수도 있는 특잇값(극단값)들의 영향을 받지 않음
mean(state[['Population']]) // 평균 
mean(state[["Population"]],trim = 0.1)  // 절사평균, 각 끝의 10% 제외
median(state[["Population"]]) // 중간값
weighted.median(state[["Murder.Rate"]],w=state[['Population']]) // 가중 평균 ( 살인 비율에 주별 인구 가중 )

 

[ 2.3  위치 추정  -  가중평균 예제 ]

알코올 도수 9%인 와인 200ml와 알코올 도수 21%인 소주 1000ml를 섞어서 만든 와소 폭탄주의 평균 알코올 도수 ?

weighted_mean_1 <- (200*0.09 + 1000*0.21)/(200+1000) // 단순 계산
weighted_mean_1
alcohol <- data.frame(volume = c(200,1000),alcohol_rate=c(0.09,0.21))
weighted_mean2 <- weighted.mean(alcohol$alcohol_rate,alcohol$volume) //가중평균 함수 이용
weighted_mean2 

 

[ 2.4  변이추정 ]

- 변이 : 데이터 값이 얼마나 밀집해 있는지 혹은 퍼져 있는지를 나타내는 산포도

* 가장 유명한 방법은 분산과 표준 편차. 그 외에 평균절대편차, 범위, 백분위수, 사분위수 등

 

  • 백분위수에 기초한 추정

    • 순서 통계량 - 정렬된 데이터를 나타내는 통계량.
    • 범위 : 최대값과 최소값의 차이
    • 백분위수 : 50% 백분위수는 중앙값과 같고, 0% 백분위수는 최소값, 100% 백분위수는 최대값과 같다.
    • 사분위범위(IQR) : 25번째 백분위수와 75번째 백분위 수의 차이

 

- 데이터 집합의 변이를 계산

var() : 분산

sd() : 표준 편차

IQR : 사분위범위

mad : 중위절대편차

quantile : 분위수

x <-c(1,2,3,3,5,6,7,9)
mean(x)
median(x) // 짝수일 때 두값의 평균
max(x)
min(x)
summary(x)

var(x)  // 분산
sd(x)   // 표준 편차
IQR(x)  // 사분위범위
mad(x)  // 중위절대편차
quantile(x, p=c(.05, .25, .5, .75, .95))

 

[ 2.5  데이터 분포 탐색 ]

- 데이터가 전반적으로 어떻게 분포하고 있는지 알아보는 것

- 백분위 수, 상자그림, 도수분포표, 히스토그램, 밀도그램 등

 

- R 함수 이용한 백분위수 생성 예

quantile(state[["Population"]],p=c(.05,.25,.5,.75,.95))

 

- R 함수 이용한 상자그림 생성 예

boxplot(state[["Population"]]/1000000,ylab="Population(millions)")

 

- R 함수 이용한 상자그림 보는법

 

- 데이터 분포 탐색

도수분포표는 변수의범위를 동일한 크기로 나눈 다음, 각 구간마다 몇 개의 변수 값이 존재하는지 보여줌

히스토그램은 도수분포표를 시각화하는 방법

 

 

- R의 table 함수를 이용한 도수분포표 생성

breaks <- seq(from=min(state[["Population"]]),to=max(state[["Population"]]),length=11)
pop_freq <- cut(state[["Population"]],breaks=breaks,right =TRUE,include.lowest=TRUE)
table(pop_freq)

 

 

- R의 hist 함수를 이용한 히스토그램 생성 

hist(state[["Population"]],breaks=breaks)

- 그래프에 빈 구간들이 있을 수 있음

- 구간은 동일한 크기

- 구간의 수(or 구간의 크기)는 사용자가 결정할 수 있음

- 빈구간이 없으면 막대는 서로 붙어있음

 

x<-c(1,2,3,3,5,6,7,9)
breaks1 <- seq(from=min(x), to=max(x), length=5)
pop_freq1 <- cut(x,breaks=breaks1,right=TRUE, include.lowest = TRUE)

table(pop_freq1) //도수분포표 생성
hist(x,breaks=breaks1) // 히스토그램

 

 

[ 2.6 이진 데이터와 범주 데이터 탐색 ]

- 막대 그래프 

barplot(as.matrix(dfw)/6,cexaxis=0.8,cexnames=0.7)

cex.axis : y축 글자 크기

cex.name : x축 글자 크기

 

 

barplot(as.matrix(dfw)/6,ylim=c(0,20000),cex.axis=0.8,cex.names=0.7)

ylim : y축 최소값, 최대값 지정

 

 

 

[ 3.  데이터와 표본 분포 ]

모집단 : 어떤 데이터 집합을 구성하는 전체 대상 혹은 전체 집합

표본 : 모집단의 부분 집합

 

모집단의 특성 : 모수

표본단의 특성 ; 통계량

 

 

[ 3. 1  랜덤표본추출과 표본편향 ]

- 표본 표출의 오차는 편향우연성에 의해 발생

편향은 표본추출방법을 과학적으로 계획하여 줄일 수 있음

우연에 의한 오차는 표본의 크기를 증가시킴으로써 감소 시킬 수 있음

 

-  표본추출법의 여러가지 유형

  • 랜덤표본추출
    • 무작위로 추출하는 과정. 모든 원소는 동일한 확률로 뽑히게 됨.
    • 결과로 얻은 샘플은 단순랜덤표본이라고 함.
    • 복원 추출과 비복원 추출이 있음
      • 복원 추출 : 추첨후, 다음번에도 중복 추출이 가능하도록 해당 샘플을 다시 모집단에 포함
      • 비복원 추출 : 한번 뽑힌 원소는 추후 추첨에 사용하지 않는 비복원추출
  • 층화표본추출
    • 모집단을 여러 층으로 나누고 각 층에서 무작위로 샘플을 추출
    • ex) 정치 설문에서 백인,흑인, 라틴계 유권자들로 계층을 나누어 동일한 크기 표본 추출 시, 해당 층(흑인, 라틴계)에도 동일한 표본을 얻을 수 있음 <- 표본 편향 문제 회피

 

[ 3.2  이산확률분포와 연속확률분포 ]

이산확률분포 : 확률 변수의 값이 이산적(정수)일 때. ex) 동전을 5번 던졌을 때 앞면이 2번 나올 확률

연속확률분포 : 확률 변수의 값이 연속적(실수)일 때. ex) 몸무게가 50~55kg 사이일 확률

 

 

[ 3.3  통계학에서의 표본 분포 ]

데이터 분포 : 개별 데이터의 도수분포

표본 분포 : 여러 표본 혹은 재표본들로 부터 얻은 표본 통계량의 도수 분포

중심 극한 정리 : 표본의 크기가 커질수록 표본 분포가 정규분포를 따르는 경향

표준 오차 : 통계에 대한 표본분포의 변동성, 여러 표본들로 부터 얻은 표본 통계량의 변량 ( 개별 데이터 값들의 변량을 뜻하는 표준 편차와 혼동하지 말것)

 

- 단순 랜덤 표본

samp_data <- data.frame(income=sample(loans_income, 1000), 
                        type='data_dist')
str(samp_data)

Sample : 데이터에서 무작위로 샘플 추출 (replace=F가 default 값이기 때문에 비복원 추출이 기본)

 

 

 

- tapply

samp <- data.frame(name=factor(c("kim","choi","choi","lee","kim","lee")),
                   score=c(50,30,10,50,20,30))

tapply(samp$score, samp$name, length) // 개수
tapply(samp$score, samp$name, mean) //  평균

tapply : 요인(factor)의 수준(level)별로 특정 벡터에 함수 명령어를 동시에 적용

tapply(함수 사용할 수치, 인수의 index, 적용함수)

 

 

 

- 5개 표본씩 평균

samp_mean_05 <- data.frame(
  income = tapply(sample(loans_income, 1000*5), 
                  rep(1:1000, rep(5, 1000)), FUN=mean),
  type = 'mean_of_5') 

str(samp_mean_05)

 

 

- 데이터프레임 rbind, 타입을 facrot 변환

income <- rbind(samp_data, samp_mean_05, samp_mean_20)
str(income)
income$type = factor(income$type, 
                     levels=c('data_dist', 'mean_of_5', 'mean_of_20'),
                     labels=c('Data', 'Mean of 5', 'Mean of 20'))

댓글