EDA 진행
라이브러리 불러오기
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
데이터 불러오기
train = pd.read_csv("C:/Users/twink/Documents/카카오톡 받은 파일/train.csv")
test = pd.read_csv("C:/Users/twink/Desktop/test.csv")
sub = pd.read_csv("C:/Users/twink/Desktop/sample_submission.csv")
데이터를 불러와서 어떤 형태의 데이터가 있는지 살펴보기
pandas 의 메서드를 통한 간단한 탐색
- .head() : 상위 5개, 괄호 안에 숫자로 개수 변경 가능
train_data.head()
각 feature 에 대한 통합적인 정보 2가지
- .info()
- .describe()
train.info()
각 feature에 있는 데이터에 몇 개의 null 이 있고, 각 데이터의 type을 확인할 수 있다.
object 는 수치형이 아닌 자료형으로 이해하면 된다. 대부분 string 이다.
이때 object 인 feature 는 대부분의 머신러닝 모델에 직접적인 입력 값으로 사용할 수 없으니 전처리 과정이 필요하다.
train.describe()
describe 를 사용하여 수치형 데이터의 통계값을 추출할 수 있고 이상치를 확인한다.
- count : 개수
- mean : 평균
- std : 표준 편차
- min : 최솟값
- 25% : 제 1사분위값
- 50% : 중앙값, 중위값
- 75% : 제 3사분위값
- max : 최대
결측치 확인
train.isna().sum()
- 결측치가 없는것을 알 수 있다.
fiberID 시각화
- fiberID 가 630 쯤이 되면서 부터 그 수가 확연히 줄어드는 것을 확인할 수 있었다.
type 시각화
- seaborn 사용하기
- seaborn 은 matplotlib 기반의 시각화 라이브러리로 통계 그래프를 그리기 위한 고급 인터페이스를 제공한다.
#라이브러리 호출
import seaborn as sns
plt.figure(figsize=(10,8))
sns.countplot(y=train['type'], order=train['type'].value_counts().index)
plt.show()
type 컬럼의 값들을 count 하여 막대그래프를 사용하여 내림차순으로 정렬하였다.
-> QSO 가 다른 클래스에 비해 월등히 높은 수치로 클래스 간의 심한 불균형 클래스를 가졌다.
데이터 클래스 불균형 해결하기
1. weight balancing
train 데이터에서 각 loss 를 계산할때 특정 클래스에 대해서는 더큰 loss 를 계산해준다.
더 큰 정확도가 필요한 클래스에는 더 큰 loss를 취해주는것이다.
2. Oversampling and Undersampling
Undersamling 의 경우 파란색 데이터가 주황색 데이터보다 양이 훨씬 많은 상태이다.
현저히 양이 많은 파란색 데이터를 양이 적은 주황색 데이터에 맞춰주는 것이다.
이때, 양을 줄여버린 파란색 데이터들은 양이 많았던 원본 파란색 데이터의 대표성을 잘 지니고 있어야 하는것이 중요하다.
Oversamling 의 경우 양이 적은 주황색 데이터를 양이 많은 파란색 데이터에 맞춰주는 방법이다.
주황색 데이터의 양을 늘려줄 때 원본 주황색 데이터를 복사하는 개념이기 때문에 양이 늘어난 주황색 데이터는 양이 적었던 주황색 원본 데이터의 성질과 동일하다.
이상치 찾기
스케일링이나 feature engineering 을 위해 train 데이터셋과 test 데이터셋을 합쳐서 한번에 처리하고 데이터를 다시 나누어 큰 데이터셋으로 보았을때 이상치로 보이지 않는 데이터는 삭제하거나 가하지 않는다.
따라서 두개의 데이터셋을 합친뒤 결측치,이상치 수정 및 제거를 거치고 다시 데이터 분리해주기
- train 데이터셋과 test 데이터셋 합치기
total = pd.concat([train,test], axis=0)
- psfMag_u 과 같이 극단값이 존재하는 변수에서 이상치를 찾기위한 box plot
fig, axes = plt.subplots(2, 1, figsize=(10, 7))
columns = total.filter(regex='psf').columns.tolist()[:2]
for i, column in enumerate(columns):
sns.boxplot(y='type', x=column, data=total, ax=axes.flat[i])
axes.flat[i].grid(axis='x', linestyle='--')
axes.flat[i].set_xlim([-20, 50])
fig.tight_layout()
plt.show()
코드출처 : 매우 간단한 SDSS 데이터 시각화 - DACON
정확하게 이상치 값이라고 단정지을 수 없지만 데이콘에 있는 train 데이터셋을 활용한 box plot 과 데이터셋을 합친후의 box plot 크게 차이나지 않는것같다.
출처
https://eda-ai-lab.tistory.com/13
https://dacon.io/codeshare/4899
https://www.kaggle.com/code/subinium/kakr-eda/notebook
https://techblog-history-younghunjo1.tistory.com/74
https://www.codeit.kr/community/questions/UXVlc3Rpb246NjBlZTc0YzMyOGRjMDY2Y2ZlYWYwZGE0
'WIDA > DACON 분류-회귀' 카테고리의 다른 글
[DACON/최다예] 파이썬을 이용한 EDA (0) | 2023.04.07 |
---|---|
[DACON/김규리] 파이썬을 이용한 EDA (0) | 2023.04.07 |
[DACON/김세연] 파이썬을 이용한 EDA (0) | 2023.04.07 |
[DACON/조아영] 파이썬을 이용한 EDA (0) | 2023.04.07 |
[DACON/김민혜] 파이썬을 이용한 EDA (0) | 2023.04.07 |