R-Studio Factor의 사용.

R-Studio의 Factor를 사용한 예제

Featured image

R-Studio 의 Factor

차트를 만들때 필요한 Factor


파일 소스

# 메모장 factor_text.txt를 하나 만들어서 밑 내용을 넣고 저장하자.
# 메모장 factor_text.csv로 저장해도 무방하다.
# setwd("경로") 로 경로를 지정해 불러오든가.
# 아니면 편하게 R작업공간에 넣어버리자.
# 현재 작업공간은 getwd()로 참고 가능하다.

# no,name,blood,sex,location
# 1,서진수,O,남,서울
# 2,홍길동,A,남,부산
# 3,유관순,O,여,부산
# 4,전우치,B,남,전남
# 5,강감찬,AB,남,강원
# 6,신사임당,A,여,강원
# 7,퇴계이황,B,남,충청
# 8,율곡이이,O,남,전북
# 9,근초고대왕,B,남,제주
# 10,뺑덕어멈,B,여,서울

함수 예제

# install.packages([package name]) 패키지 설치
# 설치를 했었다면 메모리 로딩만 하면된다.
install.packages("ggplot2")
# 패키지를 메모리에 로딩
library(ggplot2)

# CSV : comma separate value를 저장하고 있는 텍스트 파일
# 엑셀에서 접근 가능
# myTxt <- read.csv("factor_test.txt")
# myTxt
#    no       name blood sex location
# 1   1     서진수     O  남     서울
# 2   2     홍길동     A  남     부산
# 3   3     유관순     O  여     부산
# 4   4     전우치     B  남     전남
# 5   5     강감찬    AB  남     강원
# 6   6   신사임당     A  여     강원
# 7   7   퇴계이황     B  남     충청
# 8   8   율곡이이     O  남     전북
# 9   9 근초고대왕     B  남     제주
# 10 10   뺑덕어멈     B  여     서울

# Factor 테스트
getwd()
# [1] "F:/Git_BigData/bigdata/S20191001"

# str : Structure
# 10 obs. of 5 variavbles 가 나오는데 10행 5열 이다.
str(myTxt)
# 'data.frame':	10 obs. of  5 variables:
#  $ no      : int  1 2 3 4 5 6 7 8 9 10
#  $ name    : Factor w/ 10 levels "강감찬","근초고대왕",..: 4 10 6 8 1 5 9 7 2 3
#  $ blood   : Factor w/ 4 levels "A","AB","B","O": 4 1 4 3 2 1 3 4 3 3
#  $ sex     : Factor w/ 2 levels "남","여": 1 1 2 1 1 2 1 1 1 2
#  $ location: Factor w/ 7 levels "강원","부산",..: 3 2 2 4 1 1 7 5 6 3

# levels : 취할 수 있는 값
# labels : 식별할 수 있도록 임의로 지정한 값
# A, B, O, AB 이 4가지 패턴이 혈액형의 levels 가 된다.
# 이걸 한글로 에이형 비형 이런식으로 표현하면 4가지 levels 의 labels 가 된다.
# 해석해 보면 10행 5열 이고 이름 튜플은 팩터형태이고 10레벨을 기준으로 분류한다.
# blood 튜플은 팩터형태 이고 4가지 레벨을 가지고 있고 각각 4레벨을 기준으로 분류한다.
# 팩터 = 카테고리

# 요약정보
summary(myTxt)
#        no                name   blood  sex    location
#  Min.   : 1.00   강감찬    :1   A :2   남:7   강원:2  
#  1st Qu.: 3.25   근초고대왕:1   AB:1   여:3   부산:2  
#  Median : 5.50   뺑덕어멈  :1   B :4          서울:2  
#  Mean   : 5.50   서진수    :1   O :3          전남:1  
#  3rd Qu.: 7.75   신사임당  :1                 전북:1  
#  Max.   :10.00   유관순    :1                 제주:1  
#                  (Other)   :4                 충청:1  

# 위는 summary() 의 실행 형태이다.
# no 컬럼은 4분위수 에 의거하여 분류한다.
# Min 최솟값, Max 최댓값, median 중간값, mean 평균값

# 기존 팩터를 이용하여 파생 컬럼 만드는법
# 객체$컬럼 : 해당 변수에 접근시 $를 이용한다.
# mytxt객체에서 blood컬럼을 뽑아서 blood2 를 만들어서 객체에 새로운 컬럼을 추가함.
myTxt$blood2 <- factor( myTxt$blood, levels=c('A', 'B', 'O', 'AB'), labels=c('에이', '비', '오', '에이비') )

# 출력
myTxt
#    no       name blood sex location blood2
# 1   1     서진수     O  남     서울     오
# 2   2     홍길동     A  남     부산   에이
# 3   3     유관순     O  여     부산     오
# 4   4     전우치     B  남     전남     비
# 5   5     강감찬    AB  남     강원 에이비
# 6   6   신사임당     A  여     강원   에이
# 7   7   퇴계이황     B  남     충청     비
# 8   8   율곡이이     O  남     전북     오
# 9   9 근초고대왕     B  남     제주     비
# 10 10   뺑덕어멈     B  여     서울     비

# sex컬럼을 이용하여 male, female으로 시뉵 컬럼 sex2를 만들어 보세요.
# factor함수로 만들고자하는 컬럼을 객체 에서 불러와서 labels 를 붙혀서 다시 객체에 추가한다.
myTxt$sex2 <- factor( myTxt$sex, levels=c('남', '여'), labels=c('male', 'female') )

# 출력
myTxt
#    no       name blood sex location blood2   sex2
# 1   1     서진수     O  남     서울     오   male
# 2   2     홍길동     A  남     부산   에이   male
# 3   3     유관순     O  여     부산     오 female
# 4   4     전우치     B  남     전남     비   male
# 5   5     강감찬    AB  남     강원 에이비   male
# 6   6   신사임당     A  여     강원   에이 female
# 7   7   퇴계이황     B  남     충청     비   male
# 8   8   율곡이이     O  남     전북     오   male
# 9   9 근초고대왕     B  남     제주     비   male
# 10 10   뺑덕어멈     B  여     서울     비 female

# 벡터 를 그래프로 시각화 하기
human <- c('남자', '여자', '여자', '남자', '남자')

# 타입 조회
mode(human)
# [1] "character"
class(human)
# [1] "character"

# 형변환 nhuman 에다가 human 객체를 팩터로 캐스팅
nhuman <- as.factor(human)
mode(nhuman) # 바뀐 것 확인하기위해 조회
# [1] "numeric"
class(nhuman)
# [1] "factor"

# 시각화
plot(nhuman) # 차트 만들기
table(nhuman) # 테이블 만들기
nhuman
# 남자 여자 
#    3    2 
qplot(nhuman) # 좀더 시각적인 차트(유저 라이브러리 사용)

# factor 인수중 ordered = T 이면 사용자가 지정한 levels = c(인수) 순서대로 정렬시킴
ohuman <- factor(human, levels=c('여자', '남자'), ordered=T)
qplot(ohuman) # 그래프 그림

# 강호동 유재석 김구라 를 유재석 김구라 강호동 순으로 차트 그리기기
# 기준이 되는 소스를 먼저 벡터화 시키고
name <- c("강호동", "강호동", "강호동", "유재석", "유재석", "김구라", "김구라", "김구라", "김구라")

# 카테고리화 시키는 중
oname <- factor(name, levels=c("유재석", "김구라", "강호동"), ordered = T)

# 유저 라이브러리 를 이용해 차트를 좀더 이쁘게 그림
qplot(oname)