구글 코랩(Colab) 한글 사용 패치(한글 깨짐 현상)

Bpius·2023년 4월 30일
1
post-thumbnail

jupyter notebook 웹기반 플랫폼들은 기본적으로 한글을 지원하지 않아서 한글 패치를 해주어야 하는데, 구글 colab의 시각화 라이브러리(matplotlib)도 한글 폰트를 지원하지 않기 때문에 한글이 깨져서 나오게 된다.

1. 한글 깨짐

일단 matplotlib을 import한다.
'%matplotlib inline'의 의미는 코랩을 실행한 브라우저 자체(inline)에서 그림을 그려서 보겠다는 것이다.

%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib as mpl 
plt.figure(figsize=(10, 6))
plt.plot([9, 10, 11, 12, 13, 14, 15], [100, 80, 60, 50, 60, 50, 30])
plt.title('내가 주식을 산 다음날', size=30)
plt.xlabel('시간')
plt.ylabel('만원')
plt.show();

2. 한글 나눔 폰트

코랩 포함 jupyter notebook 플랫폼들은 한글을 지원하지 않기에 한글 폰트를 다운받아야 한다.

!apt-get install -y fonts-nanum*
*를 끝에 붙이면 모든 나눔 글씨체를 받고, 붙이지 않으면 대표적인 몇개만.



이 중 원하는 폰트 이름을 'path' 마지막에 붙여 넣으면 된다.

3. matplotlib

버전이 업데이트 되면서 기존의 한글 사용 패치가 바뀌었다.
그리고 버전 업데이트 전에는 '-'(마이너스) 부호도 지원이 되지 않아서 패치를 해줘야 했는데 업데이트 이후로는 지원을 한다.
이전의 코드는 아래와 같았지만, 업데이트가 되면서 _rebuild() 속성이 더 이상 지원되지 않도록 바뀌게 되었다.

런타임 다시 시작:

이전:

!apt-get install fonts-nanum* -qq
# 다운받은 후 코랩 런타임 다시 시작
plt.rcParams['axes.unicode_minus'] = False # 마이너스 부호 패치
path = '/usr/share/fonts/truetype/nanum/NanumGothicEco.ttf' # 나눔 폰트 경로
font_name = mpl.font_manager.FontProperties(fname=path).get_name()
mpl.rc('font', family=font_name)
mpl.font_manager._rebuild() # 버전이 업데이트 되면서 더 이상 _rebuild() 속성이 지원되지 않는다.

원래 font_manager 모듈 _rebuild()는 폰트의 캐시를 재설정하는 역할을 했는데, 업데이트 이후는 다른 방법으로 재설정을 한다. 폰트를 내려받은 후 캐시 재설정을 하는 코드도 같이 실행한 후, 코랩 런타임 다시 시작을 하면 된다.

업데이트 후:

!apt-get install -y fonts-nanum*
!rm -rf /root/.cache/matplotlib/* # 폰트 캐시 재설정
# 런타임 다시 시작 후 실행
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib as mpl 
#
path = '/usr/share/fonts/truetype/nanum/NanumGothic.ttf'
font_name = mpl.font_manager.FontProperties(fname=path).get_name()
plt.rcParams['font.family'] = font_name

다시 그려보자.

plt.figure(figsize=(10, 6))
plt.plot([9, 10, 11, 12, 13, 14, 15], [100, 80, 60, 50, 60, 50, 30])
plt.title('내가 주식을 산 다음날', size=30)
plt.xlabel('시간')
plt.ylabel('만원')
plt.show();

4. 간단히

사실 오픈 소스라는 것이 이렇게 매번 업데이트로 바뀌고 없어지고 새로 생기는 등 변화를 지속하기에 어쩔 수가 없다. 그래도 간단한 방법이 있다면 또 써야지 않겠는가. '나는 반드시 나눔체를 써야한다'는 확고한 신념을 가지지 않는 이상, 간단하게 아래 코드와 같이 설치하고 import하면 끝난다. 당연히 런타임을 다시 시작할 필요도 없다. 물론 이 방법 또한 없어질 수도 업데이트 될 수도 아무도 알 수가 없다.

  1. 일단 설치
!pip install koreanize-matplotlib
  1. import 해서 쓰자.
import koreanize_matplotlib

profile
데이터 굽는 타자기

0개의 댓글