본문 바로가기

카테고리 없음

6일차 - 4월 18일

수량과수량;상관계수 
수량과카테고리:상관비
카테고리와 카테고리:크래머의 연관계수

귀무가설이 채택안했다고 해서 대립가설이 채택되는건 아님!

카이제곱검정(변수간차이확인)

변수<-xtabs(~변수1 + 변수2, data = 데이터셋)
chisq.test




!!!!!!!!!!!!!!!!!!그룹간 평균을 비교하는 t검정!!!!!!!!!!!!!!!!!!!!!!!

t.test(data = 데이터셋, 변수2 ~ 변수1, var.equal = T) -----> *분산이 동일하다 가정

변수2: 그룹간 평균을 구할 수 있는 변수 (수치데이터) 
변수1: 비교하고자 하는 두 그룹으로 나뉜변수 (명목형 변수)

변수 위치 주의해서 써야함!!!!!
 


F검정은 두 집단의 분산에 차이가 있는지 검정할 때 사용하는 기법-------------->var.test()함수



세개 이상의 집단간평균차이가 있는지 검정하는 분석-분산분석

1.독립성
2. 정규분포
3.등분산성*




일원분산분석-oneway.test

------> 독립변수 한개에 세가지 이상의 집단을 검정하는 것

비교집단이 등분산임을 가정 (var.equal = T) 


 

 


<과정 외우기>

1.주제선정_분석 설계

2.데이터 수집


3.<데이터가공부분>

          1.엑셀로 1차 전처리, txt파일이면 R로 전처리하기

          2.분석하기위해 컬럼만 추출.필요한 데이터만 추출

          3.각 컬럼값들 확인(이상치 유무?/ 결측치로 만들어주거나 결측치가 없는지 확인)  ------> sum(is.na()함수)

4.분석

기술통계량 확인-->describe()함수___변수들의 기술통계량을 다 확인할 수 있음
시각화_상자그림

가설검정  (f검정이나 t검정)


5.결론도출







<한국복지패널데이터로 분석해보기>


#### 한국복지패널데이터
- 한국보건사회연구원 발간
- 가구의 경제활동을 연구해 정책 지원에 반영할 목적
- 2006~2015년까지 전국에서 7000여 가구를 선정해 매년 추적 조사
- 경제활동, 생활실태, 복지욕구 등 수천 개 변수에 대한 정보로 구성

### 데이터 분석 준비하기

#### 패키지 준비하기
install.packages("foreign")  # foreign 패키지 설치
library(foreign)             # SPSS 파일 로드
library(dplyr)               # 전처리
library(ggplot2)             # 시각화
library(readxl)              # 엑셀 파일 불러오기

#### 데이터 준비하기 (Koweps_hpc10_2015_beta1.sav)
# 원시 데이터 읽기
raw_welfare <- read.spss("./data_files/Koweps_hpc10_2015_beta1.sav", to.data.frame = T)

# 복사본 만들기
welfare <- raw_welfare

####데이터검토하기 : head() / tail() / VIew() / dim() / str() / summary()

#### 변수명 바꾸기
# 대규모 데이터는 변수가 많고 변수명이 코드로 되어 있어서 전체 데이터 구조를 한눈에 파악하기 어려움
# 변수명을 쉬운 단어로 바꾼 후 분석에 사용할 변수들 각각 파악해야 함


#### 데이터 분석 절차
- 1단계. 변수 검토 및 전처리
- 2단계. 변수 간 관계 분석


## 성별에 따른 월급 차이 
## "성별에 따라 월급이 다를까?"


#### 분석 절차
### 월급 변수 검토 및 전처리
**1. 변수 검토 및 전처리**
  - 성별 / 월급

**2. 변수 간 관계 분석**
  - 성별 월급 평균표 만들기 / 그래프 만들기

### 성별 변수 검토 및 전처리 
1. 변수 검토하기
2. 전처리 (이상치 결측 처리 / 결측치 확인 / 성별 항목 이름 부여)

### 월급 변수 검토 및 전처리
1. 변수 검토하기
2. 전처리 (이상치 확인 / 이상치 결측 처리 / 결측치 확인)


### 성별에 따른 월급 차이 분석하기
1. 성별 월급 평균표 만들기
2. 그래프 만들기

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


install.packages("foreign") # 패키지 설치
library(foreign) # SPSS 파일 로드
library(dplyr) # 전처리
library(ggplot2) # 시각화
library(readxl) # 엑셀파일 불러오기

