R:팁: 두 판 사이의 차이
잔글편집 요약 없음 |
잔글 (→데이터 다루기 전략) |
||
(같은 사용자의 중간 판 9개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
{{R}} | {{R}} | ||
==데이터 다루기 전략== | |||
데이터를 다룰 땐 절대 raw 데이터를 건드리지 않는다. 항상 복사해 두고 진행하는 게 나중을 위해 좋다. | |||
== | 사소한 차이에서 오류가 발생하는 경우가 많다. 분석을 시작할 땐 as.data.frame 등을 꼭 적용해 시작하는 습관을 들이자. | ||
===관련함수=== | |||
{| class="wikitable" | {| class="wikitable" | ||
!이름 | !이름 | ||
!기원 | !기원 | ||
!기능 | !기능 | ||
!사용법 | !사용법 | ||
|- | |- | ||
|sample() | |sample() | ||
|sample | |sample | ||
|데이터가 너무 방대해 계산이 오래걸리는 경우. | |데이터가 너무 방대해 계산이 오래걸리는 경우. | ||
무작위 추출로 연산을 줄인다. | 무작위 추출로 연산을 줄인다. | ||
|sample(추출범위, 추출갯수, 복원추출여부) | |sample(추출범위, 추출갯수, 복원추출여부) | ||
sample(2:30, 4, replace=False) | sample(2:30, 4, replace=False) | ||
False인 경우, 비복원추출을 하겠다는 것. | False인 경우, 비복원추출을 하겠다는 것. | ||
|- | |- | ||
|seed() | |seed() | ||
| | | | ||
|무작위 결과값을 고정시켜야 할 때. | |무작위 결과값을 고정시켜야 할 때. | ||
|set.seed(아무숫자) | |set.seed(아무숫자) | ||
숫자에 무작위 결과값이 저장된다. | 숫자에 무작위 결과값이 저장된다. | ||
|}< | |||
|} | |||
==GUI로 보기== | |||
===data editor. 자료편집기.=== | |||
스프레드시트 형태의 데이터 편집기다. | |||
R concole에서 편집>데이터 편집기를 선택하거나 fix(데이터셋), edit(데이터셋)을 명령으로 실행하면 된다. | |||
====입력방법==== | |||
데이터셋 <- edit(data.frame()) 을 명령한 후 자료입력하고 저장하면 데이터셋에 자료가 입력된다. | |||
==이상치(outlier) 다루기== | |||
전체 데이터를 요란시키는 괴상한 데이터. 일반적으로 1분위수와 3분위수 차이의 1.5배만큼 커다랗게 벗어난 값을 이상치라 부른다. | |||
{| class="wikitable" | |||
|+이상치를 구하는 과정 | |||
! | |||
! | |||
|- | |||
|분위수 구하기 | |||
|1분위수, Q1=quntile(데이터, probs=c(0.25), na.rm=True) | |||
3분위수, Q3=quntile(데이터, probs=c(0.75), na.rm=True) | |||
|- | |||
|울타리 구하기 | |||
|LC=Q1 - 1.5*(Q3-Q1) | |||
UC=Q3 + 1.5*(Q3-Q1) | |||
|- | |||
|울타리를 넘으면 이상치 | |||
이상치를 모은 부분집합 | |||
|데이서텟 = subset(데이터셋, 데이터>LC & 데이터<UC) | |||
|} | |||
==결측치 다루기== | |||
다양한 연산들에서 결측치를 생략하고 계산하고자 한다면 뒤에 <code>na.rm=True</code>를 붙여주면 된다. ex) <code>sum(데이터셋[범위], na.rm=True)</code> | |||
결측치가 포함된 연산은 결과를 NA로 내버리곤 한다; 이런 경우 위의 na.rm=True를 포함하여 계산함수를직접 만들어주어 오류를 피해가야 한다. | |||
{| class="wikitable" | |||
!의도 | |||
!방법 | |||
! | |||
|- | |||
|열별 결측치 카운팅 | |||
|colSums(is.na(데이터셋)) | |||
| | |||
|- | |||
|결측치가 들어간 행 지우기 | |||
|데이터셋 = na.omit(데이터셋) | |||
|그러나, 결측치 비율이 상당할 경우 위험한 작업이다. | |||
|- | |||
|특정 데이터에 결측치가 들어간 경우 삭제 | |||
|<code>데이터셋 = 데이터셋[complete.cases(데이터셋[범위]), ]</code> | |||
| | |||
|- | |||
|결측치에 일정 값 부여 | |||
|데이터[is.na(데이터)] = 일정값 | |||
|일반적으로 연속형변수의 경우, 평균으로 대체하고, | |||
이산현병순의 경우, 최빈값으로 대체한다. | |||
|} | |||
==중복값 제거하기== | |||
중복데이터를 제거해야 한다. 하나하나 지우기는 너무 어려우니까.. | |||
{| class="wikitable" | |||
!이름 | |||
!기원 | |||
!기능 | |||
!사용법 | |||
|- | |||
|unique() | |||
|unique | |||
|1차원 벡터의 경우 사용한다. | |||
|unique(벡터) | |||
|- | |||
| rowspan="3" |duplicate() | |||
| rowspan="3" | | |||
|2차원 이상일 때. 기본적으로 맨 위의 값을 살려두고 다음에 등장하는 것부터 지운다. | |||
하나라도 같은 항목이 있으면 지운다.(비추천) | |||
|<code>새로운데이터셋 = 데이터셋[-which(duplicated(데이터셋)), ]</code> | |||
|- | |||
|해당 열 안에서 중복되면 지운다. | |||
|<code>새로운데이터셋 = 데이터셋[-which(duplicated(데이터셋$열이름1)), ]</code> | |||
|- | |||
|고려해야 하는 변수가 여러개일 때. | |||
열이름 대신 열 번호를 사용해도 된다. | |||
|<code>새로운데이터셋 = 데이터셋[!(duplicated(데이터셋[ , c('열이름1', '열이름2', ...)]), ]</code> | |||
|} | |||
==워킹 디렉터리 바꾸기== | |||
setwd("C:/주소/") 로 변경한다. | |||
== 코드 실행시간 검사하기 == | |||
tictoc::tic() | |||
측정할 코드 위에 붙여서 코드실행이 얼마나 걸리는지 보여준다.(틱이 나오고 톡이 나올 때까지의 시간) | |||
==인코딩 에러== | |||
Not all characters in 주소 could be decoded using CP949. To try a different encoding, choose "File | Reopen with Encoding..." from the main menu. | |||
{| class="wikitable" | |||
|+ | |||
!항목 | |||
!설명 | |||
|- | |||
|원인 | |||
|맥이나 리눅스에서 UTF-8로 인코딩된 파일이 windows로 건너올 때 디폴트 인코딩이 다른 것으로 되어있기 때문. | |||
|- | |||
|해결 | |||
|RStudio를 쓴다면 File>Reopen with Encoding 에서 UTF-8을 지정해주면 간단히 해결된다. | |||
코드에서 읽어오는 경우라면 encoding="UTF-8" 옵션을 주면 된다. | |||
|} |
2020년 9월 24일 (목) 21:20 기준 최신판
R언어 공부를 위한 틀 틀:R
데이터 다루기 전략[편집 | 원본 편집]
데이터를 다룰 땐 절대 raw 데이터를 건드리지 않는다. 항상 복사해 두고 진행하는 게 나중을 위해 좋다.
사소한 차이에서 오류가 발생하는 경우가 많다. 분석을 시작할 땐 as.data.frame 등을 꼭 적용해 시작하는 습관을 들이자.
관련함수[편집 | 원본 편집]
이름 | 기원 | 기능 | 사용법 |
---|---|---|---|
sample() | sample | 데이터가 너무 방대해 계산이 오래걸리는 경우.
무작위 추출로 연산을 줄인다. |
sample(추출범위, 추출갯수, 복원추출여부)
sample(2:30, 4, replace=False)
False인 경우, 비복원추출을 하겠다는 것. |
seed() | 무작위 결과값을 고정시켜야 할 때. | set.seed(아무숫자)
숫자에 무작위 결과값이 저장된다. |
GUI로 보기[편집 | 원본 편집]
data editor. 자료편집기.[편집 | 원본 편집]
스프레드시트 형태의 데이터 편집기다.
R concole에서 편집>데이터 편집기를 선택하거나 fix(데이터셋), edit(데이터셋)을 명령으로 실행하면 된다.
입력방법[편집 | 원본 편집]
데이터셋 <- edit(data.frame()) 을 명령한 후 자료입력하고 저장하면 데이터셋에 자료가 입력된다.
이상치(outlier) 다루기[편집 | 원본 편집]
전체 데이터를 요란시키는 괴상한 데이터. 일반적으로 1분위수와 3분위수 차이의 1.5배만큼 커다랗게 벗어난 값을 이상치라 부른다.
분위수 구하기 | 1분위수, Q1=quntile(데이터, probs=c(0.25), na.rm=True)
3분위수, Q3=quntile(데이터, probs=c(0.75), na.rm=True) |
울타리 구하기 | LC=Q1 - 1.5*(Q3-Q1)
UC=Q3 + 1.5*(Q3-Q1) |
울타리를 넘으면 이상치
이상치를 모은 부분집합 |
데이서텟 = subset(데이터셋, 데이터>LC & 데이터<UC) |
결측치 다루기[편집 | 원본 편집]
다양한 연산들에서 결측치를 생략하고 계산하고자 한다면 뒤에 na.rm=True
를 붙여주면 된다. ex) sum(데이터셋[범위], na.rm=True)
결측치가 포함된 연산은 결과를 NA로 내버리곤 한다; 이런 경우 위의 na.rm=True를 포함하여 계산함수를직접 만들어주어 오류를 피해가야 한다.
의도 | 방법 | |
---|---|---|
열별 결측치 카운팅 | colSums(is.na(데이터셋)) | |
결측치가 들어간 행 지우기 | 데이터셋 = na.omit(데이터셋) | 그러나, 결측치 비율이 상당할 경우 위험한 작업이다. |
특정 데이터에 결측치가 들어간 경우 삭제 | 데이터셋 = 데이터셋[complete.cases(데이터셋[범위]), ]
|
|
결측치에 일정 값 부여 | 데이터[is.na(데이터)] = 일정값 | 일반적으로 연속형변수의 경우, 평균으로 대체하고,
이산현병순의 경우, 최빈값으로 대체한다. |
중복값 제거하기[편집 | 원본 편집]
중복데이터를 제거해야 한다. 하나하나 지우기는 너무 어려우니까..
이름 | 기원 | 기능 | 사용법 |
---|---|---|---|
unique() | unique | 1차원 벡터의 경우 사용한다. | unique(벡터) |
duplicate() | 2차원 이상일 때. 기본적으로 맨 위의 값을 살려두고 다음에 등장하는 것부터 지운다.
하나라도 같은 항목이 있으면 지운다.(비추천) |
새로운데이터셋 = 데이터셋[-which(duplicated(데이터셋)), ]
| |
해당 열 안에서 중복되면 지운다. | 새로운데이터셋 = 데이터셋[-which(duplicated(데이터셋$열이름1)), ]
| ||
고려해야 하는 변수가 여러개일 때.
열이름 대신 열 번호를 사용해도 된다. |
새로운데이터셋 = 데이터셋[!(duplicated(데이터셋[ , c('열이름1', '열이름2', ...)]), ]
|
워킹 디렉터리 바꾸기[편집 | 원본 편집]
setwd("C:/주소/") 로 변경한다.
코드 실행시간 검사하기[편집 | 원본 편집]
tictoc::tic()
측정할 코드 위에 붙여서 코드실행이 얼마나 걸리는지 보여준다.(틱이 나오고 톡이 나올 때까지의 시간)
인코딩 에러[편집 | 원본 편집]
Not all characters in 주소 could be decoded using CP949. To try a different encoding, choose "File | Reopen with Encoding..." from the main menu.
항목 | 설명 |
---|---|
원인 | 맥이나 리눅스에서 UTF-8로 인코딩된 파일이 windows로 건너올 때 디폴트 인코딩이 다른 것으로 되어있기 때문. |
해결 | RStudio를 쓴다면 File>Reopen with Encoding 에서 UTF-8을 지정해주면 간단히 해결된다.
코드에서 읽어오는 경우라면 encoding="UTF-8" 옵션을 주면 된다. |