레이블이 R기초인 게시물을 표시합니다. 모든 게시물 표시
레이블이 R기초인 게시물을 표시합니다. 모든 게시물 표시

행렬(matrix)와 배열(array) 을 이용한 R 적용

 R에서 행렬(matrix)와  배열(array)를 쓰는 이유는 연산 속도의 사유로 많이 사용하게 된다.  dataframe으로 된  데이터 셋을 연산하게 되면 속도가 매우 느린 현상이 발생 하게 된다.   R에서 멀티코어 코딩을 하려면,  반드시 알고 넘어가야 하는 것이 행렬(matrix)와 배열(array)이다. 

집합 union(합집합), intersect(교집합), setdiff(차집합) 계산

  R에서 vector union(합집합), intersect(교집합), setdiff(차집합)은 실무에서는 데이터 기준을 세우고 돌릴때,  사용이 많이 된다.   벡터를 추가 하거나,  필요한 것만 불러 올 경우에는 집합 계산을 할 수 있다. 


포아송(Poisson) 분포 이론 및 R 예제

일반적으로 매우 회귀하여 일어날 확률이 아주 작은 경우에 포아송(Poisson) 분포를 사용한다. 예를 들어 고속도로 상에서 하루동안 발생하는 교통사고에 의한 사망자수, 어느 집에 한 시간 동안 걸려 오는 전화 통화수, 1주일간 어떤 동사무소에 접수되는 사망신고수, 하루동안 정전되는 횟수 등과 같이 회귀한 사건의 수를 확률 변수로 할때 이다.

구체적으로 포아송 분포가 적용되기 위해서는 다음의 가정을 만족하여야 한다.

  1. 독립성 : 한 단위 시간이나 공간에서 출현하는 성공횟수와 중복되지 않는 다른 단위 시간이나 공간에서 출현하는 성공횟수는 서로 독립이다.
  2. 비집략성 : 극히 작은 시간이나 공간에서 둘 또는 그 이상의 성공이 같이 일어날 확률은 매우 작으며 0으로 간주된다.
  3. 비례성 : 단위 시간이나 공간에서 성공의 평균출현횟수는 일정하며, 이는 시간이나 공간에 따라 변하지 않는다.

확률 분포 X가 위의 세가지 조건을 만족 할때, 성공의 평균출현 횟수를 m이라고 하고 하면 X의 확률 분포는 다음의 포아송 분포를 따른다.

unique와 duplicated의 차이 이해

실무에서는 unique와 duplicated는 많이 사용하는 데이터 이다.  예를 들어 부동산의 구별로 평당 가격 추세를 그리는 데이터셋을 정리하기 위한 함수를 그릴때, unique를 이용하고, duplicated는 데이터를 취합 할때, 중복이 없는지 확인 한다.   실무에서 데이터 전처리 하거라 모델을 사용할때 많이 사용하므로,  R을 진입 할때는 반드시 알고 넘어가야 한다. 

R(Rstudio) 에서 정렬, 순위, 순서, 정하기

   정렬, 순위, 순서 중  실무에서 가장 많이 하는 것이 정렬이다.  R에서는 데이터의 성격을 미리 보자고 할 때, 사용을 한다.  주식의 시세의 차이를 계산 하다든지 증감율을 계산을 하고 싶다면 반드시 해야하는 것이 정렬이다. 

  house 데이터 셋은 아래 링크와 같이 있다. 

https://drive.google.com/file/d/17bjJDtn8r8SazhUCE5N_WwKPZosuvm3m/view?usp=sharing


그룹 요약 통계집계함수 aggregate, tapply 병렬 최소최대값 pmin,pmax 2020년 , 2021년 20 대 대기업 연봉 변동

  그룹 요약 집계 함수는  대부분 dplyr의 group_by(변수명), summarise() 연산 할 수 있다.  하지만,  우리가 데이터를 분석하기 전에,  미리 간단하게 내용을 보고자 할 때는, Rbase 함수가 보다 간단하게 쓰일 경우가 있다.    20대 대기업 연봉 변동도, 아래 예제와 같이  aggregate, tapply 함수 ggplot2 그래프롤 그리면,  여러가지 인사이트를 얻을 수 있다. 


