どういうこと?
列名が日本語のデータを
列1,列2
1,3
2,4
3,3
4,4
pandas-profilingにかけると
import pandas as pd
import pandas_profiling
df = pd.read_csv('input.csv')
prof = pandas_profiling.ProfileReport(df)
prof.to_file('output.html')
相関のプロットのラベルに含まれる日本語が文字化けして豆腐になります。
matplotlib でよく見るやつです。
環境によっては以下のようなエラーが出ます。(Ubuntuの場合)
UserWarning: findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans
エラーメッセージから matplotlib のエラーだと分かるので、以下のようにコードを変更してみましたが、うまくいきません。
import pandas as pd
import pandas_profiling
# フォント指定
import matplotlib
matplotlib.rcParams['font.family'] = 'MigMix 1M'
df = pd.read_csv('input.csv')
prof = pandas_profiling.ProfileReport(df)
prof.to_file('output.html')
フォントについて
MigMix 1M なのは趣味です。
Ubuntuでのフォントのインストールからmatplotlibへの反映までは以下を参照してください。
なぜ?
pandas-profiling Font family not found で検索すると Issue #95 · pandas-profiling/pandas-profiling · GitHub がヒットしました。
読んでみると、 pandas-profiling で用意している設定ファイル pandas_profiling.mplstyle
で上書きされているようです。
どうすればいい?
pandas_profiling.mplstyle
を上書きします。
場所は、 pandas_profiling.__file__
と同じディレクトリです。
ファイルの以下の部分を
font.family: sans-serif
font.sans-serif: Arial, Liberation Sans, Bitstream Vera Sans, sans-serif
次のように変更します。
font.family: sans-serif
font.sans-serif: MigMix 1M, Arial, Liberation Sans, Bitstream Vera Sans, sans-serif
font.family: sans-serif
を font.family: MigMix 1M
にするのでもいいかもしれません。
pandas_profiling.ProfileReport の引数あたりで matplotlib.rcParams
形式が指定できるようになると楽だと思います。