데이터프레임을 정의하고 데이터를 이해하기 위해선 다음과 같은 작업을 수행한다. 함수를 사용하지 않은 코드 실행한 결과를 보면, 결과를 한 눈에 파악하기 어렵다는 단점이 있다. 이러한 단점을 해결하고자 데이터 이해를 위한 정보가 함축된 데이터프레임을 생성하는 함수를 정의하였다.
함수를 정의했을 때와 함수를 사용하기 전의 실행 결과를 비교하기 위해 사용한 데이터는 Kaggle datasets, ‘Forecasting Mini-Course Sales’에서 다운받아서 사용하였고 코드 실행은 Jupyter notebook 에서 진행하였다.

함수 사용 X

# 데이터 크기 출력
print(df.shape)

# 데이터 정보
print(train.info())

# 데이터 파악(df의 상위 3개, 하위 3개 데이터 출력)
display(df.head(3))
display(df.tail(3))

# 데이터 개수 파악(전체 개수, 유일값, 결측값)
display(df.describe(include='all'))
Fig 1. 위 코드의 실행 결과


데이터를 불러와서 그 데이터를 이해하기 위해선 위와 같은 작업을 포함한다. 위 코드를 실행하면 스크롤을 통해 각 정보를 확인해야된다는 점에서 한 눈에 전체 데이터를 이해하기엔 어렵다. 그래서 중요한 정보를 하나의 데이터프레임으로 요약하여 전체 데이터를 한 눈에 파악하기 좋게 summary용 df를 생성하는 함수를 정의해 보았다.

함수 사용 O

def summary(df):
    print(f'data shape: {df.shape}')
    describes = df.describe(include='all', datetime_is_numeric=True).T
    # summary용 dataframe 생성
    summary_df = pd.DataFrame(df.dtypes, columns=['data type'])
    summary_df['#unique'] = df.nunique().values
    summary_df['#missing'] = df.isnull().sum().values
    summary_df['%missing'] = df.isnull().mean().values * 100
    if 'min' in describes.columns:
        summary_df['min'] = describes['min'].values
        summary_df['max'] = describes['max'].values
    if 'top' in describes.columns:
        summary_df['top'] = describes['top'].values
        summary_df['freq'] = describes['freq'].values
    summary_df['1st value'] = df.loc[0].values
    summary_df['2nd value'] = df.loc[1].values
    summary_df['3rd value'] = df.loc[2].values
    return summary_df
Fig 2. 함수 사용 결과


summary 용 데이터프레임을 생성하기 위한 함수를 보면 if 문을 두 번 사용했는데 이는 주어진 데이터가 모두 숫자로 이루어진 경우 또는 문자열로 이루어진 경우를 고려하기 위해서이다. 또한 문자, 숫자 두 형태 모두를 포함하는 데이터는 min, max, top, freq 컬럼이 모두 출력된다.

💡 datetime_is_numeric=True

만약 날짜 데이터가 있는 데이터프레임에 describe 함수를 사용하면 아래와 같은 메시지가 발생한다.


메시지를 해석해 보면 pandas에선 이후 버전에 datetime을 카테고리 값으로 여기지 않고 숫자로 취급하여 기술 통계낼 것이라는 뜻이다. 오류 메시지를 발생시키지 않으려면 datetime_is_numeric=True 을 인수로 전달하라는 메시지를 포함하고 있다. warnings 를 사용하여 오류메시지를 무시하는 방법(날짜 데이터가 카테고리 값으로 취급되어 top, freq 등의 기술통계값을 반환함)도 있지만 describe 함수를 사용하여 기술통계값을 낼 때, datetime_is_numeric=True 를 사용하도록 하여 오류 메시지가 발생되지 않도록 하는 것이 좋다. 적용 예시는 아래와 같다.

Fig 3. 날짜 데이터를 포함할 때, 함수 사용 결과


Fig 3는 Kaggle datasets, ‘Forecasting Mini-Course Sales’ 데이터 컬럼 중 ‘date’ 를 pandas의 to_datetime 함수를 사용하여 날짜 데이터로 변환하고 함수를 적용했을 때의 결과이다.
Fig 2와 Fig 3을 비교해 보면, date 컬럼의 dtypes가 object에서 datetime으로 변경되었음을 알 수 있다.

  • object일 때: min, max 가 NaN 이고 top, freq 값이 채워져있음
  • datetime일 때: min, max 값이 채워져있고 top, freq 값이 NaN 임


👩🏻‍💻개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다.

댓글남기기