SlideShare a Scribd company logo
1 of 55
R 에 대한 이해와 활용
2016. 01.
By HappyChallenge
email : happychallenge@outlook.com
2
R 프로그램 설치 및 환경 설정
o R 프로그램 설치 - 핵심 엔진 :  가장 먼저 할일
- http://mirror.bjtu.edu.cn/cran/ : 북경대 Mirror 사이트
- http://r-project.org/ : 미국 본사
o R STUDIO - 개발 환경 (IDE) 프로그램 설치 : 두번째 할일.
- https://www.rstudio.com/products/RStudio/#Desktop
필요한 패키지 설치
 console 창에서 아래와 같이 입력
 필요한 package 를 선택하여 설치
 install.packages(“dplyr”)
 install.packages(“shiny”)
 install.packages(“ggplot2”)
 install.packages(“plotly”)
 install.packages(“RODBC”)
 install.packages(“lubridate”)
 install.packages(“tidyr”)
 install.packages(“xlsx”)
console 창
Basic understanding about R
 Open Source based S programing for statistics
 Good for handling Big Data and easy to visualization
 Script language, easy to learn
 Compile language  exe, etc
 Lot of package including data handling and DB connection
 More than 4,500 package developed
 DB connection
 Excel Control
 SAS, SPSS Data Connection
 Result to PPT, PDF, Word etc
 동일한 기능을 하는 다양한 Package 가 있기 때문에 본인이 편리한 것
을 선택하여 사용할 수 있다.
 reshape2::melt() == tidyr::gether()
 reshape2::acast() == tidyr::spread()
Why R programing
데이터 분석에 대한 데모
Basic Commands
 getwd() # print the current working directory - cwd
 ls() # list the objects in the current workspace
 setwd(mydirectory) # change to mydirectory
setwd("c:/docs/mydir") # note / instead of  in windows
setwd("/usr/rob/mydir") # on linux
 save(object list,file="myfile.RData") #데이터 파일에 저장
 load("myfile.RData") # 파일에서 데이터 읽어오기
Function Output to
pdf("mygraph.pdf") pdf file
win.metafile("mygraph.wmf") windows metafile
png("mygraph.png") png file
jpeg("mygraph.jpg") jpeg file
bmp("mygraph.bmp") bmp file
postscript("mygraph.ps") postscript file
Basic of R #1
 Variable
 숫자로 시작하면 안된다. 문자로 시작해야 한다.
 Good : var1, hflight, …
 Bad : 100var, 3hf …
 대소문자를 구분해야 함
 Microsoft 관련 언어와 다름
 Assign value to Variable
 <- , = 모두 가능, 하지만 <- 사용을 권장함.
 ex) var1 <- 100 #var1 에 100을 할당함, 나중에 활용하기 위함
 Variable 은 사용자가 어떤 특정 값을 큰 데이터에 적용할 때 사용함
 일반적으로 데이터는 수 만건에서 수 백만것에 해당
Basic of R #1
 Data Type
 vector
 Factor
 matrix
 Array
 Data Frames
 Lists
 Useful Functions
 length(object) # number of elements or components
 str(object) # structure of an object
 class(object) # class or type of an object
 names(object) # names
 c(object,object,...) # combine objects into a vector
 cbind(object, object, ...) # combine objects as columns
 rbind(object, object, ...) # combine objects as rows
 object # prints the object
 ls() # list current objects
 rm(object) # delete an object
 newobject <- edit(object) # edit copy and save as newobject
 fix(object) # edit in place
Basic of R #2
 Vector #1
 여러 개의 데이터가 들어가 있는 데이터의 나열
 기호는 c (알파벳) 를 사용함
 ex) c(1, 2, 3,…. 100)
 ex) c(3, 4, 5)
 1:10  c(c(1, 2, 3,…. 10)
 Vector 의 연산
 a <- c(1, 3, 5)
 b <- c(2, 4, 6)
 a + b  c(3, 7, 11)
 개수가 맞지 않을 때는 자동으로 늘어나서 해당 vector 와 연산이 됨
• a + 100  c(101, 103, 105) # c(1, 3, 5) + c(100, 100, 100) 과 동일한 결과
• b + 20  c(22, 24, 26) # c(1, 3, 5) + c(20, 20, 20) 과 동일한 결과
• a – 3  c(-2, 0, 2) # c(1, 3, 5) – c(3, 3, 3) 과 동일한 결과
 a * b  c(2, 12, 30)
 a / b  c(0.5000000, 0.7500000, 0.8333333)
기호에 대한 이해
 : 결과를 말함
Basic of R #3
 Vector #2
 Vector Indexing  필요한 순서의 숫자를 이용하여 접근 가능함.
 A <- c(1, 3, 5, 7, 9)
 a[3]  5, a[4]  7
 a[3:5]  c(5, 7, 0)
 a[-3]  c(1, 3, 7, 9)
 a[-3:-4]  c(1, 3, 9)
 Factor
 Vector 중 자연수 또는 Unique 한 그룹으로 묶은 것
 Vector 가 단순 나열이라면 Factor 는 서로 비교할 수 있음
Basic of R #4
 Matrix(행렬) #1
 행렬은 가로(행)와 세로(렬)의 데이터
 Excel 의 데이터가 대표적
 a <- matrix(c(1, 2, 3, 4, 5, 6), nrow=2, ncol=3) # 2x3 행렬
 b <- matrix(c(1, 2, 3, 4, 5, 6), nrow=3, ncol=2) # 3x2 행렬
 직원의 데이터를 Matrix 로 표현할 경우 행은 사람별 데이터,
 열은 나이, 성별, 몸무게, 키, 근무년수,
 Matrix(행렬) 의 연산
 a + a, a – a, a * a, a / a, a%*%a, a*3, solve(a), t(a)
기호에 대한 이해
# : 주석을 말함 실행 안됨
Basic of R #5
 Matrix(행렬) #2
 Matrix Indexing
 a <- matrix(1:9, nrow=3, ncol=3) # 3x3 행렬
 a[1, 2]  4 # 개별 값을 읽어 옴
 a[2, 3]  8
 a[1, ]  c(1, 4, 7) # 행의 값을 모두 읽어 옴
 a[ , 2]  c(4, 5, 6) # 열의 값을 모두 읽어 옴
 a[-3, ]  # 해당 행을 제외하고 모두 읽어 옴
 a[ , -2]  # 해당 열을 제외하고 모두 읽어 옴
Basic of R #6
 Matrix(행렬) #3
 Matrix and Function
 sum(), mean(), sd(), min(), max(), median()…..
 모든 함수는 행렬 전체 또는 행, 열별로 적용이 가능함
 a <- matrix(1:9), nrow=2, ncol=3) # 3x3 행렬
 sum(a)  45 # 전체 합계
 mean(a)  5 # 전체 평균
 median(a[ , 3]) # 3 열의 중간값
 mean(a[ , 2]) # 2 열의 평균
Basic of R #7
 Data Frame/Data Table #1
 Matrix 는 값을 저장하는 역할. Matrix 내 행들의 값을 가지고 계산은 안됨
 Data Frame 은 엑셀처럼 값을 조작하는 것이 가능함.
 * Data Frame 은 열에 이름이 있어서 조작을 용이하게 함.
 다양한 방법으로 Data 를 조작할 수 있음 (익숙한 패키지 선정)
Matrix a 를
Data Frame
으로 변경함
엑셀에서도 가능한데?
왜 이렇게 할까?
Basic of R #8 - 고난이도
 비교 연산
 >, <, ==, !=  TRUE, FALSE 값으로 저장됨
 조건 / 반복
 if / else if / else
 for break
 while
 함수 만들기
 함수명 <- function ( param1, param2, …. ) {
함수의 내용
}
Basic of R #9 - 그래프
 plot(), barplot(), boxplot(), hist()….
 필요로 하는 모든 그래프가 있음.
 간단한 명령어로 그래프를 그릴 수 있음
 그래프를 다양한 형태로 그릴 수 있음. 1x2, 2x2, 3x2 등등.
Data 이해 부분
- 데이터 구조 : data.frame
- 데이터 : 50 행, 2열
그림 명령어
실전편
Intermediate #1 – 데이터 분석 대상과 결과
 당신이 Excel 에 가지고 있는 데이터는 회사 전체 데이터의 5% 이하.
 95%를 버리고 5%에만 집착할 것인가?