tapply function 함수로 평균 합계 구하기 , ggplot2로 시계열 그래프 예제

   apply family는 원래 R에서 처음 사용자에게는 넘기 힘든 벽이나,  마찮가지 이다.  하지만,  데이터의 형태를 쉽게 알기 위해 tapply를 만들었는데,  객체지향 프로그램을 잘 다루어 본 사람을 잘 아는데,  그렇지 않은 사람은 이해하기 어려울 수 있다. 

참고로 아래 분석에 사용하는 데이터 셋은 아래와 같다. 

  

출산 데이터 셋 

온도 데이터 셋


aggregate 집계 함수 사용법

   네이버 지식인에서 아래와 같은 질문이 왔다. 

R프로그램 질문이여
반별 점수 합계 어케 구하나요??


반별 점수 합계

aggregate 집계 함수는  R에 내장되어 있는 함수 이다.   R에서 사용 하지만,   Mongo DB에서도 사용을 한다.  

이것은 별도의 패키지 없이 데이터 프레임만 아래와 같이 만들면 간단 하게 해결이 된다. 

# 데이터 벡터를 이용한다. 
  학생 <- c("1","2","3","4","5","6","7","8")
  반 <-as.factor(c("4","4","4","4","5","5","5","5"))
  국어점수 <-  c(98,87,56,98,68,78,68,83)
  영어점수 <- c(65,12,78,65,98,90,87,58)


# 데이터 프레임을 만든다.   
  df <- data.frame(학생, 반, 국어점수, 영어점수)

# 데이터를 붙인다.   
  attach(df)

# 반별 국어점수를 구한다.     
  aggregate(국어점수 ~ 반, data = df, sum )  

  반 국어점수
1  4      339
2  5      297
    
 여기에서 국어점수~ 반 이 있는데,  국어점수는  집계하고자 데이터이고,  반은 범주형 데이터이다. 







콤마(comma) 달린 문자형(character) 날짜형(Date) type 으로 바꾸기

 네이버 지식인에서 아래와 같이 질문이 왔다.   날짜 변환은  현업 수기 입력 데이터를 받았을때,  많이 보는 데이터이다.    실무에서는 많이 겪어보는  문제이다.  


이건은 아래와 정규화 표현식으로 간단하게 풀 수 있다.   gsub() 함수는 문자열을 변경 할때 주로 사용한다.  

하지만,  콤마는 다른 것과 다르게,  gsub(변경전, 변경후, 데이터)에서  변경전 데이터를 입력 할때,   다른것과는 다르게  "\\."을 입력 하여야 한다. 

그리고,  날짜로 변환 하려면,  as.Date 함수를 사용하여야 한다.  이것은 R의 기본 내장 함수가 있으므로 별도의 패키지가 필요하지 않다. 


질문
내공100
R 날짜변환
안녕하세요 
아래 문자열형식으로 되어있는 컬럼을 
날짜형식으로 변경하고 싶은데 
에러가 계속 나타나네요 도와주세요 ㅠㅠ 


이건은 정규화 표현식을 쓰면 아주 간단하게 풀 수 있는 문제이다. 
그럼 아래와 같이 실행 해보겠다. 

# 벡터 character type 데이터 
 > date <- c("2020.01.01" , "2020.01.02", "2020.01.03","2020.01.04")

# 데이터 정규화 표현식 사용 및 데이터 변환 
 >  date <-  as.Date(gsub("\\.", "-", date))

# 데이터 결과 보기 
> date

"2020-01-01" "2020-01-02" "2020-01-03" "2020-01-04"

벡터 함수, max,min,sum,mean,median,cor,colSoms,rowSoms

   벡터 함수는 기초적으로 알아야 하는 함수이다.    모델을 돌리기 전,  데이터 탐색을 할 때, 벡터 함수를 미리 돌려 보고,  데이터가 맞는지 검증을 하게 된다.   물론 집계할 수 있는 colSomes, rowSums와 같은 함수도 있다.   이 것에 대한 내용을 알게 되면, 향후  dplyr 에서 summarise나  mutate 에서 자유로이 계산 할 수 있는 장점을 가지고 있다. 


