1절 R 소개
1. 데이터 분석 도구의 현황
1) R의 탄생
- R은 오픈소스 프로그램으로 통계/데이터마이닝과 그래프를 위한 언어이다
- 최신 통계분석, 마이닝 기능 제공
- 많은 패키지가 업데이트됨
2) R의 특징
- 오픈소스 프로그램
- 월등한 그래픽 및 성능
- 시스템 데이터 저장 방식
- 모든 운영체제에서 사용 가능
- 표준 플랫폼 : S 통계 언어 기반
- 객체지향 언어이며 함수형 언어
3) R Studio
- 오픈소스 및 다양한 OS 지원
- 메모리의 변수 현황과 타입유형 인지 편리
- 스크립트용 프로그래밍
- 래틀(Rattle)은 GUI가 패키지와 긴밀하게 결합돼 있어 정해진 기능만 사용 가능. => 업그레이드 필수
2절 R 기초
1. 통계 패키지 R
1) 패키지(Package)
- 의미 : R함수와 데이터 및 컴파일된 코드의 모임
(C:\Program Files\R\R-4.2.3\library)
- 패키지 불러들이기
install.packages("패키지명") #패키지 설치
library(패키지명) #패키지 활성화
2) 프로그램 파일 실행
기능 |
R 코드 |
비고 |
스크립트로 프로그래밍된 파일 실행 |
source("파일명") |
|
프로그램 파일 |
sink(file, append, split)함수 : R코드 실행 결과를 특정파일에서 출력 |
file: cnffurgkf vkdlfaud append: 파일에 결과를 덮어쓰거나 추가해서 출력 split: 출력파일에만 출력하거나 콘솔창에 출력(default는 FALSE로 파일에만 실행 결과 출력) |
pdf() 함수 : 그래픽 출력을 pdf파일로 지정 |
예) pdf("a_out.pdf"), pdf("d:\data\R\a_out.pdf") |
dev.off() 로 파일 닫기 |
|
2. 변수와 벡터 생성
기능 |
R 코드 |
숫자(Number) |
integer, double |
논리값(Logical) |
TRUE(T), FALSE(F) |
문자(Character) |
"a", "abc" |
3. R 기초 중에 기초
기능 |
R 코드 |
비고 |
출력하기 |
print() : 한 번에 하나의 객체만 출력 cat() : 여러 항목을 묶어서 연결된 결과로 출력. 복합적 데이터 구조(행렬, list 등)를 출력할 수 없음. |
cmd에 변수나 표현식을입력\ 예) print(a), cat("a", "b", "c") |
변수에 값 할당 |
<-,<<--, =, -> |
Alt + '-' 시 자동 '<-' 입력됨 |
변수 목록보기 |
ls(), ls.str() |
|
변수 삭제 |
rm() |
모든 변수를 삭제할 때 사용 예) rm(list=ls()) |
벡터 생성 |
c() |
한 타입만 저장 가능 숫자와 문자가 섞여있으면 모든 원소는 문자로 저장됨. |
R 함수 정의 |
function(매개변수1, 매개변수2,,,){ expr1, expr2,,, } |
<expr 특징> - 지역변수: 단순히 값 대입만 하면 지역변수로 생성되며 함수 종료 시 삭제됨 - 조건부 실행: if문 - 반복 실행: for문, while문, repeat문 - 전역변수: <<-를 사용 |
4. R 프로그램 소개
기능 |
R 코드 |
비고 |
데이터 할당 |
a<-1, a=1 |
|
화면 프린트 |
a, print(a) |
|
결합 |
x<-c(1,2,3,4) x<-c(6.25, 3.14, 5.18) x<-c(x,y,z) x<-c("fee", "fie", "fun") |
c함수는 문자, 숫자, 논리값, 변수를 모두 결합 가능하며 벡터와 데이터셋을 생성 가 |
수열 |
1:5 9:-2 seq(from=0,to=20, by=2) seq(from=0,to=30, length.out=5) seq(10,100,10) |
콜론,seq함수를 사용하여 연속적인 숫자 생성. seq함수는 간격과 결가값 길이 지정 가 |
반복 |
rep(1,time=5) //1 1 1 1 1 rep(1:4,2) //1 2 3 4 1 2 3 4 rep(c(1,2),2) //1 2 1 2 |
숫자나 변수의 값들을 time인자에 지정한 횟수만큼 반복 |
문자 붙이기 |
A<-paste("a","b","c",sep="-") paste(A,c("e","f")) paste(A,10,sep=" ") |
sep에 지정한 구분자고 문자열을 연결시켜줌 |
문자열 추출 |
substr("Bigdataanalysis",1,4) //Bigd |
|
논리값 |
a<-TRUE(T) b<-FALSE(F) |
|
논리 연산자 |
==,!=,<,<=,>,>= |
|
벡터의 원소 선택 |
V[n] : 선택하고자 하는 자리수 V[-n] : 제외하고자 하는 자리 |
A<-c(1,2,3,4,5) A[-2] // 1 3 4 5 |
5. 벡터의 연산
연산자 우선순위 |
뜻 |
표현방법 |
[ [[ |
인덱스 |
a[1] |
$ |
요소 뽑아내기, 슬롯 뽑아내기 |
a$xoef |
^ |
지수 |
5^2 |
- + |
단항 마이너스, 플러스 |
-2, +5 |
: |
수열 생성 |
1:10 |
%any% |
특수 연산자 |
%/% : 나눗셈 몫 %%: 나눗셈 나머지 %*%: 행렬의 곱 |
* / |
곱하기, 나누기 |
3*5, 3/5 |
+ - |
더하기, 빼기 |
3+5 |
== != <> <= >= |
비교 |
3==5 |
! |
논리부정 |
!(3==5) |
& |
논리 "and" |
TRUE & TRUE |
| |
논리 "or" |
TRUE | FALSE |
~ |
식 |
|
-> ->> |
대입 |
3->a |
= |
대입 |
a=3 |
<- <<- |
대입 |
a<-3 |
? |
도움말 |
|
6. 벡터의 기초통계
기능 |
R 코드 |
비고 |
평균 |
mean(변수) |
변수의 평균 산출 |
합계 |
sum(변수) |
변수의 합계 산출 |
중앙값 |
median(변수) |
변수의 중앙값 산출 |
로그 |
log(변수) |
변수의 로그값 산출 |
표준편차 |
sd(변수) |
변수의 표준편차 산술 |
분산 |
var(변수) |
변수의 분산 산출 |
공분산 |
cov(변수1, 변수2) |
변수간 공분산 산출 |
상관계수 |
cor(변수1, 변수2) |
변수간 상관계수 산출 |
변수의 길이 값 |
length(변수) |
변수간 길이를 값으로 출력 |
3절 입력과 출력
1. 데이터 분석 과정
*INPUT(IMPORT) => ANALYSIS => OUTPUT(EXPORT)
- 분석자가 분석 목적에 맞는 적절한 분석 방법론을 선택해 분석을 통해 얻는 결과를 통할력을 갖고 해석함으로써 분석 과정을 마친다.
- 데이터 분석을 위해서는 설계된 방향으로 데이터를 정확하게 입력받는 것에서부터 시작될 수 있다.
- 입력된 데이터는 다양한 전처리 작업을 거쳐 분석가능한 형태로 재정리된다 => 데이터 핸들링
- 분석된 결과를 이해하기 쉽고 잘 해석할 수 있도록 생산하는 부분을 데이터 출력이라고 한다. 보고서의 형태로 정리되어 최종 의사결정자와 고객에게 전달됨으로써 통계분석은 종료된다.
2. R에서의 데이터 입력과 출력
입력 기능 |
R 코드 |
키보드로 데이터를 입력 |
1) 데이터 양이 적어 직접 입력 방법 c() //combine 함수 2) 데이터 편집기 활용 |
고정자리수 데이터 파일 읽기 (fixed-width file) |
read.fwf("파일이름", widths=c(w1,w2,...,wn) |
테이블로 된 데이터 파일 읽기 (변수 구분자 포함) |
read.table("파일이름", sep="구분자") |
CSV 데이터 파일 읽기 (변수 구분자는 쉼표) |
read.csv("파일이름", header=T) |
웹에서 data file 읽어오기 (변수 구분자는 쉼표) |
read.csv("주소") |
HTML에서 테이블 읽어 올 때 |
library(XML) url <- 'http://www.example.com/data/table.html' t <- readHTMLTable(url) |
복잡한 구조의 파일 읽기 (웹 테이블) |
lines <- readLines("a.txt", n=num) |
출력 기능 |
R 코드 |
출력할 내용의 자리수 정의 |
R의부동소수점 표현 : 7자리로 표시 print(pi, digits=num), cat(format(pi, digis=num),"\n") options(digits=num) |
파일에 출력하기 |
cat("출력할 내용", 변수, "\n", file="파일이름", append=T) |
CSV 데이터 파일로 출력 (변수 구부자는 쉼표) |
write.csv(행렬 또는 데이터프레임,"파일이름",row.names=F) |
4절 데이터 구조와 데이터 프레임
1. 벡터(Vector)
1) 벡터들은 동질적이다. : 모든 원소는 같은 자료형 또는 같은 모드(mode)를 가진다.
2) 벡터는 위치로 인덱스 된다. : v[2]는 2번째 원소이다. index 1부터 시작
3) 벡터는 인덱스를 통해 여러 개의 원소로 구성된 하위 벡터를 반환할 수 있다. V[c(2,3)]은 V벡터의 2,3번째 원소로 구성된 하위벡터이다.
4) 벡터 원소들은 이름을 가질 수 있다.
V<-c(10,20,30); names(V)<-c("Moe","Larry","Curly")
V["Larry"]
#출력결과
Larry
20
2. 리스트(List)
1) 리스트는 이질적이다. : 여러 자료형의 원소들이 포함될 수 있다.
2) 리스트는 위치로 인덱스 된다. : L[[2]]는 L리스트의 2번재 원소이다.
3) 리스트에서 하위 리스트를 추출할 수 있다. L[c(2,3)] 은 L리스트의 2,3번째 원소로 이루어진 하위 리스트이다.
4) 리스트의 원소들은 이름을 가질 수 있다. L[["Moe"]]와 L$Moe는 둘다 "Moe"라는 이름의 원소를 지칭한다.
3. R에서의 자료형태(Mode)
객체 |
예시 |
모드(Mode) |
숫자 |
3.1415 |
수치형(Numberic) |
숫자 벡터 |
c(2,4,5,5.5) |
수치형(Numberic) |
문자열 |
"Tom" |
문자형(Character) |
문자열 벡터 |
c("Tom", "Yoon", "Kim") |
문자형(Character) |
요인 |
factor(c("A","B","C")) |
수치형(Numberic) |
리스트 |
list("Tom","Yoon","Kim") |
리스트(List) |
데이터 프레임 |
data.frame(x=1:3, y=c("Tomd","Yoon","Kim") |
리스트(List) |
함수 |
print |
함수(Function) |
4. 데이터프레임(Dataframe)
1) 데이터프레임은 강력하고 유연한 구조. SAS의 데이터셋을 모방
2) 데이터 프레임의 리스트의 원소는 벡터 또는 요인이다.
3) 그 벡터와 요인은 데이터 프레임의 열이다.
4) 벡터와 요인들은 동일한 길이이다.
5) 표 형태의 데이터 구조이며 각 열은 서로 다른 데이터 형식을 가질 수 있다.
6) 열은 이름이 있어야 한다.
b<-data.frame(empno=1:3, empname=c("Y","T","K"))
b[1]
#결과
empno
1 1
2 2
3 3
b["empname"] //만들 때는 ""없음. 조회할 때는 ""넣어야함
#결과
empname
1 Y
2 T
3 K
5. 그 밖의 데이터 구조들
1) 단일값(Scalar)
R에서는 원소가 하나인 벡터로 인식/처리
>pi
[1] 3.1415
>length(pi)
[1] 1
2) 행렬(Matrix)
R에서는 차원을 가진 벡터로 인식(2차원)
>a<-1:9
>dim(a)<-c(3,3)
>a
//출력결과
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
3) 배열(Array)
행열에 3차원 또는 n차원까지 확장된 형태
주어진 벡터에 더 많은 차원을 부여하여 배열을 생성
> b<-1:12
> dim(b)<-c(2,3,2)
> b
//출력결과
, , 1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
, , 2
[,1] [,2] [,3]
[1,] 7 9 11
[2,] 8 10 12
4) 요인(Factor)
벡터처럼 생겼지만, R에서는 유일값의 정보를 얻어내는데, 이 유일값들을 요인의 수준(Level)이라고 한다.
주로 범주형 변수, 집단부류에 사용한다.
=> 중복값 제거
> a<-c(1,2,3,2,4,5,3,6,6,7)
> factor(a)
//결과
[1] 1 2 3 2 4 5 3 6 6 7
Levels: 1 2 3 4 5 6 7
6. 벡터, 리스트, 행렬 다루기
- 행렬은 R에서 차원을 가진 벡터이며, 텍스트마이닝과 소셜네트워크분석 등에 활용한다.
- 재활용 규칙(Recycle Rule) : 길이가 서로 다른 두 벡터에 대해 연산을 할 때, R은 짧은 벡터의 처음으로 돌아가 연산이 끝날 때까지 원소들을 재활용한다.
> a<-seq(1,6)
> b<-seq(7,9)
> a+b
[1] 8 10 12 11 13 15
> cbind(a,b)
a b
[1,] 1 7
[2,] 2 8
[3,] 3 9
[4,] 4 7
[5,] 5 8
[6,] 6 9
5절 데이터 변형