R Programming install & basic¶
- R Install
- Basic R Programming
- Basic Data handling for datamining with R
R & R-Studio install¶
- R-Cran (R) : https://cran.r-project.org/mirrors.html
R-studio (RStudio) : https://www.rstudio.com/products/rstudio/download/
Start R-studio
- 설치한 R-studio를 통해 수행해도 되고 Jupyter notebook에 R-Kernel을 만들어서 사용해도 무관하다.
1. Basic Calculation¶
In [1]:
3 + 4
In [2]:
4 - 2
In [4]:
17 %% 3 # 나머지
In [5]:
6 * 3
In [6]:
7 / 2
In [7]:
7 %/% 2 # 몫
2. Scala(스칼라)¶
- R 에서의 데이터 타입은 문자형, 숫자형, 논리형 등 형태로 존재하는데 이러한 데이터 타입을 하나의 값만 가지는 것을 Scala(스칼라) 라고 한다.
In [11]:
1
In [12]:
"String"
In [15]:
TRUE
In [16]:
FALSE
3. Vector(벡터)¶
- 위의 Scala 값들을 묶어서 표현하는 것을 벡터라고 한다. 같은 데이터 타입의 값들을 여러개 묶어서 표현한다.
- 숫자 + 문자로 벡터를 구성하게 된다면 해당 숫자형은 문자형으로 변환된다.
- 숫자 + 논리형태로 가지게 된다면 논리형의 경우 TRUE -> 1, FALSE -> 0 으로 표현
In [17]:
c(1,2,3)
In [18]:
c("a",2,3)
In [20]:
c(TRUE,1,2)
In [21]:
c("a","b")
In [22]:
c(1, 2, 3) + c(5, 6, 7) # 각 요소끼리 덧셈
In [23]:
c(1, 2, 3) + 5 # 각 요소에 각각 덧셈(5를)
In [26]:
c(1, 2, 3) + c(3, 4) # 길이가 맞지 않을 경우 3, 4 순으로 해서 순서대로 더한다.
In [27]:
c(1, 2, 3,4) + c(3, 4) # 1 + 3, 2 + 4, 3 + 3, 4 + 4
4. Variable(변수)¶
- 이름 그대로 변하는 수이다.
- 우리가 원하는 값을 담고 있는 그릇이라고 생각하면 된다.
- 원하는 그릇에 원하는 음식을 담듯이, 원하는 그릇에 원하는 값을 담으면 된다.
- 이와 반대되는 말이 상수가 있는데 상수는 변하지 않는 수 즉, 한번 담게 되면 고정되는 값이라고 생각하면 된다.
4-1 Assign Variable¶
In [28]:
people <- 40 # 엑셀의 A1, B1 등과 같다고 보면 된다.
people
In [29]:
people <- c(1,2,3)
people
4-2 Delete Variable¶
In [30]:
ls() # 메모리에 저장되어있는 변수 명을 출력.
In [31]:
rm(people)
모든 변수를 삭제 하고 싶다면
In [32]:
rm(list=ls())
4-3 Calculate Variable¶
In [33]:
people <- c(1,2,3)
In [34]:
people * 3
In [36]:
people
# 변수의 값을 연산하고 끝날뿐이지 결과값을 다시 할당하지 않는다면 일회성이라고 생각하면된다.
In [37]:
people <- people * 2
people # 재할당.
5. Indexing¶
- Python과 달리 1부터 시작한다.
- [시작:끝] 끝은 포함한다. 이 또한 파이썬과 다르다. 파이썬의 경우 시작은 포함 끝은 포함하지 않기 때문에.
In [38]:
people[1] # 1번만
In [40]:
people[1:2] # 1번부터 2번까지
6. Function (함수)¶
- 사용자 지정함수 또한 만들어서 사용할 수 있다.
- 함수의 도움말을 알기 위해서는 ?함수명 을 하게 되면 help가 나오게된다.
In [41]:
floor(3.4)
In [42]:
ceiling(2.1)
In [45]:
c(round(3.4),round(3.5))
In [47]:
user_add <- function(a,b){
c <- a + a + b + b
return(c)
}
In [48]:
user_add(1,2)
7. List (리스트)¶
- 벡터의 경우 같은 종류의 데이터 타입만 여러개 가질 수 있다.
- 하지만 리스트의 경우 다른 종류의 데이터 타입을 여러개를 동시에 가질 수 있는 형태의 자료형이다.
- json형태와 비슷하게 key,value 형태로 저장한 후 접근도 가능하다.
In [49]:
a <- list(1,2,3,'a',TRUE)
a
In [52]:
b <- list(a=1,b=3,c=TRUE,d='a')
b
In [53]:
b$a
8. DataFrame(데이터프레임)¶
- 엑셀의 하나의 시트라고 생각하면 될 것 같다.
- 하나의 테이블에 컬럼과 로우가 있듯이 표현되는 데이터 형태이다.
In [54]:
car <- read.csv('automobile.csv')
# 다양한 속성을 통해 header를 가지고 올지, row를 새로 만들지 등을 정할 수 있다.
In [55]:
head(car) # 상위 5줄을 볼 수 있다.
In [56]:
car2 <- read.csv(file.choose()) # R-Studio를통해서 수행하면 된다.
In [57]:
View(car)
# 이 또한 Rstudio를 통해서 하면 된다. 새로운 창을 통해 data를 전체적으로 볼 수 있다.
Size of data¶
In [58]:
dim(car) # rows x columns
Row indexing¶
In [59]:
car[1,]
In [60]:
car[1:5,]
Columns indexing¶
In [63]:
head(car['maker'])
In [66]:
head(car[3]) # 컬럼의 위치를 선택하여서 볼 수 있다.
In [67]:
head(car[c("maker","body")])
In [68]:
head(car[c(3,7)])
In [69]:
head(car[,c(3,7)])
In [70]:
car[1:2,3:7]
Compare values in data¶
In [71]:
subset(car, horsepower > 145)
In [73]:
subset(car, horsepower < 60)
In [74]:
subset(car, horsepower <= 60)
In [75]:
subset(car, horsepower == 60)
In [77]:
head(subset(car, body != 'sedan'))
논리¶
- and
In [78]:
subset(car, horsepower > 100 & fuel == 'diesel')
- or
In [80]:
head(subset(car, body == 'wagon' | wheels == '4wd'))
- not
In [81]:
head(subset(car, !(body == 'wagon' | wheels == '4wd')))
- 보론
In [82]:
dat = data.frame(num=c(36925,36941,12345), name=c('abc', 'def', 'abd'))
dat
In [83]:
subset(dat, num %/% 100 == 369) # 100으로 나눈 몫이 369인 경우
In [84]:
subset(dat, startsWith(as.character(name), 'ab')) # name의 시작이 ab인 경우
In [85]:
subset(dat, endsWith(as.character(name), 'bc')) # name의 끝이 bc인경우
데이터 저장¶
In [86]:
wagon <- subset(car, body=='wagon')
head(wagon)
In [87]:
write.csv(wagon,'wagon.csv')
클립보드에 복사¶
In [88]:
write.table(wagon,'clipboard',sep = '\t') # r_studio 에서 가능.
Statistics¶
In [89]:
max(car$length)
In [90]:
min(car$length)
In [91]:
var(car$length)
In [92]:
sd(car$length)
- Summary
In [94]:
summary(car$length) # 전체 변수에 대해서 다 보려면 $length를 없애면 된다.
In [95]:
is.na(NA)
자주 쓰이는 데이터 다루기 관련 함수¶
- dim : size of dataframe
- nrow : number of rows
- ncol : number of columns
- head : top 5 data of dataframe
- names : name of columns
- table : count of data, 명목데이터에 대해서
문자열 관련 함수¶
- nchar : number of characters(length)
- substr : extract string
- paste : concate strings
- grep : search string in data
- grepl : match strings in lots data and get logical type
- FALSE, TRUE
dplyr¶
- library in R, handling data and getting statistics information
- 복잡한 필터링, 정렬, 변환, 통계를 손쉽게 할 수 있도록 도와주는 패키지
- filter()
- slice()
- arrange()
- select()
- rename()
- distinct()
- mutate()
- transmute()
- summarise() / summarize()
Install Package¶
In [ ]:
install.packages('dplyr')
Load Package¶
In [96]:
library(dplyr)
Load data¶
In [98]:
car <- read.csv('automobile.csv')
head(car)
Summarise¶
In [99]:
summarise(car, mean(length))
In [101]:
summarise(car, age=mean(length))
In [102]:
summarise(car, mean(length), mean(width))
In [104]:
summarise(car, mean_car = mean(price))
Chain ( %>% )¶
- dplyr 패키지에서 정의된 연산자
- 여러가지 작접들을 연결하는데 사용.
- x %>% f() 형식으로 결과는 f(x) 와 동일하다.
- x %>% f() %>% g() 결과: g(f(x))
In [105]:
car %>% summarise(mean(length))
Filter¶
In [107]:
car %>% filter(body == 'sedan') %>% head()
In [108]:
car %>%
filter(body=='sedan') %>%
summarise(mean(length))
In [110]:
car %>%
filter(body=='hatchback' & price > 10000) %>%
summarise(mean(engine_size))
Grouping¶
In [111]:
car %>%
group_by(fuel) %>%
summarise(mean(city_mpg))
- 출시 5년 미만인 자동차의 메이커 평균 구매 가격
In [113]:
car %>% filter(horsepower < 100)%>%
group_by(fuel) %>%
summarise(mean(city_mpg))
컬럼더하기(mutate)¶
In [115]:
car %>% mutate(diff_mpg = highway_mpg - city_mpg) %>% head()
컬럼 선택¶
In [116]:
car %>% select(1) %>% head()
행 선택¶
In [117]:
car %>% slice(1:10)
정렬¶
In [118]:
car %>% arrange(symboling) %>% head()
In [122]:
car %>% arrange(desc(symboling)) %>% head()
Join¶
- 두개의 데이터를 결합
In [123]:
x = data.frame(name = c('a','b','c'), v1 = 1:3)
y = data.frame(name = c('b', 'b', 'c', 'd'), v2 = 1:4)
In [124]:
x
In [125]:
y
In [126]:
left_join(x,y) # x의 데이터의 name(같은 이름의 컬럼) 기준으로 결합
In [127]:
right_join(x,y) # y의 데이터의 기준으로.
In [128]:
inner_join(x,y) # x,y 의 name에 동일한 값이 있는 것만
In [129]:
full_join(x,y) # 카디션 곱
In [130]:
semi_join(x,y)
semi_join()¶
return all rows from x where there are matching values in y, keeping just columns from x. A semi join differs from an inner join because an inner join will return one row of x for each matching row of y, where a semi join will never duplicate rows of x.
In [132]:
?semi_join
'BIGDATA > R' 카테고리의 다른 글
[DataMining] 3. 데이터 전처리 (0) | 2017.09.25 |
---|---|
[DataMining] 2. 시각화를 통한 탐색적 데이터 분석(EDA) (0) | 2017.09.16 |
#12. 고급 시각화 (0) | 2016.07.13 |
#11. 기초 시각화 [ R 내장 함수 ] (0) | 2016.07.12 |
#10 .기술통계 [ 예제 ] (0) | 2016.07.12 |