2019年2月18日月曜日

matplotlibでスタイルシートを変更する

公式
https://matplotlib.org/gallery/style_sheets/style_sheets_reference.html

--

matplotlibでスタイルシートを変更するには

style = 'スタイル名'

plt.style.use(style)

とします。

スタイル名は例えば 'seaborn'なのですが、
plt.style.available
でこのように全て出力されます。
['seaborn-pastel',
 'seaborn-white',
 'seaborn-colorblind',
 'seaborn-talk',
 'seaborn-deep',
 'seaborn-poster',
 'seaborn-dark-palette',
 'seaborn-bright',
 'seaborn-darkgrid',
 'seaborn',
 'seaborn-whitegrid',
 'dark_background',
 'seaborn-paper',
 'bmh',
 'seaborn-dark',
 'classic',
 'seaborn-ticks',
 'seaborn-notebook',
 'seaborn-muted',
 'ggplot',
 'fivethirtyeight',
 'grayscale']
seabornのシリーズが沢山あるのが分かりますね。ちなみに、'default'とするとデフォルトに戻せます。

自分の使っているプロットの色を変わる様子を確認したいときは、リストを使ってこんな感じでしょうか。
# in jupyter
def yourplot():
    "some plot that style to be changed"
    plt.plot([1,2])
    plt.plot([2,3])
    plt.plot([3,4])
    plt.plot([4,5])
    plt.plot([5,6])
    plt.plot([6,7])
    plt.show()
for style in plt.style.available:
    print(style)
    plt.style.use(style)
    yourplot()

出力例) プロットされる線の色もスタイルで変わっていますから、グラフを複数描いておいたほうが良いでしょう。

2019年2月9日土曜日

matplotlibで日本語フォントを使う

maptlotlibでは、標準のままではタイトルや軸に日本語フォントを使うと文字化けします(豆腐フォント化)。フォントを用意して日本語も出力できるようにします。

ttfフォントファイルを用意する

この例では、IPAが提供しているフォントをダウンロードします。
https://ipafont.ipa.go.jp/old/ipafont/download.html
IPAゴシック、IPAPゴシック、IPA明朝、IPAM明朝の4種類のフォントのttfファイルが入ったzipファイルがあります。

(Win、Ubuntu同様)
使いたいフォントのttfファイルをmatplotlibのfontディレクトリに入れます。
例えば以下のディレクトリです。
 anaconda\...\Lib\site-packages\matplotlib\mpl-data\fonts\ttf

フォントキャッシュを削除

フォントのキャッシュを削除します。このディレクトリを.matplotlibごと削除します。

Win
(User)\.matplotlib

Ubuntu
(User)/.cache/matplotlib/

他のサイトで紹介されている「fontList.py3k.cacheを消す方法」だけではうまく行きませんでした。matplotlib.pyplotを再度インポートすると.matplotlibが作成されるのが確認できます。Winでは(というかversion3以降では)fontlist-v300.jsonというファイルもできます。

日本語フォントで描画

Pゴシックを使ってタイトル部分を「タイトル」にします。
%matplotlib inline
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'IPAPGothic'
plt.plot([1,2])
plt.title("タイトル")
plt.show()


ちなみに、フォントをデフォルトのsans-serif(サンセリフ)に戻すにはこうします。

plt.rcParams['font.family'] = 'sans-serif'

x, y軸もフォントを変えてみます。
plt.plot([1,2])

plt.title('タイトル:IPA明朝', {'fontname':'IPAMincho'}, fontsize=18)
plt.xlabel('X軸:IPAP明朝', {'fontname':'IPAPMincho'}, fontsize=18)
plt.ylabel('Y軸:IPAPゴシック',{'fontname':'IPAPGothic'}, fontsize=18)
plt.show()



参考

https://github.com/matplotlib/matplotlib/issues/3590
http://kaisk.hatenadiary.com/entry/2015/02/15/215831

2019年2月7日木曜日

matplotlibでフォント、軸目盛り、マージン設定

matplotlibでグラフのフォントを変更するにはplt.rcParamsを使います。例えば、フォントサイズを14にしたいときは
plt.rcParams["font.size"] = 14

とします。このときは、pltの全てのプロットに対して影響します。plt.plotのパラメータを個別に変えたいとき、例えばtitleのフォントだけを変えたいときは
plt.title('title', fontsize=14)
とします。

スタイルをデフォルトに戻すときは、

plt.style.use('default')

または

plt.rcdefault()

ちなみに、
%matplotlib inline
をセットしていると、デフォルトよりも小さくなっていたりします。
このマジックコマンド側の変更方法はよくわかりませんでした(★)


plt.rcParamsはpltのパラメータの辞書

https://matplotlib.org/api/matplotlib_configuration_api.html

にも載っています。print(plt.rcParams)で一覧を見ることができます。

