by kimyh
R&M ai developer
AI 모델링, 데이터 분석, 알고리즘 설계를 통해 모듈을 구축하고 제공하는 역할을 맡고 있습니다.
28 min read

Tags

dataframe 관련 전처리 함수, log, plot, 데이터 내 반복 탐지, 시간 등 다양한 데이터 처리에 있어서 활용가능한 함수를 모아둔 커스텀 전처리 패키지.

설치 명령어

pip install utilskit

classificationutils

confusion_matrix

정답 리스트와 예측 리스트를 입력받아 confusion matrix 를 생성하는 함수.

입력변수 type defalut
class_dict dict -
true_list list, np.array -
pred_list list, np.array -
ignore_idx None, int None
round_num int 2
percentage bool True
출력 type 설명
pandas dataframe confusion matrix 의 형태를 지닌 dataframe
from utilskit import classificationutils as clu

id2label_dict = {0:'고양이', 1:'개'}
t = [1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0]
p = [1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1]

print(type(id2label_dict))
cm = clu.confusion_matrix(
    class_dict=id2label_dict,
    true_list=t,
    pred_list=p,
    ignore_idx=None,
    round_num=2,
    percentage=True
)
print(cm)
'''
           고양이     개 accuracy  precision  recall  f1 score  count     0
고양이        8.0   4.0     None       73.0    67.0     69.87   12.0   NaN
개          3.0   6.0     None       60.0    67.0     63.31    9.0   NaN
count     11.0  10.0     None        NaN     NaN       NaN    NaN   NaN
accuracy   NaN   NaN      NaN        NaN     NaN       NaN    NaN  67.0
'''

class_dict type : dict

입력된 데이터에 따라 사전의 key값을 맞추어 입력해야한다.

 list = [0, 0, 0, 1, 1]
 dict = {0:"고양이", 1:"개"}
 # Valid

만약 데이터는 정수형 (id) 인데 사전의 key 는 문자열 (label) 인 경우 에러가 발생한다.

 list = [0, 0, 0, 1, 1]
 dict = {"고양이":0, "개":1}
 # Error

데이터의 unique 값이 사전 key 값 의 부분집합이 아닌 경우 에러가 발생한다.

 list = [0, 0, 1, 1, 2]
 dict = {0:"고양이", 2:"개"}
 # Error

confusion matrix 를 만들고자 하는 정답(true_list) 및 예측(pred_list) 데이터.

데이터는 동일한 데이터 타입을 지니고 있어야한다. 타입만 동일하다면 내부의 값은 달라도 상관없다.

 true_list = [0, 1, 1, 1, 0]
 pred_list = [0, 0, 1, 1, 2]
 # Valid

데이터 타입이 다른 경우 에러가 발생한다.

 true_list = [0, 1, 1, 1, 0]
 pred_list = ['고양이', '개', '개', '고양이', '고양이']
 # Error

ignore_idx type: None or int default : None

confusion matrix 를 생성할시 무시할 id 값.

입력된 데이터가 정수형(id) 인 경우만 작동한다.

 true_list = [0, 2, 1, 1, 0]
 ignore_idx = 2
 # 2 는 무시

round_num type : int default : 2

결과를 표시할시 표시할 소숫점 자릿수


percentage type : bool default : True

결과를 표시할 시 백분률을 적용할것인지 여부

percentage = True --> 67.32
percentage = False --> 0.67

dataframeutils

read_df

csv, CSV, xlsx, xls, txt 5개 확장자에 대해서 데이터를 pandas dataframe 형태로 읽어오는 함수

입력변수 type default
path str -
출력 type 설명
pandas dataframe 지정한 데이터를 지니고 있는 dataframe
df = read_df('/home/path/data.csv')
df = read_df('./data.xlsx')

path type : str

파일명을 포함한 상대경로 또는 절대경로를 입력한다.


utc2kor

pandas dataframe 에 기록된 datetime 타입의 데이터에 대해서 utc 시간대를 kor 시간대로 변경하는 함수.

입력변수 type default
df pandas dataframe -
column str 'time'
extend bool True
출력 type 설명
pandas dataframe 한국 시간대로 변경된 dataframe
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
from utilskit import dataframeutils as dfu

start_time = datetime.strptime('2025-07-22 10:05:15', '%Y-%m-%d %H:%M:%S')
end_time = start_time + timedelta(seconds=5)
time_range = pd.date_range(start=start_time, end=end_time, freq='S')
value_ary = np.random.randint(10, 20, len(time_range))
df = pd.DataFrame({
    'time':time_range,
    'value':value_ary
})
df = dfu.utc2kor(
    dataframe=df, 
    column='time', 
    extend=True
)
print(df)
'''
                 time  value             time_kor
0 2025-07-22 10:05:15     18  2025-07-22 19:05:15
1 2025-07-22 10:05:16     14  2025-07-22 19:05:16
2 2025-07-22 10:05:17     16  2025-07-22 19:05:17
3 2025-07-22 10:05:18     15  2025-07-22 19:05:18
4 2025-07-22 10:05:19     15  2025-07-22 19:05:19
5 2025-07-22 10:05:20     15  2025-07-22 19:05:20
'''

dataframe type : pandas dataframe

변경할 utc 시간 데이터가 포함되어있는 pandas dataframe

              time  value
0 2025-07-22 10:05:15     16
1 2025-07-22 10:05:16     10
2 2025-07-22 10:05:17     18
3 2025-07-22 10:05:18     13
4 2025-07-22 10:05:19     13
5 2025-07-22 10:05:20     13

column type : str default : 'time'

한국시간대로 변경하기 위해 입력할 UTC 시간대로 이루어져 있는 데이터 컬럼명.

이때 해당 컬럼 값은 python 의 datetime 형식이어야 하며 str 타입인 경우 에러 발생 가능성 존재.


extend type : bool default : True

새로운 컬럼에 생성할지 기존 컬럼에 덮어쓸지 설정.

True 인 경우 새로운 컬럼으로 확장시켜 생성하고 False 인 경우 기존 컬럼에 덮어쓴다.

새로운 컬럼의 명칭은 입력한 컬럼명_kor 이다.

adnormal2nan

pandas datafram 의 입력한 컬럼에 대해 최대, 최소값을 벗어나는 값(초과, 미만)을 NaN 값으로 치환하는 함수

입력변수 type default
dataframe pandas dataframe -
column str -
max_value int, float None
min_value int, float None
출력 type 설명
pandas dataframe 필터링이 적용된 dataframe
import numpy as np
import pandas as pd
from utilskit import dataframeutils as dfu

