psyhon의 기본 도구 "perflot""benchit"사용 방법

psyhon의 기본 도구 "perflot" "benchit" 사용 방법


python의 기준 도구perfplotbenchit의 사용 방법에 대한 개략적인 설명입니다.
두 프로그램 라이브러리는 주로'pd.DataFramenp.ndarray 성형된 여러 함수의 집행 속도 비교'를 위해 제작되었다.이 도구를 사용하면 가로축 성형 대상pd.DataFramenp.ndarray의 길이, 세로축 함수의 집행 속도를 간단하게 만들 수 있다.
물론 수신pd.DataFramenp.ndarray 이외의 함수에도 사용할 수 있다.

예제


에서 오다pandas 팁: 여러 문자열 중 임의의 (OR + 부분 일치) 검색하고자 하는 - 지는 일기 포함.
예를 들어 ↓의 책상에서 도쿄도나 지바현을 포함하는 값만 필터할 때pandas는 어떻게 썼는가.
name
0
동경 도갈 장식구
1
가나가와 현 가와사키 시
2
고사리
3
장시 성
import pandas as pd

df = pd.DataFrame({'name': ['東京都葛飾区', '神奈川県川崎市', '埼玉県蕨市', '千葉県蘇我市']})

function(df)
name
0
동경 도갈 장식구
3
장시 성
함수.
여러 가지 방법을 생각해 낼 수 있다.
def by_contains(df):
    idx = df['name'].str.contains(r'東京都|千葉県')
    return df[idx]


def by_startswith(df):
    idx = df['name'].str.startswith('東京都') | df['name'].str.startswith('千葉県')
    return df[idx]


def by_str_startswith(df):
    idx = [s.startswith('東京都') or s.startswith('千葉県')
           for s in df['name'].tolist()]
    return df[idx]


def by_np_isin(df):
    idx = np.isin(df['name'].to_numpy('<U3'), ['東京都', '千葉県'])
    return df[idx]


def by_np_or(df):
    arr = df['name'].to_numpy('<U3')
    idx = (arr == '東京都') | (arr == '千葉県')
    return df[idx]
그럼 이 함수 중 어느 것이 가장 빠릅니까?

1. perflot의 사용 방법


GitHub - nschloe/perfplot: Performance plots for Python code pip install perfplot에 설치합니다.

시간 측정 방법


시간 측정에 perfplot.bench() 함수를 사용합니다.객체가 측정 결과로 반환PerfplotData됩니다.
다음은 필수 매개변수입니다.setup 매개 변수:'정수를 수신하고 측정하고자 하는 함수에 전송할 입력 데이터'를 생성하는 함수'를 전달합니다.데이터 프레임의 경우 보통 샘플df을 제작한 후 다음과 같은 정보를 전달한다.
  • lambda n: df.sample(n, replace=True, random_state=0).reset_index(drop=True)
  • lambda n: pd.concat([df]*n, ignore_index=True, axis=0)
  • n_range 매개 변수: 함수setup에 전달되는 수량의 목록.n 이런 거 있으면 돼요.10 ** np.arange(5) 매개 변수: 측정할 함수의 목록을 전달합니다.kernels 매개 변수: 반환equality_check/True의 함수를 지정하여 각 함수가 같은 결과를 반환하는지 확인하고 서로 다른 결과를 반환하는 상황에서 오류가 발생했습니다.다음 중 어느 것이든 좋습니다.
  • 함수의 결과가 같은지 비교하지 않으면: False
  • None 반환 함수의 결과가 같은지 비교하는 경우: pd.DataFrame
  • lambda df1, df2: df1.equals(df2) 반환 함수의 결과가 같은지 비교하는 경우: np.ndarray(기본값)
  • 다음은 선택적 매개변수입니다.
    매개 변수: 도표에 표시된 함수 이름의 목록입니다.np.allclose에 건네준 명세서의 길이와 같다.지정하지 않으면 함수 이름이 바로 사용됩니다.labels 매개 변수: 가로축kernels의 라벨 이름.

    드로잉 내보내기 방법

    xlabel 실행 시간을 비교하여 얻은 접선도를 표시합니다.
    또한 n 방법을 사용하여 드로잉을 이미지로 저장합니다.

    실행 예

    import numpy as np
    import perfplot
    
    ppdata = perfplot.bench(
        setup=lambda n: df.sample(n, replace=True, random_state=0).reset_index(drop=True),
        n_range=10 ** np.arange(7),
        kernels=[
            by_contains,
            by_startswith,
            by_str_startswith,
            by_np_isin,
            by_np_or
        ],
        equality_check=lambda df1, df2: df1.equals(df2),
        xlabel='len(df)'
    )
    
    ppdata.save('perfplot.png', time_unit='s')
    
    PerfplotData.show() 방법의 PerfplotData.save() 매개 변수에 PerfplotData.save() 매개 변수의 목록에 대응하는 정수 인덱스를 제공하면 세로축은 상대 속도가 된다.
    ppdata.save('perfplot2.png', time_unit='s', relative_to=2)
    

    2. Benchit의 사용 방법


    GitHub - droyed/benchit: Benchmarking tools for Python relative_to에 설치합니다.

    시간 측정 방법


    시간 측정에 kernels 함수를 사용합니다.객체가 측정 결과로 반환pip install benchit됩니다.
    다음은 필수 매개변수입니다.benchit.timings() 매개 변수: 측정할 함수의 목록을 전달합니다.perflot의 BenchmarkObj 매개 변수와 같습니다.funcs 매개 변수: 측정하고자 하는 함수에 대한 입력 데이터 목록입니다.perflot의 kernelsinputs 파라미터에 해당한다.

    드로잉 내보내기 방법

    setup 방법n_range으로 대상을 되돌려주기 때문에 수신된 BenchmarkObj.plot() 대상의 matplotlib.figure.Figure 방법과 Figure 방법으로 그림을 출력하고 저장할 수 있다.

    실행 예

    import numpy as np
    import benchit
    
    funcs = [
        by_contains,
        by_startswith,
        by_str_startswith,
        by_np_isin,
        by_np_or
    ]
    inputs = [df.sample(n, replace=True, random_state=0).reset_index(drop=True)
              for n in 10 ** np.arange(7)]
    
    bmobj = benchit.timings(funcs, inputs)
    
    bmobj.plot(figsize=(10, 6), logx=True).savefig('benchit.png')
    

    좋은 웹페이지 즐겨찾기