ํ๊ตญ๋ณด๊ฑด์ฌํ์ฐ๊ตฌ์์์ ๊ฐ๊ตฌ์ ๊ฒฝ์ ํ๋์ ์ฐ๊ตฌํด ์ ์ฑ ์ง์์ ์ํด ๋ฐ๊ฐํ๋ ์กฐ์ฌ ์๋ฃ(Koweps_hpc10_2015_beta1.sav : SPSS ์ ์ฉํ์ผ)
์ค๋น ๋จ๊ณ
- ๋ฐ์ดํฐ ์ค๋น, ํจํค์ง ์ค์น ๋ฐ ๋ก๋, ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
library(dplyr) library(ggplot2) library(ggthemes) library(haven) library(readxl) library(reshape) df <- read_sav(file = 'Koweps_hpc10_2015_beta1.sav', encoding = 'UTF-8') str(df)
- ๋ฐ์ดํฐ ๋ณ์๋ช ๋ณ๊ฒฝ
df <- rename(df, c(h10_g3 = 'sex', h10_g4 = 'birth', h10_g10 = 'marriage', h10_g11 = 'religion', p1002_8aq1 = 'income', h10_eco9 = 'code_job', h10_reg7 = 'code_religion'))
- ๋จ๋ ์ฑ๋น์จ ๊ฒํ sex๊ฐ 1์ด๋ฉด male, 0์ด๋ฉด female
df$sex <- ifelse(df$sex == 1, 'male','female') table(df$sex) # ๊ฒฐ์ธก์น ์กด์ฌํ๋์ง ๊ฒํ table(is.na(df$sex))
๋ณ์ ๊ฒํ ๋ฐ ์ ์ฒ๋ฆฌ
- ์๊ธ
๊ธ์ฌ๋ฅผ 0์์ 10000๊น์ง๋ง ํ์
๊ธ์ฌ๊ฐ 0๋๋ 9999๋ฉด NA๋ก ๋ณ๊ฒฝclass(df$income) summary(df$income) qplot(df$income) qplot(df$income + xlim(0,1000)) table(is.na(df$income)) df$income <- ifelse(df$income %in% c(0, 9999), NA, df$income) table(is.na(df$income))
- ๋ณ์๊ฐ์ ๊ด๊ณ
์ฑ๋ณ์ ์๊ธ ํ๊ท ๋ง๋ค๊ธฐ
๊ทธ๋ํ ์์ฑsex_income <- df %>% filter(!is.na(income)) %>% group_by(sex) %>% summarise(mean_income = mean(income)) ggplot(data = sex_income, aes(x=sex, y=mean_income) + geom_col()
- ๋์ด์ ๋ฐ๋ฅธ ์๊ธ์ ์ฐจ์ด
์ฒ๋ฆฌ ๊ท์
birth์ ๋ ๋๋ 1900~2014 ์ฌ์ด์ ๊ฐ
birth๊ฐ 9999 ๊ฐ์ด๋ฉด ๊ฒฐ์ธก์น ์ฒ๋ฆฌ
ํ์ ๋ณ์(๋์ด, age) ์์ฑclass(df$birth) df$birth <- ifelse(df$birth == 9999, NA, df$birth) df <- df %>% mutate(age = 2023 - df$birth) table(is.na(df$age)) age_income <- df %>% filter(!is.na(income)) %>% group_by(age) %>% summarise(mean_income = mean(income)) ggplot(data = age_income, aes(x=age, y = mean_income)) + geom_line()
- ์ฐ๋ น๋์ ๋ฐ๋ฅธ ์๊ธ ์ฐจ์ด
df <- df %>% mutate(age_group = ifelse(df$age < 30, 'young', ifelse(df$age < 60, 'middle', 'old'))) table(df$age) table(is.na(df$age_group)) age_group_income <- df %>% filter(!is.na(income)) %>% group_by(age_group) %>% summarise(mean_income = mean(income)) ggplot(data = age_group_income, aes(x=age_group, y=mean_income)) + geom_col() # ์์๋๋ก ์ถ๋ ฅ ggplot(data = age_group_income, aes(x=age_group, y=mean_income)) + geom_col() + scale_x_discrete(limits = c('young', 'middle', 'old'))
- ์ง์ ๋ณ ๊ธ์ฌ ํ๊ท ๊ณ์ฐ
job์ income์ด NA๊ฐ ์๋ ํ์ ํํฐ๋ง
์ง์ ๋ณ๋ก ์์ ์ ํ๊ท ์ด ๋์ 10๊ฐ์ ์ง์ ์ ์ ํํ๊ณ , ๊ทธ๋ํ๋ฅผ ์์ฑ
์ง์ ๋ณ๋ก ์์ ์ ํ๊ท ์ด ๋ฎ์ 10๊ฐ์ ์ง์ ์ ์ ํํ๊ณ , ๊ทธ๋ํ๋ฅผ ์์ฑoccupation <- read_excel('Koweps_Codebook.xlsx', col_names = T, sheet = 2) head(occupation) dim(occupation) df$code_job df <- left_join(df, occupation, id = 'code_job') df %>% filter(!is.na(code_job)) %>% select(code_job, job) %>% head(10) job_income <- df %>% filter(!is.na(job) & !is.na(income)) %>% group_by(job) %>% summarise(mean_income = mean(income)) head(job_income) ggplot(data = job_income, aes(x=job, y=mean_income)) + geom_col() job_income_desc <- job_income %>% arrange(desc(mean_income)) %>% head(10) job_income_asc <- job_income %>% arrange(mean_income) %>% head(10) ? ggplot(data = job_income_desc, aes(x=reorder(job, mean_income), y=mean_income)) + geom_col() + coord_flip() ggplot(data = job_income_asc, aes(x=reorder(job, mean_income), y=mean_income)) + geom_col() + coord_flip() + ylim(0, 580)
- ์ฑ๋ณ ์ง์ ์ ๋น๋
๋จ์์ ์ฌ์๊ฐ ๋ง์ด ๊ฐ๋ ์ง์ ์ ์ข ๋ฅ๊ฐ ๋ฌด์์ธ์ง ์กฐ์ฌํ์ธ์.
๊ฐ๊ฐ ์์ 10๊ฐ์ ์ง์ ์ ์ฐพ๊ณ , ๊ฐ ์ง์ ์ ์ข ์ฌ์ ์๋ฅผ ๊ตฌํ๊ณ ์ฐจํธ๋ฅผ ์์ฑํ์ธ์.job_male <- df %>% filter(!is.na(job) & sex == 'male') %>% group_by(job) %>% summarise(n = n()) %>% arrange(desc(n)) %>% head(10) job_male job_female <- df %>% filter(!is.na(job) & sex == 'female') %>% group_by(job) %>% summarise(n = n()) %>% arrange(desc(n)) %>% head(10) job_female coord_flip() ํจ์๋ก ๋ง๋๊ทธ๋ํ y์ถ ๊ธฐ์ค์ผ๋ก ์์ฑ! ggplot(data = job_male, aes(x=reorder(job, n), y = n)) + geom_col() + coord_flip() ggplot(data = job_female, aes(x=reorder(job, n), y = n)) + geom_col() + coord_flip()
๋ฌผ๋ก , ํ๊ต ์ํ์ ์ํด ๊ณต๋ถ๋ฅผ ํ์ง๋ง ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ, ์๊ฐํ ๊ณผ์ ๋ฑ์ ๋ํด ํ์ตํ ์ ์์๊ณ 1์ค ๋จ์๋ก ์คํํ๋ค๋ ์ ์์ ํ์ด์ฌ์ ๋นํด ๋ถํธํ๋ ์ ์ด ๋ง์๋ค.
๊ทธ๋๋ ๋๋ถ์ ๊ทธ๋์ ์์ ๋ชฐ๋๋ R ํจ์๋ค์ ์ง์ ๋ค๋ค๋ณด๋ ๊ณ๊ธฐ๊ฐ ๋์๋ค.
ํ์ด์ฌ ๊ณต๋ถ๋ฅผ ๋ ์ด์ฌํ ํ์๋ ์์์ด ์๊ธฐ๋๋ก ๋ง๋ค์ด์ค ์ธ์ด..