value_ary1 = [1, 6, 3, 8, 5]
value_ary2 = [5, 7, 2, 6, 9]
df = pd.DataFrame({'col1':value_ary1, 'col2':value_ary2})
df = dfu.adnormal2nan(
    dataframe=df,
    column='col1',
    max_value=7,
    min_value=2
)
print(df)
'''
   col1  col2
0   NaN     5
1   6.0     7
2   3.0     2
3   NaN     6
4   5.0     9
'''

dataframe type : pandas dataframe

최대, 최소 필터링을 진행할 pandas dataframe


column type : str

최대, 최소 필터링을 진행할 pandas dataframe 의 컬럼 명


max_value & min_value type : int, float default : None

입력한 컬럼의 데이터에 대해서 최대, 최소 필터링을 진행할 수치값.

지정하지 않거나 None 으로 설정하는 경우 필터링 하지 않는다.

time_filling

지정한 범위 내의 모든 시간을 초단위로 확장하여 채워넣는 함수. 확장 시 시간 외 컬럼은 NaN 값으로 채워짐.

입력변수 type default
dataframe pandas dataframe -
start str -
end str -
column str 'time'
출력 type 설명
pandas dataframe 시간 확장이 적용된 dataframe
import numpy as np
import pandas as pd
from datetime import datetime
from utilskit import dataframeutils as dfu

time_ary = ['2024-05-11 03:45:12', '2024-05-11 03:45:15', '2024-05-11 03:45:16']
value_ary = [1, 5, 6]
df = pd.DataFrame({
    'time':time_ary,
    'value':value_ary
})
print(df)
'''
                  time  value
0  2024-05-11 03:45:12      1
1  2024-05-11 03:45:15      5
2  2024-05-11 03:45:16      6
'''
df = dfu.time_filling(
    dataframe=df,
    start='2024-05-11 03:45:10',
    end='2024-05-11 03:45:20',
    column='time'
)
print(df)
'''
                   time  value
0   2024-05-11 03:45:10    NaN
1   2024-05-11 03:45:11    NaN
2   2024-05-11 03:45:12    1.0
3   2024-05-11 03:45:13    NaN
4   2024-05-11 03:45:14    NaN
5   2024-05-11 03:45:15    5.0
6   2024-05-11 03:45:16    6.0
7   2024-05-11 03:45:17    NaN
8   2024-05-11 03:45:18    NaN
9   2024-05-11 03:45:19    NaN
10  2024-05-11 03:45:20    NaN
'''

dataframe type : pandas dataframe

시간 확장을 적용할 데이터가 들어있는 pandas dataframe


start & end type : str

시간 확장을 적용할 시 시작하는 시간.

yyyy-mm-ss HH:MM:SS 의 형식으로 입력.

이때, end 는 항상 start 보다 미래의 시간이어야 한다.


column type : str default : 'time'

시간 확장을 적용할 시 dataframe 의 컬럼명

isdfvalid

pandas dataframe 이 입력한 컬럼 리스트를 전부 지니고 있는지 여부를 판단하여 True, False 를 출력하는 함수

입력변수 type default
dataframe pandas dataframe -
column_list list -
출력 type 설명
bool 입력한 컬럼의 존재 여부에 따른 True, False 출력
import pandas as pd
from utilskit import dataframeutils as dfu

df = pd.DataFrame([1, 2, 3, 4], columns=['value'])
if dfu.isdfvalid(df, ['value']):
    print('컬럼이 전부 존재합니다.')
'''
컬럼이 전부 존재합니다.
'''

datafrmae type : pandas dataframe

컬럼 유무를 확인할 pandas dataframe.


column_list type : list

dataframe 에 존재하는지 여부를 확인할 컬럼명 list.

fill_repeat_nan

일정 횟수 이상 반복되는 NaN 구간에 대해서만 앞뒤 채우기 방식으로 결측치를 채우는 함수. 매우 긴 결측치 자체가 이상 값이 아니고, 데이터 기록중간 짧은 결측구간이 있는 경우 등에 활용 가능.

입력변수 type default
dataframe pandas dataframe -
column str -
repeat int 5
출력 type 설명
pandas dataframe 결측치가 보정된 dataframe
import pandas as pd
import numpy as np
from utilskit import dataframeutils as dfu

value_ary1 = [1, np.nan, np.nan, 2, 3, np.nan, np.nan, np.nan]
value_ary2 = np.random.randint(0, 10, size=len(value_ary1))
df = pd.DataFrame({
    'value1':value_ary1,
    'value2':value_ary2
})
print(df)
'''
   value1  value2
0     1.0       1
1     NaN       7
2     NaN       7
3     2.0       7
4     3.0       3
5     NaN       2
6     NaN       1
7     NaN       1
'''
df = dfu.fill_repeat_nan(
    dataframe=df,
    column='value1',
    repeat=3
)
print(df)
'''
   value1  value2
0     1.0       1
1     NaN       7
2     NaN       7
3     2.0       7
4     3.0       3
5     3.0       2
6     3.0       1
7     3.0       1
'''

dataframe type : pandas dataframe

결측치 보정을 진행할 dataframe.


column type : str

결측치의 반복 횟수를 계산하고 보정할 컬럼명.


repeat type : int default : 5

보정할 결측치의 반복 횟수 기준. 입력한 값 이상 반복되면 해당 값은 우선 앞의 값으로 채워지고, 만약 앞의 값이 존재하지 않는 경우 뒤의 값으로 채워진다.

pin2nan(미완성)

이상치의 범위에는 속하지 않지만 데이터 흐름상 이상치로 볼 필요가 있는 국소 범위의 값을 결측치로 변경 후 앞뒤 채우기를 진행하는 함수

입력변수 type default
dataframe pandas dataframe -
column str -
max_diff float 0.1
repeat int 3
출력 type 설명
pandas dataframe 흐름상 이상치를 NaN 로 변경한 dataframe

사용예시



변수명 type : a default : a

내용

dbutils(미완성)

logutils 패키지 분리

get_logger

로그 수준의 INFO 보다 높은 수준을 전부 기록하는 전체 로그파일과 INFO 수준만을 기록하는 info.log, error 수준만을 기록하는 error.log 를 생성하는 함수

모든 생성되는 로그파일에 있어서 INFO 보다 낮은 수준(DEBUG)은 기록하지 않는다.

