캐글 대회를 구경하다 양질의 EDA 정리를 발견했다
https://www.kaggle.com/snowpea8/osic-eda-efficientnet-quantile-reg
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 그래프