2019年3月9日土曜日

pythonでグラフ1

目標:
手作業で、気象庁のデータ( https://www.data.jma.go.jp/risk/obsdl/index.php )から 1990, 2018年の毎時温度をでダウンロードして、各月で合算してグラフにする・・・なんの意味もないデス。
手作業でcalcちまちまやっても30分あれば済むことを、Do素人が、初pythonで初グラフ。

結果:

環境:
OS : Debian GNU/Linux Stretch, KDE, Python3.5

作業:
pythonでグラフ1
 1.python install
 2.python venv (Virtual Environments)の設定
 3.グラフでつかう matplotlibの日本語表示設定

pythonでグラフ2 別ページ
 4.別途、手動で気象庁のcsvデータダウンロード
 5,悪運で動いたスクリプト

1.pythonのインストール
pythonバージョン2系はディフォルトで入っている。
python3系で試したいので、パッケージ名 python3.5 , python3.5-venv, python-pip とその依存パッケージをインストール。
(後に使用する python3-matplotlib, python3-pandas などのdebパッケージはここではインストールせず、仮想環境のvenvで pip install した。)

2.venv の設定
設定は、ディレクト以下に作られる。必要なファイルコピー、その後パス通しをやってるみたい。ここでは安易に "venv"というディレクトリ名にした(任意で、py_venvでもtestPythonでもなんでもいい)。/home/$USER/に置き、python3を使う設定とした。(以下、ユーザー名$USER, プロンプト表示は各環境による)。
ターミナルを開いて、
$ cd
$ pwd /home/$USER
$ python3 -m venv                   ← ここで ディレクトリ venvも作られる。

次に 仮想環境を試してみる
$ cd venv
$ source bin/activate             ← 仮想環境の機能開始
(venv) :~/venv$ python -V    ← プロンプト頭に (venv)と出る。パイソンのバージョン
Python 3.5.3                         ← python3 -V としてないのに、ちゃんとバージョン3.5
(venv) :~/venv/test$ pip3  ← この環境では pip3も pipも同じ。
Usage: 
  pip [options]
Commands:
  install        Install packages.
  ... (省略)
(venv) :~/venv$ pip install pandas  ← 先で使うpandasというライブラリもインストール
Collecting pandas
  Using cached https:/...
  ... (省略)
(venv) :~/venv$ deactivate          ← 仮想環境の機能を止める

結局、venv環境でpython3を使うには、venvディレクトリで

$ cd venvディレクトリ
$ source bin/activate
・・・
$ deactivate

・・・という流れ。venv を使わなくなったら、ディレクトリごと削除。

 [pip のメモ]
 pipのバージョンは?
 $ pip --version
 pip でパッケージは何入れた?
 $ pip freeze
 pythonのバージョン何にした?
 $ python --version
 Python 3.5.3
 Debian stretchの venvには PySide2もインストール簡単
 $ pip install PySide2

3.グラフ作成でつかうmatplotlibの日本語表示の設定
現状は、
$ source bin/activate
(venv) :~/venv$ python                 ← 対話モード(インタラクティブモード)
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib as mpl
>>> print(mpl.rcParams['font.family'])
['sans-serif']                         ← sans-serif だけ
>>> print(mpl.rcParams['font.sans-serif'])
['DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Sef', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avantarde', 'sans-serif']
>>> quit()                             ← 対話モード終了は CTRL+D か quit()
(venv) :~/venv$ deactivate              ← venv環境終了


matplotlibは ttfフォント(TrueType フォント)とotfフォント(OpenType)に対応。
以下は Takaoフォント(TakaoGothic, TakaoPGothic, TakaoMincho, TakaoPMincho)の利用で説明。

$ apt search takao
出力に[インストール済み]表記が無い場合、この出力を参考にパッケージをインストール。
(DebianにはデフォルトではTakaoフォントは入っていない。)
$ sudo apt install fonts-takao

インストールの確認を再びpythonで行ってみる。
$ source bin/activate
(venv) :~/venv$ python                 ← 対話モード(インタラクティブモード)
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib.font_manager as fm
>>> fm.findSystemFonts()

この出力を mpl_font.txtなんかにコピペしてやる (改行無いのでエラーでるかも)。
見やすいように、普通のターミナルで整形してソート。
$ cat mpl_font.txt | tr ',' '\n' | sort > font.txt
$ grep Takao font.txt
 '/usr/share/fonts/truetype/takao-gothic/TakaoGothic.ttf'
 '/usr/share/fonts/truetype/takao-gothic/TakaoPGothic.ttf'
 '/usr/share/fonts/truetype/takao-mincho/TakaoMincho.ttf'
 '/usr/share/fonts/truetype/takao-mincho/TakaoPMincho.ttf'
拡張子を抜いたファイル名 TakaoGothic, TakaoPGothic, TakaoMincho, TakaoPMinchoは、matplotlibの設定ファイル matplotlibrc で使う。

venv環境で使うフォントなので、venv環境の対話モードで matplotlibrcの場所を聞く。
>>> import matplotlib as mpl
>>> mpl.matplotlib_fname()
'/home/$USER/python venv/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrc'
設定ファイルの場所がわかったので、quit()してdeacivate

matplotlib を開いてみると、Debianでは行頭が全部'#'でコメントアウト。
"FONT"で検索していくと"#### FONT"以下が見つかる。
195行 # font.family          : sans-serif
206行 # font.serif            : DejaVu Serif, Bitstream Vera Serif, ...
207行 # font.sans-serif    : DejaVu Sans, Bitstream Vera Sans, ,,,

この3行の# を消して、206行の207行のフォントリストの最初にTakaoPMincho,TakaoPGothic,を書き込み保存。
font.family          : sans-serif
font.serif             : TakaoPMincho, DejaVu Serif, Bitstream Vera Serif, ... ←この行はいじらなくてもいいかも
font.sans-serif   :: TakaoPGothic, DejaVu Sans, Bitstream Vera Sans, ...

一旦、フォントキャッシュを消す (すぐ再生されるので気にしない)。
$ rm -r ~/.cache/matplotlib

再度(venv)で確認
(venv) :~/venv$ python                 ← 対話モード(インタラクティブモード)
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib as mpl
>>> print(mpl.rcParams['font.family'])
['sans-serif']
>>> print(mpl.rcParams['font.sans-serif'])
['TakaoPGothic', 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Sef', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avantarde', 'sans-serif']
TakaoPGothicを認識

注意) python venv環境の削除や、アップデートの度に matplotlibrcは上書きされてデフォルトに戻るので、matplotlibrcは再設定が必要。

以上で matplotlibの日本語設定終了。

DO素人のメモ