입력변수 type default
log_path str None
log_name str 'app'
rollover bool True
출력 type 설명
logging info, warning, error, critical 에 대한 로그 기록을 가능하도록 하는 로그 변수
from utilskit import logutils as lu
log = lu.get_logger()
# log = lu.get_logger(
#     log_path='./log',
#     log_name='whole', 
#     rollover=True
# )

log.debug("DEBUG 메시지입니다.")
log.info("INFO 메시지입니다.")
log.warning("WARNING 메시지입니다.")
log.error("ERROR 메시지입니다.")
log.critical("CRITICAL 메시지입니다.")
'''
작업디렉토리에 log 폴더 생성
app.log
2025-07-22 16:55:07,485 level:INFO test.py line 160 INFO 메시지입니다.
2025-07-22 16:55:07,485 level:WARNING test.py line 161 WARNING 메시지입니다.
2025-07-22 16:55:07,485 level:ERROR test.py line 162 ERROR 메시지입니다.
2025-07-22 16:55:07,485 level:CRITICAL test.py line 163 CRITICAL 메시지입니다.

error.log
2025-07-22 16:55:07,485 level:ERROR test.py line 162 ERROR 메시지입니다.

info.log
2025-07-22 16:55:07,485 level:INFO test.py line 160 INFO 메시지입니다.
'''

log_path type : str default : None

.log 파일을 생성할 경로값을 입력한다. 이때 log 의 이름은 포함하지 않는다.

기본값은 None 으로 되어있으며 경로를 별도 설정하지 않는 경우 자동으로 작업디렉토리/log 로 설정된다.


log_name type : str default : 'app'

.log 파일을 생성할때 만들어지는 전체 로그파일의 이름. 설정하지 않는 경우 app.log 가 자동 생성된다.

이 이름과는 별개로 info.log, error.log 가 자동으로 저장된다.

log_sort

날짜가 넘어가서 기록되는 log 파일에 대해서 폴더별로 구분하여 정리하는 함수.

저장한 로그경로_history 형태로 새로운 폴더가 생성되어 해당 위치에 저장된다.

입력변수 type default
log_path str None
출력 type 설명
return 없음 -
lu.log_sort('./log')

log_path type : str default : None

저장된 .log 파일의 날짜별 log 파일이 기록된 경로.

기본값은 None 으로 되어있으며 자동으로 작업디렉토리/log 로 설정된다.

만약 구분할 log 파일이 없어도 구분만 되지 않을 뿐 정상 작동한다.

plotutils

draw_plot

matplotlib 을 통해 하나의 메인 이미지 를 그리고 저장하는 함수

입력변수 type default
title str -
x list, np.array -
y list, np.array -
fig_size tuple, list None
x_range tuple, list None
y_range tuple, list None
x_label str None
y_label str None
legend bool False
title_font int 13
x_font int 13
y_font int 13
x_label_font int 13
y_label_font int 13
line_style str 'default'
line_size str 'default'
line_color str 'default'
marker_style str 'default'
marker_size str 'default'
marker_color str 'default'
marker_border_size str 'default'
marker_border_color str default
add_x_list list None
add_y_list list None
add_color_list list None
focus_list list None
focus_color_list list None
alpha_list list None
save_path str None
출력 type 설명
return 값 없음 -
# 필수 변수만 입력
import numpy as np
from utilskit import plotutils as plu
np.random.seed(42)
x = np.arange(100)
data = np.random.randint(5, 20, size=100)
    
plu.draw_plot(
    title='ex', 
    x=x, 
    y=data
)

basic

# 모든 변수 활용
import numpy as np
from utilskit import plotutils as plu
np.random.seed(42)
x = np.arange(100)
data = np.random.randint(5, 20, size=100)
data1 = np.random.randint(5, 20, size=100)
data2 = np.random.randint(5, 20, size=100)
    
plu.draw_plot(
    # 기본
    title='whole', x=x, y=data, 
    # 이미지 크기, 값 범위
    fig_size=(30, 8), x_range=(-10, 120), y_range=(0, 25), 
    # 라벨링
    x_label='x data', y_label='y data', legend=True,
    # 폰트 - 기본
    title_font=25, x_font=15, y_font=15,
    # 폰트 - 라벨
    x_label_font=23, y_label_font=23,
    # 선 스타일
    line_style='dash', line_size=5, line_color='cyan',
    # 마커 스타일
    marker_style='circle', marker_size=10, marker_color='white',
    # 마커 테두리 스타일
    marker_border_size=2, marker_border_color='black',
    # 추가 그리기 값
    add_x_list=[x, x],
    add_y_list=[data1, data2],
    add_color_list=['red', 'violet'],
    # 구역 강조
    focus_list=[(22, 27), (42, 53), (70, 76)],
    focus_color_list=['blue', 'red', 'violet'],
    alpha_list=[0.5, 0.75, 1],
    # 저장
    save_path='./image'
)

basic


색깔

모든 색깔 변수에 대해서 공통적용 가능

default, blue, green, red, cyan, magenta, yellow, black, white, orange, pink, khaki, gold, skyblue, navy, lightgreen, olive, violet, gray, brown


기본 구역

title type : str

이미지의 타이틀

x type : list

그래프의 x 값 리스트

y : type : list, np.array

그래프의 y 값 리스트


이미지 크기 & 값 범위

fig_size & x_range & y_range type : tuple default : None

이미지의 가로 세로의 길이(비율)

이미지에 표시될 x 값의 범위

이미지에 표시될 y 값의 범위

plu.draw_plot(
    title='fig', x=x, y=data, 
    fig_size=(30, 8), 
    x_range=(-10, 120), 
    y_range=(0, 25), 
)

fig


라벨링

x_label & y_label type : str default : None

x 및 y 에 대한 라벨 명칭

legend type : bool default : False

라벨의 legend 를 표시할지의 여부

plu.draw_plot(
    title='label', x=x, y=data, 
    x_label='x data', 
    y_label='y data', 
    legend=True
)

label


폰트 - 기본

title_font, x_font, y_font type : int default : 13

제목 글자 크기

x 축 수치 글자 크기

y 축 수치 글자 크기

plu.draw_plot(
    title='font-basic', x=x, y=data, 
    title_font=25, 
    x_font=20, 
    y_font=20
)

font-basic


폰트 - 라벨

x_label_font, y_label_font type : int default : 13

x 라벨 글자 크기

y 라벨 글자 크기