#파일 불러오기
raw_welfare <- read.spss(file = "./day6/data/Koweps_hpc10_2015_beta1.sav", to.data.frame = T)
#복사본 만들기
welfare <- raw_welfare
#데이터검토하기
head(welfare)
tail(welfare)
View(welfare)
dim(welfare)
str(welfare)
summary(welfare)
#변수명 바꾸기
welfare <- rename(welfare,
                  sex = h10_g3,
                  birth =  h10_g4,
                  marriage =  h10_g10,
                  religion = h10_g11,
                  income = p1002_8aq1,
                  code_job = h10_eco9,
                  code_region = h10_reg7) # 어떤데이터 프레임을 어떤 컬럼으로 어떤 명칭으로 이름을 바꿔서 다시 저장한다는 함수, 많이 쓰이므로 잘 알아두기  
#성별변수검토및전처리
class(welfare$sex)
table(welfare$sex)
#전처리
table(welfare$sex) # 1인 남자 수가 7578, 2인 여자 수가 9086. 만약 3 이상이 나오면 이상치 이므로 결측치 처리 해줘야함 

welfare$sex <- ifelse(welfare$sex == 9, NA, welfare$sex) #이상치를 결측치 처리 

table(is.na(welfare$sex)) # 결측치 확인 또확인확인!!!

#성별 항목 이름 부여
welfare$sex <- ifelse(welfare$sex == 1, "male", "female") # 많이 쓰므로 잘알아두기 
table(welfare$sex)
qplot(welfare$sex)

class(welfare$income)
summary(welfare$income)
qplot(welfare$income)
qplot(welfare$income) + xlim(0,1000)

#이상치 확인
summary(welfare$income)
#이상치 결측 처리
welfare$income <- ifelse(welfare$income %in% c(0,9999),NA, welfare$income) #아니면 기존값 재할당. 

#결측치 확인
table(is.na(welfare$income))



#성별에 따른 월급차이


#int 정수, dbl 소수점까지 표시

sex_income <- welfare %>% 
  filter(!is.na(income)) %>% #걸러진 na가 아닌 값들 필터링 하고
  group_by(sex) %>% #성별을 기준으로 그룹화 시키고
  summarise(mean_income = mean(income)) # summarise 함수(dplyr패키지 내장함수)
sex_income
#그래프 그리기
ggplot(data = sex_income, aes(x = sex, y = mean_income)) + geom_col()


#나이에 따른 월급 관계

#변수 검토하기
class(welfare$birth)
summary(welfare$birth)
qplot(welfare$birth)
#이상치 확인
summary(welfare$birth)
#결측치 확인
table(is.na(welfare$birth))
#이상치 결측 처리
welfare$birth <- ifelse(welfare$birth == 9999, NA, welfare$birth)
table(is.na(welfare$birth))
#파생변수 만들기-나이
welfare$age <- 2015 - welfare$birth + 1
summary(welfare$age)
qplot(welfare$age)
#나이에 따른 월급 평균표 만들기
age_income <- welfare %>% 
  filter(!is.na(income)) %>% 
  group_by(age) %>% 
  summarise(mean_income = mean(income))
head(age_income)
#그래프 만들기
ggplot(data = age_income, aes(x = age, y = mean_income)) + geom_line() #좋은 구조 


#연령대에 따른 월급차이
#파생변수 만들기 - 연령대
welfare <- welfare %>% 
  mutate(ageg = ifelse(age <30, "young",
                       ifelse(age <= 59, "middle", "old")))
table(welfare$ageg)
qplot(welfare$ageg)

#연령대별 월급 평균표
ageg_income <- welfare %>% 
  filter(!is.na(income)) %>% group_by(ageg) %>% 
  summarise(mean_income = mean(income))
ageg_income
#그래프 만들기
ggplot(data = ageg_income, aes(x= ageg, y = mean_income)) + geom_col()
#막대 정렬 - 초년, 중년, 노년 나이 순
ggplot(data = ageg_income, aes(x = ageg, y = mean_income)) + 
  geom_col() + 
  scale_x_discrete(limits = c("young", "middle", "old"))

#연령대별로 다른 성별 월급차이
#연령대 및 성별 월급 평균표
sex_income <- welfare %>% 
  filter(!is.na(income)) %>% 
  group_by(ageg, sex) %>%     # ageg로 먼저 그룹화한다음에 성별을 나누는 것이므로 둘의 순서가 바뀌면 값도 바뀜. 
  summarise(mean_income = mean(income)) #mean_income변수는 welfare변수에 없는 변수임. sex_income변수에 들어 있음. 
sex_income
#그래프
ggplot(data = sex_income, aes(x = ageg, y = mean_income, fill = sex)) + 
  geom_col() + 
  scale_x_discrete(limits = c("young", "middle", "old"))
