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에서 class가 1인 경우만 추출해 출력
*%>%는 간단하게 ‘ctrl+shift+m’으로 이용가능
exam %>% filter(class!=1)- exam에서 class가 1이 아닌 경우만 추출해 출력
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)- class가 1인 행만 추출한 다음에 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"))-name은 class와 teacher변수로 구성
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))- score가 NA인 데이터만 출력
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)-math가 NA면 55로 대체
이상치 정제하기
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 |