연속 변수란?

: 시간, 길이 등과 같은 연속성을 가진 실수 단위 변수를 의미합니다.

 

1) 상자 그래프 시각화 - boxplot()

: 요약정보를 시각화 하는데 효과적. 특히 데이터의 분포 정도와 이상치 발견을 목적으로 하는 경우 유용하게 사용

VADeaths 함수를 활용하여 상자 그래프 에 대해서 알보겠습니다.

 

< VADeaths >
R에서 기본으로 제공되는 데이터 셋으로 1940 년 미국 버지니아주의 하위계층 사망비율을 기록한 데이터 셋이다 전체

5 행 4 열의 numeric 자료형의 matrix 자료구조를 갖고 있습니다.

 

변수구성

- Rural Male( 시골출신 남자) Urban Male( 도시출신 남자)
- RuralFemale( 시골출신 여자) Urban Female( 도시출신 여자)

         Rural Male  Rural Female Urban Male Urban Female
50-54       11.7          8.7       15.4          8.4
55-59       18.1         11.7       24.3         13.6
60-64       26.9         20.3       37.0         19.3
65-69       41.0         30.9       54.6         35.1
70-74       66.0         54.3       71.1         50.0

 

boxplot(VADeaths, range=0) # 상자그래프 시각화. 

abline(h = 37, lty = 3, col="red")점 # abline : 기준선 추가(lty = 3 : 선 (lty : linetype))

range = 0 : 최소값과 최대값 점선으로 연결하는 역할 - 주식에서 많이 사용 
                최대값과 최소값의 격차를 보여주며, 분포도를 보여줍니다.

 

 

 

2) 히스토그램 시각화

: 탐색과정에서 연속 변수에 관하여 가장 많이 사용합니다.
- 측정값의 범위(구간)를 그래프의 x축으로 놓고, 범위에 속하는 측정값의 빈도수를 y축으로 나타낸 그래프 형태.

 

 

iris 함수를 활용하여 히스토그램 에 대해서 알보겠습니다.

 

< iris >

R에서 제공되는 기본 데이터 셋으로 3 가지 꽃의 종류별로 50 개씩 전체 150개의 관측치로 구성된다. iris는 붓꽃에 관한 데이터를 5 개의 변수로 제공하며각 변수의 내용은 다음과 같다.

Sepal.Length(꽃받침 길이)

Sepal.Width(꽃받침 너비)

Petal.Length(꽃잎 길이)

Petal.Width(꽃잎 너비)

Species(꽃의 종류) : 3 가지 종류별 50 개 (전체 150 개 관측치)

 

hist(iris$Sepal.Width, xlab = "꽃받침의 너비" , col= "green", xlim = c(2.0,4.5), 
                       main="iris 꽃받침 너비 histogram") 

xlim : x축의 최소와 최대 범위 표현


의미 : 막대그래프의 2.0~2.25 너비를 가진 것들의 빈도수가 5정도 됩니다.

 

 

3) 산점도 시각화 

: 두 개 이상의 변수들 사이의 분포를 점으로 표시한 차트를 의미

 

예제 ① 

#기본 산점도 시각화 

price <- runif(10, min = 1, max = 100) -  1~100 사이 10개 난수 발생

plot(price)

runif() : 난수 발생 함수 / runif(생성개수 n개의 랜덤 난수 , 최소 , 최대 ) 최소 ~ 최대 까지에서 n개 난수 생성

 

 

예제②

# 대각선 , 텍스트 추가 

par(new=T) #  기존 그래프에서 추가적으로 차트을 넣어준다 

line_chart <- c(1:100)
line_chart

 - 출력값 -
[1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  
15  16  17 18  19  20  21  22  23  24  25  26  27  28  29  30
[31]  31  32  33  34  35  36  37  38  39  40  41  42  43  44  
45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60
[61]  61  62  63  64  65  66  67  68  69  70  71  72  73  74 
75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90
[91]  91  92  93  94  95  96  97  98  99 100

plot(line_chart, type = "l", col = "red", axes = F, ann = F) # 대각선 출력 


# 텍스트 추가 
text(70,80,"대각선 추가",col = "blue" )

par - plot 안에서 시각화의 개수를 제공해주는 함수 

 

type = "l" : 실선을 넣어줍니다. 

 

axes : 축의 대한 매개변수 


ann : T,F의 값을가진다

 

text(x축,y축,"내용") + col = "색상"

 

 

+ 추가 기능 

① type 속성 그리기 

par(mfrow=c(2,2)) # 2행 2열 차트 / 4개의 이미지를 한번에 볼 수 있도록 셋팅

plot(price, type = "l") - 유형 : 실선
plot(price, type = "o") - 유형 : 원형과 실선(원형통과)
plot(price, type = "h") - 유형 : 직선 
plot(price, type = "s") - 유형 : 꺾은선 

 

 

② pch 속성으로 그리기

plot(price, type = "o", pch = 5) - 빈 사각형 
plot(price, type = "o", pch = 15) - 채워진 사각형
plot(price, type = "o", pch = 20) - 채워진 원형
plot(price, type = "o", pch = 20, col = "blue") - 파란 채워진 원형
plot(price, type = "o", pch = 20, col = "orange", cex = 3.0)  - 오랜지색 으로 채워진 원형(x3)
plot(price, type = "o", pch = 20, col = "orange", cex = 3.0, lwd=3) 
- lwd : line width (선의 너비)

 

 

 

4) 중첩 자료 시각화 

 

