OCI Data Science 한글 폰트 설정
OCI Data Science란?
OCI Data Science는 Oracle Cloud에서 제공하는 전문 머신러닝 서비스입니다. 사용자는 Data Science를 이용하여 완전한 파이썬 기반 머신러닝 개발 환경을 필요한 시점에 만들고 바로 사용할 수 있습니다. 향후 OCI의 모든 데이터 서비스는 Data Science에 통합될 계획에 있습니다. Data Science는 다음과 같은 기능을 제공합니다.
- 파이썬 전문 개발 환경 제공(Jupyter Lab 기반)
- 데이터 프로파일링, 전처리 및 시각화
- EDA 및 모델 학습(AutoML)
- 모델 평가 및 모델 해석(Interpretability & Explanation)
- 모델 배포 및 모델 버전 관리
OCI Data Science는 배포할 때 지정한 Compute Shape(컴퓨터 자원)을 기준으로 초 단위 과금합니다. OCI에서 AMD EPYC 7742(2.25 Ghz)를 사용할 경우 CPU당 1시간 사용 비용은 30원($0.025)입니다. Data Science를 AMD EPYC 4CPU Shape으로 만들면 시간당 120원 정도가 청구됩니다.
Data Science 한글 폰트 이슈
Data Science 인스턴스를 만들고 다음과 같이 Matplotlib 그래프 만들면 한글이 깨집니다. 이것은 Data Science 기본 구성에 한글 폰트가 없어서 발생하는 이슈입니다.
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import warning
warnings.filterwarnings(action='ignore')
data = np.random.randint(-100, 100, 50).cumsum()
plt.plot(range(50), data, 'r')
plt.title('시간별 변화 상태')
plt.ylabel('측정값')
plt.xlabel('시간')
plt.show()
이 한글 폰트 이슈를 해결하기 위해서는 다음과 같은 절차가 필요합니다
- Data Science 인스턴스에 한글 폰트 설치
- 사용하는 Jupyter Notebook에 한글 폰트 지정하는 코드 추가
한글 폰트 설치
OCI Data Science 서비스에서 제공하는 웹 터미널에서 다음 명령을 실행하면 나눔 고딕(Nanum Gothic) 한글 폰트가 설치됩니다.
OCI Data Science 서비스의 웹 터미널은 다음과 같이 메뉴에서 + 아이콘을 클릭하고 메인 창에서 “Terminal” 아이콘을 클릭하여 실행합니다.
웹 터미널이 열리면 다음 명령을 입력하고 실행합니다.
bash -c "$(curl -L http://taewan.kim/shells/hfont-ocids.sh)"
위 명령을 실행하면 다음 이미지와 같은 상태가 됩니다.
현재 나눔 고딕(Nanum Gothic) 한글 폰트가 설치된 상태입니다. 파이썬 프로세스는 Matplotlib 폰트 정보를 캐시하고 재사용합니다. 따라서 변경된 폰트 정보를 적용하기 위해서는 Matplotlib를 사용하는 프로세스를 다시 시작해야 합니다. 프로세스가 로딩한 폰트 캐시 정보를 갱신하기 위해서 해당 Jupyter 노트북을 닫고 다시 열거나 노트북 커널을 재시작해야 합니다.
한글 폰트 확인
노트북에서 사용할 Matplotlib의 폰트 정보를 설정하는 다음 코드를 추가합니다.
plt.rcParams['font.family']='NanumGothic'
위 코드를 추가하고 실행하면 다음 이미지와 같이 한글이 정상적으로 출력되는 것을 확인할 수 있습니다.
테스트에 사용한 전체 코드는 다음과 같습니다.
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import warning
warnings.filterwarnings(action='ignore')
data = np.random.randint(-100, 100, 50).cumsum()
plt.plot(range(50), data, 'r')
plt.title('시간별 변화 상태')
plt.ylabel('측정값')
plt.xlabel('시간')
plt.show()