Python
matplotlib
DSX
Watson-Studio

Watson Studio Jupyter Notebook上のmatplotlibで日本語ラベルを表示させる

(2018-03-27) DSXの名称がWatson Studioに代わり、デフォルトのPython Versionが3.5になったことに対応
(2018-04-18) OSの構成が変わり、前の手順でうまくいかなくなったことへの対応
(2018-07-04) 環境設定の手順を追記。手順が間違っていたので修正。

最近、Watson Studio上のJupyter Notebookを触っているのですが、ずっとmatplotlibで漢字が表示できなくて(いわゆる「豆腐問題」)悲しい思いをしていました。
ようやく漢字を表示する方法を見つけましたので、備忘録のメモを兼ねてここに記載しておきます。
テストしているのはPython3.5の環境です。

新規Environmentの作成

まず、カスタマイズ用のEnvironmentを作ります。
プロジェクト管理画面から「Add to project」->「Environment」を選択します。

スクリーンショット 2018-07-04 14.36.53.png

下のような画面が出るので、「custom python environment」などの名称を設定して「Create」をクリックします。

スクリーンショット 2018-07-04 14.37.36.png

次の画面になったら赤枠のリンクをクリックします。

スクリーンショット 2018-07-04 14.37.50.png

下のようなCustomization用設定画面が出てくるので、下の構成をコピペして置き換え「Apply」ボタンをクリックして下さい。
ちなみに日本語化で本当に必要なのは、matplotlibのアップデートなのですが、それ以外にもやっておいた方がいいアップデートのコマンドが入っています。

スクリーンショット 2018-07-04 14.38.49.png

# Please add conda channels here
channels:
- defaults

# Please add conda packages here
dependencies:

# Please add pip packages here
# To add pip packages, please comment out the next line
- pip:
  - numpy==1.14.2
  - pydot==1.2.3
  - pyparsing==2.2.0
  - h5py==2.8.0rc1
  - matplotlib==2.2.2

Notebookの作成

新規Notebookを作る際に、上で作ったenvoronmentとの紐付けを行います。
「Add to project」->「Notebook」で新規作成メニューを選び

スクリーンショット 2018-07-04 14.39.28.png

画面左(下にでる場合もあります)の「Select runtime」のメニューで、今設定したEnvironmentを選択します。これで、Customizeした環境を利用することが可能になります。

スクリーンショット 2018-07-04 14.40.02.png

実行時の手順

日本語ラベル表示のためには、上で説明した環境設定だけでなく、以下のコマンドをJupyter Notebook上で追加で行う必要があります。
IBM DSXの時には、一度追加導入したOSイメージはずっと使えたのですが,Watson Studioになって、一度追加導入して修正したOSイメージは数時間すると使えなくなってしまいます。
そのため、以下の手順はWatson Studioを使うたびに行う必要があります。

フォントはライセンスが問題とならないようIPAフォントを利用します。
以下のコマンドでダウンロード、解凍を行い、フォントパスのあるディレクトリにTTFファイルをコピーします。

import os
if not os.path.exists('/opt/conda/envs/DSX-Python35/lib/python3.5/site-packages/matplotlib/mpl-data/fonts/ttf/ipaexg.ttf'):
    !wget https://oscdl.ipa.go.jp/IPAexfont/ipaexg00301.zip
    !unzip ipaexg00301.zip
    !cp ipaexg00301/ipaexg.ttf /opt/conda/envs/DSX-Python35/lib/python3.5/site-packages/matplotlib/mpl-data/fonts/ttf
    !echo 'font.family : IPAexGothic' >> /opt/conda/envs/DSX-Python35/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrc
    print('IPA font copied!')

カーネル再起動

設定が終わったらカーネルの再起動を行います。

テスト

以下のコードで「豆腐」の文字がグラフ上でも「豆腐」と表示されたら日本語化成功です。
うまくいくと、下の完成図のようになります。

import matplotlib.pyplot as plt
%matplotlib inline
plt.figure()
plt.xlabel('豆腐 - tofu')
plt.title('豆腐 - TOFU')

完成図
スクリーンショット 2017-11-14 16.50.22.png

おまけ
やっとこういうのができるようになりました
スクリーンショット 2017-11-14 17.03.21.png