복습Day
벌써 일주일이지나다니 정말 빠르다.
머신러닝도 벌써 2주차지만, 아직도 머신러닝이 낯설다.
예상과는 달리 머신러닝 자체는 <모델 선택><학습(훈련)과 예측>이라는 간단한 단계로 이루어지지만
그 전 필수단계인 <데이터EDA><데이터 전처리>부터 <모델 선택 및 튜닝>까지에 필요한 개념이 어마어마하고,
정답이 있는 게 아니라서 더 어렵고, 모호하게 느껴지는 것 같다. 답은 캐글 필사인가....
하지만 판다스도 낯설었지만 익숙해진 것처럼 반복하다보면 익숙해지겠지!
오늘 포스팅은 이번주에 공부한 여러 자료를 모아서 정리해보았다.
Matplotlib
출처: 혼란한 Matplotlib에서 질서 찾기, 이제현 - PyCon Korea 2022
https://www.youtube.com/watch?v=ZTRKojTLE8M
안 예쁜 Matplotlib 그림을 예쁘게
→ Seaborn 설정으로 산뜻하게
sns.set_context("talk") # 적절배율 paper notebook talk poster 등
sns.set_palette("Set2") #색상 변경
sns.set_style("whitegrid") #그리드 추가
plt.scatter(x,y, alpha=0.5) #불투명도 조절
시각화 모범사례 재현
시각화 방식 2가지
- 상태 기반 방식 state-based framework - 순서대로 그리는 방식
- 객체 지향 방식 object-oriented framework
- 대상을 지정해 그리는 방식
- 결과물의 일부를 수정하기 유리한 방시
- 레이아웃을 사전에 정의함 >> axes 객체 만듦
- artist 객체: 선, 면, 문자, …
#모범사례 재현 before
fig, ax = plt.subplots()
sns.violinplot(x="species", y="body_mass_g", data=df_peng,
hue="sex", split=True, ax=ax)
ax.set(xlabel="", ylabel="", title="Body mass of penguins (g)")
#모범사례 재현 after
fig, ax = plt.subplots()
sns.violinplot(x="species", y="body_mass_g", data=df_peng,
hue="sex", split=True, ax=ax)
ax.set(xlabel="", ylabel="", title="Body mass of penguins (g)")
ax.set_ylim(ymin=2000)
ax.spines[["left", "top", "right"]].set_visible(False) #왼, 오, 위 테두리 삭제
ax.tock_params(axis="y", length=0) # 틱 파라메터 눈금 길이를 0으로
ax.grid(axis="y", c="lightgray") #그리드
#그래프 윤곽석 얇게
for i, obj in enumerate(ax.collections):
ec = "gray" if i <6 else "k"
lw = 0.5 if i <6 else 1
obj.
도형 객체 삽입: Axes.add_artist(), etc.
- 데이터의 의미 설명, 데이터간 관계 표현
- plot으로 부족한 표현력 보완
결측치 처리 방법
절대적인 수치는 아니므로 참고하는 것이 좋다. 사람들마다 의견이 다른 경우가 많다.
출처: https://continuous-development.tistory.com/157
A Guide to Handling Missing values in Python
결측치 처리 가이드 https://www.kaggle.com/code/parulpandey/a-guide-to-handling-missing-values-in-python
캐글 타이타닉 데이터셋은 시계열 데이터가 아니므로 아래 표를 참고했을때 2가지 방법을 이용할 수 있다. 이때 직접 채울 수도 있지만 SimpleImputer를 사용할 수 있다.
- 지정한 상수 값을 사용한다 (Imputating with a constant value)
- 통계를 활용한 값으로 채운다 Imputation using the statistics (mean, median or most frequent) of each column in which the missing values are located
사례1. Titanic Model with 90% accuracy
https://www.kaggle.com/code/vinothan/titanic-model-with-90-accuracy
(Filling missing Values 부터 참고)
embarked 최빈값 , Fare 중앙값 활용
train_df['Embarked'].fillna(train_df['Embarked'].mode()[0], inplace = True)
test_df['Fare'].fillna(test_df['Fare'].median(), inplace = True)
Cabin 피처는 train과 test 데이터셋에서 모두 75% 이상이 결측값이므로 제거하였다
drop_column = ['Cabin'] train_df.drop(drop_column, axis=1, inplace = True) test_df.drop(drop_column,axis=1,inplace=True)
Age 피처는 train과 test 데이터셋에서 모두 15% 이상이 결측치로 포함되어 중앙값으로 채워주었다
test_df['Age'].fillna(test_df['Age'].median(), inplace = True) train_df['Age'].fillna(train_df['Age'].median(), inplace = True)
사례2. EDA To Prediction(DieTanic)
https://www.kaggle.com/code/ash316/eda-to-prediction-dietanic/notebook
호칭별 Age 평균으로 결측치 대체
결측치 대체방법 알아보며 느낀점
캐글 타이타닉 경진대회 고득점 예시를 참고했을 때 결측치 대체는 생각보다 간단하게 이루어졌다는 것을 확인할 수 있었다.
평균값, 중앙값, 최빈값 등으로 처리하고, 결측치가 많으면 컬럼을 제거했다.
실습으로 공부할 땐 결측치를 어떻게 하면 최대한 의미있는 값으로 채울 수 있을까 고민했는데, 결측치 자체에 집착(?)하기 보단 결측치 자체의 종류나 중요도를 파악하고, 그 다음에 피처엔지니어링을 어떻게 하느냐가 더 중요하다는 것을 배울 수 있었다.
캐글 공부 방법 (Kaggle)
데이터 과학 및 캐글 입문자를 위한 캐글 필사 알아보기: https://modulabs.co.kr/blog/data-science-kaggle/
- 캐글 그랜드 마스터 이유한님 커리큘럼 필사
- 캐글 마스터 Will Koehrsen의 커널 필사
- 커스텀 커리큘럼 만들기
커리큘럼 참고