- 두 개의 벡터 객체 -
x <- c(1,2,3,4,2,4) 
y <- rep(2,6) # rep(시작과 끝 : 반복 횟수

x;y
출력값 :  [1] 1 2 3 4 2 4
출력값 :  [1] 2 2 2 2 2 2

- 교차테이블 작성 - 
table(x) -  table : 빈도수 
출력값 : 1 2 3 4 
출력갑 : 1 2 1 2 

table(y)
출력값 : 2 
출력값 : 6 

table(x,y)

 - 출력값 - 
     y
 x   2
   1 1 
   2 2
   3 1
   4 2 
 x가 1일 때, y가 2인 값 = 1, x가 2일 때, y가 2인 값 = 2 ,  
 x가 3일 때, y가 2인 값 = 1, x가 4일 때, y가 2인 값 = 2


 - 산점도 시각화 - 
plot(x,y)
x가 1,2,3,4 일 때 y는 2 - 4개의 데이터만 있는 것으로 보인다
(데이터의 개수가 시각적으로 확인하기 어렵다)

 

# 중복된 만큼 점 확대 하기 

 - 데이터 프레임 생성 -
xy.df <- as.data.frame(table(x,y))
xy.df

- 출력값 -
 x y Freq
 1 2  1
 2 2  2
 3 2  1
 4 2  2

 
 - 좌표에 중복된 수 만큼 점 확대 - 
plot(x,y,pch = 20 , col = "black", xlab =  "x 벡터 원소" , 
         ylab= "y 벡터 원소" , cex = 0.8 * xy.df$Freq) 

pch  : 출력해주는 점의 모양 변경

 

col : 색상

 

xlab : x 레이블 이름

 

ylab : y 레이블 이름

 

cex : 점의 크기 - cex = 0 * 8 = xf.df$Freq // 빈도수를 곱해서 중복되었을 때 배가 되도록 합니다. 

 

'빅데이터 > R' 카테고리의 다른 글

[R] dplyr 패키지  (2) 2020.07.03
[R] plyr 패키지  (0) 2020.07.02
[R] 이산변수 시각화  (0) 2020.07.01
[R] 주요 내장 함수  (0) 2020.07.01
[R] 사용자 정의 함수  (0) 2020.06.30

이산변수란?

 - > 정수단위로 나누어 측정할 수 있는 변수를 이야기 합니다. - 연속적이지 않은 변수 

     (예시, 돈 - 1원은 있지만 1.5원은 없음) 

 

 

1) 막대차트 함수 - barplot() 형식 - barplot() 

(1) 세로 막대차트 

 

- 막대 차트 데이터 생성 및 세로 막대 차트 생성

chart_data <- c(305, 450, 320, 460, 330, 480, 380, 520) # 1차원 배열 
names(chart_data) <- c("2019 1분기", "2020 1분기", "2019 2분기", "2020 2분기", "2019 3분기", 
                       "2020 3분기", "2019 4분기", "2020 4분기")

str(chart_data) # chat_data dataset의 특징을 출력해줍니다. 
chart_data

- 출력값 - 
2019 1분기 2020 1분기 2019 2분기 2020 2분기 2019 3분기 2020 3분기 2019 4분기 2020 4분기 
  305        450        320        460        330        480       380        520 
  
 
 barplot(chart_data , ylim = c(0,600), col = rainbow(8),  
         xlab ="년도별 분기현황", ylab = "매출액(단위:만원)", 
         main = "2019년도 vs 2020년도 분기면 매출 현황 비교") 

 

barplot : 막대 그래프로 시각화 해주는 함수

 

ylim : y축 값의 범위 / 지정하지 않으면 default값으로 함수에서 잡아주는데 직관력이 떨어지는 경우가 많습니ㅏ다. 
       일정 크기를 넣어주면 그 값에 맞춰서 보기 좋게 조정하여 출력해줍니다. 

 

col : color 의 약자로 색을 넣어주는 함수 / rainbow(n) , n의 수만큼 서로 다른 색으로 출력합니다.

 

main : 타이틀을 넣어주는 매개변수]

 

xlab = x축 이름 

 

ylab = y축 이름

 

 

 

 

(2) 가로 막대 차트

horiz : default = F(세로 막대 차트 출력) , T (가로 막대 차트 출력)

barplot(chart_data, xlim = c(0,600) , xlab = "매출액(단위:만원)", ylab = "년도별 분기현황", 
                   col = rainbow(8), main = "2019년도 vs 2020년도 분기면 매출 현황 비교",
                   horiz = T, space = 1.5, cex.names = 0.8)

- 매개변수의 이름과 함께 데이터를 입력하게 되면 순서는 상관없습니다.

 

space : 막대 그래프 사이의 간격을 정의하는 매개변수 

 

cex.naems : 텍스트의 크기를 바꿀 수 있는 매겨변수, default 값 = 1 / 0.8 입렵하면 80% 크기로 출력

추가 속성

1) red 와 blue 색상 4회반복 

barplot(chart_data, xlim = c(0,600), xlab = "매출액(단위:만원)", ylab = "년도별 분기현황", 
                   main = "2019년도 vs 2020년도 분기면 매출 현황 비교", horiz = T, 
                   space = 1.5, cex.names = 0.8, col=rep(c(2,4),4))

rep : 색상 반복 /  rep(c(2(빨강)-2019년 색상, 4(파랑)-2020년 색상), 4(반복))