y軸の目盛りを内向きにしたいとき
plt.rcParams["ytick.direction"] = 'in'

y軸のサブ目盛りをON
plt.rcParams["ytick.minor.visible"] = True

目盛り、マージンをいじる

x,yを与えてplot, showしただけのものです。
このとき、x,y軸とも0から始まっていないことに注意。

%matplotlib inline
import matplotlib.pyplot as plt
x = [1, 2, 4, 6, 8]
y = [1000, 300, 150, 135, 120]
plt.plot(x,y)
plt.show()


numpyを使って、np.arangeで軸の目盛りを作ります。
x軸は1ずつ、y軸は500ずつ目盛りをうちます。
なお、np.arangeではなくてリストで[0, 1, 2, 3, 4, 5, 6, 7, 8]やrange(9)を与えても同じです。

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
x = [1, 2, 4, 6, 8]
y = [1000, 300, 150, 135, 120]
plt.plot(x,y)
plt.xticks(np.arange(0,9,step=1))
plt.yticks(np.arange(0,1001,step=500))
plt.show()


plt.margins(0.1)として10%のマージンを外側に与えます。
少し見栄えがよくなります。

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
x = [1, 2, 4, 6, 8]
y = [1000, 300, 150, 135, 120]
plt.plot(x,y)
plt.margins(0.1)
plt.xticks(np.arange(0,9,step=1))
plt.yticks(np.arange(0,1001,step=200))
plt.show()



マージンを1(100%)与えると、9分割した中央にグラフがくるのが分かります。

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
x = [1, 2, 4, 6, 8]
y = [1000, 300, 150, 135, 120]
plt.plot(x,y)
plt.margins(1)
plt.xticks(np.arange(0,9,step=1))
plt.yticks(np.arange(0,1001,step=200))
plt.show()





Pythonでdir()関数の使い方

dirは定義されている変数、定数を出力します。

import os
dir(os)

とすると、osモジュールの属性が出力されます。
os.pathなんとか、、ってあったっけ?とかいうときの確認にも使えますね。

dir()

と引数なしにすると、その名前空間で定義されている変数が全て出ます。

このとき、ビルトイン関数は出てきません。

ビルトインも出したいときは、このようにします。
import builtins
dir(builtins)

dir(os)で
たくさん出てくるので、'path'を含むものだけ出してみます。
import os
[i for i in dir(os) if 'path' in i] 


2019年2月4日月曜日

Pythonでディレクトリ名にピリオドを入れた失敗

ディレクトリ名にピリオドを入れると、Pythonではサブディレクトリとして判定してしまうのでモジュールが読み込めません

hoge.hoge ー __init__.py 

なんていうモジュールがあったとして

import hoge.hoge

とやると、「hogeディレクトリ化のhoge.pyモジュールを読みに行く」ことになって

ModuleNotFoundError: No module named 'hoge.hoge'

というエラーになるようです。

2019年2月2日土曜日

日誌2019年2月

2019/02/01

今年は豆の価格が高い気がします。1グラム2円くらいの価格帯になっているような・・・。コンビニでの寿司の廃棄が問題になっているようですが、豆は賞味期限が比較的長いようなので、年中おいておいてほしいものです。探せば売っているのかも。

Ubuntuの調子があまりよくなく、そろそろリセットしないといけないのかもしれません。デュアルモニタにしたあたりからおかしいのだが・・・。しかしOSからやるとまたUFIだのという問題が起きそうで怖いのですが。

2019/02/02

社会課題の解決、というものをビジネスに掲げるのは非常に難しいのでは、と思うのです。一方で課題を解決しつつ、一方で課題を自ら生んでいるようなものが多いのでは。


2019/02/03

日誌といいながら単なる日記になっていますが。少しgitを使っています。いまいち上手く活用できていないのですが・・・データのバックアップ用でしょうか。

Ubuntuでswitch greeterという不具合が相変わらずでるのですが、結局意味不明のまま再起動すると直る、という感じに落ち着いています。アップデートなどの問題なのでしょうか。

vimにdeinを入れようとしたらエラーで、vim7.4を使っていることが理由でした。ということでアップグレードしました。vim81になりました。

エラーはこれ

Error detected while processing function dein#begin[1]..dein#util#_begin[6]..dein#util#_error[1]..<SNR>12_msg2list:
line    1:
E121: Undefined variable: v:t_list
E15: Invalid expression: type(a:expr) ==# v:t_list ? a:expr : split(a:expr, '\n')
Error detected while processing function dein#begin[1]..dein#util#_begin[6]..dein#util#_error:
line    1:
E714: List required

2019/02/04

pythonanywhere でFlaskを入れて動かそうとしていますが、毎回初歩的なところで失敗しています。細かく失敗して、小さくスタートするのが良いようですね。大きいプログラムをいきなり動かすほどの経験はまだ足りないようです。