3.8 벡터 함수

R의 큰 장점중 하나는 반복문과 첨자 없이 전체 벡터에 대한 함수를 연산할 수 있다는 접입니다. 주요 벡터 함수는 아래 표와 같습니다. 다음 숫자 벡터를 사용해 해당 함수를 실행해 보십시오.

y<-c(8,3,5,7,6,6,8,9,2,3,9,4,10,4,11)

일부 벡터 함수는 1개의 값 만을 출력 하기도 합니다.

mean(y)
## [1] 6.333333


R에서 사용되는 벡터 함수
연산 의미
max(x) x의 최대값
min(x) x의 최소값
sum(x) 모든 x값의 합
mean(x) x의 산술평균
median(x) x의 중위수
range(x) x의 최소값과 최대값의 차이
var(x) x의 표본분산
cor(x,y) 벡터 x와 y 와 상관관계
sort(x) x 값의 정렬
rank(x) x값을 순위 벡터
order(x) 오름차순으로 x를 정렬하는 순열을 포함한 정수 벡터
quantile(x) x 값의 사분위수를 나타내는 벡터
cumsum(x) 설정된 지점까지 모든 요소의 합을 포함하는 벡터
cumprod(x) 설정된 지점까지 모든 요소의 합을 포함하는 벡터
colMeans(x) 데이터 프레임 또는 행렬 x의 열 평균
colMeans(x) 데이터 프레임 또는 행렬 x의 열 평균
colSums(x) 데이터 프레임 또는 행렬 x의 열 합계
rowMeans(x) 데이터 프레임 또는 행렬 x의 행 평균
rowSums(x) 데이터 프레임 또는 행렬 x의 행 합

2 개의 값을 생성하는 벡터 함수도 있으며 예제의 실행 결과는 최소값 2와 최대값 11일 입니다.

range(y)
## [1]  2 11

R에서 가장 유용한 벡터 함수는 table 입니다. 이 함수가 얼마나 유용한지는 실제로 사용해봐야 압니다.

아래는 벡터 counts는 10,000개의 음이항 분포를 따르는 임의의 정수 입니다.
이 값을 10,000개의 잎에 남아 있는 곰팡이 병변의 수라고 가정 합니다.

counts <- rnbinom(10000, mu=0.92, size = 1.1)

counts 벡터의 첫 30개 값은 다음과 같습니다.

counts[1:30]
##  [1] 0 0 2 1 0 0 3 0 0 0 3 1 0 0 3 4 1 0 0 0 0 0 0 1 1 2 0 0 2 1

10,000 개의 숫자로 구성된 벡터에서 각 숫자는 몇 개인가? 이 작업은 상당한 연산이 필요하지만 R을 사용하면 쉽게 계산 할 수 있습니다.

table(counts)
## counts
##    0    1    2    3    4    5    6    7    8    9   10   12   18 
## 5163 2510 1246  587  262  131   48   24   19    4    4    1    1

0은 5천개 정도 있고 , 1은 2천 개 정도가 있습니다. 데이터를 돌리때 마다 숫자는 바뀝니다.


예제 1

아래는 각 도/연도별(2001~2020) 출생 인원을 예시로 나타낸 표입니다. 출생 년도별 총 인원을 구하시고, 시/도별 2001~2020년까지 총 출생 인원과 평균인원을 구하십시오.



시/도 연도별 출생 인원
행정구역 2001 2002 2003 2004 2005 2006
서울특별시 114,764 102,008 101,227 99,828 90,468 93,922
부산광역시 35,848 30,767 30,117 28,231 25,681 25,881
대구광역시 28,111 24,260 24,513 23,259 20,804 20,360
인천광역시 30,494 26,775 26,832 25,092 23,026 23,711
광주광역시 18,198 16,036 15,954 14,729 13,327 13,679
대전광역시 17,290 15,631 15,712 15,024 13,950 14,489
울산광역시 13,600 11,666 11,720 11,151 10,469 10,740
경기도 126,264 116,854 120,433 117,812 109,533 115,111
강원도 16,873 15,314 14,349 13,776 12,657 12,455
충청북도 17,322 15,329 14,650 14,331 13,164 13,366
충청남도 21,962 19,059 18,627 18,640 17,521 18,625
전라북도 22,192 19,215 18,437 17,257 15,745 15,571
전라남도 22,588 19,242 18,333 17,256 15,818 15,905
경상북도 30,500 26,022 25,447 23,553 22,339 22,567
경상남도 36,475 32,203 32,102 30,922 28,471 29,524
제주특별자치도 7,453 6,530 6,583 6,097 5,734 5,853


