IT 프로그래밍/R

R프로그래밍 공부하기

mjmjpp 2023. 11. 11. 14:19

R프로그래밍 공부하기

*스크립트 저장하기 : ctrl+s

*새 스크립트 생성: ctrl+shift+n

*R스튜디오 종료: Alt+F4

*R에서 변수를 지정할때는 가능한 <- 를 이용하기

*c()함수 – var1<-c(1,2,3)

* 콜론 :  을 연속된 숫자로 변수 만들기 가능 var2<-c(1:10)

*seq()함수 연속값을 지닌 변수 생성 -var2<-seq(1,10)

by파라미터를 이용하면 일정한 간격을 두고 연속된 숫자로 변수 생성

var4<-seq(1,10,by=2)

var4

##1 3 5 7 9

*변수와 숫자를 조합해 연산 가능/ 변수와 변수 끼리도 연산 가능

Var1<-c(1,2,5,7,8)

Var1+2

##3 4 7 9 10

Var1+var2

##2 4 8 10 11

*변수에 문자를 넣을때에는 문자앞에 따옴표를 붙여야함

문자 변수에는 하나의 문자, 여러 개의 문자로 구성된 단어, 문장을 넣을 수 있고 띄어쓰기나 특수문자 넣기가능!

C()함수를 이용하여 여러 개의 문자로 구성된 변수 생성 가능

출력된 값의 앞뒤에 따옴표가 붙어 있으면 문자로 구성된 변수라는 것을 의미

Str1<-“a”

Str1

## ”a”

Str2<-”string”

Str3<-“hello world!”

Str4<-c(“a”,”b”,”c”)

## "a" "b" "c"

*mean()함수/max()함수/min()함수

*paste()함수 여러문자를 하나로 만드는 함수 ,* collapse=”,”  문자를 쉼표로 구분한다는 뜻

*파라미터: 함수의 옵션을 설정하는 명령어, 함수들은 저마다의 기능을 설정하는 파라미터 가짐

*함수의 결과물을 새로운 변수에 집어 넣을 수 있음

X<-mean(x)

*패키지 설치하기, install.package(“”) 를 이용 패키지이름의 앞 뒤에 반드시 따옴표!!

Install.package(“ggplot2”)

*패키지 설치 후 ,패키지를 로드하기 library() 를 이용 패키지 앞에 따옴표 필요 x!

*패키지 설치 후, 로드까지 완료하면 패키지 안의 함수, 데이터를 이용할 수 있음!

*함수명 앞에 물음표를 넣어 help함수를 실행하면 매뉴얼에 함수소개, 파라미터 사용법, 예제 코드가 들어가있는 help창을 볼 수 있음

*-가로(사람에 대한 정보 보여줌,’/케이스’), -세로(속성을 나타냄, ‘칼럼/변수’)

*데이터를 입력해 데이터 프레임을 만드는 방법

1.변수만들기

2.data.frame()함수를 이용하여 데이터 프레임을 구성할 변수를 괄호 안에 쉼표로 나열하기

Or 1. data.frame()안에 변수와 값을 나열하여 한 번에 만드는 방법

df_midterm=data.frame(English=c(10,20,30),math=c(23,25,38))

*데이터 프레임안의 변수를 나타내려면 $를 이용하자!

mean(df_midterm$math)

 

 

 

* 외부에서 생성된 데이터를 불러와 분석하는 경우가 더 많다-엑셀, csv, RDS

1. 엑셀파일 불러오기

 readxl패키지에서 제공하는 read_excel()을 이용

 파일명을 지정할때는 확장자와 따옴표를 넣기!!

df_exam<-read_excel(“excel_exam.xlsx”)

프로젝트 폴더가 아닌 다른 폴더에 있는 엑셀 파일을 불러오려면 파일 경로를 지정!

df_exam<-read_excel(“d:/easy_r/excel_exam/xlsx”)

*엑셀 파일 첫번째 행이 변수명이 아니라면??-> 변수명 없이 첫번째 행부터 바로 데이터 시작

col_names=F 이용하기!!->첫번째 행을 변수명이 아닌 데이터로 인식+변수명은’…숫자로 자동지정

read_excel(“excel_exam_novar.xlsx”, col_names=F)

논리형 벡터를 이용한거! ‘열이름(column name)을 가져올 것인가?’’false’라는 대답한 것!

*엑셀 파일에 시트가 여러 개가 있다면?

sheet 파라미터를 이용해 몇번째 시트의 데이터를 불러올지 지정

read_excel(“excel_exam_novar.xlsx”, sheet=3)

2. csv 파일 불러오기

별도의 패키지를 설치하지 않고 read.csv()를 이용하여 csv파일 가져오기