Excel 파일 및 csv 파일
Database ( KingDee 등)
통계 패
키지
SAS,
SPSS,
MatLab
input
input
output
Excel 파일 및
csv 파일
PDF
PPT
HTML
Intermediate #1 – Excel 파일
 다양한 방법으로 엑셀 데이터를 읽어올 수 있음.
 읽어온 결과 값은 모두 Data Frame 이 됨.
 현재 Excel 파일을 읽을 수 있는 다양한 Package 가 제공되고 있음.
 data <- read.csv(“book.csv”) : 가장 기초적인 방법
 data <- fread(“book.csv”)
 data <- read_excel(“book.xlsx”)
 Excel 에서 Data 를 읽어올 뿐만 아니라 Excel에 데이터 저장도 가능
 XLConnect Package
 my_book <- loadWorkbook("latitude.xlsx") # Excel 파일을 읽어 Handler 사용
 latitude.df <- readWorksheet(my_book, sheet=1) #첫번째 Sheet 의 데이터 읽기
 다양한 조작을 해서 summary.df 을 만들어 냄.
 createSheet(my_book, “data_summary”) #sheet 이름이 “data_summary”
 writeWorksheet(my_book, summary.df, “data_summary”) #sheet 이름 “data_summ
ary” 에 summary.df 를 저장함.
 saveWorkbook(my_book, “latitude_with_summary.xlsx”) # 파일 저장
