
모듈화를 활용한 함수 호출, 재사용성 증가
들어가며
파이썬에서 모듈화는 코드를 효율적으로 작성하고, 재사용성을 높이는 방법입니다. 파일을 분리하여 함수나 클래스를 정의하고, 필요한 파일에서 불러와 사용하면 관리도 쉽고, 가독성도 높일 수 있습니다.
이 글에서는 모듈화의 장점과 함께 파이썬으로 모듈화하는 방법을 소개합니다.
모듈화의 장점
- 한 번 정의한 함수를 여러 파일에서 사용할 수 있어 코드의 재사용성을 높일 수 있습니다.
- 특정 기능이 분리되어 있어 수정이 필요할 때 해당 모듈만 변경하면 됩니다. 따라서 유지보수가 용이합니다.
- 코드를 기능별로 분리하고, 전체 코드의 구조가 명확해짐으로써 가독성을 향상시킵니다.
- 특정 기능을 필요시에만 import하여 불필요한 메모리 사용을 줄일 수 있습니다. 따라서 성능을 최적화하는 데 큰 도움이 됩니다.
모듈화 예제
학습 모델의 평가 지표를 산출하는 함수를 정의하고, 모듈화하여 호출해 보겠습니다.
먼저, 모델에 대한 평가 지표를 산출하는 코드를 모듈화하겠습니다. 회귀 모델의 평가 지표인 결정계수, RMSE, MSE, MAE, MAPE를 산출하는 코드를 다음과 같이 작성하여 evaluation.py로 저장합니다.
evaluation.py
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error, accuracy_score, mean_absolute_percentage_error
def reg_eval(y_test, y_pred):
r2 = round(r2_score(y_test, y_pred),2)
rmse = round(mean_squared_error(y_test, y_pred, squared = False),2)
mse = round(mean_squared_error(y_test, y_pred, squared = True),2)
mae = round(mean_absolute_error(y_test, y_pred),2)
mape = round(mean_absolute_percentage_error(y_test, y_pred),2)
return {
'R2': r2,
'RMSE': rmse,
'MSE': mse,
'MAE': mae,
'MAPE': mape
}
다음과 같이 간단한 예측 모델을 만들었다고 가정하겠습니다. iris 데이터셋을 활용하여 sepal length를 예측하는 선형회귀 모델입니다. 이 코드를 model.py로 저장합니다. (모듈화를 위해 작성한 예제 코드입니다. 데이터의 형태를 고려하지 않고, 기본 모델인 선형회귀를 사용했습니다.)
model.py
from sklearn.datasets import load_iris
import pandas as pd
iris = load_iris()
df_iris = pd.DataFrame(iris.data, columns=iris.feature_names)
target = df_iris.pop('sepal length (cm)')
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(df_iris, target, test_size=0.2)
from sklearn.linear_model import LinearRegression
model = LinearRegression().fit(X_train, y_train)
y_pred = model.predict(X_test)
함수를 호출하는 방법은 다음과 같습니다. evaluation.py에서 사용자정의함수 def를 활용하여 생성한 reg_eval을 model.py를 import합니다. import한 함수를 통해 출력한 결과는 다음 이미지와 같습니다.
model.py
from evaluation import reg_eval
reg_eval(y_test, y_pred)

위와 같이 모듈화를 사용하면, 코드를 효율적으로 구성할 수 있습니다. 다만, 유의할 점은 2개의 py 파일은 동일한 디렉터리 내에 존재해야 합니다. 다른 디렉터리에 존재한다면, 상대 경로 혹은 절대 경로를 사용해야 합니다.
전체 코드 | model.py
# --------------------------------------------------------------------------------- */
## 회귀 모델
from sklearn.datasets import load_iris
import pandas as pd
iris = load_iris()
df_iris = pd.DataFrame(iris.data, columns=iris.feature_names)
target = df_iris.pop('sepal length (cm)')
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(df_iris, target, test_size=0.2)
from sklearn.linear_model import LinearRegression
model = LinearRegression().fit(X_train, y_train)
y_pred = model.predict(X_test)
# --------------------------------------------------------------------------------- */
## 모델 평가 - 모듈화 함수 호출
from evaluation import reg_eval
reg_eval(y_test, y_pred)
전체 코드 | evaluation.py
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error, accuracy_score, mean_absolute_percentage_error
def reg_eval(y_test, y_pred):
r2 = round(r2_score(y_test, y_pred),2)
rmse = round(mean_squared_error(y_test, y_pred, squared = False),2)
mse = round(mean_squared_error(y_test, y_pred, squared = True),2)
mae = round(mean_absolute_error(y_test, y_pred),2)
mape = round(mean_absolute_percentage_error(y_test, y_pred),2)
return {
'R2': r2,
'RMSE': rmse,
'MSE': mse,
'MAE': mae,
'MAPE': mape
}
'Python' 카테고리의 다른 글
[파이썬] 엑셀 통합파일(.xlsx) 시트별 저장 - ExcelWriter (0) | 2024.11.10 |
---|---|
[파이썬] plotly를 활용한 꺾은선그래프 - plotly.express (3) | 2024.11.09 |
[파이썬] plotly를 활용한 막대그래프 - plotly.express (3) | 2024.11.07 |
[파이썬] 텍스트 빈도 분석을 위한 워드 클라우드(영문) - wordcloud, matplotlib (1) | 2024.10.30 |
[파이썬] CCTV 이미지를 활용한 이미지 객체 탐지 - 박스 표시, yolov5 (4) | 2024.10.22 |