티스토리 뷰

반응형

 

 

1.성별 직업 빈도 - 성별로 어떤 직업이 가장 많을까?

 

먼저 남성 직업 빈도 상위 10개 추출 해보자

job_male = welfare.dropna(subset = ['job']) \
    .query('sex == "male"') \
    .groupby( 'job' , as_index =False) \
    .agg(n = ('job' , 'count')) \
    .sort_values('n' , ascending = False) \
    .head(10)
job_male

결측치 제거해주고 성별은 male로 고정시키자 그리고 job별로 그룹을 해주고  데이터값은 job의 빈도로 고정시키자. 이후 내림차순으로 나열하자.

# 여성 직업 빈도 상위 10개 추출
job_female = welfare.dropna(subset = ['job']) \
 .query('sex == "female"') \
 .groupby('job', as_index = False) \
 .agg(n = ('job', 'count')) \
 .sort_values('n', ascending = False) \
 .head(10)
job_female
# 남성 직업 빈도 막대 그래프 만들기
sns.barplot(data = job_male, y = 'job', x = 'n').set(xlim = (0, 500))

 

sns.barplot( data = job_female , y = 'job' , x = 'n', hue = 'job')

결론: 남여에따라 직업이 위 그래프 처럼 다른 것을 알 수 있다.

 


2.종교 유무에 따른 이혼율 - 종교가 있으면 이혼을 덜 할까?

2-1) 종교 비율 구하기

welfare['religion'].value_counts() # 빈도 구하기

2.0 7815
1.0 6603
Name: religion, dtype: int64

 

. 위의 코드의 출력 결과를 보면 종교가 있는 사람이 6,603명, 없는 사람이 7,815명입니다. 1,2 로 되어 있으므로 컬럼을 yes & no 로 바꿔주자

# 종교 유무 이름 부여
welfare['religion'] = np.where(welfare['religion'] == 1, 'yes', 'no')
# 빈도 구하기
welfare['religion'].value_counts()
religion
no     7815
yes    6603
Name: count, dtype: int64
# 막대 그래프 만들기
sns.countplot(data = welfare, x = 'religion' , hue = 'religion')

2-2) 이혼률 구하기

 

일단은 결혼 여부가 코드로 되어있기에 1은 marriage로 3은 divorce로  2는 etc로 설정하자.

# 이혼 여부 변수 만들기
welfare['marriage'] = np.where(welfare['marriage_type'] == 1, 'marriage',
 np.where(welfare['marriage_type'] == 3, 'divorce',
 'etc'))

 

컬럼을 바꿨으니 이제 이혼률에 따른 데이터 프레임을 만들어주자

 

# 이혼 여부별 빈도
n_divorce = welfare.groupby('marriage', as_index = False) \
 .agg(n = ('marriage', 'count'))
n_divorce
# 막대 그래프 만들기
sns.barplot(data = n_divorce, x = 'marriage', y = 'n', hue = 'marriage')

실습 종교 유무에 따른 이혼율 분석하기

rel_div = welfare.query('marriage != "etc"') \# etc 제외
 .groupby('religion', as_index = False) \# religion별 분리
 ['marriage'] \# marriage 추출
 .value_counts(normalize = True)# 비율 구하기

 

이제  종교 여부에 따른 결혼비율과 이혼비율에 대한 데이터 프레임을 만들었으니 그래프를 만들어보자

 

# divorce 추출
# 백분율로 바꾸기
# 반올림
rel_div = rel_div.query('marriage == "divorce"') \
 .assign(proportion = rel_div['proportion'] * 100) \
 .round(1)
rel_div

이혼율은 종교가 있으면 8.0%, 종교가 없으면 9.5% 입니다. 따라서 종교가 있는 사람이 이혼을 덜 한다고 볼 수 있습니다

 

연령대 및 종교 유무에 따른 이혼율 분석하기

welfare.query('marriage != "etc") \
	.groupby('age_range' , as_index = False) \
    ['marriage'] \
    .value_counts()

 

출력 결과를 보면 연령대별로 이혼율이 다릅니다. 중년층이 8.9%로 가장 높고 그 뒤로는 노년층 8.5%, 초년층 5% 순으로 높습니다.

 

# 연령대 및 이혼 여부별 빈도
welfare.query('marriage != "etc"') \
 .groupby('age_range', as_index = False) \
 ['marriage'] \
 .value_counts()

 

또한 연령대 별로 이혼 여부부별 빈도를 보았을 때 young 범위는 확연히 적은 것을 볼 수 있다. 그렇기에 분석시에 제외하겠다.!!

age_div = age_div.query('age_range != "young" & marriage == "divorce"')\
    .assign(proportion = age_div['proportion'] * 100)\
    .round(1)
age_div

 

또한 기존의 proportion 컬럼을 백분율로 바꾸고 소숫점 첫째 자리까지 반올림 하겠다. 그리고 age_div에 young을 제외한 컬럼만 뽑아내자.

sns.barplot( data = age_div , x = 'age_range' , y = 'proportion' ,hue = 'age_range')

보면 middle이 조금더 많은 이혼률을 볼 수 있다.

 

그렇다면 다음은 연령대 및 종교 유무에 따라 이혼률 표를 만들어보자

 

 

# etc 제외, 초년 제외
# ageg, religion별 분리
# marriage 추출
# 비율 구하기
age_rel_div = welfare.query('marriage != "etc" & age_range != "young"') \
 .groupby(['age_range', 'religion'], as_index = False) \
 ['marriage'] \
 .value_counts(normalize = True)
age_rel_div

etc와 young 범주는 제외하고 age_range와 religion끼리 묶는다 그리고 marriage만 뽑아내고 비율을 구한다.

 

# divorce 추출
# 백분율로 바꾸기
# 반올림
age_rel_div = \
 age_rel_div.query('marriage == "divorce"') \
 .assign(proportion = age_rel_div['proportion'] * 100) \
 .round(1)
 
age_rel_div

이후 백분율로 바꾸고 반올림해준다.

 

# 막대 그래프 만들기
sns.barplot(data = age_rel_div, x = 'age_range', y = 'proportion', 
 hue = 'religion'

 

 

결론: 출력된 표와 그래프를 보면 중년과 노년 모두 종교가 없는 사람의 이혼율이 더 높습니다. 중
년은 1.3%, 노년은 1.8% 정도로 종교가 없는 사람의 이혼율이 더 높습니다.

 

 

 

 

여기까지 하겠다. 이렇게 데이터 분석을 마쳐보겠습니다. 다음은 텍스트 마이닝을 한 번 해볼게요!!

 

반응형