Intermediate #1 –DB 에서 데이터 읽어오기
 RODBC package 사용
 실제 많은 데이터는 DB 에 존재함
 # DB 연결
 kingDee <- odbcConnect(“****", uid=“user", pwd=“password")
 # SQL Query 문장 만들기
 query <- "select so.FInterID, o.FItemID, o.FName, so.FDate, e.FItemID, e.FName, p.Fname, soi.FQty,
soi.FPrice, soi.FAmount
from SEOrder so, t_Organization o, SEOrderEntry soi, t_ICItemCore p, t_Base_Emp e
where so.FCustID = o.FItemID and so.FInterID = soi.FInterId
and soi.FItemID = p.FItemID and so.FEmpID = e.FItemID"
 # SQL Query 실행
 sale_df <- sqlQuery(kingDee, query, stringsAsFactors = FALSE)
ODBC 설정에 대한 이해
 ODBC 는 일반 프로그램에서 DB 에 연결하기 위한 도구
네트웍
DATABASE
주소: 172.16.120.212
사용자 컴퓨터
DB이름 : kingdee
주소: 172.16.120.212
ODBC 설정
 검색창에서 ODBC 입력
 Microsoft ODBC Administer 선택
 추가 입력
 SQL Server 선택 (더블클릭)
 db 이름 입력 : kingdee (매우 중요 – 이후 이 이름을 사용해서 접근하게 됨)
 주소 입력 : IP Address
 사용자가 입력한 id/pwd 선택
 db ID : user
 PWD : password
Intermediate #2 –Data Frame 조작
 Package – dplyr
 Command – 명령어
 Data Frame 즉 Excel 데이터를 쉽게 조작하는 데 사용함
 앞서 Excel, DB 에서 불러들이 데이터는 모두 data.frame 으로 저장됨
구분 설명 예
select() 열(Column)을 선택하는 데 사용
filter() 행(Row)을 선택하는데 사용
mutate() 데이터를 조작하거나 새로 생성함
arrange() 데이터 정렬
summarize() 데이터 summary
group_by() 데이터 Grouping
Intermediate #2–Data Frame - 열선택
 dplyr – select()
 열이 많을 때, 필요한 열만 선택하는 방법
 명령어 : select(df, 선택하고 싶은 열을 벡터로 표현)
 열은 열의 이름을 사용해도 되고, 순서로 표현할 수 있음
 hflights 의 DF 를 예로 사용함 : Package hflights 사용
 select(hflights, ActualElapsedTime, AirTime, ArrDelay, DepDelay)
• select(hflights, c(10, 11, 12, 13)) == hflights[ , c(10, 11, 12, 13)]
 select(hflights, Origin:Cancelled)
• select(hflights, 14:19) == hflights[ , 14:19]
 select(hflights, -(DepTime:AirTime))
• select(hflights, -(5:11))
 select(hflights, UniqueCarrier, ends_with("Num"), starts_with("Cancel"))
 select(hflights, contains("Tim"), contains("Del"))
 select(hflights, Year:ArrTime, -DayofMonth)
• hflights[c("Year","Month","DayOfWeek","DepTime","ArrTime")]
 select(hflights,starts_with("T"))
• hflights[c("TailNum","TaxiIn","TaxiOut")]
Intermediate #2–Data Frame - 행선택
 dplyr – filter()
 행이 많을 때, 필요한 행만 선택하는 방법
 명령어 : filter(df, 선택하고 싶은 행을 수식으로 표현)
 hflights 의 DF 를 예로 사용함 : Package hflights 사용
 filter(hflights, Distance >= 3000)
 filter(hflights, UniqueCarrier %in% c("JetBlue", "Southwest", "Delta"))
 filter(hflights, TaxiIn + TaxiOut > AirTime)
 filter(hflights, DepTime < 500 | ArrTime > 2200)
 filter(hflights, DepDelay > 0, ArrDelay < 0)
 filter(hflights, DayOfWeek %in% c(6,7), Cancelled == 1)
 내용은 같은데 다른 표현
 hflights[ hflights$Distance >= 3000, ]
 hflights[ hflights$UniqueCarrier %in% c(c("JetBlue", "Southwest", "Delta"), ]
subset() 함수 – select() + filter()
 Select() 와 filter 를 한꺼번에 처리하고자 할 때
 subset 함수 사용
 사용법 : subset( data_frame, 행을 선택할 수 있는 조건, select = c(열) )
 subset( hflights, DepTime < 500 | ArrTime > 2200, select = c(ActualElapsedTime
, AirTime, ArrDelay, DepDelay) )
Intermediate #2–Data Frame – 데이터조작
 dplyr – mutate()
 값들을 조작하여 새로운 데이터 또는 기존 데이터를 변경함
 새로운 데이터를 만들어 낼 수 있음
 hflights 의 DF 를 예로 사용함 : Package hflights 사용
 mutate( hflights, ActualGroundTime = ActualElapsedTime - AirTime)
 mutate( hflights, GroundTime = TaxiIn + TaxiOut)
 mutate( hflights, AverageSpeed = Distance / AirTime * 60)
 mutate( hflights, loss = ArrDelay - DepDelay, loss_percent = (ArrDelay - DepDelay)
/ DepDelay * 100)
 transform() == mutate() 같음
 transform( hflights, ActualGroundTime = ActualElapsedTime - AirTime)
 transform( hflights, GroundTime = TaxiIn + TaxiOut)
 transform( hflights, AverageSpeed = Distance / AirTime * 60)
 같은 효과
 hflights$ActualGroundTime = hflights$ActualElapsedTime – hflights$AirTime
Intermediate #2–Data Frame – Sorting
 dplyr – arrange()
 행을 어떤 조건 값에 의해 오름차순, 또는 내림차순으로 정리
 hflights 의 DF 를 예로 사용함 : Package hflights 사용
 arrange( hflights, DepDelay) – 오름차순
• arrange( hflights, desc(DepDelay) ) – 내림차순
 arrange( hflights, ActualGroundTime) – 오름차순
• arrange( hflights, desc(ActualGroundTime)) – 오름차순
 arrange( hflights, CancellationCode)
 arrange( hflights, UniqueCarrier, DepDelay) – 두개 항의 조합
 arrange( hflights, UniqueCarrier, desc(DepDelay))
 응용
 arrange(filter( hflights, Dest == "DFW", DepTime < 800),desc(AirTime)
 다른 표현 방법
 hflights[ order( hflights$DepDelay ), ] == arrange( hflights, DepDelay )
 hflights[ order( -hflights$DepDelay ), ] == arrange( hflights, desc(DepDelay) )
Intermediate #2–Data Frame –summarize
 dplyr – summarize()
 행을 어떤 조건 값에 의해 오름차순, 또는 내림차순으로 정리
 hflights 의 DF 를 예로 사용함 : Package hflights 사용
 summarise(hflights, min_dist = min(Distance), max_dist = max(Distance))
 summarise(hflights,
earliest = min(ArrDelay),
average = mean(ArrDelay),
latest = max(ArrDelay),
sd = sd(ArrDelay))
 summarise(hflights, n_obs = n(),
n_carrier = n_distinct(UniqueCarrier),
n_dest = n_distinct(Dest),
dest100 = nth(Dest, 100))
Intermediate #2–Data Frame –Chaining
 dplyr – %>% (command chaining)
 명령어를 순서대로 나열하듯 실행하여 이해와 독해를 빠르게 함.
 Package hflights 사용
 hflights %>%
mutate(diff = TaxiOut - TaxiIn) %>%
filter(!is.na(diff)) %>%
summarise(avg = mean(diff))
 hflights %>%
select(Dest, Cancelled, Distance, ActualElapsedTime, Diverted) %>%
mutate(RealTime = ActualElapsedTime + 100, mph = Distance / RealTime * 60) %>%
filter(mph < 105 | Cancelled == 1 | Diverted == 1) %>%
summarise( n_non = n(),
p_non = n_non / nrow(hflights) * 100,
n_dest = n_distinct(Dest),
min_dist = min (Distance),
max_dist = max(Distance))
Intermediate #2–Data Frame –group_by
 dplyr – group_by()
 데이터를 Grouping 하는데 사용함
 hflights 의 DF 를 예로 사용함 : Package hflights 사용
 hflights %>%
group_by(UniqueCarrier) %>%
summarise(n_flights = n(),
n_canc = sum(Cancelled == 1),
p_canc = mean(Cancelled == 1) * 100,
avg_delay = mean(ArrDelay, na.rm = TRUE)) %>%
arrange(avg_delay, p_canc)
 hflights %>%
group_by(DayOfWeek) %>%
summarise(avg_taxi = mean(TaxiIn + TaxiOut, na.rm=TRUE)) %>%
arrange(desc(avg_taxi))
Intermediate #3 – Data merge
 두개의 파일 또는 두개의 Data Frame 을 하나로 합칠 때
 Unique 하고 독립적인 Key 가 있어야 함
 df1 df2
 merge(df1, df2, by=c(“ID”, “Name”))
Intermediate #3 – Data merge
 두개의 파일 또는 두개의 Data Frame 을 하나로 합칠 때
 Unique 하고 독립적인 Key 가 있어야 함
 df1
 df2
 rbind(df1, df2)
Intermediate #3 – Data Reshape
 melt()– 여러 개의 행을 한 개 행으로 통합
 shape2 package 사용
 활용 : melt(data, key, value, …, na.rm = FALSE, convert = FALSE)
 예
 melt ( iris, id = c(“Species”) )
melt() 함수 적용 전 melt() 함수 적용 후
Intermediate #3 – Data Reshape
 Gather – melt 와 동일
 tidyr package 사용
 활용 : gather(data, key, value, …, na.rm = FALSE, convert = FALSE)
 예
 gather(iris, key, Value, -Species)
Data 열의 변수가 하나로 통합 해당 열의 변수 값들이 통합 기준. 통합에서 제외되는 행
gather() 함수 적용 전 gather() 함수 적용 후
왜 (why) 이런 조작이 필요할까?
Intermediate #3 – Data Reshape
 dcast() – 하나의 변수를 여러개로 분리 할 때, 즉 key-value pair 를 여
러 개의 열(Column)으로 구분할 때
 reshape2 package 사용
 활용 : spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE)
 예
 dcast(data, Species + group + Part ~ Measure, value.var="value")
Data 분리되는 변수(열) 분리되는 값
dcast() 함수 적용 전 dcast() 함수 적용 후
Intermediate #3 – Data Reshape
 spread() == dcast() 와 동일함
 tidyr package 사용
 활용 : spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE)
 예
 spread(data, Measure, value)
Data 분리되는 변수(열) 분리되는 값
spread() 함수 적용 전 spread() 함수 적용 후
Intermediate #3 – Data Reshape
 separate() – 하나의 변수를 두개로 분리
 tidyr package 사용
 활용 : separate(data, col, into, sep = "[^[:alnum:]]+", remove = TRUE, convert
= FALSE, extra = "warn", fill = "warn", ...)
 예
 separate(data, key, c("Part", "Measure"), ".")
Data 분리되는 변수(열) 분리되는 변수 명 분리 기준 (.)
separate() 함수 적용 전 separate() 함수 적용 후
Intermediate #3 – Data 분리 및 통합
 Command Chainning 과 Data 분리 및 통합의 이유
iris.tidy <- iris %>%
gather(key, Value, -Species) %>%
separate(key, c("Part", "Measure"), ".")
iris.wide <- iris %>%
gather(key, value, -Species) %>%
separate(key, c("Part", "Measure"), ".") %>%
spread(Measure, value)
ggplot(iris.tidy, aes(x = Species, y = Value, col = P
art)) + geom_jitter() + facet_grid(. ~Measure)
ggplot(iris.wide, aes(x = Length, y = Width, col = Part))
+ geom_jitter() + facet_grid(. ~Species)
그래프 (Presentation)
Intermediate #4–ggplot
 ggplot 은 여러 가지(plot, plotly, ggivs 등)그래픽 package 중에 하나.
 자주 사용하는 이유는 확장성이 좋고, 데이터를 다루는 철학 때문
 계층적 구조의 철학
Theme
Coordinates
Statistics
Facets
Geometrics
Aesthetics
Data
Theme
Coordinates
통계적 방법
그룹핑등의 구분
표현의 방법
표현할 데이터 선정
Data Frame 를 의미함
Intermediate #4–ggplot
 데이터의 표현 (계층적 구조의 철학)
 ggplot(iris, aes(Sepal.Length, Sepal.Width, col = Species)) +
geom_point( size = 3) +
facet_grid(. ~ Species) +
stat_smooth(method = "lm") +
theme(panel.grid.major = element_line(colour = "grey"))
Data Aesthetics
Geometric
Facet
Statistics
Theme
Intermediate #4–ggplot
 Geometrics 의 표현 종류 및 방법
 geom_point()
 geom_bar()
 geom_boxplot()
 geom_histogram()
 geom_smooth()
 …. 기타 30 여가지 기능
Intermediate #4–ggplot
 Parameter 에 대한 이해
 x : x 좌표, aesthetics 의 대상 이외에 다른 데이터를 표현할 때 사용
 y : y 좌표, aesthetics 의 대상 이외에 다른 데이터를 표현할 때 사용
 col : 점의 외곽을 표현하는 색을 표현함
 fill : 점을 채우는 색
 shape : point를 어떤 형태로 나타낼 지 결정, 25가지 방법
 size : 크기를 나타냄
 alpha : 투명도를 나타냄
 해당 Parameter 값을 두가지 방법을 통해서 가능함
 대상 : col, fill, size, alpha, shape(반드시 discrete/categorical 변수 (자연수)여야 함)
 첫째 방법 : 사용자가 강제로 정해 주는 방법
 col = “red”, col = “#ffeeaa”, fill = “red”, shape = 3, size = 5
 두번째 방법 : Data 값을 활용하는 방법
 col = cyl, size = cyl …..
Intermediate #4–ggplot
 geom_point() – 특징, 반드시 x, y 가 모두 필요함
 Parameter : x, y, alpha, col, fill, shape, size
 graph <- ggplot(mtcars, aes( x=wt, y=mpg )) #Data, Aesthetic 은 Fixed 됨
 활용 사례
 graph + geom_point( aes(col = qsec))
 graph + geom_point( aes(alpha = qsec, col = factor(cyl), shape = factor(cyl), size =
cyl))
Intermediate #4–ggplot
 geom_point() 와 geom_jitter() 의 차이
 x 변수가 Categorical / Discrete 한 경우 해당 Point의 집중도가 보이지 않는
문제를 해결하기 위해 geom_jitter()
 geom_point( position = “jitter” ) == geom_jitter()
 geom_point( position = position_jitter(0.4) )
ggplot(diamonds, aes(x= clarity, y= carat, col= price))+
geom_point( alpha = 0.5)
ggplot(diamonds, aes(x= clarity, y= carat, col= price))+
geom_jitter( alpha = 0.5)
Intermediate #4–ggplot
 geom_bar() – x 변수만 있으면 됨
 Parameter : x, y, alpha, col, fill, linetype, weight
 활용 사례
 아래 두 결과는 동일함
• ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar( alpha = 0.5)
• ggplot(diamonds, aes(clarity)) + geom_bar(aes(fill = cut), alpha = 0.5)
• ggplot(diamonds, aes(clarity)) + geom_bar(aes(fill = cut), alpha = 0.5 ) +
facet_grid(. ~cut)
coord_flip() +
만으로 축이 변함.
Intermediate #4–ggplot
 geom_bar() – 2번째
geom_bar( position = “stack”) geom_bar( position = “fill”) geom_bar( position = “dodge”)
geom_bar( position = position_dodge( width = 0.5 ) )
Intermediate #4–ggplot
 geom_boxplot()
 Parameter : lower, middle, upper, x, ymax, ymin, alpha, colour, fill, linetype, s
hape, size, weight
 활용 사례
 ggplot(mtcars, aes(factor(cyl), mpg)) +
geom_boxplot(aes(fill = factor(cyl))) +
geom_jitter() +
coord_flip()
jitter() 는 point() 의 변형으
로 한곳에 점이 몰리지 않게
분산 시켜 줌
Intermediate #4–ggplot
 geom_histogram()
 Parameter : x, alpha, col, fill, linetype, weight
 histogram 과 bar는 유사함.
 활용 사례
 ggplot(mtcars, aes(x =mpg)) +
geom_histogram(aes(y = ..density..), fill = "blue", binwidth = 1, alpha = 0.4) +
geom_density( col = "red" )
geom_histogram() ==
stat_histogram()
ggplot(mtcars, aes(mpg, fill = cyl)) +
geom_histogram(binwidth = 1,
position = "identity", alpha = 0.4 )
Intermediate #4–ggplot
 geom_smooth()
 Parameter : x, y, alpha, col, fill, size, linetype, weight
 Linear Models 을 그래프에 적용할 때 유리함
 활용 사례
 ggplot(mtcars, aes(y=wt, x=mpg)) +
facet_grid(. ~ cyl) +
geom_smooth(method=lm) +
geom_point( aes(col = factor(cyl), size = factor(cyl)))
geom_smooth() ==
stat_smooth()
Intermediate #4–ggplot
 geom_line()
 라인을 그릴 때 사용
 ggplot(economics, aes(x = date, y = unemploy/pop)) +
geom_line() +
geom_rect(data = recess, aes(xmin = begin, xmax = end, ymin = -Inf, ymax = +Inf),
inherit.aes = FALSE, fill = "red", alpha = 0.2)
붉은색은 경제 침체기
두개의 Data 사용
o economics
o recess
output (html, pdf …)
다양한 형태의 OUTPUT 이 가능함.
 데이터 분석의 대상
Excel 파일 및 csv 파일
Database ( KingDee 등)
통계 패
키지
SAS,
SPSS,
MatLab
input
input
output
Excel 파일 및
csv 파일
PDF
PPT
HTML
참고사이트
 좋은 책: http://www.cookbook-r.com/
 데이터 읽어 오기 : http://www.cookbook-r.com/Data_input_and_output/
 원본 책 : http://www.cookbook-r.com/
 데이터 조작 : http://www.cookbook-r.com/Manipulating_data/index.html
 원본 책 : http://www.cookbook-r.com/
 Basic Guide : http://sharpstatistics.co.uk/r/ggplot2-guide/
 다양한 그래프 설명 : http://docs.ggplot2.org/current/index.html#
 Plotly : https://plot.ly/r/

More Related Content

Viewers also liked

00.통계학입문
00.통계학입문00.통계학입문
00.통계학입문Yoonwhan Lee
 
13.상관과 회귀
13.상관과 회귀13.상관과 회귀
13.상관과 회귀Yoonwhan Lee
 
통계자료 분석을 위한 R
통계자료 분석을 위한 R통계자료 분석을 위한 R
통계자료 분석을 위한 RYoonwhan Lee
 
Net flowhadoop flocon2013_yhlee_final
Net flowhadoop flocon2013_yhlee_finalNet flowhadoop flocon2013_yhlee_final
Net flowhadoop flocon2013_yhlee_finalYeounhee Lee
 
AWSKRUG 콘퍼런스 - re:Invent 신규 서비스 (윤석찬) - 빅데이터 분석, 모바일 및 IoT를 중심으로
AWSKRUG 콘퍼런스 - re:Invent 신규 서비스 (윤석찬) - 빅데이터 분석, 모바일 및 IoT를 중심으로AWSKRUG 콘퍼런스 - re:Invent 신규 서비스 (윤석찬) - 빅데이터 분석, 모바일 및 IoT를 중심으로
AWSKRUG 콘퍼런스 - re:Invent 신규 서비스 (윤석찬) - 빅데이터 분석, 모바일 및 IoT를 중심으로AWSKRUG - AWS한국사용자모임
 
09.통계적가설검정
09.통계적가설검정09.통계적가설검정
09.통계적가설검정Yoonwhan Lee
 
R의 이해와 활용_데이터사이언스학회
R의 이해와 활용_데이터사이언스학회R의 이해와 활용_데이터사이언스학회
R의 이해와 활용_데이터사이언스학회datasciencekorea
 
244 5rocks-deview
244 5rocks-deview244 5rocks-deview
244 5rocks-deviewNAVER D2
 
Gruter TECHDAY 2014 MelOn BigData
Gruter TECHDAY 2014 MelOn BigDataGruter TECHDAY 2014 MelOn BigData
Gruter TECHDAY 2014 MelOn BigDataGruter
 
R을 이용한 게임 데이터 분석
R을 이용한 게임 데이터 분석R을 이용한 게임 데이터 분석
R을 이용한 게임 데이터 분석Eun-Jo Lee
 
Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)Gruter
 