plu.draw_plot(
    title='font-label', x=x, y=data, 
    x_label_font=23, 
    y_label_font=23
)

font-label


선 스타일

line_style type : str default : 'default'

선의 스타일

입력값 형태
'default' 기본(선)
'line'
'dash' 점선
'dot'
'dast-dot' 선 + 점
line_size type : int default : 'default'

선의 굵기 값

line_color type : str default : 'default'

선의 색. 공통 색깔 변수 적용 가능.

plu.draw_plot(
    title='line', x=x, y=data, 
    line_style='dash', 
    line_size=3, 
    line_color='red'
)

line


마커 스타일

marker_style type : str default : 'default'

마커의 스타일

입력값 형태
'default' 기본 (픽셀)
'dot' 점(크기조절 안되는 작은 원)
'pixel' 픽셀
'circle' 원 ○
'triangle_down' 아래삼각형 ▽
'triangle_up' 위삼각형 △
'triangle_left' 왼쪽삼각형 ◁
'triangle_right' 오른쪽삼각형 ▷
'tri_down' 열린 아래 삼각형 ﹀
'tri_up' 열린 위쪽 삼각형 ︿
'tri_left' 열린 왼쪽 삼각형 <
'tri_right' 열린 오른쪽 삼각형 >
'square' 네모 □
'pentagon' 오각형 ⬟
'star' 별 ☆
'hexagon1' 육각형(세로) ⬡
'hexagon2' 육각형(가로)
'plus' 더하기 기호 +
'x' 엑스 기호 X
'diamond' 마름모 ◇
'thin_diamond' 얇은 마름모 ◊
marker_size type : int default : 'default'

마커의 크기

marker_color type : str default : 'default'

마커의 색깔. 공통 색깔 변수 적용 가능

marker_border_size type : int default : 'default'

마커의 테두리 굵기

marker_border_color type : str default : 'default'

마커 테두리 색깔. 공통 색깔 변수 적용 가능

plu.draw_plot(
    title='line', x=x, y=data, 
    marker_style='circle', 
    marker_size=10, 
    marker_color='white',
    marker_border_size=2, 
    marker_border_color='black'
)

marker


데이터 추가

add_x_list , add_y_list, add_color_list type : list default : None

이미지에 추가로 표시할 데이터. 기본 x, y, color 변수와 동일한 값을 list 로 감싸서 동일하게 입력.

순서에 맞춰서 적용됨

plu.draw_plot(
    title='add', 
    x=x,
    y=data, 
  	line_color='red',
    add_x_list=[x, x],
    add_y_list=[data1, data2],
    add_color_list=['red', 'violet'],
)

add


구역 강조

focus_list type : int list default : None

이미지에서 x 축을 기준으로 색을 칠해서 강조할 범위를 (시작, 끝) 의 형태로 넣은 list 값.

한 list 에 복수의 구역을 tuple 형태로 입력 가능

focus_list=[(22, 27), (42, 53), (70, 76)]
focus_color_list type : list default : None

각 강조 범위 구역에 대한 색. 공통 색 변수 지정 가능하며 list 에 입력한 순서를 따름.

값을 지정하지 않거나 default 로 해두면 색은 기본적으로 회색(gray) 로 지정됨.

alpha_list type : float list default : None

각 강조 범위 구역의 투명도. 0~1 사이의 값을 지정하며 0에 가까울수록 투명해진다.

값을 지정하지 않거나 default 로 해두면 값은 기본적으로 0.2 로 지정됨

plu.draw_plot(
    title='focus', x=x, y=data, 
    focus_list=[(22, 27), (42, 53), (70, 76)],
    focus_color_list=['blue', 'red', 'violet'],
    alpha_list=[0.5, 0.75, 1]
)

focus


저장

save_path type : str default : None

이미지를 저장할시 지정하는 경로값. 값을 지정하지 않거나 None 으로 입력하면 저장되지 않는다.

draw_subplot

하나의 이미지 내에 subplot 을 생성하여 복수의 그래프를 나열하는 함수.

기본적으로 서브 그래프들은 아래로 나열한다.

현재는 서브 그래프 각각에 대한 스타일 적용은 불가능하다.

입력변수 type default
sub_title_list list -
x_list list -
y_list list -
sub_row_idx int None
sub_col_idx int 1
x_range_list list None
y_range_list list None
fig_size tuple None
title_font int 13
x_font int 13
y_font int 13
focus_list list None
focus_color_list list None
alpha_list list None
save_path str None
save_name str None
출력 type 설명
return 값 없음  
# 필수 변수만 활용
import numpy as np
from utilskit import plotutils as plu
np.random.seed(42)
x = np.arange(100)
data = np.random.randint(5, 20, size=100)
data1 = np.random.randint(0, 50, size=100)
data2 = np.random.randint(80, 90, size=100)

plu.draw_subplot(
    sub_title_list=['data', 'data1', 'data2'],
    x_list=[x, x, x],
    y_list=[data, data1, data2]
)

sub_simple

# 모든 변수 활용
import numpy as np
from utilskit import plotutils as plu
np.random.seed(42)
x = np.arange(100)
data = np.random.randint(5, 20, size=100)
data1 = np.random.randint(50, 90, size=100)
data2 = np.random.randint(180, 190, size=100)

plu.draw_subplot(
    # 기본
    sub_title_list=['data', 'data1', 'data2'],
    x_list=[x, x, x],
    y_list=[data, data1, data2],
    # 서브 플롯의 위치
    sub_row_idx=3,
    sub_col_idx=1,
    # 이미지크기, 값 범위
    fig_size=[30, 5*3],
    x_range_list=[(0, 100), (-10, 110), (-20, 120)],
    y_range_list=[(-10, 100), (-10, 100), (150, 240)],
    title_font=30,
    x_font=30,
    y_font=30,
    focus_list=[(22, 27), (42, 53), (70, 76)],
    focus_color_list=['red', 'red', 'blue'],
    alpha_list=[0.1, 0.5, 1],
    save_path='./sub_image',
    save_name='sub_custom'
)

sub_custom


기본

sub_title_list type : list

각 서브플롯에 명시할 제목. 순서에 따라 적용된다.

x_list type : list

각 서브플롯에 적용될 x 값 리스트. 순서에 따라 적용된다.

y_list type : list

각 서브플롯에 적용될 y 값 리스트. 순서에 따라 적용된다.


서브 플롯의 위치

sub_row_idx type : int default : None

