Colaboratoryで「豆腐」をなんとかしたい

追記:
このエントリは「試行錯誤」で人がみる内容じゃないので,
とりあえず「Colaboratoryで日本語グラフを描きたい」人用まとめ

1.!apt-get -y install fonts-ipafont-gothic
(フォントプロパティを用いていちいちパス指定するなら2.以降は不要)
(FontProperties(fname=r’/usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf’))
2.rm /content/.cache/matplotlib/fontList.json
3.Restart runtime
4.sns.set(font=’IPAGothic’, font_scale=2)

関連:
Colaboratoryについて(まとめ)

 
 
 

from __future__ import absolute_import, division, print_function, unicode_literals
from builtins import bytes, chr, dict, input, int, object, open, pow, range, round, str, map, zip
from future.utils import integer_types
from future import standard_library
standard_library.install_aliases()

 
 

Colaboratoryに「IPAexGothic」ってどうやって入れるんだろう.

という訳で,答えが出るかどうか分からないけど,試行錯誤.

入っているフォントは,

import matplotlib.font_manager as fm

fm.findSystemFonts()

[u’/usr/share/fonts/truetype/ttf-liberation/LiberationSansNarrow-Regular.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSerif-BoldItalic.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSansNarrow-Bold.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSerif-Bold.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSans-Italic.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSans-Italic.ttf’,
u’/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationMono-BoldItalic.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationMono-Bold.ttf’,
u’/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSansNarrow-Bold.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSans-Bold.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSansNarrow-Regular.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSansNarrow-BoldItalic.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationMono-Regular.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationMono-Bold.ttf’,
u’/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSerif-Italic.ttf’,
u’/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationMono-Italic.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSerif-BoldItalic.ttf’,
u’/usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationMono-BoldItalic.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSans-BoldItalic.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSans-Bold.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSans-BoldItalic.ttf’,
u’/usr/share/fonts/truetype/dejavu/DejaVuSansMono-Bold.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationMono-Regular.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSerif-Bold.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSerif-Regular.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSerif-Italic.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSansNarrow-Italic.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationMono-Italic.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSansNarrow-BoldItalic.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSansNarrow-Italic.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSerif-Regular.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSans-Regular.ttf’]

少ない.

取り敢えず,作業ディレクトリにIPAexGothicを放り込んで,
上のディレクトリに放り込めば良いのかなと.
作業ディレクトリがどこにあるのかを探す.

FireShot Capture 774 - Untitled2.ipynb - Colaboratory_ - https___colab.research.google.com_

これがカレントディレクトリっぽいけど,ファイルが見当たらない.

cdしてlsしてみていたら,仮想マシンはどうもDebianらしい.
という事は,フォント環境をapt-getで入れられそう.
(後,仮想マシン自体にはPython3.6が入っているっぽい)

仮想マシンに対して,apt-getをする事に抵抗があるんだけど,
取り敢えず,フォントを入れると,

fm.findSystemFonts()

[u’/usr/share/fonts/truetype/ttf-liberation/LiberationSansNarrow-Regular.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSerif-BoldItalic.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSansNarrow-Bold.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf’,
u’/usr/share/fonts/truetype/fonts-japanese-mincho.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSerif-Bold.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSans-Italic.ttf’,
u’/usr/share/fonts/opentype/ipafont-gothic/ipag.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSans-Italic.ttf’,
u’/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationMono-BoldItalic.ttf’,
u’/usr/share/fonts/opentype/ipafont-mincho/ipam.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationMono-Bold.ttf’,
u’/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSansNarrow-Bold.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSans-Bold.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSansNarrow-Regular.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSansNarrow-BoldItalic.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationMono-Regular.ttf’,
u’/usr/share/fonts/truetype/fonts-japanese-gothic.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationMono-Bold.ttf’,
u’/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSerif-Italic.ttf’,
u’/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationMono-Italic.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSerif-BoldItalic.ttf’,
u’/usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationMono-BoldItalic.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSans-BoldItalic.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSans-Bold.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSans-BoldItalic.ttf’,
u’/usr/share/fonts/truetype/dejavu/DejaVuSansMono-Bold.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationMono-Regular.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSerif-Bold.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSerif-Regular.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSerif-Italic.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSansNarrow-Italic.ttf’,
u’/usr/share/fonts/opentype/ipafont-mincho/ipamp.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationMono-Italic.ttf’,
u’/usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSansNarrow-BoldItalic.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSansNarrow-Italic.ttf’,
u’/usr/share/fonts/truetype/liberation/LiberationSerif-Regular.ttf’,
u’/usr/share/fonts/truetype/ttf-liberation/LiberationSans-Regular.ttf’]