- rep(c(n, n), n(반복)) : 검은색 (1), 빨간색(2), 초록색(3), 파란색(4), 하늘색(5), 자주색(6), 노란색(7)

 

 

2) 원하는 색상을 키워드를 이용해서 직접 넣기

 

barplot(chart_data, xlim = c(0,600), xlab = "매출액(단위:만원)", ylab = "년도별 분기현황", 
                    main = "2019년도 vs 2020년도 분기면 매출 현황 비교", horiz = T, space = 1.5, 
                    cex.names = 0.8, col=rep(c("green","yellow"),4))

col : rep(c("color_name","color_name"),반복수))

 

 

 

 

(3) 개별 차트 와 누적 차트 그리기

 

VADeaths 함수를 활용하여 누적 막대 차트에 대해서 알보겠습니다.

 

< VADeaths >
R에서 기본으로 제공되는 데이터 셋으로 1940 년 미국 버지니아주의 하위계층 사망비율을 기록한 데이터 셋이다 전체

5 행 4 열의 numeric 자료형의 matrix 자료구조를 갖고 있습니다.

 

변수구성

- Rural Male( 시골출신 남자) Urban Male( 도시출신 남자)
- RuralFemale( 시골출신 여자) Urban Female( 도시출신 여자)

           Rural Male Rural Female Urban Male Urban Female
50-54       11.7          8.7       15.4          8.4
55-59       18.1         11.7       24.3         13.6
60-64       26.9         20.3       37.0         19.3
65-69       41.0         30.9       54.6         35.1
70-74       66.0         54.3       71.1         50.0

 

par(mfrow=c(1,2)) # 1행 2열 그래프 보기 (개별차트 + 누적 차트)

 - 누적 차트 - 1컬럼 - 5 데이터 / 나이 별로 누적되어 각 컬럼별 특징을 시각화
barplot(VADeaths, col=rainbow(5), main = "미국 버지니아주 하위계층 사망 비율")
legend(0, 200, c("50-54","55-59","60-64","65-69","70-74"), cex = 0.8 , fill = rainbow(5))  

 - 개별 차트 -  
barplot(VADeaths, col=rainbow(5), main = "미국 버지니아주 하위계층 사망 비율", beside = T)
legend(0, 71, c("50-54","55-59","60-64","65-69","70-74"), cex = 0.8 , fill = rainbow(5))

legend : (x, y, 수식) - 범례 작성

 

beside : default = F / 행의 값을 하의 막대에 넣어줍니다 , T : 각행의 데이터를 하나의 막대 그래프로 구별하여 출려해줍니다.

 

 

 

2) 점 차트 시각화 - dotchart()

chart_data

- 출력값 - 
2019 1분기 2020 1분기   2019 2분기   2020 2분기   2019 3분기   2020 3분기   2019 4분기   2020 4분기 
305          450          320          460          330          480          380          520 

dotchart(chart_data, color = c("blue", "red"), xlab = "매출액(단위:만원)" , 
                     cex = 1.2, main="분기별 판매현환 점 차트 시각화화" , 
                     labels=names(chart_data), lcolor="purple", pch = 2:1) 

 

color = c("blue"-2019년, "red"-2020년) 색상 넣기 

 

xlab = x축 이름 

 

cex = 레이블과 점의 크기 확대

 

main = title

 

labels = 기존에 데이터가 가지고 있는 컬럼의 이름을 반환하여 labels에 담아줍니다(y축).

 

names(chart_data) <- c(내용) : 컬럼 이름 넣기

 

lcolor : 줄의 색상 지정

 

pch(plotting character) : (n:n) : 원(○) - (1) , 삼각형(△) -(2), 십자가 모양 (+) - (3) , 출력되는 기호 지정

 

cex(character expansion) : 레이블과 점의 크기 확대

 

 

 

 

3) 원형 차트 시각화 - pie()

chart_data

- 출력값 - 
2019 1분기 2020 1분기   2019 2분기   2020 2분기   2019 3분기   2020 3분기   2019 4분기   2020 4분기 
305          450          320          460          330          480          380          520 

pie(chart_data , labels = names(chart_data), border = 'blue', col=rainbow(8), cex=1.2) 
title("2019~2020년도 분기별 매출 현황")

 

 

 

 

 

 

 

 

 

# lcolor : 줄의 색상 지정
# pch(plotting character) : (n:n) : 원(○) - (1) , 삼각형(△) -(2), 십자가 모양 (+) - (3) , 출력되는 기호 지정
# cex(character expansion) : 레이블과 점의 크기 확대

 

 

'빅데이터 > R' 카테고리의 다른 글

[R] plyr 패키지  (0) 2020.07.02
[R] 연속변수(Continuous quantitative data) 시각화  (0) 2020.07.02
[R] 주요 내장 함수  (0) 2020.07.01
[R] 사용자 정의 함수  (0) 2020.06.30
[R] 반복문 (for 문, while문)  (0) 2020.06.30

1. 행 단위, 컬럼 단위 합계와 평균 구하기 

 

 단계1 : 데이터 셋 불러오기 

install.packages("RSADBE") - pakage 다운로드

library(RSADBE) - 메모리 할당 

data(Bug_Metrics_Software) 데이터 셋을 불러옵니다.

class(Bug_Metrics_Software) - 데이터 구조 정보를 알려줍니다. 
출력값 : [1] "xtabs" "table"