df_csv_exam<- read.csv(“csv_exam.csv”)

*변수명이 없는 csv파일을 불러올때는 header=F 파라미터를 지정

*데이터 프레임을 csv파일로 저장하는 방법

write.csv() 함수 이용하기 이름은 file 파라미터 이용!-> 저장한 파일은 프로젝트 폴더에 생성

write.csv(df_midterm,file=”df_midterm.csv”)

3. RDS파일 가져오기

*데이터 프레임을 RDS파일로 저장하기

SaveRDS()함수를 이용해 데이터 프레임을 .rds 파일로 저장, RDS파일 불러올때는 readRDS()이용

saveRDS(df_midterm,file=”df_midterm.rds”)

*데이터를 삭제하는 것은 rm()함수를 이용

*as.data.frame()함수

as.data.frame(ggplot2::mpg)- ggplot2의 패키지 데이터를 데이터 프레임 형태로 불러오기

데이터 파악하기

1.head() 함수: 데이터 앞부분을 출력

head(exam,10)-앞에서부터 10행까지 출력

2.tail() 함수: 데이터 뒷부분확인하기

tail(exam,10)-뒤에서부터 10행까지 출력

3.View() 함수: 뷰어창에서 데이터 확인하기

4.dim() 함수: 데이터가 몇 행, 몇 열로 구성되어 있는지 알아보기

dim(exam)

##20 5  , 열 출력한 것, 데이터가 학생 20명에 대한 5개 변수라는 것을 보여줌

5.str() 함수 : 데이터에 들어 있는 변수의 속성을 보여준다. 관측치와 변수, 변수의 값들 나열

6.summary() 함수: 요약 통계량 산출하기. 변수의 값을 요약하여 보여줌. 변수의 특성 파악 용이

변수명 바꾸기

*dplyr패키지의 rename()을 이용해 변수명을 바꾸기

rename(데이터 프레임명, 새변수명=기존 변수명) ,,할당해줘야함!!

df_new<-rename(df_new,v2=var2)

파생변수 만들기

1.변수를 조합해서 파생변수 생성

*데이터 프레임명$새로 만들 변수명 <- 계산 공식을 할당

df$var_sum<- df$var1+df$var2

2.함수를 이용해서 파생 변수 생성

조건문 함수- 조건에 따라 서로 다른 값을 반환하는 함수

*ifelse()함수 이용, ifelse(조건, 조건에 맞을 때 부여할 값, 조건에 맞지 않을 때 부여할 값)

mpg$test<-ifelse(mpg$total>=20,”pass”,”fail”)

*table()함수 -빈도표로 빈도수 확인, 함수안에는 변수명 입력

3.중첩 조건문 만들기, ifelse()안에 다시 ifelse()를 넣는 방법

mpg$grade<-ifelse(mpg$total>=30,"A",

                  ifelse(mpg$total>20,"B","c"))

*ggplot2의 패키지의 qpplot을 이용하여 막대그래프 생성

qplot(mpt$test)

데이터 전처리-변수의 데이터 중 일부를 추출해서 분석-행만 추출

1.조건에 맞는 데이터만 추출하기

*dplyr패키지를 로드-> filter함수 이용

exam %>% filter(class==1) - exam에서 class1인 경우만 추출해 출력

*%>%는 간단하게 ctrl+shift+m’으로 이용가능

exam %>% filter(class!=1)- exam에서 class1이 아닌 경우만 추출해 출력

exam %>% filter(math>50)-수학점수가 50점을 초과한 경우만 추출해 출력

2.여러 조건을 충족하는 행 추출하기

*기호 &을 이용하여 조건을 나열하면 여러 조건을 동시에 충족하는 행 추출 가능

exam %>% filter(class == 1& math >= 50)- 1반이면서 수학 점수가 50점 이상인 경우

*기호 | 를 이용하여 또는 을 의미하는 데이터 추출하기

exam %>% filter(class==1 | math>=50)-1반이거나 수학점수가 50점이상인 경우

3.목록에 해당하는 행 추출하기

exam %>% filter(class==1|class==2|class==3)

exam %>% filter(class %in%c(1,3,5))

-둘 다 1,3,5 반에 해당되면 추출하는 것

 

 

필요한 변수만 추출-열만 추출

*select()함수는 데이터에 들어있는 수많은 변수 중 일부 변수만 추출해 활용하고자 할 때 사용

exam %>% select(math)-math라는 변수 추출

exam %>% select(english,math)- math, enlglish 변수 추출

exam %>% select(-math)- math라는 변수를 제외하고 추출

exam %>% select(-math,-english)-math,english라는 변수를 제외하고 추출

 

*dplyr 함수 조합하기

