여러 데이터의 시각화를 해보았다.

특별한 내용은 없다.



====================================== R ======================================


rm(list=ls())

#없는 거 설치

install.packages("foreign")

install.packages("sas7bdat")

install.packages("memoise")


#버전업 

install.packages("rJava")

install.packages("KoNLP")


#라이브러리 호출. rJava가 제일 먼저이다.

library("rJava")

library("KoNLP")

library("dplyr")

library("ggplot2")


#KoNLP userSejongDic 대신에 다른 DIC 설치

#설치 끝나면 다시 실행

useNIADic()


# https://github.com/haven-jeon/NIADic/releases/download/0.0.1/NIADic_0.0.1.tar.gz

# 만약 useNIADic() 이 제대로 실행되지 않는다면 위의 사이트에서 파일을 받고 경로를 조정해야한다.


#foreign 라이브러리를 불러오고 데이터를 데이터 프레임으로 바꾸고 불러온다.

library("foreign")

w <- read.spss(file = "Koweps_hpc10_2015_beta1.sav", to.data.frame = T)

w

#요약

summary(w)

#각 컬럼을 보기 쉬운 이름으로 바꿔줌.

w <- rename(w, gender = h10_g3, birth = h10_g4, marriage = h10_g10,

            religon = h10_g11, code_job = h10_eco9, income = p1002_8aq1, 

            code_religon = h10_reg7)

#바꾸고 형태 확인

str(w)

#클래스 확인 

class(w$gender)

#테이블로 보기 쉽게 확인

table(w$gender)


#gender를 ifelse로 구분

w$gender <- ifelse(w$gender == 1, "male", "female")

#한 번 막대 그래프로 찍어본다.

qplot(w$gender)


#이번에는 income으로 해본다.

class(w$income)

#income의 경우 데이터 컬럼 값이 많기 때문에 테이블로 안 뽑는다.

#요약 - 평균, 사분위수 결측치가 나온다.

summary(w$income)

#플롯을 뽑아본다. 이상치 제외하기 위해서 1000까지만 뽑는다.

qplot(w$income) + xlim(0,1000)


#ggplot(data = w$income, aes(x = income, y = count)) 


#값이 벡터 안의 값(0 혹은 9999)이면 NA, 아니면 원래 값으로 출력

w$income <- ifelse(w$income %in% c(0,9999), NA, w$income)

#테이블로 만들어서 본다.

table(is.na(w$income))


#gender_income에 na가 아닌 income값을 gender로 묶고 income의 평균을 내어 담아준다.

gender_income <- w %>% filter(!is.na(income)) %>% group_by(gender) %>% summarise(mean_income = mean(income))

#값 확인

gender_income

#x에 gender, y에 mean_income으로 막대 그래프로 표현해준다.

ggplot(data = gender_income, aes(x = gender, y = mean_income)) + geom_col()


#생일 데이터를 뽑아내기 위해 class를 확인해본다.

class(w$birth)

#table로 각 년도에 몇 명이 태어났는지 확인해본다.

table(w$birth)

#요약확인

summary(w$birth)

#결측치 확인 - 없음

table(is.na(w$birth))


#나이를 생성

w$age <- 2015 - w$birth + 1

#제대로 되었는지 확인

head(w$age)

# 그래프를 빠르게 만들어본다.

qplot(w$age)

#나이에 따른 수입

age_income <- w %>% filter(!is.na(income)) %>% group_by(age) %>% summarise(mean_income = mean(income))

#꺾은선 그래프로 그려본다.

ggplot(data = age_income, aes(x = age, y = mean_income)) + geom_line()

#w에 ageg라는 컬럼을 추가한다. 나이 30을 기준으로 0~30 / 31 ~ 60 / 61 ~ 각각을 young/middle/old로 하는 컬럼을 만든다.

w <- w %>% mutate(ageg = ifelse(age < 30 , "young", ifelse(age <= 59, "middle","old")))

#제대로 만들어졌는지 확인

w$ageg

#테이블로 확인

table(w$ageg)


