안녕하세요? mangoseed3434입니다.
이번에는 한국보건사회연구원에서 2020년에 발간한 복지패널 데이터를 이용한 데이터 분석을 했습니다.
오늘도 'Do it! 쉽게 배우는 파이썬 데이터 분석'에 수록된 가이드를 따라하면서 포스팅을 작성합니다.

1. 데이터 분석 준비하기
우선, cmd창에 pip install pyreadstat를 입력해 pyreadstat패키지를 설치했습니다.
통계 분석 소프트웨어의 파일 형식은 SPSS, SAS, STATA 등이 있어요.
pyreadstat패키지를 이용하면 pandas 패키지의 함수를 이용해 통계 분석 소프트웨어의 파일 형식을 이용할 수 있어요.

데이터분석에 사용할 Raw Data를 할당하고, 사본을 만들어서 원본을 보존합니다.

그리고 3개의 코딩을 통해 Raw Data를 검토했어요.
df.shape : Raw Data의 행, 열 갯수 출력
df.info( ) : Raw Data의 변수 속성 출력
df.describe( ) : Raw Data의 요약 통계량 출력
특히, df.describe( )의 결과를 통해 Raw Data의 변수명들이 이해하기 어렵다는 점을 발견할 수 있었습니다.
그래서 df.rename( ) 함수를 이용해 h14_id, h14_ind처럼 이해하기 어려운 변수명을 읽기 쉬운 변수명으로 변경했어요.

복습하면,
df.rename(columns = {'기존 변수명1' : '신규 변수명1', '기존 변수명2' : '신규 변수명2'})의 형태로 작성합니다.
데이터 분석 준비과정을 정리해보자면 4단계로 정의하겠습니다.
1단계 : 패키지 설치 및 로딩하기
2단계 : Raw Data 불러오기 및 복사본 만들기
3단계 : df.shape, df.info( ), df.describe( )로 Raw Data의 구조와 특징 검토하기
4단계 : df.rename( )으로 변수명 변경하기
2. 데이터 분석 절차
데이터 분석은 2개의 단계로 진행된다고 합니다.
1단계 : 변수 검토 및 변수 전처리 (변수 특징 파악, 이상치 및 결측치 정제)
2단계 : 변수 간 관계 분석 (요약표 만들기, 그래프 만들기)
3. 성별에 따른 월급 차이
우선, 성별에 따른 월급 차이 분석을 실습했어요.
'성별' 변수와 '월급'변수의 전처리를 먼저 진행했습니다.

'성별' 변수의 특징을 파악했어요.
df.dtypes를 이용해 변수의 유형을 파악할 수 있었어요.
float64는 실수
int64는 정수
object는 문자
df.value_counts( )를 통해 변수를 구성하는 데이터의 수량(빈도, 갯수)를 파악할 수 있었어요.
특히, df.isna( ).sum( )을 통해 변수에 결측치가 없는지 파악하는게 중요했습니다.

결측치가 있다면, np.where 조건문을 이용해 결측치를 제거할 수 있습니다.

결측치를 제거한 후(사실 없었음), 데이터를 이해하기 쉽게 한 번 더 가공했어요.
동일하게 np.where 조건문을 이용해 1은 남성으로, 2는 여성으로 바꿨습니다.
이렇게 데이터를 바꾼 후, df.value_counts( )를 이용해 변동사항이 없는지 확인했습니다.
1이 6,505개, 2가 7,913개였습니다.
1은 남성으로, 2는 여성으로 변경했습니다.
남성은 6,505개, 여성은 7,913개로 출력되었습니다.
이상없네요?

다음은, '월급' 변수의 특징을 파악했습니다.
여기서 지식 + 1을 할 수 있었는데요.
변수에는 크게 2종류의 변수가 있습니다.
1. 범주 변수 : 서로 연속되지 않는 값
2. 연속 변수 : 서로 연속된 값
변수에 관한 내용은 따로 공부한 후, 다른 포스팅으로 다뤄보겠습니다!

그리고 np.where 조건문을 이용해 '월급' 변수에 결측치가 없는지 확인했어요.
이제 '성별' 변수와 '월급' 변수에 대한 전처리가 끝났습니다.

그리고 두 변수에 대한 요약표를 만들었습니다.
df.dropna(subset = ['변수'])는 '변수'의 결측치를 제거한다는 뜻입니다.
df.groupby('변수')는 '변수'의 데이터에 따라 분리한다는 뜻입니다.
df.agg(새로운 변수 = ('변수', '처리기법'))은 '변수'에 '처리기법'을 적용해 새로운 변수를 만든다는 뜻입니다.

