한국 복지 패널 데이터를 사용한 한국 가구의 소득 현황 분석
📕 한국복지패널데이터: 한국보건사회연구원에서 가구의 경제 활동을 연구해 정책지원에 반영할 목적으로 발간하는 조사 자료
dta_df = pd.read_stata("file_link.dta")
xlsx_df = pd.read_excel("file_link.xlsx")
meta1_17 = meta1[['17차 - 가구용, 가구원용, 복지인식 머지 데이터 파일' , 'Unnamed: 50','Unnamed: 51']]
meta1_17.rename(columns = {'17차 - 가구용, 가구원용, 복지인식 머지 데이터 파일':'대구분',
'Unnamed: 50': '소구분',
'Unnamed: 51': 'Code'},inplace = True)
meta1_17.drop([0],inplace = True)
meta1_17.dropna(axis = 0, inplace= True, subset = ['Code'])
df2.drop(['jobcode'], axis=1, inplace = True)
meta1_17[meta1_17['Code'].isna()]
df2.isna().sum()
meta1_17['대구분'].fillna(method = 'ffill',inplace = True)
meta1_17['구분'] = meta1_17.apply(lambda x : (x['대구분']+'_'+x['소구분'])
if x['소구분']!='nan'
else x['대구분'],
axis = 1)
meta2_17 = meta2[meta2['해당 차수'].str.contains('17',na=False)]
pd.set_option('display.max_columns', None) ## 모든 열을 출력한다.
df.info(verbose=True,show_counts=True)
pd.options.display.max_rows = 60
pd.options.display.max_columns = 20
def find_code(codes):
codes_temp=[]
for code in codes:
codes_temp.append(code.replace('17',""))
#print(codes_temp)
return meta2_17.loc[meta2_17['변수명\n(기존변수에서 차수를 삭제한 형태)'].isin(codes_temp)]
# 범주형 데이터 dict
col_opt_sex = {1:'남', 2:'여'}
col_opt_mar = {0:'비해당(18세 미만)', 1:'유배우', 2:'사별', 3:'이혼', 4:'별거', 5:'미혼', 6:'기타(사망등)'}
col_opt_rel = {1:'있음', 2:'없음'}
col_opt_reg = {1:'서울', 2:'수도권(인천/경기)',3:'부산/경남/울산', 4:'대구/경북', 5:'대전/충남', 6:'강원/충북', 7:'광주/전남/전북/제주도'}
# 범주형 데이터 한글변환
df['Sex'] = df['Sex'].map(col_opt_sex)
df['MaritalStatus'] = df['MaritalStatus'].map(col_opt_mar)
df['Religion'] = df['Religion'].map(col_opt_rel)
df['RegionCode'] = df['RegionCode'].map(col_opt_reg)
import numpy as np
df['Sex'] = np.where(df['Sex'] == 1, 'male', 'female')
df2= pd.merge(df, meta3_jobcode, left_on='Jobcode', right_on= 'jobcode',how='left')
def age_div(birth):
if birth > div1:
return '미성년'
elif div1 >= birth > div2:
return '청년'
elif div2 >= birth > div3:
return '중년'
elif div3 >= birth > div4:
return '장년'
elif div4 >= birth:
return '노년'
df2['AgeGroup'] = df2['Birth'].apply(age_div)
df_inc = df2[(df2['Income'] != 0)]
df_inc.groupby('Sex')['Income'].mean().sort_values(ascending = False)
# 성별에 따른 연령대 분포
sns.countplot(data = df_inc, x= 'AgeGroup',hue = 'Sex', order = age_order)
plt.title('소득이 있는 인구의 성별에 따른 연령대 분포')
sex_order = ['남','여']
sns.countplot(data = df3, x= 'AgeGroup',hue = 'Sex', order = age_order, hue_order=sex_order)