入った.

さて,これで日本語が表示されるはず.

import matplotlib.pyplot as plt
import seaborn as sns

sns.set(style='darkgrid', palette='deep', font='IPAGothic', font_scale=2)

plt.plot([0, 1], [0, 1])
plt.xlabel('横軸')
plt.ylabel('縦軸')

FireShot Capture 775 - Untitled1.ipynb - Colaboratory_ - https___colab.research.google.com_

うーん……(´・ω・`)

import matplotlib as mpl
font_paths = mpl.font_manager.findSystemFonts()
font_objects = mpl.font_manager.createFontList(font_paths)
font_names = [f.name for f in font_objects]
print(font_names)

[u’Liberation Sans Narrow’, u’Liberation Serif’, u’Liberation Sans Narrow’, u’Liberation Sans’, u’IPAMincho’, u’Liberation Serif’, u’Liberation Sans’, u’IPAGothic’, u’DejaVu Sans’, u’Liberation Mono’, u’IPAMincho’, u’Liberation Mono’, u’DejaVu Sans Mono’, u’Liberation Sans’, u’Liberation Sans Narrow’, u’Liberation Mono’, u’IPAGothic’, u’DejaVu Serif’, u’Liberation Serif’, u’DejaVu Sans’, u’Liberation Mono’, u’DejaVu Serif’, u’Liberation Sans’, u’DejaVu Sans Mono’, u’Liberation Serif’, u’Liberation Sans Narrow’, u’IPAPMincho’, u’IPAPGothic’]

 
matplotlibで日本語 – Qiita より

import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

fp = FontProperties(fname=r'/usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf', size=14)

plt.bar([1, 2], [5, 10], 0.25)
plt.bar([1.25, 2.25], [4, 8], 0.25, color='darkorange')
plt.xlim((0.75, 2.75))
plt.ylim((0, 12))
plt.ylabel('軸ラベルはfontproperties=fp', fontproperties=fp)
plt.xticks([1.25, 2.25], ['目盛りは', 'fontproperties=fp'], fontproperties=fp)
plt.title('タイトルはfontproperties=fp', fontproperties=fp)
plt.text(2.125, 10, 'テキストは\nfontproperties=fp', fontproperties=fp,
         ha='center')
plt.annotate('アノテーションは\nfontproperties=fp', xy=(1.125, 5), xytext=(1.3, 8),
             fontproperties=fp, arrowprops=dict(facecolor='k', shrink=0.05))
plt.legend(['凡例は', 'prop=fp'], prop=fp, loc='upper left')

FireShot Capture 776 - Untitled1.ipynb - Colaboratory_ - https___colab.research.google.com_

直接指定してあげればいけるっぽい.
でもこれは……ちょっと面倒……(´・ω・`)

import matplotlib.font_manager

matplotlib.font_manager.fontManager.ttflist

ここに追加されていないので,’font.family’でいくら指定しても意味が無いのか.

 

 
 

import matplotlib.font_manager as fm

fonts = fm.findSystemFonts()
for f in fonts:
    font = fm.FontProperties(fname=f)
    print(f, font.get_name(), font.get_family())

