데이터 분석 준비
# 한글 폰트 설치
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
# 메뉴 - 런타임 - 런타임 다시 시작
# 라이브러리 불러오기
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
# 한글 폰트 설정
plt.rc("font", family = "NanumGothic")
# 데이터 준비
raw_welfare = pd.read_csv('/content/drive/MyDrive/hana1/data/welfare_2015.csv')
# 사본 저장
welfare = raw_welfare.copy()
# 데이터 살펴보기
# 데이터 앞부분, 뒷부분 확인
print(welfare) # 데이터프레임은 자동으로 앞부분과 뒷부분을 보여줌
print(welfare.head())
print(welfare.tail())
# 행, 열 개수
welfare.shape
# 데이터 속성
welfare.info()
# 데이터 요약 통계량
welfare.describe()
# 변수명 변경
welfare = welfare.rename(columns = {'h10_g3' : 'sex',
'h10_g4' : 'birth_year',
'h10_g10' : 'marital_status',
'h10_g11' : 'religion',
'h10_eco9' : 'job_code',
'p1002_8aq1' : 'income',
'h10_reg7' : 'region_code'
})
welfare.describe()
주제 1
성별에 따른 월급 차이 - ‘성별에 따라 월급이 다를까?’
- 분석에 사용할 변수 확인
- 변수 검토 및 전처리하기
- 성별에 따른 월급 차이 분석하기
- 성별 월급 평균표 만들기
- 그래프 만들기
데이터 전처리
# 성별에 따른 월급 차이
# 성별 변수 검토
welfare['sex'].dtypes
데이터 타입을 확인한 결과 성별의 데이터 타입이 int(정수형)임을 알 수 있었다.
빈도표로 자세히 확인해보자
# 범주형 변수 => 빈도표
welfare['sex'].value_counts()
# 9 => 모름 / 미응답 등으로 이상치 => NAN
welfare['sex'] = np.where(welfare['sex'] == 9, np.nan, welfare['sex'])
# 이상치, 결측치 확인
welfare['sex'].value_counts(dropna = False)
성별이 1 => 남자. 2 => 여자 이므로 9는 이상치(잘못된 값)으로 판단
따라서, 9의 값을 np.where 함수를 통해 NaN 값으로 바꿔주기
# 1 => 남자, 2 => 여자, NAN => NAN
welfare['sex'] = np.where(welfare['sex'].isnull() == True, np.nan,
np.where(welfare['sex'] == 1, 'male', 'female'))
# 이상치, 결측치 확인
welfare['sex'].value_counts(dropna = False)
위처럼 결과가 바뀌었다.
# 결측치 확인
welfare['sex'].isnull().sum()
결측치 확인 결과 0개
# 문자열 nan을 NAN으로 변환
welfare['sex'] = np.where(welfare['sex'] == 'nan', np.nan, welfare['sex'])
# 이상치, 결측치 확인
welfare['sex'].value_counts(dropna = False)
welfare['sex']의 값이 'nan'인 값에 대해 넘파이의 np.nan 함수를 통해 실제 nan 값으로 바꿔주기
=> NaN 개수 1개
# 빈도 막대그래프
sns.countplot(x = 'sex', data = welfare)
plt.show()
seaborn의 countplot 함수로 남성과 여성의 수 확인
=> 여성이 더 많음을 확인 가능
# 월급 변수 검토
welfare['income'].dtypes
# 연속형 변수 => 요약통계량
welfare['income'].describe()
welfare 데이터의 income 변수는 연속형 변수이므로 요약통계량 집계 가능
=> 평균은 243인데 비해 max 값이 9999로 매우 큰 값 => 이상치로 판단
# 전처리
# 이상치, 결측치 확인
welfare['income'].value_counts(dropna = False)
# 9999 => 모름 / 미응답 등으로 이상치 => NAN
# NaN => 123035개
welfare['income'].describe()
# 0 => NaN
# 9999 => 모름 / 미응답 등으로 이상치 => NAN
welfare['income'] = np.where(welfare['income'] == 9999, np.nan, welfare['income'])
# 이상치, 결측치 확인
welfare['income'].value_counts(dropna = False)
# NaN => 12036개
# 0 => NaN
welfare['income'] = np.where(welfare['income'] == 0, np.nan, welfare['income'])
# 이상치, 결측치 확인
welfare['income'].value_counts(dropna = False)
# NaN => 12050개
# 히스토그램
sns.histplot(x = 'income', data = welfare).set(xlim = (0, 1000))
plt.show()
데이터 분석
# 성별에 따른 평균 월급의 차이
welfare.info()
# NaN 이 없는 데이터
welfare.dropna(subset = ['sex', 'income'])
# 테스트 내용을 종합하여 해결
sex_income = welfare.dropna(subset = ['sex', 'income'])\\
.groupby('sex', as_index = False)\\
.agg(mean_income = ('income', 'mean'))
sex_income
# 시각화 = 막대그래프
sns.barplot(x = 'sex', y = 'mean_income', data = sex_income)
그래프 확인 결과 남성의 평균 수입이 여성의 평균 수입의 거의 2배임을 확인할 수 있다.
'Python' 카테고리의 다른 글
[python] matplotlib 그래프 색상 및 헥사 코드 (1) | 2023.06.18 |
---|---|
[python] 문자열 변환_함수 format( ) (0) | 2023.06.12 |
[Python] 데이터 전처리 (0) | 2023.06.04 |
[python] 데이터 전처리 - 널값 처리 (0) | 2023.06.01 |
[python] 데이터 시각화 (0) | 2023.06.01 |