서브 플롯을 위치시킬 행 공간 index. 지정하지 않는 경우 기본적으로 입력된 데이터리스트의 갯수만큼 행이 늘어난다.

sub_col_idx type : int default : 1

서브 플롯을 위치시킬 열 공간 index. 기본적으로 1의 값을 지닌다.

row_col


이미지 크기, 값 범위

fig_size type : tuple default : None

전체 이미지의 크기(비율) 을 설정. 각 서브플롯 마다 적용되는 것이 아니라 전체에 적용되기에, 서브플롯의 위치에 따라 설정해줘야한다.

예를 들어 3개의 서브플롯을 3행으로 표현했을때, 각 행의 비율을 30, 5 로 해주고 싶다면 fig_size 의 값은 30, 15 (5 X 3) 으로 해줘야한다.

x_range_list type : list default : None

각 서브 플롯의 x 값의 범위. 각각 지정 가능

y_range_list type : list default : None

각 서브 플롯의 y 값의 범위. 각각 지정 가능.

row_col_fig


폰트

title_font type : int default : 13

각 서브플롯 제목 폰트 크기 설정

x_font type : int default : 13

각 서브플롯 x축 값의 폰트 크기 설정

y_font type : int default : 13

각 서브플롯 y 축 값의 폰트 크기 설정

sub-font


구역 강조

focus_list type : list default : None

강조 구역의 (시작, 끝) 형식의 tuple 로 구성된 list. 이때 강조 구역은 서브플롯별로 구분이 불가능하며 모든 서브플롯에 동일하게 적용된다.

focust_color_list type : list default : None

focus_list 에 설정한 각 강조 구역의 색을 설정. 색은 공통 색깔 설정 가능

alpha_list type : list default : None

focus_list 에 설정한 각 강조 구역의 색에 대한 투명도 설정. 0~1 사이의 값으로 설정하며 0에 가까울 수록 투명해진다.

sub-focus


저장

save_path type : str default : None

저장경로 설정. 만약 아무런 설정을 하지 않거나 None 으로 설정한 경우 이미지를 저장하지 않는다.

save_name type : str default : None

저장경로 설정시 저장할 이미지 파일의 이름. 만약 경로를 설정하지 않는다면 해당 변수는 아무런 의미를 지니지 않는다.

repeatutils

get_repeat_section 폐기

입력한 데이터 리스트 내에서 지정한 반복횟수 이상 반복되는 구간을 전부 추출하는 함수.

기본적으로 결측치(NaN)구간은 계산에서 제외되어있지만 설정에 따라 포함시킬 수 있다.

입력변수 type default
data list , np.array -
repeat int -
except_nan bool True
출력 type 설명
dict 반복되는 값을 key 값으로 지니고 반복되는 구역을 value 값으로 지닌 dict
import numpy as np
from utilskit import repeatutils as rpu
data = np.array(
    [
        1, 1, 1, 1, 1,  # 0 ~ 4
        2, 2, 2, 2,     # 5 ~ 8
        3, 3,           # 9 ~ 10
        4, 4, 4,        # 11 ~ 13
        np.nan, np.nan, np.nan, np.nan,  # 14 ~ 17
        1, 1, 1, 1,     # 18 ~ 21
        3, 3, 3,        # 22 ~ 24
        np.nan, np.nan, np.nan, np.nan, np.nan, # 25 ~ 29
        1, 1, 1, 1, 1, 1, 1,    # 30 ~ 36
        np.nan  # 37
    ]
)
print(data)
repeat_section = rpu.get_repeat_section(
    data=data,
    repeat=4,
    except_nan=False
)
print(repeat_section)
'''
{
    '1.0': [(0, 4), (18, 21), (30, 36)], 
    '2.0': [(5, 8)], 
    'nan': [(14, 17), (25, 29)]
}
'''

data type : list, np.array

반복되는 구간을 산정할 data 리스트. 데이터의 구성은 정수형, 문자열 전부 가능하다.

repeat type : int

반복기준 값. 지정한 값 이상 반복되는 구간을 전부 산정하게 된다.

except_nan type : bool default : True

반복되는 구간을 계산할 값 중에 NaN 을 포함시킬 시 여부. 기본적으로 불포함되어있으며 포함시킬 경우 'nan' 으로 구분된다.

get_stan_repeat_section 폐기

기준 값을 정한 다음, 입력한 데이터 내에서 해당 값이 기준 횟수 이상, 이하 또는 동일하게 반복되는 구간을 추출하는 함수.

해당구간에 대해 반전시켜 결과를 추출하는 것도 가능하다.

입력변수 type default
data list, np.array -
value all -
repeat int -
mode str 'a'
reverse bool False
출력 type 설명
list 설정값에 대해 계산된 반복 구간 (시작 index, 끝 index) tuple 로 이루어진 list
import numpy as np
from utilskit import repeatutils as rpu
data = np.array(
    [
        1, 1, 1, 1, 1,  # 0 ~ 4
        2, 2, 2, 2,     # 5 ~ 8
        3, 3,           # 9 ~ 10
        4, 4, 4,        # 11 ~ 13
        np.nan, np.nan, np.nan, np.nan,  # 14 ~ 17
        1, 1, 1, 1,     # 18 ~ 21
        3, 3, 3,        # 22 ~ 24
        np.nan, np.nan, np.nan, np.nan, np.nan, # 25 ~ 29
        1, 1, 1, 1, 1, 1, 1,    # 30 ~ 36
        np.nan  # 37
    ]
)
repeat_section = rpu.get_stan_repeat_section(
    data=data,
    value=1,
    repeat=4,
    mode='a',
    reverse=False
)
print(repeat_section)
'''
[(0, 4), (18, 21), (30, 36)]
'''

data type : list, np.array

구간을 산정할 데이터 리스트. list 혹은 np.array 타입으로 입력 가능하다.


value type : all

구간 산정시의 기준 값. 형식은 입력된 데이터의 내부 값에 따라 어떤 형식이든 가능하며,

만약 NaN 에 대한 구간을 산정하고자 하는 경우 np.nan 또는 'nan' 로 입력 가능.


repeat type : int

구간 산정시의 기준 횟수. 이상 또는 이하로 계산된다.


mode type : str default : 'a' limit : 'a', 'b', 'e'

구간 산정시 이상으로 할지 이하로 할지의 모드 선택값. 'a' (above) 로 할 경우 기준횟수 이상 반복된 구간을 계산한다.

'b' (below) 로 할 경우 기준 횟수 이하 반복된 구간을 계산한다.