#적은 변수를 확인하려면 geom_col(position = "dodge") 형태가 편함.  
ggplot(data = sex_income, aes(x = ageg, y = mean_income, fill = sex)) + 
  geom_col(position = "dodge") + 
  scale_x_discrete(limits = c("young", "middle", "old"))

#나이 및 성별 월급차이 분석
#성별 연령별 월급 평균표

sex_age <- welfare %>% 
  filter(!is.na(income)) %>% 
  group_by(age,sex) %>% 
  summarise(mean_income = mean(income))
head(sex_age)
#그래프 만들기
ggplot(data = sex_age, aes(x = age, y = mean_income, col = sex)) + geom_line()


#직업별 월급차이(직업별 평균급여)

#변수 검토
class(welfare$code_job)
table(welfare$code_job)

#전처리
list_job <- read_excel("./day6/data/Koweps_Codebook.xlsx", col_names = T, sheet = 2) #컬럼명들을 변수로 사용하겠다는 뜻. 읽어들일 시트는 2번째. 
head(list_job)
dim(list_job)

#welfare에 직업명 결합
welfare <- left_join(welfare, list_job, id = "code_job")
welfare %>% 
  filter(!is.na(code_job)) %>% 
  select(code_job, job) %>% 
  head(10)
 #직업별 월급 평균표
job_income <- welfare %>% 
  filter(!is.na(job) & !is.na(income)) %>% 
  group_by(job) %>% 
  summarise(mean_income = mean(income))
head(job_income)
#상위 10개 추출
top10 <- job_income %>% 
  arrange(desc(mean_income)) %>% 
  head(10)
top10
#그래프 만들기
ggplot(data = top10, aes(x=reorder(job, mean_income), y = mean_income)) + 
  geom_col() + coord_flip() #reorder함수는 job을 mean_income기준으로 재정렬해서 출력//oord_flip()은 x축을 y축으로 바꿀수 있음-위치.
#하위 10 추출
bottom10 <- job_income %>% 
  arrange(mean_income) %>% 
  head(10)
bottom10 
#그래프 만들기
ggplot(data = bottom10, aes(x = reorder(job, -mean_income), 
                             y = mean_income)) + 
  geom_col() + 
  coord_flip()



#성별 직업 빈도
#성별 직업빈도표
#남성직업빈도 상위 10개 추출
job_male <- welfare %>% 
  filter(!is.na(job) & sex == "male") %>% 
  group_by(job) %>% 
  summarise(n = n()) %>% 
  arrange(desc(n)) %>% 
  head(10)
job_male

#여성 직업 빈도 상위 10개 추출
job_female <- welfare %>% 
  filter(!is.na(job) & sex == "female") %>% 
  group_by(job) %>% 
  summarise(n = n()) %>% 
  arrange(desc(n)) %>% 
  head(10)
job_female
#남성 직업 빈도 상위 10개 직업
ggplot(data = job_male, aes(x = reorder(job, n), y = n)) +
  geom_col() +
  coord_flip()
# 여성 직업 빈도 상위 10 개 직업
ggplot(data = job_female, aes(x = reorder(job, n), y = n)) +
  geom_col() +
  coord_flip()
#종교 유무에 따른 이혼율
#변수 검토
class(welfare$religion)
table(welfare$religion)
#전처리
#종교 유무 이름 부여
welfare$religion <- ifelse(welfare$religion == 1, "yes", "no")
table(welfare$religion)
qplot(welfare$religion)
#혼인상태변수 검토 및 전처리하기
#변수 검토하기
class(welfare$marriage)
table(welfare$marriage)
#이혼여부 변수만들기
welfare$group_marriage <- ifelse(welfare$marriage == 1, "marriage", 
                                 ifelse(welfare$marriage == 3, "divorce", NA))
table(welfare$group_marriage)
table(is.na(welfare$group_marriage))
qplot(welfare$group_marriage)
#종교유무에 따른 이혼율 표 만들기
religion_marriage <- welfare %>% 
  filter(!is.na(group_marriage)) %>% 
  group_by(religion, group_marriage) %>% 
  summarise(n = n()) %>% 
  mutate(tot_group = sum(n)) %>% 
  mutate(pct = round(n/tot_group*100, 1)) #pct는 퍼센테이지 약자.round(n/tot_group*100,1)함수는 소수점 이하 1자리 까지 반올림. 
religion_marriage

#count()함수 활용
religion_marriage <- welfare %>%
  filter(!is.na(group_marriage)) %>%
  count(religion, group_marriage) %>%
  group_by(religion) %>%
  mutate(pct = round(n/sum(n)*100, 1))