filter()select()조합하기 %>%> 로 연결하면 된다

exam %>% filter(class==1) %>% select(math)- class1인 행만 추출한 다음에 english추출

*가독성있게 줄 바꾸기+ 일부만 출력하기

exam %>%

  filter(class==1) %>%

head()                 -1반인애들만 추출하고 head()함수 이용하여 위에 6행만 출력

 

순서대로 정렬하기

*arrange()함수 이용하기 -> 데이터를 순서로 정렬

exam %>%arrange(math) - exam math를 오름차순으로 정렬

*desc()를 기준 변수에 적용하면 내림차순

exam %>% arrange(desc(math))-exam math를 내림차순으로 정렬

exam %>% arrange(class,math)-반을 기준으로 오름차순으로 정렬하고 수학점수를 기준으로 오름차순 정렬에 출력함

 

 

 

파생변수 추가하기

1.mutate()를 사용하여 기존데이터에 파생변수 추가

exam %>% mutate(total=math+english+science ) %>% -총합 변수 추가

  head     - 일부 추출

2. 여러 파생 변수 한 번에 추출하기

exam %>% mutate(total= math+ english+science,     - 총합 변수 추가

                mean= (math+english)/2) %>%       - 총평균 변수 추가

  head                       -일부 추출

3. mutate()ifelse()적용 하기

exam %>% mutate(test=ifelse(sience>=60,"pass","fail"))

##mpg1 %>% mutate(total=hwy+cty,

             mean=total/2) %>% - 파생 변수 두개 추가

  arrange(-mean) %>%- mean에 대한 내림 차순 정렬

head(3) – 3개를 선택해서 뽑음

 

집단별로 요약하기

1.summarise() 이용 하기

exam %>% summarise(mean_math=mean(math)) – math의 평균을 산출

2.집단 별로 요약하기

group_by()에 변수를 지정하면 변수 항목별로 데이터를 분리함

exam %>%

  group_by(class) %>% -class별로 분리

  summarise(mean_math=mean(math))- math 평균 산출

 

 

3.여러 통계량 한 번에 산출하기

exam %>%

  group_by(class) %>%                 #class별로 분리

  summarise(mean_math=mean(math),  #math 평균 요약

            sum_math=sum(math),     #math 합계 요약

            median_math=median(math),#math의 중앙값 요약

            n=n())                     # 학생수 나타내기

*n()- 데이터가 몇 행으로 되어있는지 빈도를 구하는 기능,,각반에 몇 명의 학생이 있는지!

4. 각 집단별로 다시 집단 나누기

group_by()에 여러 변수를 지정하면 집단을 나눈 후 다시 하위 집단으로 나눌 수 있음

mpg %>%

  group_by(manufacturer, drv) %>%  #회사별, 구동 방식별 분리

  summarise(mean_cty=mean(cty)) %>% #cty 평균 산출

  head(10)                           #일부 출력

<문제>

mpg %>% filter(class=="suv") %>%   #suv추출

  group_by(manufacturer) %>%       #회사별로 분리

  mutate(mean=(cty+hwy)/2) %>%    #통합 연비 변수 생성

  summarise(mean_tot=mean(mean)) %>% # 통합 연비 평균 산출

  arrange(-mean_tot) %>%              #내림 차순 정렬

  head                                  #1~5위까지 출력

 

 

 

 

 

데이터 합치기

1.가로로 합치기

*left_join()함수를 이용하여 데이터를 가로로 합친다.

total<-left_join(test1,test2,by="id")-id를 기준으로 합쳐 total에 해당

 

name<-data.frame(class=c(1,2,3,4,5),

                teacher=c("kim","lee","park","choi","jung"))-nameclassteacher변수로 구성

exam_new<-left_join(exam,name,by="class")- class변수 기준,name teacher변수를 exam에 추가

 

2. 세로로 합치기

* bind_rows()함수를 이용하여 데이터를 세로로 합침, 이때 두 데이터의 변수가 같아야함

변수명이 다르다면 rename()함수를 이용하여 변수명을 같게 한 뒤 합치기

group_all<-bind_rows(group_a,group_b)- 세로로 두 데이터를 합침

 

결측치 정제하기

*결측치는 NA로 나타난다.

*is.na()를 이용하면 데이터에 결측치가 들어가 있는지 확인 가능!-결측치 TRUE로 나타남

*table(is.na())- 데이터에 결측치가 몇 개 있는지 출력, TRUE의 빈도로 결측치 확인

table(is.na(df))- df의 결측치 빈도 출력

table(is.na(df$sex))- df sex의 결측치 빈도 출력

*결측치가 포함된 데이터를 함수에 적용하면 정상적으로 연산되지 않음