'e' (equal) 로 할 경우 기준 횟수과 동일하게 반복된 구간을 계산한다.

입력가능한 값은 'a', 'b' 또는 'e' 만 존재하며 이외의 값을 입력할 경우 에러가 발생한다.

# 값 1 이 5번 이상 반복하는 구간 추출
repeat_section = rpu.get_stan_repeat_section(
 data=data, value=1, repeat=5, mode='a'
)
'''
[(0, 4), (30, 36)]
'''
# 값 1이 5번 이하 반복하는 구간 추출
repeat_section = rpu.get_stan_repeat_section(
 data=data, value=1, repeat=5, mode='b'
)
print(repeat_section)
'''
[(0, 4), (18, 21)]
'''
# 값 1이 정확히 5번 반복되는 구간 추출
repeat_section = rpu.get_stan_repeat_section(
 data=data, value=1, repeat=5, mode='e'
)
print(repeat_section)
'''
[(0, 4)]
'''

reverse type : bool default : False

산출된 구간에 대해서 반전시킨 구간을 추출

# 값 1 이 4번 이상 반복되는 구간
repeat_section = rpu.get_stan_repeat_section(
 data=data, value=1, repeat=4, mode='a', reverse=False
)
'''
[(0, 4), (18, 21), (30, 36)]
'''
# 위의 구간에 대한 반전 구간 추출
repeat_section = rpu.get_stan_repeat_section(
 data=data, value=1, repeat=4, mode='a', reverse=True
)
'''
[(5, 17), (22, 29), (37, 37)]
'''

get_section

입력한 데이터에 대해서 반복되는 구간을 추출할 수 있는 함수.

반복하는 횟수를 계산할 기준값, 반복 횟수, 반복횟수에 대한 이상/이하/동일 여부, 특정 구간에 대한 반복 여부, 이상/이하/초과/미만 적용, NaN 포함, 구간 반전 등

값의 기준과 반복기준에 대한 설정을 다양하게 적용할 수 있다.

예1) 데이터상의 모든 값에 대해서 10번 이상 반복되는 경우를 전부 산출

예2) 기준값 5가 7번 이상 반복되는 구간 산출

예2) 1이상 3이하의 값이 정확히 10번 반복되는 구간 산출

예3) 10 을 초과하는 값이 5번 이하 반복되는 구간에 대한 반전 구간 산출

입력변수 type default
data list, np.array -
repeat int -
mode str 'a'
key all None
max_key int, float None
min_key int, float None
between bool False
max_equal bool True
min_equal bool True
except_nan bool True
reverse bool False
출력 type 설명
dict 기준값을 key, 반복구간 tuple 로 구성된 list 를 value 로 지닌 dict
import numpy as np
from utilskit import repeatutils as rpu
data = np.array(
    [
        1, 1, 1, 1, 1,  # 0 ~ 4
        2, 2, 2, 2,     # 5 ~ 8
        3, 3,           # 9 ~ 10
        4, 4, 4,        # 11 ~ 13
        np.nan, np.nan, np.nan, np.nan,  # 14 ~ 17
        1, 1, 1, 1,     # 18 ~ 21
        3, 4, 5,        # 22 ~ 24
        np.nan, np.nan, np.nan, np.nan, np.nan, # 25 ~ 29
        1, 1, 1, 1, 1, 1, 1,    # 30 ~ 36
        np.nan, np.nan, np.nan  # 37 ~ 39
    ]
)
# 필수변수만 활용
result = rpu.get_section(
    data, 
    repeat=4
)
print(result)
'''
모든 변수값에 대해서 4번 이상 반복되는 구간을 전부 
{'1.0': [(0, 4), (18, 21), (30, 36)], '2.0': [(5, 8)]}
'''
# 모든 변수를 활용1
result = rpu.get_section(
    data, 
    repeat=4,
    mode='e',   # 반복횟수 일치
    key=1,  # 기준값은 1
    except_nan=False,   # NaN 도 포함
    reverse=False   # 반전 없음
)
print(result)
'''
{'1.0': [(18, 21)]}
'''
# 모든 변수를 활용2
result = rpu.get_section(
    data, 
    repeat=4,
    mode='a',   # 반복횟수 이상
    # key=1,  # 최대 최소 범위 지정시 무시된다.
    max_key=3,  # 최대 3
    min_key=2,  # 최소 2
    between=True,   # 사잇값
    max_equal=True, # 3 이하
    min_equal=True, # 2 이상
    # except_nan=False,   # 최대 최소 범위 지정시 무시된다.
    reverse=False   # 반전 없음
)
print(result)
'''
{'2_3': [(5, 10)]}
'''

data type : list, np.array

반복되는 구간을 산출할 데이터 리스트. 데이터 내부의 값의 형식은 정해져 있지 않고 뭐든지 가능하다.


repeat type : int

계산할 구간에 대한 반복횟수 기준. 1이하 값의 경우 반복한다고 할 수 없기에 최소 2 이상의 값을 입력해야한다.


mode type : str default : 'a' limit : 'a', 'b', 'e'

입력한 반복횟수 기준 이상(a: above), 이하(b:below) 및 동일(e: equal) 여부를 결정하는 변수.

'a', 'b', 'e' 3개의 값만 입력 가능하며 그 외의 값을 입력할 경우 에러 발생

result = rpu.get_section(
    data, 
    repeat=4,
    mode='a'	# 기본값
)
'''
{'1.0': [(0, 4), (18, 21), (30, 36)], '2.0': [(5, 8)]}
'''
result = rpu.get_section(
    data, 
    repeat=4,
    mode='b'
)
'''
{'2.0': [(5, 8)], '3.0': [(9, 10)], '4.0': [(11, 13)], '1.0': [(18, 21)]}
'''
result = rpu.get_section(
    data, 
    repeat=4,
    mode='e'
)
'''
{'2.0': [(5, 8)], '1.0': [(18, 21)]}
''''

key type : all default : None

반복구간을 계산할때 반복되는 기준값. 예를 들어 key = 1 로 지정하면 1 이라는 값에 대해서만 반복구간을 계산한다.

NaN 에 대한 반복구간을 계산하고 싶은 경우 np.nan 또는 'nan' 로 지정하면 된다. 단, except_nan 을 반드시 False 로 지정해야한다.

만약 max_key 또는 min_key 를 지정할 경우 key 변수는 어떤값을 지정해도 무시된다.

