SQL 창 함수를 사용하는 방법 및 시기

SQL 창 함수가 집계와 유사하다고 생각할 수 있지만 실제로는 현재 행 주위에 지정된 길이의 행 창을 정의합니다.

넌 할 수있어,
  • 집계 연산: SUM, COUNT, MAX, MIN
  • 순위: RANK, DENSE_RANK, ROW_NUMBER, NTILE
  • 값: LAG, LEAD, FIRST_VALUE, LAST_VALUE

  • 창 함수가 정확히 무엇을 하는지 이해하기 위해 구체적인 예를 들어 보겠습니다.

    귀하가 분류 작업을 수행하는 데이터 과학자이고 다음 3시간 이내에 이벤트가 발생할지 예측하려고 한다고 가정해 보겠습니다. 데이터에서 이벤트가 정확한 시간에 발생한 경우 레이블은 1이고 그렇지 않은 경우 0입니다. 따라서 대상을 빌드하려면 백필 작업이 필요합니다. SQL 창 함수를 사용하여 수행할 수 있습니다. 먼저 데이터 프레임을 만들어 보겠습니다.

    데이터베이스를 생성할 필요가 없으며 pandasql 데이터 프레임을 통해 SQL 쿼리를 실행하기 위해 pandas 라이브러리를 사용할 것입니다(pip install pandaspip install pandasql를 통해 다운로드).

    # import libraries 
    import pandas as pd
    
    data = [
        ("2020-01-01 06:00:00", 0),
        ("2020-01-01 07:00:00", 0),
        ("2020-01-01 08:00:00", 0),
        ("2020-01-01 09:00:00", 0),
        ("2020-01-01 10:00:00", 0),
        ("2020-01-01 11:00:00", 1),
        ("2020-01-01 12:00:00", 0),
        ("2020-01-01 13:00:00", 0),
        ("2020-01-01 14:00:00", 0),
        ("2020-01-01 15:00:00", 0),
    ]
    
    # create data frame
    df = pd.DataFrame(data, columns=["datetime", "event"]) 
    
    df.head(10)
    


    데이터 프레임은 다음과 같습니다.



    문제를 해결해 봅시다:

    from pandasql import sqldf
    
    pysqldf = lambda q: sqldf(q, globals())
    
    solution = pysqldf(
    """
    SELECT datetime, event, MAX(event) OVER
    (
        ORDER BY datetime ASC
        ROWS BETWEEN CURRENT ROW AND 3 FOLLOWING
    ) as target
    FROM df
    """
    )
    
    solution.head(10)
    

    datetime 열을 사용하여 행을 오름차순으로 정렬하고 창 행을 MAX 값으로 채웠습니다. 다음은 대상 열로 얻은 데이터 프레임입니다.


    target 열에서 오전 11시 이전에 이전 3개 행에 라벨을 지정했습니다.

    좋은 웹페이지 즐겨찾기