2019/02/05
2019/02/06
2019/02/07
2019/02/08

日記ってまとめて書くとあまり意味がないな、とか思いますけど。最近やっているのは
・Flask・Vim・JS・matplotlibとかでしょうか。本業はパフォーマンスチューニング的なことなんですが・・・。Vimに慣れて他の打ち方をするのがつらいです。

YouTubeの再生カウントってどうやったら同じ人の2回目ってカウントされるんでしょうか。24時間でリセットされるとか?IPでカウントはしてないですよね。。謎。

2019/02/09

このブログはもともと、はてなブログでやっていたのですが、検索から削除されずにいたようなのですが、Googleに申請したら1ヶ月くらい?で検索の上位には出てこなくなりました。キャッシュは残っているようで細かく検索すると出てくるようですが・・・。

以前にハマったことに対してまた同じところでハマったりして、実はメモを残していたのに調べたりして、困ったことです。そういうのはどうやったら改善できるでしょうか?とにかくいいメモを作って毎回検索するしかないような気もします。

2019/02/10
KindleをUbuntuで見れるようになりました。時間がかかりましたけど。

2019/02/11
Ubuntuで音が出なくなって、alsaのリロードしてもダメ、でpulseaudioという機能?を再インストールしました。そもそもこの音が出なくなる(audioモジュールが認識されなくなる)のは何故なんでしょうか。

Youtubeのカウントはやはり24時間くらいでリセットされるようですが、なにか上手にやっていて、人間がきちんと見ていることを調べているようです。最初はあまり更新しないようにしていて、途中で再計算したりもするとのこと。

YouTube video views reflect how many times a video has been watched and can be an important measure of a video's overall popularity.
We want to make sure that videos are being viewed by actual humans and not computer programs. During the first couple of hours after a video has been published, we'll only show views that our systems believe to be valid. This might not yet show all legitimate views at that time.
After quality views are counted, view count updates more frequently. The process of including all quality views can take some time depending on a video's popularity and viewership. Afterward, the view count updates more frequently, but keep in mind that we're constantly validating views, so view count can always be adjusted.

静的ファイルの更新でキャッシュのクリアをいつも忘れてしまいます。Shiftを押しながら更新ボタンをクリックしてもダメなんですね。Shift+F5とすればよいようですが。


2019/02/12

本がパソコンで読めるようになって、紙の本を読むのはしんどくなってきました。首を上げたり下げたりするのがちょっと面倒です。メリットデメリット半々というところでしょうか。

PC本のメリット
・かさばらない
・検索できるものもある
・PCモニタと並行に置ける

紙本のメリット
・安い(中古がある)
・パラパラめくって見るのがPC本に比べてしやすい
・人に貸しやすい

お互いのメリットがデメリットになりますね。自炊のコストが下がれば、紙を買って吸い上げて売る(メルカリではけっこう出ている)、というシステムにできれば安上がりなのですが。1度自炊も試してみみてもよいのかな、と思い始めました。


2019/02/13
2019/02/14
2019/02/15
2019/02/16
2019/02/17

マルチプロセスの勉強とかをしているのですが、そもそもシングルプロセスのことをよく理解していないな、と思うのです。アーキテクチャの勉強をきちんとしないとです。

2019/02/18

matplotlibのスタイルシートを変えて試せるsnipetを作ったのだけど、公式でありましたね。

2019/02/19

Vimの正規表現を練習していました。Pythonに慣れていると、\ を入れ忘れますね。

2019/02/20
2019/02/21
よく分からない理由でWin機が遅くなっていました。system kernelが重いのかな、と思いきや、intelのアプリで診断しても問題なし。postgresql.exeを立ち下げたりしてたら直りました。良くわかりませんね。Postgres.confをいじり始めたのですが、いまいちよくわかりません。もう少し勉強が必要だなーと。

日本語技術の本、東大統計本とかちょこちょこ読んでいます。

2019/02/22
2019/02/23
2019/02/24
2019/02/25
2019/02/26
2019/02/27

Software Design誌のバックナンバーを読んでいます。Vimはなかなかコマンドが覚えられないのと、ヘルプでの検索がうまく行かないときが多いです(うろ覚えですら検索できない)。

PDFから文字を出力するのはけっこう難しいようです。うまく出来るようなソフトを作ってみたいですが。

LinePayの12月の還元ポイントが2/27に入りました。2月中、という話だったので別に間違ってはいませんが、少しヤキモキしてしまいました。


2019/02/28

2月も終わり。仕事は資料作成がメインでした。技術的なお勉強は・・・vimで苦しんでいます、といういうところかな。
ページ送りに
nmap <C-J> <C-D>
などとするとちょっと楽かな、と思っています。半ページより10ページスクロールとかのほうがやりやすいかも?と試してみようと思っています。