전처리 삽질

I'm Cape·2023년 6월 5일
0

제로베이스 데이터 취업 스쿨 6주차 스터디노트 1호

ipynb?

Interactive PYthon NoteBook의 약자
확장자 왜 5글자 씩이나 함...

타이타닉 데이터 삽질

seaborn에도 타이타닉 데이터가 있으나 승선자의 이름이 없어 사용하지 못했다.

tensorflow_dataset이라는 모듈에서 타이타닉 데이터를 받을 수 있다.
확인해보니 데이터가 정제되지 않은 상태여서 쓰려다 말았다.

데이터 다운로드

def get_titanic():
    original_csv = f'{os.getcwd()}/../data/original.csv'
    if not os.path.exists(original_csv):
        TITANIC_URL = 'https://raw.githubusercontent.com/PinkWink/ML_tutorial/master/dataset/titanic.xls'
        pd.read_excel(TITANIC_URL).to_csv(f'{os.getcwd()}/data/original.csv', index=False)
    return pd.read_csv(original_csv)


titanic = get_titanic()
titanic.info()

str 사용을 피하기

seaborncountplot을 사용한다고 가정할 때,

titanic = get_titanic()
sns.countplot(titanic, x='survived')

이런식으로 하는데, counterplot의 x argument로 str을 주고 있다.
이런 부분은 안티패턴으로 알고 있다.
다음과 같은 부분에서 문제 발생 여지가 있다.

titanic = get_titanic()
sns.countplot(titanic, x='survive') # 오타의 경우
titanic.rename(columns={ 'survived': 'alive' })
sns.countplot(titanic, x='survived') # 컬럼명 변경한 경우

대표적으로 위와 같은 경우에서 미리 에러를 걸러낼 수 없다.
str 값을 constant로 지정해주거나 어디서 값을 받아오는 것이 바람직하다.
그런데 str 값을 받아올 수 있는 곳이 은근히 찾기 어려웠다.

현재는 다음과 같이 쓰고 있다.

titanic = get_titanic()
survived = titanic.survived.name
sns.countplot(titanic, x=survived)

# 오타 발생시 pylance에서 에러를 잡아줄 것 (빨간 줄 생김)
sns.countplot(titanic, x=survive)

matplotlib ticks에 str값 주기


위의 표에서 0, 1은 명시적이지가 않다.
헷갈릴 여지가 있으니 dead, alive로 변경하고 싶다.

sns.countplot(x=titanic.survived) \
    .set_xticks(ticks=[0, 1], labels=['dead', 'alive'])

물론 pandas에서 DataFrame의 값을 변경할 수 있지만,
데이터가 많다면 시간과 메모리의 소모가 클 것임을 예상가능
그러니 시각화 library에서 변경하는 것이 낫다.

참고로, seaborn도 결국 matplotlib을 쓰고 있기 때문에
matplotlib의 method 활용이 가능한 것이다.

아마 항상 되지는 않을 것으로 생각된다.
궁금하다면 공식문서를 참조하면 된다.

profile
Impact

0개의 댓글