#이혼율 표 만들기
#이혼 추출
divorce <- religion_marriage %>% 
  filter(group_marriage == "divorce") %>% 
  select(religion, pct)
divorce  #종교를 갖고 있는 사람보다 갖지 않은 사람의 이혼율이 조금 더 높음을 볼 수 있다.
#그래프 만들기
ggplot(data = divorce, aes(x = religion, y = pct)) + geom_col()
#연령대 및 종교유무에 따른 이혼율분석
#연령대별 이혼율 표
ageg_marriage <- welfare %>% 
  filter(!is.na(group_marriage)) %>% 
  group_by(ageg, group_marriage) %>% 
  summarise(n = n()) %>% 
  mutate(tot_group = sum(n)) %>% 
  mutate(pct = round(n/tot_group*100, 1))
ageg_marriage  
#count() 활용
ageg_marriage <- welfare %>%
  filter(!is.na(group_marriage)) %>%
  count(ageg, group_marriage) %>%
  group_by(ageg) %>%
  mutate(pct = round(n/sum(n)*100, 1))
#연령대별 이혼율 그래프 만들기
#초년 제외, 이혼 추출
ageg_divorce <- ageg_marriage %>% 
  filter(ageg !="young"&group_marriage == "divorce") %>% 
  select(ageg,pct)
ageg_divorce
# 그래프 만들기
ggplot(data = ageg_divorce, aes(x = ageg, y = pct)) + geom_col()
#연령대, 종교유무, 결혼상태별 비율표 만들기
ageg_religion_marriage <- welfare %>% 
  filter(!is.na(group_marriage)&ageg !="young") %>% 
  group_by(ageg, religion, group_marriage) %>%
  summarise(n = n()) %>%
  mutate(tot_group = sum(n)) %>%
  mutate(pct = round(n/tot_group*100, 1))
ageg_religion_marriage


#count() 활용
ageg_religion_marriage <- welfare %>%
  filter(!is.na(group_marriage) & ageg != "young") %>%
  count(ageg, religion, group_marriage) %>%
  group_by(ageg, religion) %>%
  mutate(pct = round(n/sum(n)*100, 1))

#연령대 및 종교 유무별 이혼율 표 만들기
df_divorce <- ageg_religion_marriage %>%
  filter(group_marriage == "divorce") %>%
  select(ageg, religion, pct)
df_divorce
#연령대 및 종교 유무에 따른 이혼율 그래프 만들기
ggplot(data = df_divorce, aes(x = ageg, y = pct, fill = religion )) +
  geom_col(position = "dodge")
#지역별 연령대 비율
#변수검토하기
class(welfare$code_region)
table(welfare$code_region)
#전처리
#지역코드목록만들기
list_region <- data.frame(code_region = c(1:7), 
                          region = c("서울",
                                     "수도권(인천/경기)",
                          "부산/경남/울산",
                          "대구/경북",
                          "대전/충남",
                          "강원/충북",
                          "광주/전남/전북/제주도"))
list_region
#welfare에 지역명 변수 추가
welfare <- left_join(welfare, list_region, id = "code_region")
welfare %>%
  select(code_region, region) %>%
  head
#지역별 연령대 비율표 만들기
region_ageg <- welfare %>%
  group_by(region, ageg) %>%
  summarise(n = n()) %>%
  mutate(tot_group = sum(n)) %>%
  mutate(pct = round(n/tot_group*100, 2))
head(region_ageg)

#count() 활용
region_ageg <- welfare %>%
  count(region, ageg) %>%
  group_by(region) %>%
  mutate(pct = round(n/sum(n)*100, 2))
#그레프 그리기
ggplot(data = region_ageg, aes(x = region, y = pct, fill = ageg)) +
  geom_col() +
  coord_flip()
#막대 정렬하기, 노년층 비율 높은 순
#노년층 비율 내림차순 정렬
list_order_old <- region_ageg %>%
  filter(ageg == "old") %>%
  arrange(pct)
list_order_old
# 지역명 순서 변수 만들기
order <- list_order_old$region
order
ggplot(data = region_ageg, aes(x = region, y = pct, fill = ageg)) +
  geom_col() +
  coord_flip() +
  scale_x_discrete(limits = order)
#연령대 순으로 막대 색깔 나열하기
class(region_ageg$ageg)
levels(region_ageg$ageg)
region_ageg$ageg <- factor(region_ageg$ageg,
                           level = c("old", "middle", "young"))
class(region_ageg$ageg)
levels(region_ageg$ageg)

ggplot(data = region_ageg, aes(x = region, y = pct, fill = ageg)) +
  geom_col() +
  coord_flip() +
  scale_x_discrete(limits = order)