Pythonで簡単にお洒落な表を作成してみない?


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是非使ってみてください!!