/usr/share/fonts/truetype/ttf-liberation/LiberationSansNarrow-Regular.ttf Liberation Sans Narrow [u’sans-serif’]
/usr/share/fonts/truetype/liberation/LiberationSerif-BoldItalic.ttf Liberation Serif [u’sans-serif’]
/usr/share/fonts/truetype/ttf-liberation/LiberationSansNarrow-Bold.ttf Liberation Sans Narrow [u’sans-serif’]
/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf Liberation Sans [u’sans-serif’]
/usr/share/fonts/truetype/fonts-japanese-mincho.ttf IPAMincho [u’sans-serif’]
/usr/share/fonts/truetype/liberation/LiberationSerif-Bold.ttf Liberation Serif [u’sans-serif’]
/usr/share/fonts/truetype/liberation/LiberationSans-Italic.ttf Liberation Sans [u’sans-serif’]
/usr/share/fonts/opentype/ipafont-gothic/ipag.ttf IPAGothic [u’sans-serif’]
/usr/share/fonts/truetype/ttf-liberation/LiberationSans-Italic.ttf Liberation Sans [u’sans-serif’]
/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf DejaVu Sans [u’sans-serif’]
/usr/share/fonts/truetype/liberation/LiberationMono-BoldItalic.ttf Liberation Mono [u’sans-serif’]
/usr/share/fonts/opentype/ipafont-mincho/ipam.ttf IPAMincho [u’sans-serif’]
/usr/share/fonts/truetype/ttf-liberation/LiberationMono-Bold.ttf Liberation Mono [u’sans-serif’]
/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf DejaVu Sans Mono [u’sans-serif’]
/usr/share/fonts/truetype/liberation/LiberationSansNarrow-Bold.ttf Liberation Sans Narrow [u’sans-serif’]
/usr/share/fonts/truetype/ttf-liberation/LiberationSans-Bold.ttf Liberation Sans [u’sans-serif’]
/usr/share/fonts/truetype/liberation/LiberationSansNarrow-Regular.ttf Liberation Sans Narrow [u’sans-serif’]
/usr/share/fonts/truetype/ttf-liberation/LiberationSansNarrow-BoldItalic.ttf Liberation Sans Narrow [u’sans-serif’]
/usr/share/fonts/truetype/ttf-liberation/LiberationMono-Regular.ttf Liberation Mono [u’sans-serif’]
/usr/share/fonts/truetype/fonts-japanese-gothic.ttf IPAGothic [u’sans-serif’]
/usr/share/fonts/truetype/liberation/LiberationMono-Bold.ttf Liberation Mono [u’sans-serif’]
/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf DejaVu Serif [u’sans-serif’]
/usr/share/fonts/truetype/ttf-liberation/LiberationSerif-Italic.ttf Liberation Serif [u’sans-serif’]
/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf DejaVu Sans [u’sans-serif’]
/usr/share/fonts/truetype/ttf-liberation/LiberationMono-Italic.ttf Liberation Mono [u’sans-serif’]
/usr/share/fonts/truetype/ttf-liberation/LiberationSerif-BoldItalic.ttf Liberation Serif [u’sans-serif’]
/usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf DejaVu Serif [u’sans-serif’]
/usr/share/fonts/truetype/ttf-liberation/LiberationMono-BoldItalic.ttf Liberation Mono [u’sans-serif’]
/usr/share/fonts/truetype/liberation/LiberationSans-BoldItalic.ttf Liberation Sans [u’sans-serif’]
/usr/share/fonts/truetype/liberation/LiberationSans-Bold.ttf Liberation Sans [u’sans-serif’]
/usr/share/fonts/truetype/ttf-liberation/LiberationSans-BoldItalic.ttf Liberation Sans [u’sans-serif’]
/usr/share/fonts/truetype/dejavu/DejaVuSansMono-Bold.ttf DejaVu Sans Mono [u’sans-serif’]
/usr/share/fonts/truetype/liberation/LiberationMono-Regular.ttf Liberation Mono [u’sans-serif’]
/usr/share/fonts/truetype/ttf-liberation/LiberationSerif-Bold.ttf Liberation Serif [u’sans-serif’]
/usr/share/fonts/truetype/ttf-liberation/LiberationSerif-Regular.ttf Liberation Serif [u’sans-serif’]
/usr/share/fonts/truetype/liberation/LiberationSerif-Italic.ttf Liberation Serif [u’sans-serif’]
/usr/share/fonts/truetype/ttf-liberation/LiberationSansNarrow-Italic.ttf Liberation Sans Narrow [u’sans-serif’]
/usr/share/fonts/opentype/ipafont-mincho/ipamp.ttf IPAPMincho [u’sans-serif’]
/usr/share/fonts/truetype/liberation/LiberationMono-Italic.ttf Liberation Mono [u’sans-serif’]
/usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf IPAPGothic [u’sans-serif’]
/usr/share/fonts/truetype/liberation/LiberationSansNarrow-BoldItalic.ttf Liberation Sans Narrow [u’sans-serif’]
/usr/share/fonts/truetype/liberation/LiberationSansNarrow-Italic.ttf Liberation Sans Narrow [u’sans-serif’]
/usr/share/fonts/truetype/liberation/LiberationSerif-Regular.ttf Liberation Serif [u’sans-serif’]
/usr/share/fonts/truetype/ttf-liberation/LiberationSans-Regular.ttf Liberation Sans [u’sans-serif’]

なんか,みんなファミリー.

取り敢えず,フォントキャッシュがないか探してみる.

import matplotlib

matplotlib.get_cachedir()

u’/content/.cache/matplotlib’

 
 
 

 
 
 
あー,なんか,色々弄っていたら,