아래와 링크와 같이 데이터 셋을 받고,   데이터를 로딩 합니다. 

https://docs.google.com/spreadsheets/d/1UIwxoew8zfyOkrt_ldKZDzSkaK3WiPP2/edit?usp=sharing&ouid=104041508737066115162&rtpof=true&sd=true

library(readxl)
born <- read_excel("born.xlsx")
str(born)
## tibble [16 × 21] (S3: tbl_df/tbl/data.frame)
##  $ 행정구역: chr [1:16] "서울특별시" "부산광역시" "대구광역시" "인천광역시" ...
##  $ 2001    : num [1:16] 114764 35848 28111 30494 18198 ...
##  $ 2002    : num [1:16] 102008 30767 24260 26775 16036 ...
##  $ 2003    : num [1:16] 101227 30117 24513 26832 15954 ...
##  $ 2004    : num [1:16] 99828 28231 23259 25092 14729 ...
##  $ 2005    : num [1:16] 90468 25681 20804 23026 13327 ...
##  $ 2006    : num [1:16] 93922 25881 20360 23711 13679 ...
##  $ 2007    : num [1:16] 101249 28426 22295 26712 14810 ...
##  $ 2008    : num [1:16] 94736 26670 20562 25365 13890 ...
##  $ 2009    : num [1:16] 89594 25110 19399 24379 13101 ...
##  $ 2010    : num [1:16] 93266 27415 20557 25752 13979 ...
##  $ 2011    : num [1:16] 91526 27759 20758 26118 13916 ...
##  $ 2012    : num [1:16] 93914 28673 21472 27781 14392 ...
##  $ 2013    : num [1:16] 84066 25831 19340 25560 12729 ...
##  $ 2014    : num [1:16] 83711 26190 19361 25786 12729 ...
##  $ 2015    : num [1:16] 83005 26645 19438 25491 12441 ...
##  $ 2016    : num [1:16] 75536 24906 18298 23609 11580 ...
##  $ 2017    : num [1:16] 65389 21480 15946 20445 10120 ...
##  $ 2018    : num [1:16] 58074 19152 14400 20087 9105 ...
##  $ 2019    : num [1:16] 53673 17049 13233 18522 8364 ...
##  $ 2020    : num [1:16] 47445 15058 11193 16040 7318 ...

데이터 셋을 보면 1번 컬럼은 character Type이고, 나머지는 numbering 타입입니다.
따라서 데이터를 데이터를 계산 할때는 1번 컬럼을 빼고 계산 해야 합니다. 빼는 방법은 대괄호 치고 원하는 컬럼 번호를 선택 born[2:21]하는 것입니다.

# 데이터 매트릭스로 바꾸어서 계산   
  temp <- data.frame(t(data.matrix(c("합계", colSums(born[2:21])))))

# rbind를 하기 위한 데이터 대치 
  colnames(temp) <-  colnames(born)

# rbind를 총합 한 데이터 추가   
  born <- rbind(born,temp)

데이터 계산을 할때, data.matrix에 첫번째 컬럼을 character로 넣고, 나머지는 컬럼을 계산 합니다. 그리고, 데이터가 세로로 만들어 지기 때문에, 이것을 가로로 만들어야 합니다. 이것을 계산할때 전치행렬 t(transpose)를 해야 합니다.data.matrix를 계산하고나면 컬럼 이름이 원래 이름과 다르기 때문에, born 데이터 프레임의 이름을 가져와서, data.matrix로 바꾼 것에다 다시 컬럼 명을 넣어 주어야 합니다.

