코딩스토리

8 일차 - 데이터 분석 프로젝트 3 본문

데이터 분석

8 일차 - 데이터 분석 프로젝트 3

kimtaehyun98 2021. 2. 3. 19:18

# 이 글을 "Do it! 쉽게 배우는 R 데이터 분석"의 내용을 바탕으로 작성한 글입니다.

 

드디어 데이터 분석 프로젝트 마지막 날이다.

 

이제는 전처리 같은 과정은 어느 정도 할 수 있어진 것 같다.

 

바로 분석으로 넘어가 보자.

 

1. 성별 직업 빈도

 

"성별로 어떤 직업이 가장 많을까?"에 대한 질문에 답해 보자.

 

남성과 여성 두 성별에 대해 각각 어떤 직업을 많이 가지고 있는지 분석해보자.

 

이미 필요한 모든 변수들에 대한 전처리를 앞에서 진행했으므로 바로 분석해보면

 

# 남성 직업 빈도 상위 10개 추출
job_male <- welfare %>%
  filter(!is.na(job) & sex == "male") %>%  # 결측치 제거 $ 남성
  group_by(job) %>%                       # 직업 기준 그룹화
  summarise(n = n()) %>%                  # 빈도수 -> 몇 명인지
  arrange(desc(n)) %>%                    # 내림차순 정렬
  head(10)                                # 상위 10개 추출

# 그래프로 나타내기
ggplot(data = job_male, aes(x = n, y = reorder(job, n))) +
  geom_col()

 

앞의 분석들과 거의 비슷하나 summarise() 함수의 인자가 조금 특이한 것을 알 수 있다.

 

앞에서 공부했던 내용인데 내가 언급을 안 했던 것 같아서..

 

말 그대로 빈도수, 즉 몇 명인지로 요약하겠다는 의미이다.

 

즉 각 직업별로 group_by를 통해 묶어놨으므로 요약은 각 그룹당 몇 명인지로 요약하겠다는 코드이다.

 

 

여성도 분석하는 방법은 거의 똑같다.

 

# 여성 직업 빈도 상위 10개 추출
job_female <- welfare %>%
  filter(!is.na(job) & sex == "female") %>%  # 결측치 제거 $ 남성
  group_by(job) %>%                       # 직업 기준 그룹화
  summarise(n = n()) %>%                  # 빈도수 -> 몇 명인지
  arrange(desc(n)) %>%                    # 내림차순 정렬
  head(10)                                # 상위 10개 추출

# 그래프로 나타내기
ggplot(data = job_female, aes(x = n, y = reorder(job, n))) +
  geom_col()

 

두 성별 모두 작물 재배 종사자가 매우 많음을 알 수 있다.

 

아마도 아직까지는 농사 하시는 분들이 많아서 그런 게 아닐까 싶다..

 

 

2. 종교 유무에 따른 이혼율

 

"종교가 있는 사람들이 이혼을 덜 할까?" 라는 질문에 답해보자.

 

음.. 신기한 주제네요.

 

일단 종교, 혼인 변수는 아직까지 한번도 사용한 적이 없기에 전처리 과정을 거쳐야 한다.

 

다행히 우리가 사용하는 데이터에는 종교가 있고 없고만 알려주기 때문에 엄청 복잡하진 않을 것 같다.

 

# 종교 유무 이름 부여
welfare$religion <- ifelse(welfare$religion == 1, "YES", "NO")

# 혼인 상태 전처리 -> 이혼 했는지 안했는지만 알려주는 변수 생성
welfare$divorce <- ifelse(welfare$marriage == 1, "Marriage",
                         ifelse(welfare$marriage == 3, "Divorce", NA))

 

이렇게 변수에 대해 전처리를 했으므로 본격적인 분석에 들어가 보자.

 

이해하기에 어렵진 않았으나 살짝 다른 점이 있어서 살펴보면

 

이번엔 '이혼율', 즉 비율을 계산하여야 하므로 비율 파생변수들을 만들어 줬음을 알 수 있다.

 

이제 어떻게 이혼율을 다뤄야 하는지 알았으니 이를 사용해 비슷한 분석을 해보자.

 