import matplotlib.pyplot as plt

jp_font = {'fontname':'IPAGothic'}

plt.plot([0, 1], [0, 1])
plt.xlabel('横軸', **jp_font)
plt.ylabel('縦軸', **jp_font)
plt.title('適当なグラフ', **jp_font)
plt.show()

FireShot Capture 777 - Untitled3.ipynb - Colaboratory_ - https___colab.research.google.com_

できた.

import matplotlib.pyplot as plt
import seaborn as sns
sns.set(font='IPAGothic')

plt.plot([0, 1], [0, 1])
plt.xlabel('横軸')
plt.ylabel('縦軸')
plt.title('適当なグラフ')
plt.show()

FireShot Capture 778 - Untitled3.ipynb - Colaboratory_ - https___colab.research.google.com_

 
 

import matplotlib.pyplot as plt


plt.plot([0, 1], [0, 1])
plt.xlabel('横軸')
plt.ylabel('縦軸')
plt.title('適当なグラフ')
plt.show()

FireShot Capture 779 - Untitled3.ipynb - Colaboratory_ - https___colab.research.google.com_

豆腐が

import matplotlib.pyplot as plt
import seaborn as sns
sns.set(font='IPAGothic')

plt.plot([0, 1], [0, 1])
plt.xlabel('横軸')
plt.ylabel('縦軸')
plt.title('適当なグラフ')
plt.show()

FireShot Capture 780 - Untitled3.ipynb - Colaboratory_ - https___colab.research.google.com_

日本語に.

取り敢えず,簡単に纏めると,

・apt-getで日本語フォントを入れる(language-pack-jaとか
(「!apt-get -y install fonts-ipafont-gothic」)
・キャッシュを消す(matplotlib.get_cachedir()のディレクトリら辺)
・Restart runtime
・sns.set(font=’IPAGothic’)で試す
(・無理ならフォントを手当たり次第においてみる(ttfディレクトリとかにcpしまくる))

そしたら,とりあえずできた.

ちなみに,このColaboratoryが動いている仮想マシン(Debian),
かなり自由に弄る事ができそうな感じがする.
その気になれば,Python3も使えそうな?

まあ,豆腐と格闘するのに必死で,
他のディレクトリの中身なんて確認していないけど.

 
 

追記:
ノートを共有した場合どうなるのか試していたら,
入れたモジュールも日本語パッケージも消えていた.

どのタイミングで初期化されるんだろうか.

 
 

Where is my code executed? What happens to my execution state if I close the browser window?
Code is executed in a virtual machine dedicated to your account. Virtual machines are recycled when idle for a while, and have a maximum lifetime enforced by the system. [Colaboratory-Frequently Asked Questions What is Colaboratory? より引用]

多分,閉じても暫くは仮想マシンの状態は保持されるので,
新しくノートブックを開いたり,Restart runtimeしても,
pipで入れたモジュールやapt-getでの変更(日本語パッケージとか)
は保持されるけど,アイドル状態が暫く続くと,仮想マシンは消えると.

そして,次に仮想マシンを立ち上げた時にはイニシャライズされているって感じか.
(拙い英語で調べた感じ,適宜必要に応じて環境をカスタムするしかない,と書かれていた)
(例えば,Pandasでエクセルをロードしたい時は
import前に「!pip install -q xlrd」行を書く様にするとか)

StackOverflowの情報によれば,

Lifetime of a colab VM? – StackOverflow

・VMの最大有効時間は12時間(12時間以上の処理はできない??)
・アイドル状態が90分続くとタイムアウト(これは経験済み)

情報が無さすぎて,手探りぐりぐりだけど.
(stackoverflow([google-colaboratory])でもまだ2ページ分の質問しかない)

でも,Colaboratoryを使う目的はあくまで「共有」な訳で,
その為には「最小限これだけは押さえておかないと」
という部分を形式知化したい.

暫く,Colaboratory関係の散文なエントリが続きそう.
(最終的には,自分が後で見直しやすい様に,纏めたい)

広告
カテゴリー: 未分類 パーマリンク

Colaboratoryで「豆腐」をなんとかしたい への4件のフィードバック

  1. ピンバック: Colaboratoryについて(まとめ) | 粉末@それは風のように (日記)

  2. ピンバック: Colaboratory便利なのに…… | 粉末@それは風のように (日記)

  3. ピンバック: 今月の電気代がヤバかった | 粉末@それは風のように (日記)

  4. ピンバック: Colaboratoryでmatplotlibの日本語表示 | IT技術情報局

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中