데이터 계산이 끝나면, 계산한 데이터가 charater로 바뀌었기 때문에, 데이터 타입을 integer로 바꾸어야 합니다.

library(dplyr)
# 데이터 타입을 바꾸기   
  born <- born %>%  mutate_at(c(2:21), as.integer)

데이터 타입을 바꾸고 나면 rowSums() 열을 계산합니다. 열은 dplyr 패키지로 아주 간단하게 계산이 됩니다.

# 지역별 출산 합계
  born <-  born %>% 
    mutate(출산합계 = rowSums(born[2:21]))
  
# 지역별 출산 평균  
  born <- born %>% 
    mutate(출산평균 = rowMeans(born[2:21]))
  
  head(born)
## # A tibble: 6 × 23
##   행정구역 `2001` `2002` `2003` `2004` `2005` `2006` `2007` `2008` `2009` `2010`
##   <chr>     <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>
## 1 서울특…  114764 102008 101227  99828  90468  93922 101249  94736  89594  93266
## 2 부산광…   35848  30767  30117  28231  25681  25881  28426  26670  25110  27415
## 3 대구광…   28111  24260  24513  23259  20804  20360  22295  20562  19399  20557
## 4 인천광…   30494  26775  26832  25092  23026  23711  26712  25365  24379  25752
## 5 광주광…   18198  16036  15954  14729  13327  13679  14810  13890  13101  13979
## 6 대전광…   17290  15631  15712  15024  13950  14489  15780  14856  13915  14314
## # … with 12 more variables: `2011` <int>, `2012` <int>, `2013` <int>,
## #   `2014` <int>, `2015` <int>, `2016` <int>, `2017` <int>, `2018` <int>,
## #   `2019` <int>, `2020` <int>, 출산합계 <dbl>, 출산평균 <dbl>

벡터(vector) 와 첨자(subscript) , 벡터에서 위치(which) 및 연산 (max, min)

   벡터의 첨자 즉 괄호 계산은  처음 코딩 할때나 배울때,  어디에 쓰는지 알 수 없다.  하지만, 이것에 대한 기본을  알게 되면,  데이터 분석이나, 데이터를  정리 할때,  매우 유용하다.  R 프로그램 코딩 5년이 되어 가지만,  이것에 대한 사용을 알고 나서 앞으로 코딩 할때,  많은 도움이 되리라는 생각 이든다. 

결측치 무한대, infinite, NA,iflese 계산 하기

   일반적인 교육용 데이터는  infinite, NA 값이 거의 나오지 않는다. 이미 모형을 설명하기 위해 모든 데이터는 잘 정리되어 있기 때문이다.  하지만,  현업에서 실무 할때는 이런 값들이 많이 나타 나게 된다.    

  즉 사람이 데이터 입력을 잘못 시켰거나,  데이터를 입력 하지 않은 건,  즉 데이터를 다룰때 문제가 되는 데이터는  전체의 1~3%의 가 나타난다.  이것도 사람마다 다르고,  상황 마다 다르다.  하지만 R에서 모형을 잘 다루기 위해서는 이 부분에 대해서 잘 다루어야 한다. 

멤버십: R에서 테스팅과 강제 형변환 as.charater, as.factor, as.integer

     DB에서 데이터를 받든 엑셀로 데이터를 받으면,   데이터의 성질을 본다. 데이터 성질 본다음에 나는  as.charater, as.factor, as.integer  등  문자,  숫자,  범주형 데이터로 바꾼다.   나중에 머신러닝을 하던 데이터 취합을 하든,  데이터의 성질을 잘 파악하고, 형 변환을 잘해야,  향후 데이터 관리 상의 혼란이 없다. 

R 수열 ( seq, rep, 요인) 수준 생성

  R의 가장 기초적인 부분은 seq(수열), req(반복)을 주로 다루겠다. 

R실무 할 때,  상상 외로,  기초 부분을 많이 다룬다.   하지만,   대부분의 사람들을  기초를 배우는데도 불구하고, 실무에서는 어디에 사용하는지 모르고,  접근 하는 경우가 매우 많다.  아래는 기초적인 내용과,  실무 사례의 예를 들어서 설명 할 예정 이다. 