1. 결측치 있는 변수의 행 제거하기

*is.na()filter()에 적용하면 결측치가 있는 행을 제거할 수 있음.

df %>% filter(is.na(score))- scoreNA인 데이터만 출력

df %>% filter(!is.na(score))-score에서 결측치가 존재하는 행을 제거하고 출력

df %>% filter(!is.na(score)&!is.na(sex))- score,sex의 변수에 존재하는 결측치를 제거

2. 결측치가 하나라도 있으면 제거하기

filter()에 일일이 변수를 지정해 결측치가 있는 행을 제거하도록 코드 구성

*na.omit()를 이용하여 변수 지정하지 않고 결측치가 있는 행을 한번에 제거 가능

df_nomiss2<- na.omit(df)- 모든 변수에 결측치 없는 데이터 추출

3.함수의 결측치 제외 기능 이용하기

*na.rm() 파라미터를 이용하여 결측치를 제거 하지 않고 함수 적용가능

mean(df$score, na.rm=T)- 결측치 제외하고 평균 산출

exam %>% summarise(mean_math=mean(math,na.rm=T))- math결측치 제외하고 평균산출

4. 결측치 대체하기

1)평균값으로 결측치 대체하기

*exam$math<-ifelse(is.na(exam$math),55,exam$math)-mathNA55로 대체

 

이상치 정제하기

outlier$score<-ifelse(outlier$score>5,NA,outlier$score)-score 5보다 크면 NA 할당

*boxplot()- 상자그림 그리는 함수

boxplot(mpg$hwy)$stats- 출력결과 위에서부터 아래쪽 극단치 경계, 1사분위수, 중앙값, 3사분위수,위쪽 극단치 경계

 

 

 

 

 

 

#산점도 그리기- 변수 간 관계 표현하기

1.배경설정하기

먼저 ggplot2 패키지를 로드 해야함- ggplot()함수를 이용하기 위함

*ggplot(data=mpg,aes(x=displ,y=h wy)-x축은 displ, y축은 hwy 지정해서 배경 생성

aes를 이용하여 x축과 y축에 사용할 변수 지정

2. 그래프 추가하기

ggplot(data=mpg,aes(x=displ,y=h wy)+geom_point()- 배경에 산점도 추가

dplyr패키지 함수는>%>기호로 연결하지만 ggplot2패키지 함수들은 +기호로 연결

3.축범위를 조정하는 설정 추가하기

ggplot(data=mpg,aes(x=displ,y=hwy))+geom_point()+xlim(3,6)+ylim(10,30)

-x축의 범위와 y축의 범위를 설정함->데이터 전체가 아니라 일부만 표현가능

#막대 그래프- 집단 간 차이 표현하기

1.집단별 평균표 만들기

막대 그래프를 만들기 위해서는 집단별 평균표로 구성된 데이터 프레임이 필요함

dplyr패키지를 이용하여 데이터 프레임 생성

library(dplyr)

df_mpg<-mpg %>%

  group_by(drv) %>%

summarise(mean_hwy=mean(hwy))

2. 그래프 생성하기

*막대 그래프를 만드는 함수 geom_col()

ggplot(data=df_mpg, aes(x=drv,y=mean_h wy))+geo_col()

3.크기순으로 정렬하기

*reorder() 함수 이용하기-x축 변수와 정렬 기준으로 삼을 변수를 지정하면 됨. -기호는 내림차순

ggplot(data=df_mpg,aes(x=reorder(drv,-mean_hwy),y=mean_hwy))+geom_col()

4. 빈도 막대 그래프 만들기-값의 개수로 막대의 길이를 표현한 그래프

*y축 없이 x축만 지정, geom_bar()함수를 이용하면 됨

ggplot(data=mpg,aes(x=hwy))+geom_bar()- h죠의 변수의 분포를 나타낸 빈도 막대 그래프 생성

 

** geom_col() vs geom_bar()

평균 막대 그래프는 데이터를 요약한 평균표를 만든후 이 평균표를 이용해 만든다.

반면 빈도 막대 그래프는 별도로 표를 만들지 않고 원자료를 이용해 바로 만든다.

 

#선그래프 만들기

*geom_line()함수를 이용하기

ggplot(data=economics,aes(x=date,y=unemploy))+geom_line()

 

#상자 그림 만들기

1.상자 그림 만들기

*geom_boxplot() 함수 이용하기

ggplot(data= mpg, aes(x=drv, y=h wy))+ geom_boxplot()

'IT 프로그래밍 > R' 카테고리의 다른 글

principal component anlysis in R(R에서 주성분 분석 실습)  (0) 2023.11.17
r총정리  (0) 2023.11.11