R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작Terry Cho
 
Helpful Review Recommendation (리뷰 추천시스템)
Helpful Review Recommendation (리뷰 추천시스템)Helpful Review Recommendation (리뷰 추천시스템)
Helpful Review Recommendation (리뷰 추천시스템)FAST CAMPUS
 
Naive bayes model을 활용한 영화 별점 예측 시스템
Naive bayes model을 활용한 영화 별점 예측 시스템Naive bayes model을 활용한 영화 별점 예측 시스템
Naive bayes model을 활용한 영화 별점 예측 시스템FAST CAMPUS
 
빅데이터 분석 시각화 분석 : 1장 시각화정의 2장 프로세스
빅데이터 분석 시각화 분석 : 1장 시각화정의 2장 프로세스빅데이터 분석 시각화 분석 : 1장 시각화정의 2장 프로세스
빅데이터 분석 시각화 분석 : 1장 시각화정의 2장 프로세스Ji Lee
 

Viewers also liked (19)

R 기초 Part. 01
R 기초 Part. 01R 기초 Part. 01
R 기초 Part. 01
 
00.통계학입문
00.통계학입문00.통계학입문
00.통계학입문
 
13.상관과 회귀
13.상관과 회귀13.상관과 회귀
13.상관과 회귀
 
05.확률
05.확률05.확률
05.확률
 
통계자료 분석을 위한 R
통계자료 분석을 위한 R통계자료 분석을 위한 R
통계자료 분석을 위한 R
 
R 기초 anova
R 기초   anovaR 기초   anova
R 기초 anova
 
Data visualization with R
Data visualization with RData visualization with R
Data visualization with R
 
Net flowhadoop flocon2013_yhlee_final
Net flowhadoop flocon2013_yhlee_finalNet flowhadoop flocon2013_yhlee_final
Net flowhadoop flocon2013_yhlee_final
 
AWSKRUG 콘퍼런스 - re:Invent 신규 서비스 (윤석찬) - 빅데이터 분석, 모바일 및 IoT를 중심으로
AWSKRUG 콘퍼런스 - re:Invent 신규 서비스 (윤석찬) - 빅데이터 분석, 모바일 및 IoT를 중심으로AWSKRUG 콘퍼런스 - re:Invent 신규 서비스 (윤석찬) - 빅데이터 분석, 모바일 및 IoT를 중심으로
AWSKRUG 콘퍼런스 - re:Invent 신규 서비스 (윤석찬) - 빅데이터 분석, 모바일 및 IoT를 중심으로
 
