본문 바로가기
카테고리 없음

데이터 분석 (EDA 과정 정리)

by gokite 2021. 10. 6.

캐글 대회를 구경하다 양질의 EDA 정리를 발견했다

https://www.kaggle.com/snowpea8/osic-eda-efficientnet-quantile-reg

 

OSIC🩺EDA & EfficientNet & Quantile Reg

Explore and run machine learning code with Kaggle Notebooks | Using data from efficientnet

www.kaggle.com

 

 

 

1. 데이터 형태 확인

print("train_data shape:", train.shape)
print("test_data shape:", test.shape)

 

2. 결측값 처리

train.isnull().sum()
test.isnull().sum()

 

3.중복 데이터 처리

3-1 중복 데이터 확인

dopRows_train = train[train.duplicated(subset=["Patient","Weeks"], keep = "last")]  #중복데이터 테이블 생성

 

3-2 중복 데이터 처리

dupRows_train.drop_duplicates(subset=["Patient","Weeks"], keep="last", inplace="True")

 

4. 데이터 기본 통계 

stats = []

for col in train.columns:
	stats.append((col,
    			train[col].nunique(), #고유값 개수 
                train[col].value_counts().index[0], #최다 빈출 단어
                train[col].value_counts().values[0]. #최다 빈출수
                train[col].isnull().sum() / train.shape[0] * 100 #결측값 퍼센티지
                train[col].dtype)) #데이터 타입
                
df_stats = pd.DataFrame(stats, columns = ['Feature', 'Unique values', 'Most frequent item', 'Freuquence of most frequent item', 'Percentage of missing values',
						'Percentage of values in the biggest category', 'Type'])

df_stats.sort_values('Most frequent item', ascending = False)

 

5. 데이터 시각화 

 

5-1 데이터 전처리

data = train.groupby("Patient").first().reset_index(drop=True)

- first 함수를 써서 결측값을 제외한 환자 데이터를 만들었다. 

 

 

5-2 그래프 그리기

 

 

이런 데이터 그래프들을 그릴 것이다! (오직 형태만. 타이틀 같은 건. 생략)

 

figure, ax = plt.subplots(2,3, figsize= (16,12))

sns.distplot(data["Age"], ax=ax[0,0], bins = data["Age"].max()-data["Age"].min()+1) #0,0 그래프

sns.countplot(data["Sex"], ax=ax[0,1], data=data) #0,1 그래프

sns.countplot(data["SmokingStatus"], ax=ax[0,2], data=data,
			order = ["Never smoked", "Ex-smoker", "Currently smokes"]) #0,2 그래프



sns.distplot(data[data["Sex"] == "Female"].Age, ax=ax[1,0], hist=False)
sns.distplot(data[data["Sex"] == "Male"].Age, ax=ax[1,0], hist=False) #1,0 그래프


sns.distplot(data[data["SmokingStatus"] == "Never smoked"].Age, ax=ax[1,1], hist=False)
sns.distplot(data[data["SmokingStatus"] == "Ex-smoker"].Age, ax=ax[1,1], hist=False)
sns.distplot(data[data["SmokingStatus"] == "Currently smokes"].Age, ax=ax[1,1], hist=False) #1,1 그래프


sns.countplot(x=data["SmokingStatus"], ax=ax[1,2], hue="Sex", data=data) #1,2 그래프