Bug_Metrics_Software[,,1] # 제품 출시 전 

Bugs
출력값:
Software   Bugs NT.Bugs Major Critical H.Priority
JDT     11605   10119  1135      432        459
PDE      5803    4191   362      100         96
Equinox   325    1393   156       71         14
Lucene   1714    1714     0        0          0
Mylyn   14577    6806   592      235       8804

Bug_Metrics_Software[,,2] # 제품 출시 후 

Bugs
출력값: 
Software  Bugs NT.Bugs Major Critical H.Priority
JDT      374      17    35       10          3
PDE      341      14    57        6          0
Equinox  244       3     4        1          0
Lucene    97       0     0        0          0
Mylyn    340     187    18        3         36

 

 

단계2 : 소프트웨어 발표 전 행 단위 합계와 평균 구하기 

rowSums(Bug_Metrics_Software[,,1]) -- rowsum : 행의 합계를 출력합니다. 

출력값:
JDT     PDE Equinox  Lucene   Mylyn 
23750   10552    1959    3428   31014

rowMeans(Bug_Metrics_Software[,,1]) -- rowMeans : 행의 평균값을 출력합니다. 

출력값: 
#JDT     PDE Equinox  Lucene   Mylyn 
#4750.0  2110.4   391.8   685.6  6202.8

- rowSums : 열의 합계를 출력

- rowMeans : 열의 평균을 출력

 

 

 

 단계3 : 소프트웨어 발표 전 열 단위 합계와 평균 구하기

colSums(Bug_Metrics_Software[,,1])  colSums -- 열의 합계를 출력합니다. 

- 출력값 -
Bugs    NT.Bugs      Major   Critical H.Priority 
34024      24223       2245        838       9373 

- 출력값 -
colMeans(Bug_Metrics_Software[,,1])  colMeans -- 열의 평균값을 출력합니다.
#Bugs    T.Bugs      Major   Critical H.Priority 
#6804.8     4844.6      449.0      167.6     1874.6 

- colSums : 행의 합계 출력

- colMeans : 행의 평균 출력

 

 

2. 기술 통계량 관련 내장 함수 사용 예 

seq(-2,2, by= .2) # seq(시작값, 마지막 값, 증가값) 

- 출력값-
[1] -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2  0.0  0.2   
     0.4  0.6  0.8  1.0  1.2  1.4  1.6  1.8  2.0


vec <- 1:10 
vec
- 출력값-
[1]  1  2  3  4  5  6  7  8  9 10



min(vec)
- 출력값-
[1] 1 (최소값)


max(vec)
- 출력값-
[1] 10 (최대값)


range(vec)
- 출력값-
[1]  1(최소값) 10(최대값)


mean(vec)
- 출력값-
[1] 5.5 (평균값)


median(vec)
- 출력값-
[1] 5.5 (데이터의 중간값)


sum(vec)
- 출력값-
[1] 55 (총합)


sd(rnorm(10))
- 출력값-
[1] 0.991409 (표준편차)


table(vec) # 요인의 빈도수 
vec 
- 출력값-
 1  2  3  4  5  6  7  8  9 10 
 1  1  1  1  1  1  1  1  1  1 

 

 

 

 

3. 난수와 확률 분포 관계 

난수 : 기준이 되어지는 값을 지정해서 , 그 값이 절대 중복되지 않는 개념으로 수를 발생시켜 우리가 보기에는 난수처럼 보이게 하는 것이다. (default 값 : 현재 시간의 1/1000초 기준)

 

 

1 단계 : 정규 분포 (연속형)의 난수 생성

n <- 1000
r <- rnorm(n, mean = 0, sd = 1) # 평균 0, 표준편차 1 = 정규 분포 
hist(r) # 대칭성

 

정규분포 rnorm( ) : 확률변수 X가 정규분포를 따르면 평균값에 대해 좌우 대칭이고, 분산값이 크면 더 크게 흩어진 분포를 갖습니다.

 

히스토그램 hsit() : 특정 데이터의 빈도수를 보는 것을 히스토그램이라고 합니다. 산포도와 더불어서 자주사용하는 그래프중 하나로 현재 상태를 대략적으로 볼 수 있습니다.

 

 

 

2 단계 : 균등분포(연속형)의 난수 생성

n <- 1000
r2 <- runif(n, min = 0, max= 1) # 0 < r2 < 1 
hist(r2)

 

균등분포 runif() : 균등분포는 확률분포가 취하는 모든 구간에서 일정한 확률을 가지는 분포입니다.

 

 

 3 단계 : 이항분포(이산형) 난수 생성

n <- 20
rbinom(n, 1, prob = 1/2) # 1/2 의 확률로 20개의 이상변수를 0과 1의 값을 가지는 이항분포를 생성 

- 출력값 - 
[1] 0 1 0 1 0 0 0 0 0 1 1 0 0 1 1 0 1 0 0 0

rbinom(n, 2, prob = 1/2) # 1/2 의 확률로 20개의 이상변수를 0 ~ 2의 값을 가지는 이항분포를 생성 

- 출력값 - 
[1] 2 2 1 1 2 1 1 1 2 0 1 0 0 2 1 2 0 1 1 1

rbinom(n, 10, prob = 1/2) # 1/2 의 확률로 20개의 이상변수를 0 ~ 10의 값을 가지는 이항분포를 생성 

- 출력값 - 
[1] 3 3 6 4 4 3 7 3 5 7 6 6 5 5 4 4 3 3 5 7

 

 