result = rpu.get_section(
    data, 
    repeat=4,
    key=1,  
)
print(result)
'''
{'1.0': [(0, 4), (18, 21), (30, 36)]}
'''
result = rpu.get_section(
    data, 
    repeat=4,
    key='nan',
    except_nan=False,
)
'''
{'nan': [(14, 17), (25, 29)]}
'''

max_key type : int, float default : None

반복구간을 계산할때의 최대 기준값. betweenmax_equal 의 값에 따라 이상/이하/초과/미만 의 여부가 결정되며 기본값은 입력된 값 이상으로 되어있다.

이상, 이하 연산을 하는 특성상 해당 변수는 반드시 숫자값이 들어와야한다.

만약 max_key=3 으로 지정한 경우 3 이상의 값을 기준으로 구간을 산정한다. 이때 예를 들어 3, 3, 3, 4, 5, 6 이라는 구간이 있다면 4, 5, 6 은 각각 하나씩이라 구간 계산에서 제외되는 것이 아니라 3, 3, 3, 4, 5, 6 전체를 ‘3이상’ 구간으로 한번에 계산하여 해당구간은 3이상의 값이 총 6번 반복되는것으로 판정된다.

결과의 key 값은 {max_key}_over 로 변경된다.

data = np.array([
    ...
    3, 3,           # 9 ~ 10
    4, 4, 4,        # 11 ~ 13
    ...
])
result = rpu.get_section(
    data, 
    repeat=4,
    max_key=3
)
'''
{'3.0_over': [(9, 13)]}
'''

min_key type : int, float default : None

반복구간을 계산할때의 최소 기준값. betweenmin_equal 의 값에 따라 이상/이하/초과/미만 의 여부가 결정되며 기본값은 입력된 값 이하로 되어있다.

이상, 이하 연산을 하는 특성상 해당 변수는 반드시 숫자값이 들어와야한다.

만약 min_key=2 으로 지정한 경우 2 이하의 값을 기준으로 구간을 산정한다. 이때 예를 들어 0, 1, 2, 2, 2, 2 라는 구간이 있다면 0, 1 는 각각 하나씩이라 구간 계산에서 제외되는 것이 아니라 0, 1, 2, 2, 2, 2 전체를 ‘2이하’ 구간으로 한번에 계산하여 해당구간은 2이하의 값이 총 6번 반복되는것으로 판정된다.

결과의 key 값은 {min_key}_under 로 변경된다.

data = np.array([
    1, 1, 1, 1, 1,  # 0 ~ 4
    2, 2, 2, 2,     # 5 ~ 8
	...
    1, 1, 1, 1,     # 18 ~ 21
    ...
    1, 1, 1, 1, 1, 1, 1,    # 30 ~ 36
])

result = rpu.get_section(
    data, 
    repeat=4,
    min_key=2
)
'''
{'2.0_under': [(0, 8), (18, 21), (30, 36)]}
'''

between type : bool default : False

최대(max_key) 및 최소(min_key) 기준값을 지정했을 때, 그 사잇값을 구할것인지의 여부를 결정하는 변수. 기본적으로는 False 로 되어있기에 최대 이상, 최소 이하를 계산하게되며 만약 True 로 지정한 경우 최소 ~ 최대의 사잇값을 기준으로 구간을 계산하게 된다.

이상/초과/이하/미만 여부는 max_equal, min_equal 에 의해 결정되며, 만약 betweenTrue 로 한 경우 사잇값이라는 특성 상 max_keymin_key 가 전부 지정되어 있어야 하며 그렇지 않은 경우 에러가 발생한다.

결과의 key 값은 {min_key}_{max_key} 로 변경 된다.

data = np.array([
	...
    2, 2, 2, 2,     # 5 ~ 8
    3, 3,           # 9 ~ 10
	...
])

result = rpu.get_section(
    data, 
    repeat=4,
    max_key=3,
    min_key=2,
    between=True
)
'''
{'2_3': [(5, 10)]}
'''

max_equal , min_equal type : bool default : True

최대, 최소 기준값을 설정할때 해당 값을 반복구간 계산에 포함할지 여부.

기본값은 True 로 되어있으며 이상/이하 로 계산하도록 한다.

False 로 지정할 경우 초과/미만 으로 계산하도록 한다.

data = np.array([
	...
    2, 2, 2, 2,     # 5 ~ 8
    3, 3,           # 9 ~ 10
	...
])

result = rpu.get_section(
    data, 
    repeat=4,
    max_key=3,	
    min_key=2,
    between=True,
    max_equal=False,
    min_equal=True 	# 기본값
)
'''
{'2_3': [(5, 8)]}
'''

except_nan type : bool default : True

반복구간을 계산할 값의 범위에 NaN 값을 포함시킬지 여부. 기본적으로 계산범위에 NaN 은 넣지 않는다.

단, key 값을 np.nan 또는 'nan' 으로 지정한 경우 계산범위에서 제외시킨경우 에러가 발생하므로 False 로 지정해주어야 한다.

data = np.array([
    1, 1, 1, 1, 1,  # 0 ~ 4
    2, 2, 2, 2,     # 5 ~ 8
    ...
    np.nan, np.nan, np.nan, np.nan,  # 14 ~ 17
    1, 1, 1, 1,     # 18 ~ 21
	...
    np.nan, np.nan, np.nan, np.nan, np.nan, # 25 ~ 29
    1, 1, 1, 1, 1, 1, 1,    # 30 ~ 36
    ...
])

result = rpu.get_section(
    data, 
    repeat=4,
    except_nan=False
)
'''
{'nan': [(14, 17), (25, 29)], '1.0': [(0, 4), (18, 21), (30, 36)], '2.0': [(5, 8)]}
'''

reverse type : bool default : False

계산한 구간에 대한 반전 구간을 계산하도록 하는 변수.

반복 구간 계산시에 적용된 모든 설정에 대해서 최종적으로 나온 구간 결과값에 대한 반전을 진행하며 모든 key 값은 {key}_rev 로 변경된다.

result = rpu.get_section(
    data, 
    repeat=4,
    except_nan=False,
    reverse=True
)
'''
{'nan': [(14, 17), (25, 29)], '1.0': [(0, 4), (18, 21), (30, 36)], '2.0': [(5, 8)]} 
-->
{'nan_rev': [(0, 13), (18, 24), (30, 39)], '1.0_rev': [(5, 17), (22, 29), (37, 39)], '2.0_rev': [(0, 4), (9, 39)]}
'''
result = rpu.get_section(
    data, 
    repeat=4,
    max_key=3,
    min_key=2,
    reverse=True
)
'''
{'3.0_over': [(9, 13)], '2.0_under': [(0, 8), (18, 21), (30, 36)]}
-->
{'3.0_over_rev': [(0, 8), (14, 39)], '2.0_under_rev': [(9, 17), (22, 29), (37, 39)]}
'''

