여러 데이터의 시각화를 해보았다.
특별한 내용은 없다.
====================================== 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 |