#### 실업률 그래프 분석 ####
# http://kosis.kr/index/index.do 
# 국내통계 > 주제별통계 > 고용임금 > 경제활동 인구조사 > 실업률 > 성/연령별 실업률
# csv로 저장후 unemployment_rate.csv

# 1. 데이터 준비
raw_df <- read.csv("data/unemployment_rate.csv", header = T, fileEncoding = 'CP949')
head(raw_df, 20)
summary(raw_df)
image
image

# 2. reshape2(melt)을 통해 좌우로 넓은 데이터 --> long한 통합 데이터 형태로 수정하기
http://nittaku.tistory.com/349

library(tidyr)
library(reshape2)
library(ggplot2)

#    id.var = c("")옵션을 통해 남아있을 칼럼들을 지정해주자.
#    녹는 칼럼은 칼럼명집합칼럼 : variable /  값 집합칼럼 : value로 생성된다.
df_m <- melt(raw_df, id.var = c("성별", "연령계층별"))
head(df_m)
image


# 3. 데이터 클리닝 - substr() -> paste()
# - 지저분한(R에서 자동생성한)하게 녹아있는 칼럼명수정해줘야한다.
# - 1) 년/월이 모여있는 variable칼럼에서 년/월의 숫자만 따로 추출하여 year칼럼 /month칼럼을 생성
# - 2) 따로 추출한 year와 month를 원하는 형태(yyyy-mm)로 합해주는 year_month 칼럼을 만들어 Date타입으로 형변환시킬 준비를 하자.
df_m$year = substr(df_m$variable, 2, 5)
df_m$month = substr(df_m$variable, 8, 9)
head(df_m)

df_m$year_month =paste(df_m$year, df_m$month, sep="-")
head(df_m)
image

# - 3) year_month 칼럼의 값을 as.Date()타입으로 바꿔주자.
# -    하지만, Data()타입으로 변환하기 위해선 -dd(일)의 형태가 반드시 필요하다.
# -    그래서 임의로 -01 을 만들어서 yyyy-mm-dd 형태를 만들어주자.
df_m$year_month = as.Date(paste(df_m$year_month, "01", sep="-"))
head(df_m)
str(df_m)
image
image

# 4) 필요한 칼럼만 챙기자.
df_select = df_m[, c("성별", "연령계층별", "year_month", "value")]
head(df_select)
summary(df_select)

# 5) NA가 있다면,, 제거하자.*** 행인덱싱 자리에 complete.cases( )***
df_cleaned = df_select[ complete.cases(df_select), ]
summary(df_cleaned)
image


# 칼럼명을 영어로.. 임시로 바꾸자.. 반드시x
colnames(df_cleaned) = c("sex", "age_group", "year_month", "value")
head(df_cleaned)


# factor범주형 데이터( sex, age_group)는 summary()에 나타난 순서가 levels이다.(수치형이라면 통계값이 있을 것임)
# levels순으로 범주형 데이터 값들도 levels(칼럼인덱싱) [인덱싱]으로  영어로 바꿔주자.

str(df_cleaned)
levels(df_cleaned$sex)
levels(df_cleaned$sex)[1] = "Total"
levels(df_cleaned$sex)[2] = "Male"
levels(df_cleaned$sex)[3] = "Female"

# age_group은 범주가 너무 많다. levels()로 대입하지말고, gsub()를 이용해 문자열 값을 대체하자.
# 1) 범주가 너무 많을 때는, gsub("발견할문자", "바뀔문자", 칼럼명)을 이용해 일단 간단하게 만들자
#    즉, 문자열 안에 "세" 나 "이상" 등을 지운 새로운칼럼을 하나 생성하자.

levels(df_cleaned$age_group)
df_cleaned$new_age_group <- gsub("세|이상", "", df_cleaned$age_group)
df_cleaned$new_age_group
df_cleaned$new_age_group <- gsub("계", "Total", df_cleaned$new_age_group)


head(df_cleaned)

df_final <- df_cleaned[, c("sex", "new_age_group", "year_month", "value")]
head(df_final)


# ggplot으로 그래프 그리기
- aes()에는 x축의 칼럼, y축의 칼럼 이외에 ~별로 나눌 그룹과, 색을 표시할 그룹을 지정할 수 있다.

ggplot(df_final, aes(x=year_month, y=value, group = sex, colour= sex)) + geom_point() + geom_line()# x축 칼럼, y축칼럼, ~별 그룹, 색으로 지정할 그룹
image

image

       
# 그래프를 못알아 먹겠으니 인덱싱을 통해 df를 연령대 잘라서 각각 그리기
df_20s <- df_final[which(df_final$new_age_group == "20 - 29"), ]
df_30s <- df_final[which(df_final$new_age_group == "30 - 39"), ]
df_40s <- df_final[which(df_final$new_age_group == "40 - 49"), ]
df_50s <- df_final[which(df_final$new_age_group == "50 - 59"), ]

ggplot(df_20s, aes(x=year_month, y=value, group = sex, colour= sex)) + geom_point() + geom_line()# x축 칼럼, y축칼럼, ~별 그룹, 색으로 지정할 그룹
image


# function으로 만들어서 연령대별로 넣기
# data.frame과 title을 받아서 그리기
plotF <- function(df, title){
   ggplot(df, aes(x=year_month, y=value, group = sex, colour= sex)) + geom_point() + geom_line() + ggtitle(title)
}

plotF(df_20s, "20대 실업률")
plotF(df_30s, "30대 실업률")
plotF(df_40s, "40대 실업률")
plotF(df_50s, "50대 실업률")

image

+ Recent posts