본문 바로가기
공부 목록/IT & 프로그래밍

파이썬 시계열 데이터에서 시간 구간 추출 전처리 코드

by 독학박사 2022. 8. 16.

목차


    파이썬으로 데이터 분석을 할 때 시계열 데이터를 많이 다루게 됩니다. 데이터 분석 시 특정 시간 구간의 데이터만 추출해서 사용을 하거나 사용하고 싶지 않은 구간의 데이터를 삭제하기도 합니다. 원하는 시간 구간을 설정하고 그 구간의 데이터만 추출하는 코드에 대해서 설명하도록 하겠습니다.

     

    1. 시계열 데이터 생성

    늘 그렇듯 시간을 포함한 시계열 데이터를 구성해 보도록 하겠습니다. 지난번에 설명한 데이터를 랜덤으로 만들어 주는 함수도 같이 사용하도록 하겠습니다.

     

    import pandas as pd
    import numpy as np
    import random
    import matplotlib.pyplot as plt
    
    def random_num(row_no):
        mean = random.random()
        std = random.random()
        data = list(np.random.normal(mean, std, row_no))
        return data

     

    import를 통해 총 4개의 라이브러리를 호출하였고 random_num 함수를 정의하였습니다. random_num의 기능은 데이터의 개수를 인자로 함수를 호출하면 데이터 개수만큼의 랜덤 데이터를 반환해 주는 겁니다.

     

     

    2. 시간데이터 생성

    이제 시간데이터를 구성해 봅시다.

     

    time = pd.date_range(start='8/15/2022', end='8/16/2022', freq='T')

     

    pandas 라이브러리에서 제공하는 date_range 함수를 사용하였습니다. start와 end를 이용하여 기간을 설정하였고 freq를 이용하여 분단위 시간 간격으로 데이터를 생성하도록 했습니다. freq 입력 인자로는 H, T, S 정도로 사용하며 각각 시간, 분, 초 단위로 데이터가 생성됩니다. 이 외에도 더 많은 인자들이 있으며 pandas.pydata.org에서 추가 확인 가능합니다.

     

    데이터 셋을 구성하기 위해 위에서 생성한 time의 데이터 개수를 random_num 함수의 인자로 하여 데이터를 생성해 주면 됩니다.

     

    data = random_num(len(time))

     

    이제 데이터 셋을 만들기 위한 데이터 재료들이 준비되었습니다. time과 data를 합쳐서 dataframe으로 구성해 보겠습니다.

     

    df = pd.DataFrame(columns=['Time', 'Data'])
    df['Time'] = time
    df['Data'] = data

     

    df가 어떤 형태인지 matplotlib.pyplot을 이용하여 그래프로 가시화를 진행합니다.

     

    plt.figure()
    plt.plot(df['Time'], df['Data'])
    plt.grid()
    plt.show()

     

    시계열 데이터
    시계열 데이터

     

    2022년 8월 15일 00시부터 2022년 8월 16일 00시까지의 데이터가 만들어졌습니다.

     

     

    3. 시간 구간 추출

    생산 현장에서의 데이터는 24시간 수집을 하게끔 설정을 해 놓습니다. 하지만 데이터 분석을 할 경우에는 생산 시간의 데이터만을 추출하여 진행하게 됩니다. 이번에는 원하는 시간을 설정하고 그 시간 구간의 데이터를 추출하는 코드를 살펴보도록 합시다.

     

    year = df['Time'].dt.year[0]
    month = df['Time'].dt.month[0]
    day = df['Time'].dt.day[0]
    
    set_time1 = pd.Timestamp(year, month, day, 7, 55, 0)
    set_time2 = pd.Timestamp(year, month, day, 17, 5, 0)
    test_data = df[(df['Time']>set_time1)&(df['Time']<set_time2)].reset_index(drop=True)

     

    year, month, day는 실제 데이터에서 확인하여 사용하도록 코드를 작성하였습니다. set_time1과 set_time2에서는 원하는 시간을 설정합니다. 여기서는 7시 55분에서 오후 5시 5분까지 설정하였습니다. 이렇게 설정한 시간 구간의 데이터를 test_data에 저장하도록 하였습니다. 이를 응용하면 더 많은 구간으로 나눌 수도 있습니다. 여기서는 기본 코드로 한 개의 구간으로만 추출하겠습니다.

     

    추출한 데이터의 형태를 가시화하면 아래와 같이 x축의 범위가 바뀐 걸 확인할 수 있습니다.

     

    시계열 데이터
    특정 구간의 시계열 데이터

     

     

    4. 마치며

    파이썬의 pandas 라이브러리를 이용하여 시계열 데이터에서 특정 시간 구간의 데이터를 추출하는 방법을 정리해 보았습니다. 데이터 분석에서 시계열 데이터 분석은 자주 하게 되는데 일반적으로 데이터의 양이 너무 많아서 이렇게 데이터를 시간 구간으로 추출해서 분석해야 시간을 상당히 절약할 수 있습니다.