timutils

get_now

현재의 시간을 str 포맷으로 원하는 형태로 정해서 추출하는 함수

입력변수 type default
form str '년-월-일 시:분:초'
출력 type 설명
str form 으로 설정한 형태로 현재 시간이 표현된 데이터 문자열
from utilskit import timeutils as tiu
now = tiu.get_now()
'''
2025-07-23 14:13:40
'''

form type : str default : '년-월-일 시:분:초'

추출하고자 하는 시간을 어떤 형태의 문자열로 표현할지 정하는 입력 변수. 기본값은 ‘년-월-일 시:분:초’ 로 되어있다. 반드시 년월일시분초 6개 단어가 전부 들어가있을 필요는 없다.

now = tiu.get_now('월/일 시')
'''
07/23 14
'''

입력된 문자열에서 정확히 ‘년’, ‘월’, ‘일’, ‘시’, ‘분’, ‘초’ 에 해당되는 글자는 반드시 각각 ‘년월일시분초’ 에 대응되서 값이 추출되며 그외 글자는 그대로 반환된다.

now = tiu.get_now('지금 시간은 시:분:초 입니다.')
'''
지금 14간은 14:17:08 입니다.
'''
now = tiu.get_now('년|분|시|월|초|일')
'''
2025|18|14|07|20|23
'''

time_measure

입력받은 숫자값 시, 분, 초로 분할하여 환산하여 얻어내는 함수.

예: 3675 –> 1(시간) 1(분) 15(초)

입력변수 type default
t int , float -
출력 type 설명
int, int, int 총 3개의 int 값이 반환되며 순서대로 계산된 시간, 분, 초 를 의미한다.

사용예시

hh, mm, ss = tiu.time_measure(3675)
print(f'입력된 값은 {hh}시간 {mm}{ss}초 입니다.')
'''
입력된 값은 1시간 1분 15초 입니다.
'''

t type : int, float

시분초 로 환산하여 계산할 숫자값. 음수를 입력한 경우 0으로 취급한다.


get_date_list

입력된 년, 월, 시작일, 끝일 에 따라 각 값에 해당되는 모든 날짜값을 문자열로 구성하여 list 로 반환하는 함수 단, 년도에 해당되는 변수는 1개년도에 대해서만 가능하며 윤년에 대해서는 존재하지 않는 날짜가 반환될 수 있다. (2025년 2월 29일 등)

입력변수 type default
year int -
mon_list list -
start_day_list list -
end_day_list list -
출력 type 설명
list 설정한 모든 날짜 문자열이 담겨있는 list
date_list = tiu.get_date_list(
    year=2025,
    mon_list=[5, 6],
    start_day_list=[10, 23],
    end_day_list=[14, 25]
)
print(date_list)
'''
['2025-05-10', '2025-05-11', '2025-05-12', '2025-05-13', '2025-05-14', '2025-06-23', '2025-06-24', '2025-06-25']
'''

year type : int

날짜 문자열 리스트를 생성할때의 기준 연도값. 실제 날짜를 계산하는 것이 아니기에 어떤숫자를 입력하는 것도 가능하다.


mon_list type : list

날짜 문자열 리스트를 생성할때의 기준 월값. 1 미만 13 이상의 값은 입력되어도 무시된다.

start_day_list, end_day_list type : list

날짜 문자열 리스트를 생성할 때, 입력된 월 리스트의 각각의 순서에 해당되는 시작 날짜 값 과 끝 날짜값 리스트.

1미만, 32 이상의 값은 입력되어도 무시되며 각각의 월의 최대 일수보다 큰 날짜도 무시된다. (예: 9월 31일 –> 무시)

2월의 경우 최대 29일 까지 산정되며 이때 윤년의 존재여부는 계산하지 않기에 실제로 2월 29일이 존재하는 년도인지 주의할 필요가 있다.

# 31 을 넘긴 경우
date_list = tiu.get_date_list(
    year=2025,
    mon_list=[7],
    start_day_list=[30],
    end_day_list=[33]
)
'''
['2025-07-30', '2025-07-31']
'''
# 시작날짜가 음수인 경우
date_list = tiu.get_date_list(
    year=2025,
    mon_list=[5],
    start_day_list=[-3],
    end_day_list=[2]
)
'''
['2025-05-01', '2025-05-02', '2025-05-03', '2025-05-04']
'''
# 2월의 경우
date_list = tiu.get_date_list(
    year=2025,
    mon_list=[2],
    start_day_list=[25],
    end_day_list=[31]
)
'''
['2025-02-25', '2025-02-26', '2025-02-27', '2025-02-28', '2025-02-29']
'''

utils

envs_setting

각종 random seed 값을 전부 고정하는 함수. 현재 numpy.random 과 random 2개 시드만 지정함

입력변수 type default
seed int 42
출력 type 설명
return 값 없음 -
from utilskit import utils as u
u.envs_setting()

seed type : int default : 42

각종 랜덤변수에 대한 시드값.

get_error_info

에러발생시의 에러 텍스트를 전부 str 형식으로 추출하여 반환하는 함수.

에러발생시 모듈이 바로 정지한다는 특성상 try~except 과 같은 예외처리시에만 활용 가능하다.

예외 발생시 에러메세지가 시스템상 출력되지 않더라도 기록 용도로 활용 가능하다.

| 입력변수 | type | default | | ——– | —- | ——- | | - | - | - |

출력 type 설명
str 에러발생시에 출력되는 모든 텍스트를 저장한 문자열
from utilskit import utils as u

a = 1
b = '2'
try:
    c = a + b
except TypeError:
    error_info = u.get_error_info()
    print(error_info)
'''
Traceback (most recent call last):
  File "/home/kimyh/library/utilskit/test/test.py", line 314, in main13
    c = a + b
TypeError: unsupported operand type(s) for +: 'int' and 'str
'''

입력받는 변수는 별도로 존재하지 않음.

함수명

함수설명

입력변수 type default
     
출력 type 설명
   


변수명1 type : a default : a

내용


변수명2 type : a default : a

내용