이번엔 "연령대 및 종교 유무에 따른 이혼율 그래프"를 만들어보자.

 

# 연령대, 종교, 결혼 상태 비율표 만들기
age_religion_marriage <- welfare %>%
  filter(!is.na(divorce) & age_group != "young") %>%
  group_by(age_group, religion, divorce) %>%
  summarise(n = n()) %>%
  mutate(sum_group = sum(n)) %>%
  mutate(ratio = round(n/sum_group*100,1 ))

age_religion_marriage

# 연령대 및 종교 유무별 이혼율 표 만들기
df_divorce <- age_religion_marriage %>%
  filter(divorce == "Divorce") %>%       # 이혼에 관한 정보만 뽑음
  select(age_group, religion, ratio)      # 연령대, 종교, 비율만 뽑음

# 그래프로 표현
ggplot(data = df_divorce, aes(x=age_group, y=ratio, fill=religion)) +
  geom_col(position = "dodge")   # 막대 두개로 분리

 

코드가 길어서 일일이 설명하긴 어렵지만 앞에 했던 분석들을 잘 이해했다면 쉽게 넘어갈 수 있다.

(참고로 책이랑 변수를 다르게 쓴 게 많아서 책과 비교하면 조금 다를 수 있어요!)

 

 

3. 지역별 연령대 비율

 

"노년층이 많은 지역은 어디일까?"에 대한 질문에 답해보자.

 

이번에도 '지역' 변수를 처음 사용하기 때문에 빠르게 전처리 해보자.

 

# 지역 변수 전처리
# 지역 코드 목록 만들기
list_region <- data.frame(code_region = c(1:7),
                          region = c("서울",
                                     "수도권(인천/경기)",
                                     "부산/경남/울산",
                                     "대구/경북",
                                     "대전/충남",
                                     "강원/충북",
                                     "광주/전남/전북/제주도"))

# 지역명 변수 추가 -> 두 df 합치기
welfare <- left_join(welfare, list_region, id = "code_region")

 

어디서 많이 본 코드다. 그죠?

 

left_join을 통해 지역명을 추가시켜주었다.

 

아직 by와 id의 차이점을 알아내지 못했는데 갑자기 떠오른 생각이 있긴 한데 맞는지는 잘 모르겠네..

 

어쨌든 이제 분석을 마무리해보자.

# 지역별 연령대 비율표 만들기
region_age_group <- welfare %>%
  group_by(region,age_group) %>%
  summarise(n = n()) %>%
  mutate(sum_group = sum(n)) %>%
  mutate(ratio = round(n/sum_group*100,2))

# 그래프로 표현
ggplot(data = region_age_group, aes(x = region, y = ratio, fill = age_group)) +
  geom_col() +
  coord_flip()

이번 코드에서도 딱히 어려운 점은 없었다.

 

조금 더 그래프를 이쁘게 바꿔보면

 

정렬 관련 코드는 아래의 깃허브에 올려놓았다.

 

 

 

이렇게 해서 데이터 분석 프로젝트를 끝내게 되었다.

 

사실 내가 분석했다기보다는 책의 코드를 이해한 게 전부였지만 그래도 배운 게 많은 챕터였다.

 

언제쯤 자유자재로 데이터를 분석할 수 있을까...ㅠ

 

github.com/kimtaehyun98/Data_Analysis_Project1_-

 

kimtaehyun98/Data_Analysis_Project1_-

'한국복지패널' 데이터 분석을 통한 '한국인의 삶 파악' 프로젝트. Contribute to kimtaehyun98/Data_Analysis_Project1_- development by creating an account on GitHub.

github.com

 

'데이터 분석' 카테고리의 다른 글

10 일차 - 지도 시각화  (0) 2021.02.08
9 일차 - 텍스트 마이닝  (0) 2021.02.06
7 일차 - 데이터 분석 프로젝트 2  (0) 2021.02.01
6 일차 - 데이터 분석 프로젝트 1  (0) 2021.01.30
5 일차 - 그래프 만들기  (0) 2021.01.28
Comments