#age_income의 class 확인

class(age_income)

#age_income의 데이터 타입이 3개에 data.frame을 포함하고 있으므로 as.data.frame으로 바꿔준다.

age_income <- as.data.frame(age_income)

#바뀐 것을 확인

class(age_income)

age_income

#gender_income에 ageg, gender를 넣어서 데이터를 만들어준다.

gender_income <- w %>% filter(!is.na(income)) %>% group_by(ageg, gender) %>% summarise(mean_income = mean(income))


#young, middle, old 순으로 막대 그래프를 그려서 데이터를 확인

ggplot(data = gender_income, aes(x = ageg, y = mean_income)) + geom_col() + scale_x_discrete(limits = c("young","middle","old"))


#위의 데이터에 fill = gender를 하여 남녀비율을 추가한다.

ggplot(data = gender_income, aes(x = ageg, y = mean_income, fill = gender)) + geom_col() + scale_x_discrete(limits = c("young","middle","old"))


#남녀 자료를 분리하여 분석을 더 쉽게 만들어준다.

ggplot(data = gender_income, aes(x = ageg, y = mean_income, fill = gender)) + geom_col(position = "dodge") + scale_x_discrete(limits = c("young","middle","old"))


#gender와 age에 따른 income을 구해본다. 

gender_age <- w %>% filter(!is.na(income)) %>% group_by(age, gender) %>% summarise(mean_income = mean(income))


#생애 주기에 따른 남녀 소득 차이를 보여주는 그래프.

ggplot(data = gender_age, aes(x = age, y = mean_income, col= gender)) +geom_line()


#직업별의 월급 관계를 보기 위해서 code_job에 관한 내용으로 table과 sort를 해본다.

class(w$code_job)

table(w$code_job)

sort(w$code_job)

#결측치 확인 - 9135개의 true값이 나왔다.

table(is.na(w$code_job))

#코드북의 자료를 입력하기 위해서 라이브러리 호출

library("readxl")

#list_job 객체에 데이터를 입력

list_job <- read_excel("Koweps_Codebook.xlsx", col_names= T, sheet = 2)

list_job

#총 몇 개의 구분이 있는지 알아보기 위해 dim을 해본다  -  149개의 직업이 있다.

dim(list_job)

#class를 통해 어떤 데이터타입이 있는지 확인한다.

class(list_job)

#3개의 데이터 타입이 있으므로 as.data.frame으로 해결

list_job <- as.data.frame(list_job)

list_job


#직업 명칭 매칭

w <- w %>% filter(!is.na(w$code_job))%>% left_join( list_job, by = "code_job")


#job 결측치 빼고 job컬럼을 선택해서 위의 10개만 출력한다.

welfare %>% filter(!is.na(job)) %>% select(job) %>% head(10)


#job, income 중에 결측치만 없는 것을 job으로 묶고 mean_income을 구해서 mean_income 컬럼을 만들어서 job_income에 담는다.

job_income <- w %>% filter(!is.na(job) & !is.na(income)) %>% group_by(job) %>% summarise(mean_income = mean(income))


#job_income을 내림차순(arrange(desc()))으로 정렬해서 위에 10개만 top10에 넣어준다 

top10 <- job_income %>% arrange(desc(mean_income)) %>% head(10)


#그래프 출력

ggplot(data= top10, aes(x = reorder( job, mean_income), y = mean_income)) + geom_col( ) + coord_flip( )


#아래서 10개 출력

bottom10 <- job_income %>% arrange(mean_income) %>% head(10)


#그래프 출력 

ggplot(data = bottom10, aes(x = reorder(job, -mean_income), y = mean_income)) + geom_col( ) + coord_flip( ) + ylim(0, 850)


====================================== R ======================================

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

[R] R 9일차  (0) 2018.05.23
[Python] Python 8일차  (0) 2018.05.21
[Python] Python 7일차  (0) 2018.05.18
[R] R 7일차  (0) 2018.05.18
[Python] Python 6일차  (0) 2018.05.17

+ Recent posts