논리연산자 AND, OR R , if 문 과 for 문 사용법과 dplyr 사용법 비교

  논리연산자 AND,OR는  실무에서 많이 쓰이는 방법이다.  R을 처음 시작 하는 컴퓨터 프로그래머는 for문을 많이 사용한다.  하지만 R에서 for문은 속도 측면에서 최악이다.   그리고 AND, OR, IF 문도 for문을 돌리지 않고 dplyr에서 간단하게 사용할 수 있다. 


R 변수, 정수, 요인 범주형 변수 머신러닝 범주형 예측셋 구성

 R에서 변수, 정수, 요인(범주형) 변수를 안다는 것은  회귀분석이나,  머신러닝 실행 할때, 어떻게 구성 해야 하는지 아는 것과 같다.  실무에서는  예측셋(Predictive value :Categorical variable)인 경우가 많이 있으므로, 특히  이 부분을 잘 알고 넘어가면 앞으로 분석하는 데이터셋 만드는데,  도움이 많이 된다. 

아래는 데이터 셋 링크 이다.   

https://docs.google.com/spreadsheets/d/1ObRG0V7MkW3PgZqXPe-ITCbV909u8H1F/edit?usp=sharing&ouid=104041508737066115162&rtpof=true&sd=true

https://docs.google.com/spreadsheets/d/1s3ToVEBnAGMyYMM2fMcHaJZcJKx-5CyA/edit?usp=sharing&ouid=104041508737066115162&rtpof=true&sd=true

https://docs.google.com/spreadsheets/d/1s3ToVEBnAGMyYMM2fMcHaJZcJKx-5CyA/edit?usp=sharing&ouid=104041508737066115162&rtpof=true&sd=true


R 언어의 기초 계산 sqrt, sin, exp 지수 및 반올림 등 일반적인 함수 계산

 

3장. R 언어의 기초

R의 Package가 CRAN 아카이브 네트워크에 등록된 CRAN available packages가 18,994 건에 이룰 정도로 많이 있습니다. 하지만 많은 만큼 자신에게 필요로 하는 법을 찾는 것입니다. 사람마다 배우고 싶어 하는 부분이 다르기 때문에 R을 학습하기 위해 정해진 순서는 없습니다. 여러가지 계산법 중에서 자주 사용하는 기능만 별도로 정했습니다.

Rstudio 사용법 및 기본세팅 방법

  Rstudio는 2009년에 개발 되었고,  처음 안 것은 2017년도 되었다.   어찌 되었던  학부에서 통계학을 배우고 있을 때는 2000년대 였으니,  콘솔을 사용한 R을 사용하였는데,  데이터 읽어 오는데,  많이 고생한 기억이 난다.    Rstudio의  R의 통합 개발 툴이 나오면서,  개발의 편리성을 가져다 주었다.  

R기초 R의 공헌자 및 함수 그리고, 함수 예제 보기

이건은  R을 처음 시작 하는 사람을 위한 것이고,  가장 기초적인 것을 나타낸다. 하지만,  R은 기초가 조금 어려운 부분이 있다.   기초 적인 부분이 잘 정리 되면, R은 쉽게 접근 할 수 있다. 

R에서 날짜 간격을 구하는 법

 R에서 날짜 간격을 구하는 일은 아주 많은데,   구하는 방법은 잘 알려져 있지 않다.  그래서 아래와 같이 날짜 간격을 구하고자 한다. 

만약에 "2022-03-01"과  "2021-12-03"의 날짜 간격을 구하고자 할 때  주/일/시간은 구하기 어렵지 않다. 

css cheat sheet 클래스 선택자, margin(마진), display , center 조정 간단한 구성 요소

 앞에서는 html의 간단한 sheet를 소개 하였습니다.   html은  주로 골격을 나타나는 것이라, 디자인을 하는데는 css로 하여야 합니다.  아래 코드와 같이 css 관련 하여 매우 간단하게 코딩 하겠습니다.  body 부분의 css 코딩  ...