그리고 요약표를 Bar Plot으로 시각화했습니다.
시각화를 했으면, 읽을 수 있어야합니다.
음..
male의 mean_income이 female의 mean_income보다 약 1.5배 많다는 것을 알 수 있었습니다.
4. 연령대에 따른 월급 차이
다음은 연령대에 따른 월급 차이를 분석해보았습니다.
'나이' 변수를 이용해 '연령대' 파생변수를 만들었고, '연령대'와 '월급'의 관계를 파악했습니다.

나이 계산법은 '현재 년도 - 출생년도 + 1'로 지정했습니다.
그리고 df.assign( ) 함수를 이용해 '연령대' 파생변수를 만들었습니다.
df.assign(파생변수이름 = 조건)의 형태로 ' 따옴표 ' 없이 파생변수이름을 지정했어요.

그리고 np.where 조건문을 이용해 '연령대' 파생변수를 만들었습니다.
'월급' 변수는 앞서 전처리한 데이터를 사용했습니다.

그리고 요약표를 작성합니다.
한번 더,
df.dropna(subset = ['변수'])는 '변수'의 결측치를 제거한다는 뜻입니다.
df.groupby('변수')는 '변수'의 데이터에 따라 분리한다는 뜻이에요.
df.agg(새로운 변수 = ('변수', '처리기법'))은 '변수'에 '처리기법'을 적용해 새로운 변수를 만든다는 뜻입니다.
df.sort_values('변수')는 변수를 기준으로 오름차순 정렬(기본) 혹은 내림차순 정렬(ascending = False)한다는 뜻입니다.

음.. df.sort_values( )를 이용해 mean_income을 기준으로 내림차순 정렬을 했었어요.
그랬더니 seaborn.barplot의 결과에도 정렬이 적용된 모습입니다.

하지만!
sns.barplot(data = 데이터, x = 변수, y = 변수, order = ['변수명1', '변수명2'])를 통해 그래프를 다시 정렬할 수 있었습니다.
5. 연령대 및 성별 월급 차이
'성별' 변수, '연령대' 변수, '월급' 변수에 를 이용해 성별 및 연령대에 따른 월급 차이를 분석한는 실습도 했습니다.
앞서 각 변수 전처리를 끝냈으니, 바로 요약표를 만들었습니다.

단, 이번에는 각 성별의 연령대에 따른 월급이니까,
df.groupby( )에 2개를 지정했습니다.
2개 이상의 변수를 지정할 때에는 [ 대괄호 ] 안에 변수를 작서애햐하기 때문에, df.groupby(['변수1', '변수2'])의 구조로 작성합니다.
변수1을 기준으로 먼저 구분하고, 변수2를 기준으로 구분하는 구조입니다.

그리고 Bar Plot을 통해 각 연령대에서 성별에 따른 월급 차이를 파악할 수 있었습니다.

그리고 '연령대'가 아닌 '나이'와 성별에 따른 월급 요약표도 작성해볼 수 있었습니다.

그리고 Line Plot으로 시각화해서 각 성별의 나이에 따른 월급 차이를 분석할 수 있었습니다.
조금 어렵네요.
각 변수 전처리 과정은 쉬운데, 요약표를 작성하기 위한 코드가 아직은 좀 어렵습니다.
확실하게 정리할 수 있는건 아래와 같습니다.
1단계 : 데이터 분석 준비하기
(패키지 설치/로드, Raw Data 불러오기, Raw Data 사본 만들기, Raw Data 검토하기, 변수명 바꾸기)
2단계 : 변수 전처리하기 (df.shape, df.info( ), df.describe( ), 이상치, 결측치 정제하기)
3단계 : 변수 상관관계 분석하기
(df.dropna( ).groupby( ).agg( )로 요약표 작성하기, 그래프로 시각화하기)
놀랍게도 아직 실습이 끝나지 않았습니다.
다음에는 데이터 분석 프로젝트: 한국인의 삶을 파악하기(下)를 포스팅하겠습니다~
'Python 데이터 분석 입문' 카테고리의 다른 글
| (Python 데이터 분석 입문 10편) 인터렉티브 그래프 그리기 (1) | 2025.12.27 |
|---|---|
| (Python 데이터 분석 입문 09편) 데이터 분석 프로젝트: 한국인의 삶을 파악하기(下) (0) | 2025.12.26 |
| (Python 데이터 분석 입문 07편) 그래프 그리기: Scatter Plot, Bar Chart, Line Chart, Box Plot (0) | 2025.12.22 |
| (데이터 분석 공부 1편) Box Plot 읽기 (0) | 2025.12.22 |
| (Python 데이터 분석 입문 06편) 데이터 정제하기, 결측치 정제하기, 이상치 정제하기 (0) | 2025.12.21 |