4 단계 : 종자값(seed)으로  동일한 난수 생성.

rnorm(5, mean=0, sd=1) # 정규 분포 (평균 0, 표준편차 1)

- 출력값 1 - 
[1]  0.7393503  0.6653646 -0.5210477 -1.3716350 -1.2954320

- 출력값 2 - 
[1] -0.02988800  0.05601044 -0.29434405 -0.67715103  0.45006390

- 출력값 3 - 
[1]  0.46050159 -0.55269490 -0.01527421 -0.24496429 -0.05962877

규칙적인 느낌으로 출력 됩니다.(random)

 

set.seed(123)
rnorm(5, mean=0, sd=1)

- 출력값 1 -
[1] -0.56047565 -0.23017749  1.55870831  0.07050839  0.12928774

- 출력값 2 -
[1] -0.56047565 -0.23017749  1.55870831  0.07050839  0.12928774

 

seed 값을 통일시키면 같은 값이 출력됩니다.

 

 

 

4. 수학 관련 내장함수 사용 예 

vec <- 1:10 # combine함수 생략 가능 
prod(vec) # product : 벡터 원소들의 곱셈

- 출력값 -
[1] 3628800 (1*2*3*4*...*10)


factorial(3)

- 출력값 -
[1] 6 


abs(-5) # 절대값 

- 출력값 -
[1] 5


sqrt(16) # 제곱근

- 출력값 -
[1] 4


log(10) # 10의 자연로그 (밑수가 e)

- 출력값 -
[1] 2.302585


log10(10) # 10의 일반로그(밑수가 10)

- 출력값 -
[1] 1

 

 

5. 집합연산 내장함수 

x <- c(1,3,5,7,9)
y <- c(3,7)


union(x,y) # 집합 x와 y의 합집합

- 출력값 - 
[1] 1 3 5 7 9


intersect (x, y) # 집합 x와 y의 교집합

- 출력값 - 
[1] 3 7


setequal(x, y) # x와 y의 동일성 테스트

- 출력값 - 
[1] FALSE 


setdiff(x, y) # x의 모든 원소 중 y에는 없는 x와 y의 차집합

- 출력값 - 
[1] 1 5 9

function이란,  사용자 정의 함수를 정의하는 함수입니다.

 

함수 정의 형식

변수 <- function([매개변수]){
함수의 실행문
}

예시) 
f1 <- function(){
  cat("매개변수 없는 함수")
}

출력값: 매개변수 없는 함수

 

 

예제 ①

# 매개변수가 있는 함수 예

f2 <- function(x){
          cat("x의 값 = " , x,  "\n")
      }


f2(10) # 실인수
출력값: x의 값 =  10 

f2(c(1:10)) # 벡터 객체 전달 
출력값: x의 값 =  1 2 3 4 5 6 7 8 9 10 

 

 

예제 ②

# 리턴값이 있는 함수 예

f3 <- function(x,y){ 
        add <- x + y 
        return (add)  
       }
       
add <- f3(10,30)

add
출력값 : [1] 40

-  add : 지역 변수로 사용 { }안에서만 유효합니다.

          사용자 정의 함수 안의 add와 밖의 add는 다르므로 서로 다른 메모리 공간을 가지고 있습니다.

 

return : 결과값 반환 (java의 return과 동일)

   수행한 코드의 결과값을 새로운 변수로 저장하려면 return이라는 인자를 반드시 사용해야 합니다.

   만약 return 값을 따로 지정하지 않으면, 마지막으로 저장된 변수값을 자동으로 반환하게 됩니다.

 

 

예제 ③

# 분산과 표준편차를 구하는 함수 정의

z <- c(7,5,12,9,15,6) 

var_sd <- function(x){
  var <- sum((x-mean(x))^2) / (length(x)-1) # 표본분산
  sd <- sqrt(var) # 표준편차 = 분산에 루르틀 씌어준 것 
  cat('표준분산:', var , '\n')
  cat('표본 표준편차:' , sd ,'\n')
}

var_sd(z)

결과값:
표준분산: 14.8 
표본 표준편차: 3.847077 

- mean : 평균값

- length : 데이터 개수

- sqrt : 루트 씌움

 

 

예제 ④

#구구단 출력 함수 

gugudan <- function(i,j){
  for(x in i){
    cat("==", x , "단 ==\n")
    
    for(y in j){
      cat(x,"x",y,"=",x*y , "\n")
    }
      cat("\n")
  }
}

i <- c(2:9) # 단 수 지정
j <- c(1:9) # 단 수와 곱해지는 수 지정 

gugudan(i,j)

출력값 : 
== 2 단 ==
2 x 1 = 2 
2 x 2 = 4 
2 x 3 = 6 
2 x 4 = 8 
2 x 5 = 10 
2 x 6 = 12 
2 x 7 = 14 
2 x 8 = 16 
2 x 9 = 18 

== 3 단 ==
3 x 1 = 3 
3 x 2 = 6 
3 x 3 = 9 
3 x 4 = 12 
3 x 5 = 15 
3 x 6 = 18 
3 x 7 = 21 
3 x 8 = 24 
3 x 9 = 27 

== 4 단 ==
4 x 1 = 4 
4 x 2 = 8 
4 x 3 = 12 
4 x 4 = 16 
4 x 5 = 20 
4 x 6 = 24 
4 x 7 = 28 
4 x 8 = 32 
4 x 9 = 36 

