반응형
Remind
이전 글에서 HR 도메인 지식을 정리하고 모델링 구축을 계획했다.
모델링에 앞서 데이터를 이해하고 문제 해결을 위한 가설을 형성하기 위해 EDA 작업이 필요하다.
데이터의 기본 구조 이해
데이터의 크기, 칼럼(변수) 이름과 데이터 타입 확인
- info 매서드로 데이터의 타입 확인
- 35개의 컬럼
- 1470개의 행
- int64(26)와 object(9) 타입으로 이루어져 있음
employee_df.info()
데이터 샘플 확인
- head 매서드를 사용해 앞부분 5개의 행 출력
기술 통계량 확인
- decribe 매서드를 사용하여 평균(mean), 중앙값(median), 표준편차(std), 최솟값(min), 최댓값(max) 등 기술 통계량 확인
- number 타입만 기술 통계량을 구할 수 있기에 object 타입을 가진 9개의 칼럼을 제외한 26개의 컬럼 출력
employee_df.describe()
시각화
bool 타입 정수로 대체
- Attrition, OverTime, Over18 -> 1과 0으로 대체
employee_df['Attrition'] = employee_df['Attrition'].apply(lambda x:1 if x == 'Yes' else 0)
employee_df['OverTime'] = employee_df['OverTime'].apply(lambda x:1 if x == 'Yes' else 0)
employee_df['Over18'] = employee_df['Over18'].apply(lambda x:1 if x == 'Y' else 0)
결측치 시각화
- heatmap을 사용하여 결측치 시각화
sns.heatmap(employee_df.isnull(), yticklabels= False, cbar = False, cmap = 'Blues')
각 변수별 분포도 확인
- 변수별 분포도를 histogram 그래프로 시각화
employee_df.hist(bins = 30 , figsize = (20, 20), color = 'r')
필요 없는 변수 제거
- 하나의 변수의 값만 갖고 있는 변수(EmployeeCount, StandardHours, Over18)는 모델에 포함시킬 필요가 없기에 drop을 사용해 제거
- 아무런 정보를 담고 있지 않은 인덱스 변수(EmployeeNumber)도 제거
employee_df.drop(['EmployeeCount', 'StandardHours', 'Over18', 'EmployeeNumber', ], axis = 1, inplace = True)
두 변수간 비교
- countplot 매서드를 통해 빈도수 시각화
- hue의 설정한 값에 따라 분류
sns.countplot(x = 'Age', hue = 'Attrition', data = employee_df)
plt.subplot(411)
sns.countplot(x = 'JobRole', hue = 'Attrition', data = employee_df)
plt.subplot(412)
sns.countplot(x = 'MaritalStatus', hue = 'Attrition', data = employee_df)
plt.subplot(413)
sns.countplot(x = 'JobInvolvement', hue = 'Attrition', data = employee_df)
plt.subplot(414)
sns.countplot(x = 'JobLevel', hue = 'Attrition', data = employee_df)
변수간 상관관계 분석
상관계수 분석
- 각각의 변수 간의 선형 관계의 강도와 방향을 측정한다.
- 두 변수 간의 연관관계를 수치로 쉽게 알 수 있다.
# int값만 선택
numeric_df = employee_df.select_dtypes(include=['number'])
# 상관관계 분석
correlations = numeric_df.corr()
f, ax = plt.subplots(figsize = (20, 20))
sns.heatmap(correlations, annot = True)
범주형 변수와 연속형 변수의 관계 분석
- 특정 그룹(범주)이 연속적인 특성(값)에 어떤 영향을 미치는지 파악한다.
sns.boxplot(x = 'MonthlyIncome', y = 'Gender', data = employee_df)
sns.boxplot(x = 'MonthlyIncome', y = 'JobRole', data = employee_df)
반응형
'프로그래밍 > AI&Data' 카테고리의 다른 글
머신러닝[Machine Learning] - 선형회귀(Linear Regression) (0) | 2024.12.05 |
---|---|
데이터 사이언스 [Data Science] - HR - 전처리(인코딩 및 스케일링) (4) | 2024.11.30 |
데이터 사이언스 [Data Science] - HR - 비즈니스 사례 이해 및 모델 구축 계획 (1) | 2024.11.28 |
[Teachable Machine] 학습태도 및 성향관찰 분석 모델링 (0) | 2024.09.14 |
[도서 리뷰] 박태웅의 AI 특강 (1) | 2024.05.16 |