[ DAY 3 ]
1. R설치 및 기본 설정
[R과 R studio]
R : 통계 계산 및 그래픽을 위한 언어 및 환경
R studio : R을 위한 통합개발환경(IDE)
[ R studio 기본 설정 ]
라이브러리(패키지)의 설치 및 사용
- install.packages("ggplot2") : 라이브러리 설치는 라이브러리 파일을 하드디스크(보조 기억장치)에 저장
- library(ggplot2) : 라이브러리 부착은 하드디스크에서 주 기억 장치로 적재
- search() 부착된 라이브러리 목록 확인
* 컴퓨터를 끄거나 R 스튜디오를 닫는 경우 주 기억 장치에 있던 라이브러리는 지워짐
2. 데이터형과 연산
[ 데이터형 ]
변수에 값 저장 : =, <- , -> 을 통한 대입
ex) x <- 1 # x에 1을 할당
R의 기본 데이터형: 데이터형을 지정하지 않고, 변수에 어떤 값을 저장하는냐에 따라 데이터형이 결정
데이터형 | 종류 |
숫자형 | int : 정수, num : 실수, cplx : 복소수 |
문자형 | chr : 작은따옴표나 큰 따옴표로 묶어 표기 |
범주형 | factor : 레벨에 따라 분류된 형태 |
논리형 | TRUE(T), FALSE(F) |
특수 상수 | NULL : 정의되지 않은 값 NA : 결측값 Inf / -Inf : 양의 무한대와 음의 무한대 NAN : 0/0, Inf/Inf 등과 같이 연산 불가능한 값 표시 |
데이터형 확인 함수들
함수 | 설명 |
class(x) | R 객체지향 관점에서 x의 데이터형 |
typeof(x) | R 언어 자체 관점에서의 x의 데이터형 |
is.integer(x) | x가 정수형이면 TRUE, 아니면 FALSE |
is.numeric(x) | x가 실수형이면 TRUE, 아니면 FALSE |
is.complex(x) | x가 복소수형이면 TRUE, 아니면 FALSE |
is.character(x) | x가 문자형이면 TRUE, 아니면 FALSE |
is.na(x) | x가 NA이면 TRUE, 아니면 FALSE |
데이터형 변환 함수들
함수 | 설명 |
as.factor(x) | x를 범주형으로 변환 |
as.integer(x) | x를 정수형으로 변환 |
as.numeric(x) | x를 숫자형으로 변환 |
as.character(x) | x를 문자형으로 변환 |
as.matrix(x) | x를 행렬로 변환 |
as.array(x) | x를 배열로 변환 |
연산자
함수 | 설명 |
^ 또는 ** | 지수승 |
x %% y | x를 y로 나눈 나머지 (정수 나눗셈 나머지) |
x %/% y | x를 y로 나눈 몫 (정수 나눗셈 몫) |
! | 부정 |
| , || | OR (합집합) |
&, && | AND (교집합) |
isTRUE(x) | x의 TRUE여부 판단 |
[ R 데이터 구조 ]
[ 벡터 ]
Vector : 단일값의 모음, 벡터 변수에는 동일한 데이터 값을 가진 값들이 들어감
생성
- 백터 생성 연산자 ':' 이용 ex) 1:7 #1~7까지 1씩 증가
- c 함수 이용 : 주어진 인수로 벡터 생성 ex) c(1,2,3) #1,2,3으로 벡터 생성
- seq 함수 이용 : 순차적 벡터 생성
- ex) seq(from=1, to=10, by=2) #1부터 10까지 2씩 증가
- ex) seq(0,1,legth.out=11) # 0부터 1까지 11개의 벡터
- rep 함수 이용 : 반복 벡터 생성
- ex) rep(c(1:3), times = 2) # (1,2,3) 전체 2번 반복
- ex) rep(c(1:3), each =2) # (1,2,3) 개별 2번 반복
백터 연산
- 벡터 연산에서 요소를 구할때는 C 함수 사용 ex) x[c(1,2,3)] # x벡터의 1,2,3 요소
- 벡터 끼리의 연산에서 크기가 정수배이면 작은쪽을 순환해 더함 ex) (5,6,7,8) + (3,4) = ( 5+3, 6+4, 7+3, 8+4 )
- 크기가 정수배가 아닌 경우 에러가남
벡터 연산 함수
- all : 벡터 내 원소 모두가 조건을 만족하면 TRUE ex) all(x>5) # x 요소값이 모두 5보다 큰가
- any : 벡터 내 원소 일부가 조건을 만족하면 TRUE ex) any(x>5) # x 요소값이 일부 5보다 큰가
- union(x,y) : 합집합 함수
- intersect(x,y) : 교집합 함수
- setdiff(x,y) : 차집합(x기준 동일 요소 제외)
- setdiff(y,x) : 차집합(y기준 동일 요소 제외)
- setequal(x,y) : x와 y가 동일한지 비교
[ 배열 ]
배열(행렬) : 모든 컬럼과 행은 데이터형이 동일
생성
- array 함수 : N차원 배열 생성
- x <- array(1:5, c(2,4)) # 2X4 행렬에 1부터 5까지 반복해 입력
- dimnamex = list( c("1st", "2nd"), c("1st", "2nd", "3rd", "4th") ) , x <- array( 1:5, c(2,4), dimnames = dimnamex) # 행과 열 이름 설정
- matrix 함수: 2차원 배열 생성(벡터를 묶어 배열 생성)
- x<-1:12 , matrix(x,nrow=3) # x벡터를 행이 3개인 2차원 배열로 만듬 (열 우선 입력)
- 1 4 7 10 2 5 8 113 6 9 12
- x <- 1:12, matrix(x, nrow = 3, byrow = T ) # 행우선 입력
- 1 2 3 45 6 7 89 10 11 12
- cbind(v1, v2, v3) #벡터들을 열단위로 묶어 배열 생성
- v1 v2 v3
- rbind(v1,v2,v3) # 벡터들을 행단위로 묶어 배열 생성
- v1v2v3
- x<-1:12 , matrix(x,nrow=3) # x벡터를 행이 3개인 2차원 배열로 만듬 (열 우선 입력)
배열 함수
- apply : 행/열기준으로 함수를 적용 ( 1 = 행 기준( 가로방향 ) / 2 = 열 기준 ( 세로방향 ) )
- apply(x, 1, mean) # 행 기준으로 평균 구함
- apply(x, 2, mean) # 열 기준으로 평균 구함
- dim : 배열의 크기를 구함
- sample : 임의로 샘플 추출
- sample(x) #x에서 임의로 샘플 추출
- sample(x,10) # x에서 임의의 샘플 10개 추출
- sample(10) # 샘플 만들기
[ 데이터 프레임 ]
데이터 프레임 : 각 컬럼별로 먼저 생성, data.frame으로 모두 합침
- 가장 흔히 쓰이는 표 형태의 데이터 구조를 가짐
- 행렬과 달리 여러 데이터형을 혼합해 저장할 수 있음
- 리스트와 달리 행의 수를 일치 시켜 저장해야함
생성
- data.frame()
- a <- data.frame(name, age, gender, blood) # 칼럼들을 합쳐 데이터 프레임으로 생성
- a <- data.frame() , a <- edit(a) # edit 함수 이용해 데이터 프레임 생성
데이터 프레임 요소에 접근
- $ : 속성값 출력
- a$name #name 속성값 출력
- [,] : 정보 추출
- a[a$name == '"지원", ] # 지원에 대한 정보 추출
- a[a$name == "지원", c("name", "age")] # 지원의 이름과 나이 추출
데이터 프레임에 유용한 함수
- attach : 속성 -> 변수
- attach(cars) #attach 속성들을 변수로 만듬
- detach : 속성의 변수 사용 해제
- detach(cars) #속성의 변수 사용 해제
- subset : 일부 데이터만 추출
- subset(cars, speed>30, select = c(dist)) # car 데이터 프레임에서 속도 30 초과인 dist열 추출
[ 리스트 ]
리스트 : 서로 다른 기본 데이터형을 갖는 자료구조를 포함 할 수 있음
- 데이터 프레임보다 넓은 의미의 데이터 모임
- 데이터 프레임과 달리 모든 속성의 크기가 같을 필요가 없음
생성
- list()
- a <- list(a,b) # 데이터 프레임 a,b를 리스트로 만듬
* 리스트 요소에 접근하는법은 데이터 프레임과 동일
ex) a$patients, a[ [1] ], a[ ["patients"] ]
함수
- lappy : list + apply를 의미함. 함수의 실행 결과가 list형태로 출력
- lapply(a$patients, mean) #patients 데이터 프레임의 평균이 리스트 형태로 출력
- sapply : 실행 결과를 벡터 or 행렬로 출력
- sapply(a$patients, mean) #patients 데이터 프레임의 평균이 벡터 형태로 출력
3. 데이터 취득과 정제
4. 데이터 가공
[ DAY 4 ]
[ 용어 정리 ]
-
평균 : 전체 데이터를 더한 후 개수로 나눈 값 ( 총 합 / 모집단 )
- 중앙값 : 크기순으로 정렬시킨 후 가운데 있는 값
- 편차 : 평균과 해당 값의 차이 ( 평균 - 해당값)
- 제곱평균 : 편차값을 제곱해서 평균을 구하는 원리 (마이너스 값 -> 플러스 값)
- 분산 : 편차값을 제곱해서 나온 값 (분산된 정도를 알려줌)
- 표준편차 : 분산값의 루트를 적용 (제곱 제거)
- 평균 기준 표준 편차 1배 정도 차이 - 평범
- 평균 기준 표준 편차 2배 정도 차이 - 특수
- 모집단 : 계산에 사용한 원본 대상
- 표본 : 일부 대표성을 가진 데이터
- 자유도 : 주어진 데이터에서 표본을 자유롭게 뽑을 수 있는 경우의 수
- 표본의 분산과 표분편차를 계산할 때 나누는 분모의 수 : 모집단 -1
- 표본을 추출해서 표본의 분산과 편차를 계사할 때는 항상 자유도를 분모로 사용
[ 1.1 평균,분산,표준편차 ]
평균 : mean()
중간값 : median()
분산 : var()
표준편차 : sd()
[ 1.2 표준값,표준화 ]
표준값 : 공통된 기준을 적용해서 점수화
표준화 : 모든 값들의 표준값을 정해서 그 값을 기준으로 차이 비교
표준값 = (각데이터 - 평균) / 표준편차
[ 1.3 정규 분포 ]
정규 분포 : 데이터들이 평균값을 기준으로 좌 우 대칭형으로 분포되어 있는 형태
- 도식화
nrorm(개수, 평균, 표준편차) : 정규분포 난수 발생
hist : 특정 데이터 빈도를 막대모양으로 보여줌
breaks : 막대 수
probability : 상대 도수
- 정규분포 선택 확률
정규 분포를 따르는 분포일 경우
특정 데이터가 선택될 확률은 평균값을 기준으로
표준편차 -1배 ~ +1배 구간 = 약 70%
표준편차 -1.96배 ~ + 1.96배 구간 = 약 95%
- 정규분포 활용 예
평균이 170cm이고 표준 편차가 7cm 인 정규 분포
100명 중 1명을 골랐을 때, 몸무게가 163cm~177cm인 확률은 70%
156cm~184cm일 확률은 95% 정도
[ 1.3 t 검정 ]
귀무가설 : 전 후 관계가 동일
대립가설 : 전 후 관계가 동일하지 않음
- shapiro.test (정규분포를 따르는지 확인)
shapiro.test(score1$성적)
p-value가 0.05보다 높은 0.88
-> 정규분포를 따르고 이 데이터에 대해 t-test가 가능
- t-test(t 검정)
result <- t.test(score1$성적,alternative = c("greater"),mu=75)
result
mu : 모평균의 설정값
alternative : 모평균보다 크다, 작다 또는 다르다
- greater : 크다
- less : 작다
- two.sided : 다르다
표본의 평균값 : 77.1
t의 값 : 0.7
유의 확률(p-valude) : 0.3
유의 확률 (0.3) > 유의 수준 5% (0.05) -> 귀무가설 채택
- 신약의 효과 t-test
환자를 두 집단으로 나누어 한 집단은 신약, 나머지 한 집단은 위약 제공 후 환자들의 치료효과 시간 측정
x<-c(15,10,13,7,9,8,21,9,14,8) // 신약 치료효과 시간
y<-c(15,14,12,8,14,7,16,10,15,12) // 위약 치료효과 시간
shapiro.test(x)
shapiro.test(y)
p-value가 0.05보다 높음
-> 정규분포를 따르고 이 데이터에 대해 t-test가 가능
t.test(x,y)
p-value=0.6
유의 확률 (0.3) > 유의 수준 5% (0.05) ->귀무가설 채택
신약의 효과가 있다고 말할 수 없음
- t 검정 순서
1. 가설 설정
귀무가설 : 지난 학기와 이번 학기의 평균은 동일
대립가설 : 지난 학기와 이번 학기의 평균은 동일하지 않음
2. 정규분포 검정
shapiro.test(score1$성적)
p-value가 0.05보다 높은 0.9
따라서 정규분포를 따르고 이 데이터에 대해 t-test를 할 수 있음
3. T 검정
t.test(score1$ 성적, alternative=c("gather"),mu=75)
4. 결과해석
유의확률(0.002)<유의수준(0.05) -> 대립가설 채택
-> 지난학기와 이번 학기의 평균은 동일하지 않다
- 타자 교육 대응 표본 분석
대응 표본 : 두 집단의 자료를 쌍으로 묶을 수 있는 표본
x<-c(52,60,63,43,46,56,62,50) // 타자 교육 전
y<-c(58,62,62,48,50,55,68,57) // 타자 교육 후
shapiro.test(x) // x 정규분포 검정
shapiro.test(y) // y 정규분포 검정
t.test(x,y,paired = TRUE)
p-value=0.01
유의 확률 (0.01) < 유의 수준 5% (0.05) -> 대립가설 채택
타자 교육이 효과가 있다고 말할 수 있음
[ 1.4 분산 분석]
oneway.test
- 3집단의 평균 비교
x <- c(1.09, 2.12, 2.92, 4.06, 4.90)
y <- c(1,2,3,4,5)
z <- c(1.10, 1.96, 12.98, 4.09, 4.92)
shapiro.test(x)
shapiro.test(y)
shapiro.test(z)
mydata <-c(x,y,z) // 벡터형으로 자료를 생성함
mydata
group <-c(rep(1,5), rep(2,5), rep(3,5)) // 처음 5개를 1로, 다음 5개를 2, 다음 5개를 3
group
oneway.test(mydata~group, var=T) // mydata를 3개로 그룹지어서 평균이 같은지 검증
p-value = 0.49
유의 확률 (0.49) > 유의 수준 5% (0.05) -> 귀무가설 채택
평균이 같다고 할 수 있음
- 4가지 온도에 따른 제품의 강도
x1<-c(23,27,24,25,29,30,26) // 온도1
x2<-c(35,32,38,36,32,33,34) // 온도2
x3<-c(36,41,38,39,40,38,39) // 온도3
x4<-c(32,30,37,34,35,34,32) // 온도4
shapiro.test(x1) // 정규 분포 검증
shapiro.test(x2)
shapiro.test(x3)
shapiro.test(x4)
mydata<-c(x1,x2,x3,x4) // 벡터형 자료 생성
group <- c(rep(1,7),rep(2,7),rep(3,7),rep(4,7)) // 처음 7개를 1, 다음 7개를 2 ~
oneway.test(mydata~group,var=T)// mydata를 4 group지어서 평균이 같은지 검증
p-value = 3e-09
유의 확률 (3e-09) < 유의 수준 5% (0.05) -> 대립가설 채택
4가지 온도에 따라 강도의 차이가 있다고 볼 수 있음
[ 1.5 빈도 분석 ]
모집단 : 조사하고자하는 데이터 전체
유한 모집단 : 셀 수 있는 모집단
무한 모집담 : 셀 수 없는 모집단
모평균 : 모집단에 있는 데이터들의 평균
표본평균 : 표본을 여러 개 추출해서 평균을 낸 것
prop.table() : 빈도 계산 (0~1)
table() : 중복부분 집계해줌 (개수)
round() : 반올림 소수점
- 하나의 테이블로 완성
- 도식화
barplot(love_fruits$건수,names.arg=c("바나나","복숭아","사과","체리","포도"),ylim=c(0,15),col=rainbow(5))
names.arg : 막대이름
name : arg 생랼가능
ylim : y축 범위
col : 막대색상
[ 1.6 상관분석 ]
상관분석 : A사건이 B사건에 어떤 영향을 주는가 ?
- 양의 상관관계
- 음의 상관관계
상관계수 : 관련 있는 정도를 숫자로 표현
-1 <= r <= +1
-1로 갈수록 음의 상관관계, +1로 갈수록 양의 상관관계
0에 가까울 수록 관계가 없음
- 상관계수 공식
- cor(x,y) ; 상관계수 출력
x <- c(3,5,8,11,13) // 제품 판매 개수
y <- c(1,2,3,4,5) // DM 발송 회수
상관계수가 0.997 -> DM 발송과 제품 판매량은 아주 관련이 많음
- 상관분석
1. 가설 설정
- 귀무가설 : 관련이 없다. (DM발송과 제품 판매량은 관계가 없음)
- 대립가설 : 관련이 있다. (DM발송과 제품 판매량은 관계가 있음)
2. 상관관계 분석
cor.test(x,y)
3. 결과 해석
유의확률(2e-04) < 유의수준(0.05) -> 대립가설 채택 -> 상관계수 0.99로 DM 발송과 판매량은 아주 관련이 많음
[ 1.7 회귀분석 ]
회귀분석 : 어떤 결과값을 기준으로 다른 결과값을 예측하는 방법
* 상관 분석 : 두 변수사이의 관계 파악 ( 예측 X )
단순 회귀분석 : 종속 변수에 영향을 주는 변수가 1개
다중 회귀분석 : 종속 변수에 영향을 주는 변수가 여러 개
- 회귀식 : 주어진 데이터들을 분석해서 특별한 규칙을 찾아낼 때 그 규칙을 회귀식이라고 함
y : 종속변수(반응 변수), x: 독립변수 (설명 변수)
b0 : y절편, b1 : 기울기
최소 자승법을 사용해 b1을 먼저 구함
- 부모 - 자식 아이큐 회귀분석
lm : 선형 회귀 분석
lm(종속변수(결과) ~ 독립변수(원인),데이터)
x <- c(110,120,130,140,150) // 부모 IQ
y <- c(100,105,128,115,142) // 자식 IQ
plot(x,y,pch=20,col="red") // 2차원 선 그리기
line <- lm(y~x) // line 정의
line
abline(line,col="blue") // 좌표에 직선 그리기
회귀식 : -4.20 + (0.94 x)
- 병원 직원 친절도와 만족도 회귀분석
x<-c(15,10,13,7,9,8,21,9,14,8) // 병원 친절도
y<-c(15,14,12,8,14,7,16,10,15,12) // 환자 만족도
out = lm(y~x)
summary(out)
회귀식 y : 6.359 + 0.52x
p-value = 0.0158
유의확률이 p = 0.0158 <0.05 므로 귀무가설 기각, 친절도는 만족도에 유의한 영향 미침 (신뢰도 47%)
- 다중 회귀분석
lm3 <- lm(성적~IQ+다니는학원수+게임하는시간+TV시청시간)
lm3
회귀식 y(성적) = 23.2992 + 0.468 x1 + 0.718 x2 - 0.839 x3 - 1.385 x4
ex) IQ가 130(x1)인 사람이 학원을 3개(x2) 다니고 게임을 2시간(x3)하고 TV를 1시간 (x4) 볼 경우 예상되는 성적은 ?
- 결정계수(R^2)
결정계수가 0에 가까울 수록 믿을 수 없고 1에 가까울 수록 믿을 수 있음
summary(lm3)
결정계수 : 0.9295
p-value : 0.001
유의확률(0.001) < 유의수준(0.05) -> 대립가설 채택
- 독립변수는 성적에 유의한 영향을 미침
- 추정 회귀식의 관측값을 약 93% 설명 가능
- 개인요인(인성,얼굴,성격)와 인맥관리의 회귀분석
x1<-c(100,90,98,79,81,69,80,77,68,54) // 인맥관리
x2<-c(5,4,5,3,4,3,2,3,2,1) // 인성
x3<-c(5,3,4,3,4,3,2,3,2,1) // 얼굴
x4<-c(5,3,3,2,3,3,4,3,2,1) // 성격
mydata <- data.frame(y=x1,s1=x2,s2=x3,s3=x4)
mydata
model <- lm(y~. , data = mydata)
회귀식 y : s1 + s2 + s3
결정계수 : 0.8825
p-value : 0.00102
유의확률(0.001) < 유의수준(0.05) -> 대립가설 채택
- 독립변수는 성적에 유의한 영향을 미침
- 추정 회귀식의 관측값을 약 88% 설명 가능
- 세부 항목중 인성과 성격이 유의한 영향을 미침 (얼굴은 p-value 0.1453으로 유의수준을 넘음)
- 서비스 요인(가격,품질,청결)과 고객충성도 회귀분석
x1<-c(100,90,98,79,81,69,80,77,68,54) // 인맥관리
x2<-c(5,4,5,3,4,3,2,3,2,1) // 인성
x3<-c(5,3,4,3,4,3,2,3,2,1) // 얼굴
x4<-c(5,3,3,2,3,3,4,3,2,1) // 성격
mydata <- data.frame(y=x1,s1=x2,s2=x3,s3=x4)
mydata
model <- lm(y~. , data = mydata)
회귀식 y : s1 + s2 + s3
결정계수 : 0.7307
p-value : 0.01178
유의확률(0.01178) < 유의수준(0.05) -> 대립가설 채택
- 독립변수는 성적에 유의한 영향을 미침
- 추정 회귀식의 관측값을 약 73% 설명 가능
- 세부 항목중 가격만이 유의한 영향을 미침 (품질,청결의 p-value는 유의수준을 넘음)
'Database & Bigdata > 공공 빅데이터 청년 인턴십' 카테고리의 다른 글
[DAY 5] R로 배우는 통계 이해 - 회귀와 예측 (0) | 2020.08.28 |
---|---|
[DAY 5] R로 배우는 통계 이해 - 통계적 실험과 유의성 검정 (0) | 2020.08.28 |
[DAY 4] R로 배우는 통계 이해 - 탐색적 데이터 분석, 데이터 표본 분포 (0) | 2020.08.27 |
[DAY 2] 데이터 이해 및 정형 데이터 다루기 (0) | 2020.08.25 |
2020 공공 빅데이터 청년 인턴십 서류 및 면접 합격 (4) | 2020.08.07 |
댓글