09.통계적가설검정
09.통계적가설검정09.통계적가설검정
09.통계적가설검정
 
R의 이해와 활용_데이터사이언스학회
R의 이해와 활용_데이터사이언스학회R의 이해와 활용_데이터사이언스학회
R의 이해와 활용_데이터사이언스학회
 
244 5rocks-deview
244 5rocks-deview244 5rocks-deview
244 5rocks-deview
 
Gruter TECHDAY 2014 MelOn BigData
Gruter TECHDAY 2014 MelOn BigDataGruter TECHDAY 2014 MelOn BigData
Gruter TECHDAY 2014 MelOn BigData
 
R을 이용한 게임 데이터 분석
R을 이용한 게임 데이터 분석R을 이용한 게임 데이터 분석
R을 이용한 게임 데이터 분석
 
Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)
 
R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작
 
Helpful Review Recommendation (리뷰 추천시스템)
Helpful Review Recommendation (리뷰 추천시스템)Helpful Review Recommendation (리뷰 추천시스템)
Helpful Review Recommendation (리뷰 추천시스템)
 
Naive bayes model을 활용한 영화 별점 예측 시스템
Naive bayes model을 활용한 영화 별점 예측 시스템Naive bayes model을 활용한 영화 별점 예측 시스템
Naive bayes model을 활용한 영화 별점 예측 시스템
 
빅데이터 분석 시각화 분석 : 1장 시각화정의 2장 프로세스
빅데이터 분석 시각화 분석 : 1장 시각화정의 2장 프로세스빅데이터 분석 시각화 분석 : 1장 시각화정의 2장 프로세스
빅데이터 분석 시각화 분석 : 1장 시각화정의 2장 프로세스
 

Similar to R 프로그램의 이해와 활용 v1.1

R을 이용한 데이터 분석
R을 이용한 데이터 분석R을 이용한 데이터 분석
R을 이용한 데이터 분석simon park
 
R 스터디 첫번째
R 스터디 첫번째R 스터디 첫번째
R 스터디 첫번째Jaeseok Park
 
R 스터디 세번째
R 스터디 세번째R 스터디 세번째
R 스터디 세번째Jaeseok Park
 
R 스터디 두번째
R 스터디 두번째R 스터디 두번째
R 스터디 두번째Jaeseok Park
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)JiandSon
 
하둡 타입과 포맷
하둡 타입과 포맷하둡 타입과 포맷
하둡 타입과 포맷진호 박
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 명신 김
 
Data Mining with R CH1 요약
Data Mining with R CH1 요약Data Mining with R CH1 요약
Data Mining with R CH1 요약Sung Yub Kim
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선daewon jeong
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304Yong Joon Moon
 
집단지성 프로그래밍 03-군집발견-03
집단지성 프로그래밍 03-군집발견-03집단지성 프로그래밍 03-군집발견-03
집단지성 프로그래밍 03-군집발견-03Kwang Woo NAM
 
