Pythonって便利
Pythonって便利です.
グラフはmatplotlibで簡単に作れるし,数値計算もnumpyがあれば事足りる.
最近は機械学習系の研究に使われたり,なんならゲームなんかも作れちゃうPython.
そんなとき,私は「Pythonで図は作れるけど表も作れるんだろうか?」とふと疑問を抱いた.
matplotlib
答えはここにあった.
どうやらmatplotlibには表を作成するための関数があるらしい.
書くならばこんな感じ.
import matplotlib.pyplot as plt
import pandas as pd
if __name__ == '__main__':
data = {
'a': [1.0, 2.1, 3.5, '-', 2.0, 1.0, 2.1, 3.5, 4.0, 2.0, ],
'b': [5.7, 6.1, 7.2, 8.3, 1.2, 5.7, 6.1, 7.2, 8.3, '-', ],
}
df = pd.DataFrame(data)
fig, ax = plt.subplots(figsize=(3, 3))
ax.axis('off')
ax.axis('tight')
ax.table(cellText=df.values,
colLabels=df.columns,
bbox=[0, 0, 1, 1],
)
plt.show()
表作るまでが少し面倒くさいし,表のデザインを変えるのも簡単にはいかない.
デザインを変えるには,
import matplotlib.pyplot as plt
import pandas as pd
if __name__ == '__main__':
data = {
'Tokyo': [27, 23, 27, 24, 25, 23, 26],
'Osaka': [26, 23, 27, 28, 24, 22, 27],
}
df = pd.DataFrame(data)
fig, ax = plt.subplots(figsize=(3, 3))
ax.axis('off')
ax.axis('tight')
tb = ax.table(cellText=df.values,
colLabels=df.columns,
bbox=[0, 0, 1, 1],
)
tb[0, 0].set_facecolor('#363636')
tb[0, 1].set_facecolor('#363636')
tb[0, 0].set_text_props(color='w')
tb[0, 1].set_text_props(color='w')
plt.show()
ちょっとわざとらしいが,やっぱりデザインを凝るのならば面倒くさい.
そこで,このmatplotlibのtable関数をもとに,簡単にお洒落な表を作れるライブラリを作ろう,となった.
ついでにPyPIにも挑戦してみたかったので,pip install
もできるようにもしてみた.
pyTable
なんともシンプルな名前だが,とりあえず作成してみた.
もちろんPyPIにも登録済みなので,
$ pip install pytab
でインストール可能だ.
本当はpytableにしたかったけど先約が居たので妥協.
(しばらく更新されていないやつPyPIから消して欲しいよね.)
そして以下のように引数を指定して,簡単かつお洒落な表が作れる.
import pytab as pt
if __name__ == '__main__':
data = {
'Tokyo': [27, 23, 27, 24, 25, 23, 26],
'Osaka': [26, 23, 27, 28, 24, 22, 27],
}
pt.table(
data=data,
th_type='dark',
table_type='striped'
)
pt.show()
その他細かく表を定義できるが,簡易なドキュメントは以下にまとめたので,気になった方は見て欲しい.
pyTable ドキュメント
Source
Github: HiroshiARAKI/pytable: pytable is the library to plot table easily.
PyPI: pytab · PyPI
Documentation: pyTable ドキュメント
あとがき
ソースコードを見るとわかるが,そんな大したコードは書いていません.
これでライブラリなんて,よくそんなに堂々と名乗れるな,と自分でも思う.
ただmatplotlibをラップしただけだろ!と言われると反論できません.笑
まあでも,まだまだ発展途上なライブラリなので,今後さらに利便性を上げていく予定です(たぶん).
気になった方は,pyTable是非使ってみてください!!