== 5 단 ==
5 x 1 = 5 
5 x 2 = 10 
5 x 3 = 15 
5 x 4 = 20 
5 x 5 = 25 
5 x 6 = 30 
5 x 7 = 35 
5 x 8 = 40 
5 x 9 = 45 

== 6 단 ==
6 x 1 = 6 
6 x 2 = 12 
6 x 3 = 18 
6 x 4 = 24 
6 x 5 = 30 
6 x 6 = 36 
6 x 7 = 42 
6 x 8 = 48 
6 x 9 = 54 

== 7 단 ==
7 x 1 = 7 
7 x 2 = 14 
7 x 3 = 21 
7 x 4 = 28 
7 x 5 = 35 
7 x 6 = 42 
7 x 7 = 49 
7 x 8 = 56 
7 x 9 = 63 

== 8 단 ==
8 x 1 = 8 
8 x 2 = 16 
8 x 3 = 24 
8 x 4 = 32 
8 x 5 = 40 
8 x 6 = 48 
8 x 7 = 56 
8 x 8 = 64 
8 x 9 = 72 

== 9 단 ==
9 x 1 = 9 
9 x 2 = 18 
9 x 3 = 27 
9 x 4 = 36 
9 x 5 = 45 
9 x 6 = 54 
9 x 7 = 63 
9 x 8 = 72 
9 x 9 = 81 

 

 

결측치(NA=유효하지 않은값) 데이터 처리

data <- c(10,20,5,4,40,7,NA,6,3,NA,2,NA)
data
출력값 : [1] 10 20  5  4 40  7 NA  6  3 NA  2 NA

mean(data)
출력값 : [1] NA

mean(data, na.rm = T) # na.rm : NA의 값을 지우고 계산. 
출력값: [1] 10.77778

- NA : 결과 값이 1개라도 NA가 존재한다면 NA로 출력합니다. (NA = 유효하지 않은 값)


- 평균뿐 아니라 수식으로 계산되어지는 결과값은 NA가 출력합니다.

 

- 통계학및 연산과 관련된 수식 대부분의 함수는 매개변수로 na.rm 를 가지고 있습니다.

  ( na.rm : NA의 값을 지우고 계산 )

 

 

예제 ①

# 결측치 데이터 처리 함수

na <- function(x){
  # 1차: NA제거 
    print(x)
    print(mean(x, na.rm = T)) # na 항목을 제외하고 평균값 출력. 
    
  # 2차: NA를 0으로 대체 (데이터의 개수가 적을 때 사용)
    data <- ifelse(!is.na(x),x,0)  # is.na 결과가 T = 입력값 NA , NA 이면 0으로 대체 
    print(x)
    print(mean(data))
    
  # 3차: NA를 평균으로 대체 
    data2 <- ifelse(!is.na(x),x,round(mean(x, na.rm = T),2)) 
    # x,mean(x, na.rm = T) , 소수점 이하 5~6자리까지 출력
    # rounb 를 활용하여 소수점 이하 2자리까지만 출력
    
    print(data2)
    print(mean(data2))
      }

na(data)

 출력값 : 

 1차: NA제거 
 [1] 10 20  5  4 40  7 NA  6  3 NA  2 NA
 [1] 10.77778

 2차: NA를 0으로 대체
 [1] 10 20  5  4 40  7 NA  6  3 NA  2 NA
 [1] 8.083333

 3차: NA를 평균으로 대체
 [1] 10.00 20.00  5.00  4.00 40.00  7.00 10.78  6.00  3.00 10.78  2.00 10.78
 [1] 10.77833

결측치를 무조건 제거하면 정화한 통계량을 얻을 수 없으며, 데이터가 손실될 수 있습니다.

 

'빅데이터 > R' 카테고리의 다른 글

[R] 이산변수 시각화  (0) 2020.07.01
[R] 주요 내장 함수  (0) 2020.07.01
[R] 반복문 (for 문, while문)  (0) 2020.06.30
[R] 조건문 ( if 문, ifelse문 , swich문 , which문 )  (0) 2020.06.29
[R] 연산자  (0) 2020.06.27

반복문에는 크게 for 문 while 문 으로 나뉩니다.

 

차이점을 알아보자면 for 문은 입력된 벡터의 길이만큼 반복하는 반면, while 문은 조건에 따라 반복하게 됩니다.

 

이로 인해 while 문은 반복횟수를 정확히 모를 때 사용하면 편리합니다.

 

 

 

1)  반복문 - for

 

for(변수 in 값){표현식} - 단일문 { } 생략 가능

 

- for문은 기본적으로 벡터를 주고, 벡터의 첫번째 값부터 마지막 값까지, 순서대로 실행하는 구문입니다.

 

예제 ①

i <- c(1:10)
i 

결과값 : [1]  1  2  3  4  5  6  7  8  9 10

d <- numeric() :  d변수를 numeric으로 setting , 빈 vector(숫자)

for(n in i){       : 10회 반복
  print (n*10)
  print (n)
  d[n] <- n*2
}  

결과값 : 
[1] 10
[1] 1
[1] 20
[1] 2
[1] 30
[1] 3
[1] 40
[1] 4
[1] 50
[1] 5
[1] 60
[1] 6
[1] 70
[1] 7
[1] 80
[1] 8
[1] 90
[1] 9
[1] 100
[1] 10

d
결과값 : [1]  2  4  6  8 10 12 14 16 18 20

 

예제 ②