[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발NAVER D2
 
MongoDB 하루만에 끝내기
MongoDB 하루만에 끝내기MongoDB 하루만에 끝내기
MongoDB 하루만에 끝내기Seongkuk Park
 
From MSSQL to MySQL
From MSSQL to MySQLFrom MSSQL to MySQL
From MSSQL to MySQLI Goo Lee
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기Jongwook Choi
 

Similar to R 프로그램의 이해와 활용 v1.1 (20)

R intro
R introR intro
R intro
 
R을 이용한 데이터 분석
R을 이용한 데이터 분석R을 이용한 데이터 분석
R을 이용한 데이터 분석
 
R 스터디 첫번째
R 스터디 첫번째R 스터디 첫번째
R 스터디 첫번째
 
Python
PythonPython
Python
 
R 스터디 세번째
R 스터디 세번째R 스터디 세번째
R 스터디 세번째
 
R 스터디 두번째
R 스터디 두번째R 스터디 두번째
R 스터디 두번째
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
 
하둡 타입과 포맷
하둡 타입과 포맷하둡 타입과 포맷
하둡 타입과 포맷
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
 
Data Mining with R CH1 요약
Data Mining with R CH1 요약Data Mining with R CH1 요약
Data Mining with R CH1 요약
 
3주차 스터디
3주차 스터디3주차 스터디
3주차 스터디
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선
 
강의자료3
강의자료3강의자료3
강의자료3
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
 
집단지성 프로그래밍 03-군집발견-03
집단지성 프로그래밍 03-군집발견-03집단지성 프로그래밍 03-군집발견-03
집단지성 프로그래밍 03-군집발견-03
 
[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발
 
MongoDB 하루만에 끝내기
MongoDB 하루만에 끝내기MongoDB 하루만에 끝내기
MongoDB 하루만에 끝내기
 
From MSSQL to MySQL
From MSSQL to MySQLFrom MSSQL to MySQL
From MSSQL to MySQL
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기
 

R 프로그램의 이해와 활용 v1.1

  • 1. R 에 대한 이해와 활용 2016. 01. By HappyChallenge email : happychallenge@outlook.com
  • 2. 2 R 프로그램 설치 및 환경 설정 o R 프로그램 설치 - 핵심 엔진 :  가장 먼저 할일 - http://mirror.bjtu.edu.cn/cran/ : 북경대 Mirror 사이트 - http://r-project.org/ : 미국 본사 o R STUDIO - 개발 환경 (IDE) 프로그램 설치 : 두번째 할일. - https://www.rstudio.com/products/RStudio/#Desktop
  • 3. 필요한 패키지 설치  console 창에서 아래와 같이 입력  필요한 package 를 선택하여 설치  install.packages(“dplyr”)  install.packages(“shiny”)  install.packages(“ggplot2”)  install.packages(“plotly”)  install.packages(“RODBC”)  install.packages(“lubridate”)  install.packages(“tidyr”)  install.packages(“xlsx”) console 창
  • 4. Basic understanding about R  Open Source based S programing for statistics  Good for handling Big Data and easy to visualization  Script language, easy to learn  Compile language  exe, etc  Lot of package including data handling and DB connection  More than 4,500 package developed  DB connection  Excel Control  SAS, SPSS Data Connection  Result to PPT, PDF, Word etc  동일한 기능을 하는 다양한 Package 가 있기 때문에 본인이 편리한 것 을 선택하여 사용할 수 있다.  reshape2::melt() == tidyr::gether()  reshape2::acast() == tidyr::spread()
  • 5. Why R programing 데이터 분석에 대한 데모
  • 6. Basic Commands  getwd() # print the current working directory - cwd  ls() # list the objects in the current workspace  setwd(mydirectory) # change to mydirectory setwd("c:/docs/mydir") # note / instead of in windows setwd("/usr/rob/mydir") # on linux  save(object list,file="myfile.RData") #데이터 파일에 저장  load("myfile.RData") # 파일에서 데이터 읽어오기 Function Output to pdf("mygraph.pdf") pdf file win.metafile("mygraph.wmf") windows metafile png("mygraph.png") png file jpeg("mygraph.jpg") jpeg file bmp("mygraph.bmp") bmp file postscript("mygraph.ps") postscript file
  • 7. Basic of R #1  Variable  숫자로 시작하면 안된다. 문자로 시작해야 한다.  Good : var1, hflight, …  Bad : 100var, 3hf …  대소문자를 구분해야 함  Microsoft 관련 언어와 다름  Assign value to Variable  <- , = 모두 가능, 하지만 <- 사용을 권장함.  ex) var1 <- 100 #var1 에 100을 할당함, 나중에 활용하기 위함  Variable 은 사용자가 어떤 특정 값을 큰 데이터에 적용할 때 사용함  일반적으로 데이터는 수 만건에서 수 백만것에 해당
  • 8. Basic of R #1  Data Type  vector  Factor  matrix  Array  Data Frames  Lists  Useful Functions  length(object) # number of elements or components  str(object) # structure of an object  class(object) # class or type of an object  names(object) # names  c(object,object,...) # combine objects into a vector  cbind(object, object, ...) # combine objects as columns  rbind(object, object, ...) # combine objects as rows  object # prints the object  ls() # list current objects  rm(object) # delete an object  newobject <- edit(object) # edit copy and save as newobject  fix(object) # edit in place
  • 9. Basic of R #2  Vector #1  여러 개의 데이터가 들어가 있는 데이터의 나열  기호는 c (알파벳) 를 사용함  ex) c(1, 2, 3,…. 100)  ex) c(3, 4, 5)  1:10  c(c(1, 2, 3,…. 10)  Vector 의 연산  a <- c(1, 3, 5)  b <- c(2, 4, 6)  a + b  c(3, 7, 11)  개수가 맞지 않을 때는 자동으로 늘어나서 해당 vector 와 연산이 됨 • a + 100  c(101, 103, 105) # c(1, 3, 5) + c(100, 100, 100) 과 동일한 결과 • b + 20  c(22, 24, 26) # c(1, 3, 5) + c(20, 20, 20) 과 동일한 결과 • a – 3  c(-2, 0, 2) # c(1, 3, 5) – c(3, 3, 3) 과 동일한 결과  a * b  c(2, 12, 30)  a / b  c(0.5000000, 0.7500000, 0.8333333) 기호에 대한 이해  : 결과를 말함
  • 10. Basic of R #3  Vector #2  Vector Indexing  필요한 순서의 숫자를 이용하여 접근 가능함.  A <- c(1, 3, 5, 7, 9)  a[3]  5, a[4]  7  a[3:5]  c(5, 7, 0)  a[-3]  c(1, 3, 7, 9)  a[-3:-4]  c(1, 3, 9)  Factor  Vector 중 자연수 또는 Unique 한 그룹으로 묶은 것  Vector 가 단순 나열이라면 Factor 는 서로 비교할 수 있음
  • 11. Basic of R #4  Matrix(행렬) #1  행렬은 가로(행)와 세로(렬)의 데이터  Excel 의 데이터가 대표적  a <- matrix(c(1, 2, 3, 4, 5, 6), nrow=2, ncol=3) # 2x3 행렬  b <- matrix(c(1, 2, 3, 4, 5, 6), nrow=3, ncol=2) # 3x2 행렬  직원의 데이터를 Matrix 로 표현할 경우 행은 사람별 데이터,  열은 나이, 성별, 몸무게, 키, 근무년수,  Matrix(행렬) 의 연산  a + a, a – a, a * a, a / a, a%*%a, a*3, solve(a), t(a) 기호에 대한 이해 # : 주석을 말함 실행 안됨
  • 12. Basic of R #5  Matrix(행렬) #2  Matrix Indexing  a <- matrix(1:9, nrow=3, ncol=3) # 3x3 행렬  a[1, 2]  4 # 개별 값을 읽어 옴  a[2, 3]  8  a[1, ]  c(1, 4, 7) # 행의 값을 모두 읽어 옴  a[ , 2]  c(4, 5, 6) # 열의 값을 모두 읽어 옴  a[-3, ]  # 해당 행을 제외하고 모두 읽어 옴  a[ , -2]  # 해당 열을 제외하고 모두 읽어 옴
  • 13. Basic of R #6  Matrix(행렬) #3  Matrix and Function  sum(), mean(), sd(), min(), max(), median()…..  모든 함수는 행렬 전체 또는 행, 열별로 적용이 가능함  a <- matrix(1:9), nrow=2, ncol=3) # 3x3 행렬  sum(a)  45 # 전체 합계  mean(a)  5 # 전체 평균  median(a[ , 3]) # 3 열의 중간값  mean(a[ , 2]) # 2 열의 평균
  • 14. Basic of R #7  Data Frame/Data Table #1  Matrix 는 값을 저장하는 역할. Matrix 내 행들의 값을 가지고 계산은 안됨  Data Frame 은 엑셀처럼 값을 조작하는 것이 가능함.  * Data Frame 은 열에 이름이 있어서 조작을 용이하게 함.  다양한 방법으로 Data 를 조작할 수 있음 (익숙한 패키지 선정) Matrix a 를 Data Frame 으로 변경함 엑셀에서도 가능한데? 왜 이렇게 할까?
  • 15. Basic of R #8 - 고난이도  비교 연산  >, <, ==, !=  TRUE, FALSE 값으로 저장됨  조건 / 반복  if / else if / else  for break  while  함수 만들기  함수명 <- function ( param1, param2, …. ) { 함수의 내용 }
  • 16. Basic of R #9 - 그래프  plot(), barplot(), boxplot(), hist()….  필요로 하는 모든 그래프가 있음.  간단한 명령어로 그래프를 그릴 수 있음  그래프를 다양한 형태로 그릴 수 있음. 1x2, 2x2, 3x2 등등. Data 이해 부분 - 데이터 구조 : data.frame - 데이터 : 50 행, 2열 그림 명령어
  • 18. Intermediate #1 – 데이터 분석 대상과 결과  당신이 Excel 에 가지고 있는 데이터는 회사 전체 데이터의 5% 이하.  95%를 버리고 5%에만 집착할 것인가? Excel 파일 및 csv 파일 Database ( KingDee 등) 통계 패 키지 SAS, SPSS, MatLab input input output Excel 파일 및 csv 파일 PDF PPT HTML
  • 19. Intermediate #1 – Excel 파일  다양한 방법으로 엑셀 데이터를 읽어올 수 있음.  읽어온 결과 값은 모두 Data Frame 이 됨.  현재 Excel 파일을 읽을 수 있는 다양한 Package 가 제공되고 있음.  data <- read.csv(“book.csv”) : 가장 기초적인 방법  data <- fread(“book.csv”)  data <- read_excel(“book.xlsx”)  Excel 에서 Data 를 읽어올 뿐만 아니라 Excel에 데이터 저장도 가능  XLConnect Package  my_book <- loadWorkbook("latitude.xlsx") # Excel 파일을 읽어 Handler 사용  latitude.df <- readWorksheet(my_book, sheet=1) #첫번째 Sheet 의 데이터 읽기  다양한 조작을 해서 summary.df 을 만들어 냄.  createSheet(my_book, “data_summary”) #sheet 이름이 “data_summary”  writeWorksheet(my_book, summary.df, “data_summary”) #sheet 이름 “data_summ ary” 에 summary.df 를 저장함.  saveWorkbook(my_book, “latitude_with_summary.xlsx”) # 파일 저장
  • 20. Intermediate #1 –DB 에서 데이터 읽어오기  RODBC package 사용  실제 많은 데이터는 DB 에 존재함  # DB 연결  kingDee <- odbcConnect(“****", uid=“user", pwd=“password")  # SQL Query 문장 만들기  query <- "select so.FInterID, o.FItemID, o.FName, so.FDate, e.FItemID, e.FName, p.Fname, soi.FQty, soi.FPrice, soi.FAmount from SEOrder so, t_Organization o, SEOrderEntry soi, t_ICItemCore p, t_Base_Emp e where so.FCustID = o.FItemID and so.FInterID = soi.FInterId and soi.FItemID = p.FItemID and so.FEmpID = e.FItemID"  # SQL Query 실행  sale_df <- sqlQuery(kingDee, query, stringsAsFactors = FALSE)
  • 21. ODBC 설정에 대한 이해  ODBC 는 일반 프로그램에서 DB 에 연결하기 위한 도구 네트웍 DATABASE 주소: 172.16.120.212 사용자 컴퓨터 DB이름 : kingdee 주소: 172.16.120.212
  • 22. ODBC 설정  검색창에서 ODBC 입력  Microsoft ODBC Administer 선택  추가 입력  SQL Server 선택 (더블클릭)  db 이름 입력 : kingdee (매우 중요 – 이후 이 이름을 사용해서 접근하게 됨)  주소 입력 : IP Address  사용자가 입력한 id/pwd 선택  db ID : user  PWD : password
  • 23. Intermediate #2 –Data Frame 조작  Package – dplyr  Command – 명령어  Data Frame 즉 Excel 데이터를 쉽게 조작하는 데 사용함  앞서 Excel, DB 에서 불러들이 데이터는 모두 data.frame 으로 저장됨 구분 설명 예 select() 열(Column)을 선택하는 데 사용 filter() 행(Row)을 선택하는데 사용 mutate() 데이터를 조작하거나 새로 생성함 arrange() 데이터 정렬 summarize() 데이터 summary group_by() 데이터 Grouping
  • 24. Intermediate #2–Data Frame - 열선택  dplyr – select()  열이 많을 때, 필요한 열만 선택하는 방법  명령어 : select(df, 선택하고 싶은 열을 벡터로 표현)  열은 열의 이름을 사용해도 되고, 순서로 표현할 수 있음  hflights 의 DF 를 예로 사용함 : Package hflights 사용  select(hflights, ActualElapsedTime, AirTime, ArrDelay, DepDelay) • select(hflights, c(10, 11, 12, 13)) == hflights[ , c(10, 11, 12, 13)]  select(hflights, Origin:Cancelled) • select(hflights, 14:19) == hflights[ , 14:19]  select(hflights, -(DepTime:AirTime)) • select(hflights, -(5:11))  select(hflights, UniqueCarrier, ends_with("Num"), starts_with("Cancel"))  select(hflights, contains("Tim"), contains("Del"))  select(hflights, Year:ArrTime, -DayofMonth) • hflights[c("Year","Month","DayOfWeek","DepTime","ArrTime")]  select(hflights,starts_with("T")) • hflights[c("TailNum","TaxiIn","TaxiOut")]
  • 25. Intermediate #2–Data Frame - 행선택  dplyr – filter()  행이 많을 때, 필요한 행만 선택하는 방법  명령어 : filter(df, 선택하고 싶은 행을 수식으로 표현)  hflights 의 DF 를 예로 사용함 : Package hflights 사용  filter(hflights, Distance >= 3000)  filter(hflights, UniqueCarrier %in% c("JetBlue", "Southwest", "Delta"))  filter(hflights, TaxiIn + TaxiOut > AirTime)  filter(hflights, DepTime < 500 | ArrTime > 2200)  filter(hflights, DepDelay > 0, ArrDelay < 0)  filter(hflights, DayOfWeek %in% c(6,7), Cancelled == 1)  내용은 같은데 다른 표현  hflights[ hflights$Distance >= 3000, ]  hflights[ hflights$UniqueCarrier %in% c(c("JetBlue", "Southwest", "Delta"), ]
  • 26. subset() 함수 – select() + filter()  Select() 와 filter 를 한꺼번에 처리하고자 할 때  subset 함수 사용  사용법 : subset( data_frame, 행을 선택할 수 있는 조건, select = c(열) )  subset( hflights, DepTime < 500 | ArrTime > 2200, select = c(ActualElapsedTime , AirTime, ArrDelay, DepDelay) )
  • 27. Intermediate #2–Data Frame – 데이터조작  dplyr – mutate()  값들을 조작하여 새로운 데이터 또는 기존 데이터를 변경함  새로운 데이터를 만들어 낼 수 있음  hflights 의 DF 를 예로 사용함 : Package hflights 사용  mutate( hflights, ActualGroundTime = ActualElapsedTime - AirTime)  mutate( hflights, GroundTime = TaxiIn + TaxiOut)  mutate( hflights, AverageSpeed = Distance / AirTime * 60)  mutate( hflights, loss = ArrDelay - DepDelay, loss_percent = (ArrDelay - DepDelay) / DepDelay * 100)  transform() == mutate() 같음  transform( hflights, ActualGroundTime = ActualElapsedTime - AirTime)  transform( hflights, GroundTime = TaxiIn + TaxiOut)  transform( hflights, AverageSpeed = Distance / AirTime * 60)  같은 효과  hflights$ActualGroundTime = hflights$ActualElapsedTime – hflights$AirTime
  • 28. Intermediate #2–Data Frame – Sorting  dplyr – arrange()  행을 어떤 조건 값에 의해 오름차순, 또는 내림차순으로 정리  hflights 의 DF 를 예로 사용함 : Package hflights 사용  arrange( hflights, DepDelay) – 오름차순 • arrange( hflights, desc(DepDelay) ) – 내림차순  arrange( hflights, ActualGroundTime) – 오름차순 • arrange( hflights, desc(ActualGroundTime)) – 오름차순  arrange( hflights, CancellationCode)  arrange( hflights, UniqueCarrier, DepDelay) – 두개 항의 조합  arrange( hflights, UniqueCarrier, desc(DepDelay))  응용  arrange(filter( hflights, Dest == "DFW", DepTime < 800),desc(AirTime)  다른 표현 방법  hflights[ order( hflights$DepDelay ), ] == arrange( hflights, DepDelay )  hflights[ order( -hflights$DepDelay ), ] == arrange( hflights, desc(DepDelay) )
  • 29. Intermediate #2–Data Frame –summarize  dplyr – summarize()  행을 어떤 조건 값에 의해 오름차순, 또는 내림차순으로 정리  hflights 의 DF 를 예로 사용함 : Package hflights 사용  summarise(hflights, min_dist = min(Distance), max_dist = max(Distance))  summarise(hflights, earliest = min(ArrDelay), average = mean(ArrDelay), latest = max(ArrDelay), sd = sd(ArrDelay))  summarise(hflights, n_obs = n(), n_carrier = n_distinct(UniqueCarrier), n_dest = n_distinct(Dest), dest100 = nth(Dest, 100))
  • 30. Intermediate #2–Data Frame –Chaining  dplyr – %>% (command chaining)  명령어를 순서대로 나열하듯 실행하여 이해와 독해를 빠르게 함.  Package hflights 사용  hflights %>% mutate(diff = TaxiOut - TaxiIn) %>% filter(!is.na(diff)) %>% summarise(avg = mean(diff))  hflights %>% select(Dest, Cancelled, Distance, ActualElapsedTime, Diverted) %>% mutate(RealTime = ActualElapsedTime + 100, mph = Distance / RealTime * 60) %>% filter(mph < 105 | Cancelled == 1 | Diverted == 1) %>% summarise( n_non = n(), p_non = n_non / nrow(hflights) * 100, n_dest = n_distinct(Dest), min_dist = min (Distance), max_dist = max(Distance))
  • 31. Intermediate #2–Data Frame –group_by  dplyr – group_by()  데이터를 Grouping 하는데 사용함  hflights 의 DF 를 예로 사용함 : Package hflights 사용  hflights %>% group_by(UniqueCarrier) %>% summarise(n_flights = n(), n_canc = sum(Cancelled == 1), p_canc = mean(Cancelled == 1) * 100, avg_delay = mean(ArrDelay, na.rm = TRUE)) %>% arrange(avg_delay, p_canc)  hflights %>% group_by(DayOfWeek) %>% summarise(avg_taxi = mean(TaxiIn + TaxiOut, na.rm=TRUE)) %>% arrange(desc(avg_taxi))
  • 32. Intermediate #3 – Data merge  두개의 파일 또는 두개의 Data Frame 을 하나로 합칠 때  Unique 하고 독립적인 Key 가 있어야 함  df1 df2  merge(df1, df2, by=c(“ID”, “Name”))
  • 33. Intermediate #3 – Data merge  두개의 파일 또는 두개의 Data Frame 을 하나로 합칠 때  Unique 하고 독립적인 Key 가 있어야 함  df1  df2  rbind(df1, df2)
  • 34. Intermediate #3 – Data Reshape  melt()– 여러 개의 행을 한 개 행으로 통합  shape2 package 사용  활용 : melt(data, key, value, …, na.rm = FALSE, convert = FALSE)  예  melt ( iris, id = c(“Species”) ) melt() 함수 적용 전 melt() 함수 적용 후
  • 35. Intermediate #3 – Data Reshape  Gather – melt 와 동일  tidyr package 사용  활용 : gather(data, key, value, …, na.rm = FALSE, convert = FALSE)  예  gather(iris, key, Value, -Species) Data 열의 변수가 하나로 통합 해당 열의 변수 값들이 통합 기준. 통합에서 제외되는 행 gather() 함수 적용 전 gather() 함수 적용 후 왜 (why) 이런 조작이 필요할까?
  • 36. Intermediate #3 – Data Reshape  dcast() – 하나의 변수를 여러개로 분리 할 때, 즉 key-value pair 를 여 러 개의 열(Column)으로 구분할 때  reshape2 package 사용  활용 : spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE)  예  dcast(data, Species + group + Part ~ Measure, value.var="value") Data 분리되는 변수(열) 분리되는 값 dcast() 함수 적용 전 dcast() 함수 적용 후
  • 37. Intermediate #3 – Data Reshape  spread() == dcast() 와 동일함  tidyr package 사용  활용 : spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE)  예  spread(data, Measure, value) Data 분리되는 변수(열) 분리되는 값 spread() 함수 적용 전 spread() 함수 적용 후
  • 38. Intermediate #3 – Data Reshape  separate() – 하나의 변수를 두개로 분리  tidyr package 사용  활용 : separate(data, col, into, sep = "[^[:alnum:]]+", remove = TRUE, convert = FALSE, extra = "warn", fill = "warn", ...)  예  separate(data, key, c("Part", "Measure"), ".") Data 분리되는 변수(열) 분리되는 변수 명 분리 기준 (.) separate() 함수 적용 전 separate() 함수 적용 후
  • 39. Intermediate #3 – Data 분리 및 통합  Command Chainning 과 Data 분리 및 통합의 이유 iris.tidy <- iris %>% gather(key, Value, -Species) %>% separate(key, c("Part", "Measure"), ".") iris.wide <- iris %>% gather(key, value, -Species) %>% separate(key, c("Part", "Measure"), ".") %>% spread(Measure, value) ggplot(iris.tidy, aes(x = Species, y = Value, col = P art)) + geom_jitter() + facet_grid(. ~Measure) ggplot(iris.wide, aes(x = Length, y = Width, col = Part)) + geom_jitter() + facet_grid(. ~Species)
  • 41. Intermediate #4–ggplot  ggplot 은 여러 가지(plot, plotly, ggivs 등)그래픽 package 중에 하나.  자주 사용하는 이유는 확장성이 좋고, 데이터를 다루는 철학 때문  계층적 구조의 철학 Theme Coordinates Statistics Facets Geometrics Aesthetics Data Theme Coordinates 통계적 방법 그룹핑등의 구분 표현의 방법 표현할 데이터 선정 Data Frame 를 의미함
  • 42. Intermediate #4–ggplot  데이터의 표현 (계층적 구조의 철학)  ggplot(iris, aes(Sepal.Length, Sepal.Width, col = Species)) + geom_point( size = 3) + facet_grid(. ~ Species) + stat_smooth(method = "lm") + theme(panel.grid.major = element_line(colour = "grey")) Data Aesthetics Geometric Facet Statistics Theme
  • 43. Intermediate #4–ggplot  Geometrics 의 표현 종류 및 방법  geom_point()  geom_bar()  geom_boxplot()  geom_histogram()  geom_smooth()  …. 기타 30 여가지 기능
  • 44. Intermediate #4–ggplot  Parameter 에 대한 이해  x : x 좌표, aesthetics 의 대상 이외에 다른 데이터를 표현할 때 사용  y : y 좌표, aesthetics 의 대상 이외에 다른 데이터를 표현할 때 사용  col : 점의 외곽을 표현하는 색을 표현함  fill : 점을 채우는 색  shape : point를 어떤 형태로 나타낼 지 결정, 25가지 방법  size : 크기를 나타냄  alpha : 투명도를 나타냄  해당 Parameter 값을 두가지 방법을 통해서 가능함  대상 : col, fill, size, alpha, shape(반드시 discrete/categorical 변수 (자연수)여야 함)  첫째 방법 : 사용자가 강제로 정해 주는 방법  col = “red”, col = “#ffeeaa”, fill = “red”, shape = 3, size = 5  두번째 방법 : Data 값을 활용하는 방법  col = cyl, size = cyl …..
  • 45. Intermediate #4–ggplot  geom_point() – 특징, 반드시 x, y 가 모두 필요함  Parameter : x, y, alpha, col, fill, shape, size  graph <- ggplot(mtcars, aes( x=wt, y=mpg )) #Data, Aesthetic 은 Fixed 됨  활용 사례  graph + geom_point( aes(col = qsec))  graph + geom_point( aes(alpha = qsec, col = factor(cyl), shape = factor(cyl), size = cyl))
  • 46. Intermediate #4–ggplot  geom_point() 와 geom_jitter() 의 차이  x 변수가 Categorical / Discrete 한 경우 해당 Point의 집중도가 보이지 않는 문제를 해결하기 위해 geom_jitter()  geom_point( position = “jitter” ) == geom_jitter()  geom_point( position = position_jitter(0.4) ) ggplot(diamonds, aes(x= clarity, y= carat, col= price))+ geom_point( alpha = 0.5) ggplot(diamonds, aes(x= clarity, y= carat, col= price))+ geom_jitter( alpha = 0.5)
  • 47. Intermediate #4–ggplot  geom_bar() – x 변수만 있으면 됨  Parameter : x, y, alpha, col, fill, linetype, weight  활용 사례  아래 두 결과는 동일함 • ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar( alpha = 0.5) • ggplot(diamonds, aes(clarity)) + geom_bar(aes(fill = cut), alpha = 0.5) • ggplot(diamonds, aes(clarity)) + geom_bar(aes(fill = cut), alpha = 0.5 ) + facet_grid(. ~cut) coord_flip() + 만으로 축이 변함.
  • 48. Intermediate #4–ggplot  geom_bar() – 2번째 geom_bar( position = “stack”) geom_bar( position = “fill”) geom_bar( position = “dodge”) geom_bar( position = position_dodge( width = 0.5 ) )
  • 49. Intermediate #4–ggplot  geom_boxplot()  Parameter : lower, middle, upper, x, ymax, ymin, alpha, colour, fill, linetype, s hape, size, weight  활용 사례  ggplot(mtcars, aes(factor(cyl), mpg)) + geom_boxplot(aes(fill = factor(cyl))) + geom_jitter() + coord_flip() jitter() 는 point() 의 변형으 로 한곳에 점이 몰리지 않게 분산 시켜 줌
  • 50. Intermediate #4–ggplot  geom_histogram()  Parameter : x, alpha, col, fill, linetype, weight  histogram 과 bar는 유사함.  활용 사례  ggplot(mtcars, aes(x =mpg)) + geom_histogram(aes(y = ..density..), fill = "blue", binwidth = 1, alpha = 0.4) + geom_density( col = "red" ) geom_histogram() == stat_histogram() ggplot(mtcars, aes(mpg, fill = cyl)) + geom_histogram(binwidth = 1, position = "identity", alpha = 0.4 )
  • 51. Intermediate #4–ggplot  geom_smooth()  Parameter : x, y, alpha, col, fill, size, linetype, weight  Linear Models 을 그래프에 적용할 때 유리함  활용 사례  ggplot(mtcars, aes(y=wt, x=mpg)) + facet_grid(. ~ cyl) + geom_smooth(method=lm) + geom_point( aes(col = factor(cyl), size = factor(cyl))) geom_smooth() == stat_smooth()
  • 52. Intermediate #4–ggplot  geom_line()  라인을 그릴 때 사용  ggplot(economics, aes(x = date, y = unemploy/pop)) + geom_line() + geom_rect(data = recess, aes(xmin = begin, xmax = end, ymin = -Inf, ymax = +Inf), inherit.aes = FALSE, fill = "red", alpha = 0.2) 붉은색은 경제 침체기 두개의 Data 사용 o economics o recess
  • 54. 다양한 형태의 OUTPUT 이 가능함.  데이터 분석의 대상 Excel 파일 및 csv 파일 Database ( KingDee 등) 통계 패 키지 SAS, SPSS, MatLab input input output Excel 파일 및 csv 파일 PDF PPT HTML
  • 55. 참고사이트  좋은 책: http://www.cookbook-r.com/  데이터 읽어 오기 : http://www.cookbook-r.com/Data_input_and_output/  원본 책 : http://www.cookbook-r.com/  데이터 조작 : http://www.cookbook-r.com/Manipulating_data/index.html  원본 책 : http://www.cookbook-r.com/  Basic Guide : http://sharpstatistics.co.uk/r/ggplot2-guide/  다양한 그래프 설명 : http://docs.ggplot2.org/current/index.html#  Plotly : https://plot.ly/r/