目次

ydata-profiling

データ分析、特にEDA(探索的データ解析)で使われる。元はpandas-profilingという名前だった。

EDA

何らかの、統計や機械学習に使うことを想定して集められた調査データがあるとする。

はじめて触れるデータなので詳細は不明だ、という場合、

という留意点や要求がある。そんな時、とりあえずデータ全体を俯瞰したい時に使う。

PythonでのEDAライブラリは、主に以下の3つがよく使われているっぽい。基本的にはpandas.DataFrameで表現するような2次元データを扱うのに特化している。

日本語化

ydata-profilingは、自動でseabornを使って相関グラフなどを描いてくれるが、 そのままの設定ではフォントが英語なので日本語が豆腐(□)になってしまう。

パッと分析できるのが利点なのに、いちいちカラム名を英数字化するのは煩わしい。日本語フォントで書けるようにする。

現状、調べた範囲ではあまり綺麗な解決方法が見つからず、sites-packages 内のファイルをいじることになる。

検索すると古いバージョンにおける解決策などが出てくるが、今は以下をすればよくなるはず。
(日本語を Meiryo で描画したいとする)

(これは一例で、rcParams['font.family'] に日本語フォントを設定する記述なら何でもよい)

なぜこのような対策になってしまうか

まぁ、簡単に言えばライブラリが設定をハードコーディングしてるからなんですけど。

ydata-profiling では、グラフ描画にseabornを使っていて、seabornはmatplotlibを使っている。
matplotlibは、描画設定を rcParams という辞書で設定するのだが、ydataは、描画時に「グラフはこの設定で書きます!」というのをハードコーディングしている。
あまりにユーザーに自由にさせすぎるとそれはそれで収拾が付かなくなるので仕方ないか。

また、ハードコーディングの箇所が複数あるため、一部を変更しても反映されないということがあったりする。

しかし、context.py のハードコーディングされた設定を直接書き換えても、依然として豆腐のままとなる。

よって、manage_matplotlib_context() 内で、sns.set_style() が呼ばれた後に rcParams を変更すると上手くいく。

まぁ、seabornの方を変更してもいいのだが……、seaborn単独で使う場合は sns.set() などで後から変更できるので、 あくまで「sns.set_style() から描画までが一直線」なydata-profilingを使うときに困る、つまりydata-profilingに起因する問題なわけで、 ダーティな解決策をとるにしてもなるべくydata-profiling側をいじりたい、という気持ちはある。

ただ、他にもseabornに依存したライブラリを使っていて同様の問題があって、それらをseaborn側をいじることでまとめて解決できるなら、そっちでもいいかも。

置き換えるフォントの確認方法

上記ではMeiryoを例としたが、変更する日本語フォントは、matplotlibが認識しているフォントである必要がある。
フォント名を確認するには、

import matplotlib as mpl

print(mpl.get_cachedir())

として、matplotlibのキャッシュディレクトリを表示させる。
そこに fontlist-v330.json(数字部分はバージョンによって変わる)というキャッシュファイルがあるはずなので、 その中に登録されているかで確認できる。

登録されていない場合、以下のいずれかの方法で認識させる。