for(n in i){
  if(n %% 2!=0){
    print(n) # %% : 나머지 값 - 홀수만 출력. 
  }
}

출력값: 
[1] 1
[1] 3
[1] 5
[1] 7
[1] 9


for(n in i){
  if(n %% 2==0){
    print(n) # %% : 나머지 값 - 짝수만 출력. 
  }
}

출력값:
[1] 2
[1] 4
[1] 6
[1] 8
[1] 10

 

예제 ③

next :  다음 문장장 skip 하고 for문으로 올라가서 수행하라 -> 반복문 계속 (자바의 continue 키워드와 동일.)

for(n in i){ # 결과적으로 홀수값만 출력.  - java의 for, each 문과 동일 
  if(n %% 2==0){
    next 
  }else{
    print(n) # %% : 나머지 값 - 홀수만 출력
  }
}

결과값: 
[1] 1
[1] 3
[1] 5
[1] 7
[1] 9

 

예제 ④

- 벡터 데이터 사용

score <- c(85,95,98)
name <- c("홍길동" , "이순신" , "강감찬")
i <- 1 # 첨자로 사용되는 변수 
for(s in score){
  cat(name[i],"->" , s, "\n")
  i <- i+1
}

출력값:
홍길동 -> 85 
이순신 -> 95 
강감찬 -> 98

 

 

2) 반복문 - while

 

(logical 값){ }

 

- while 문의 경우 앞에서 설명드린 것처럼, 주어진 조건에 따라서 반복하게 됩니다.

- 무한반복 되지 않도록 만들어야 합니다. 

 

예제 ①

- while 구문을 활용한 간단한 예제

i = 0

while(i < 10){
  i <- i+1
  print(i)
}

출력값:
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10

'빅데이터 > R' 카테고리의 다른 글

[R] 주요 내장 함수  (0) 2020.07.01
[R] 사용자 정의 함수  (0) 2020.06.30
[R] 조건문 ( if 문, ifelse문 , swich문 , which문 )  (0) 2020.06.29
[R] 연산자  (0) 2020.06.27
[R] 데이터 출력 , 저장하기  (0) 2020.06.27

조건문이란?

: 조건문이란 말그대로 지정한 조건에 해당할 때, 코드를 수행하는 구문을 의미합니다. 이를 활용하여 원하는 데이터를 출력 또는 연산할 수 있으며,  조건문 안에 들어가는 값은 논리값으로 입력합니다.

 

 

 1) if문

: if ( 조건문 : 반환값은 T / F ) {조건을 만족할 때 수행할 코드 }

 

- 장점 : 문장 출려과 다른 명령어 수행을 할 수 있습니다.

- 단점 : 벡터 연산이 불가하고 하나의 조건에 대해서만 검사가 가능합나다.

 

조건문은 크게 if문, ifelse문으로 존재합니다. 이때 else는, 조건을 확장시키는 역할을 하게 됩니다.

첫번째 조건이 만족하지 않으면 if 조건문 밖으로 탈출하게 되는데, 이후 else문을 만나게 되면 (즉, 이외의 조건에서) 이때의 코드를 수행하게 됩니다.

if(조건식){ 산술/비교/논리 연산자 
    실행문1 <- 참
}else{
    실행문1 <- 거짓
}

 

if문 활용 예제) 학점 구하기

score <- scan()
score

if(score >= 90){ # 조건식1
  result = "A학점"
}else if(score >= 80){ # 조건식1
  result = "B학점"
}else if(score >= 70){ # 조건식2
  result = "C학점"
}else if(score >= 60){ # 조건식3
  result = "D학점"
}else{
  result = "F학점"
}

cat("당신의 학점은 ", result) # 당신의 학점은?
print(result)

 

 

 

2) ifelse문

: ifelse(조건, 참, 거짓) - 3항 연산자 기능, 특정 조건을 통해서 간단히 전처리 할 수 있습니다.

 

조건을 제시하고 해당할 때의 반환값, 해당하지 않을 때의 반환값을 순서대로 한줄로 구현 가능한 장점이 있습니다.

추가 장점 : 벡터 연산(각 요서별 조건 검사)이 가능하빈다.

단점 : 주어진 값에 따라 yes or no 를 반환해주고, 리턴값만 반환하기 때문에 오직 출력만 가능하고 조건별 수행이 불가합니다.

 

ifelse문 예제1)

score <- c(78,95,85,65)
score
ifelse(score >= 80, "우수" , "노력")

결과값 :  "노력" "우수" "우수" "노력"

 

 

 

3) swich문 

  swich(비교구문, 실행구문1, 실행구문2, 실행구문3...) 원하는 값을 읽어옵니다.

 

예제를 통해서 바로 보여드리겠습니다.

 

① 예제

switch("name", id="hong", pwd="1234", age=25, name="홍길동") 결과값 :  홍길동
switch("pwd", id="hong", pwd="1234", age=25, name="홍길동") 결과값 :  1234

 

② 예제

empname <- scan(what = "")
empname - kang 입력 

switch(empname, hong=250, lee=350, kim=200, kang=400)

결과값 : 400

 

 

 

4) which 문

- which()의 괄호내의 조건에 해당하는 위치(인텍스)를 출력합니다.

- 벡터에서 사용 -> index 값 리턴

예제 ①

name <- c("kim" , "lee" , "choi" , "park")
which(name == "choi") 

결과값 : 3(index) <3번째 자리> 

 

예제 ②

 - 데이터프레임에서 사용 (서로 다른 자료형)

no <- c(1:5) # 1~5 
name <- c("홍길동" , "이순신" , "강감찬" , "유관순", "김유신")
score <- c(85,78,89,90,74)

exam <- data.frame(학번 = no, 이름 = name, 성적 = score)
exam

결과값) 

    학번 이름   성적
1    1  홍길동   85
2    2  이순신   78
3    3  강감찬   89
4    4  유관순   90
5    5  김유신   74

which(exam$이름 == "유관순")  결과값 = 4 <4번째 저장> 

exam[4,] 

결과값)

 학번   이름  성적
  4    유관순  90

 

 

'빅데이터 > R' 카테고리의 다른 글

[R] 사용자 정의 함수  (0) 2020.06.30
[R] 반복문 (for 문, while문)  (0) 2020.06.30
[R] 연산자  (0) 2020.06.27
[R] 데이터 출력 , 저장하기  (0) 2020.06.27
[R] 데이터 입력  (0) 2020.06.25

1, 산술연산자 ( +(덧셈) , -(뺄샘) , *(곱셈) , /(나눗셈) , %%(나머지), ^(제곱)

num1 <- 100 # 피연산자1
num2 <- 20  # 피연산자2

result <- num1 + num2  # 덧셈

result <- num1 - num2  # 뺄셈

result <- num1 * num2  # 곱셈

result <- num1 / num2  # 나눗셈


result <- num1 %% num2  # 나머지 연산자 - java와 다름 


result <- num1^2   # 제곱연산자(num1 ** 2)

result <- num1^num2   # 100의 20승(10의 40승과 동일한 결과)
result   # [1] 1e+40 -> 1 * 10^40 e표기법 동일하게 사용. 

 

 

2. 비교(관계) 연산자

 

(1) 동등비교 ( == , != )

boolean <- num1 == num2 # 두 변수의 값이 같은지 비교 

boolean <- num1 != num2 # 두 변수의 값이 다른지 비교 

 

(2) 크기비교 ( > , < , >= , <= )

(num1 기준) 

boolean <- num1 > num2 : 크다 

boolean <- num1 >= num2 : 크거나 같다

boolean <- num1 < num2 : 작다 

boolean <- num1 <= num2 : 작거나 같아

 

3. 논리연산자  ( |, & )

num1 <- 100 # 피연산자1
num2 <- 20  # 피연산자2

# AND
logical <- num1 >= 50 & num2 <= 10
logical # F


# OR
logical <- num1 >= 50 | num2 <= 10
logical # T


#(xor FF = F, FT = T, TF = T, TT = F)
x <- TRUE; y <- FALSE
xor(x, y) # T 

x <- TRUE; y <- TRUE
xor(x, y) # F


#logical = T/F 출력
logical <- num1 >= 50
logical # TRUE


# ! = Not
logical <- !(num1 >= 50)
logical # FLASE

 

 

 

'빅데이터 > R' 카테고리의 다른 글

[R] 반복문 (for 문, while문)  (0) 2020.06.30
[R] 조건문 ( if 문, ifelse문 , swich문 , which문 )  (0) 2020.06.29
[R] 데이터 출력 , 저장하기  (0) 2020.06.27
[R] 데이터 입력  (0) 2020.06.25
[R] 문자열 처리  (0) 2020.06.25

데이터 출력

 

1. Cat()  함수

 

java의 system.out.println(); 의 기능과 같은 기능을 수행합니다.

 

 

 

2.Print() 함수

print(z) # 변수 또는 수식만 가능

Rstudio를 이용하면 바로 출력 해주기 때문에 print() 함수를 사용할 필요 없습니다.

문자열과 함께 출력할 때는 cat()을 사용합니다.

 

 

 

파일에 데이터 저장

 

1.sink() 함수를 이용한 파일 저장

 

 

sink() 함수를 이용 파일 저장 순서

 

1) swtwd 를 활용하여 현재 작업디텍토리 확인/ 폴더를 생성

2) sink (" 파일명 ") 저장할 파일명

3) 파일명 <- read.xlsx(file.choose(), sheetIndex=1, encording = "UTF-8"

 -  파일에 출력 되는 값이 화면에 나타나지 않고 파일에 저장됩니다.

4) sink - 해제

 

 

 

2. read,table() 함수 이용 파일 저장

= 탐색기를 이용하여 데이터 가져오기

 

1) 패키지 설치와 java 실행환결 설정

 

2) read.xlsx 로 파일을 읽어와  studentx에 저장

 

3) write.table 활용하여 파일 생성

 

 

 

3. write.xlsx() 함수 이용 파일 저장 - 엑셀 파일 저장

 

1)  패키지 설치와 java 실행환결 설정

 

2) read.xlsx 활용하여 읽어오기

 

3) write.xlsx 활용 하여 저장

 

 

4. write.csv() 함수 이용 파일 저장

- data.frame 형식의 데이터를 csv 형식으로 저장합니다.

 

 

'빅데이터 > R' 카테고리의 다른 글

[R] 조건문 ( if 문, ifelse문 , swich문 , which문 )  (0) 2020.06.29
[R] 연산자  (0) 2020.06.27
[R] 데이터 입력  (0) 2020.06.25
[R] 문자열 처리  (0) 2020.06.25
[R] 주요 자료 구조(객체 타입 Part_5 : data.frame구조)  (0) 2020.06.25

+ Recent posts