【Python基礎】テーブル表示 tabulate

  • URLをコピーしました!
目次

Pythonでデータを表示する際の困りごと

Pythonでデータを扱いだすと困ることとして、データの表示形式があります。

例えば、時間と気温をデータ化したとします(値は適当です)。

とりあえず辞書に格納し、表示させた例がこちらです。

dataset = {}

dataset["time"] = ["8:00", "9:00", "10:00", "11:00", "12:00"]
dataset["temp"] = [20.8, 21.5, 22.3, 24.7, 25.2]

print(dataset["time"])
print(dataset["temp"])

実行結果
['8:00', '9:00', '10:00', '11:00', '12:00']
[20.8, 21.5, 22.3, 24.7, 25.2]

今回は5つのデータだけなので、どれが何番目のデータか簡単に分かりますが、多くなってくると、どのデータが対応するのか分かりにくくなります。

もし表形式になってくれていれば、分かりやすいと思いませんか?

では表形式にするために、上記の実行結果をエクセルにコピペしてみます。

なかなか思ったようには表示してくれず、2行に別れていますが、列に関しては、1つのセルに入ってしまっています。

これでは、1つ1つ手作業でセルに入れていく必要が生じてしまいます。

だったら最初からエクセルを使えばいいわけで。

また見栄えだけの問題ではなく、データをさらに処理しようとした時、Excelで結果を確認したり、処理すると言うこともあるでしょう。

もちろんPythonで全てを終えるのが理想的ですが、Pythonの技術が未熟な時は難しい処理に関しては、慣れているExcelで処理した方が早かったりします。

そんな時、コピペしただけで、エクセルのセルにそれぞれ値が入ってくれた方が、後に処理するのが楽なわけです。

そんな時に知っておくと良い関数がtabulateです。

ちなみにtabulateは日本語で「表にする」だそうです。

そのまんまで、分かりやすいですね。

tabulateをインストール

tabulateはPythonの基本パッケージには入っていないので、別途インストールする必要があります。

インストール方法は前に紹介していますが、今一度紹介します。

まずはAnaconda-navigatorを起動します。

左側の「Environment」をクリック。

矢印のプルダウンメニューを「Not installed」に変更。

もしくは右上の検索ボックスで「tabulate」を検索し、tabulateのチェックボックスにチェックを入れ、「Apply」をクリック。

するとインストールが開始されるので、しばし待ちます。

画面が更新されたら「Apply」をクリック。

これでインストール完了です。

tabulateの使い方

まずはimportしますが、tabulate以外にもIPython.displayのHTMLとdisplayを使いますので、こちらもimportしておきます。

import tabulate
from IPython.display import HTML, display

先ほどのデータを使い、一度出力してみます。

import tabulate
from IPython.display import HTML, display

dataset["time"] = ["8:00", "9:00", "10:00", "11:00", "12:00"]
dataset["temp"] = [20.8, 21.5, 22.3, 24.7, 25.2]

headers = ["time", "temp"]
table = [dataset["time"], dataset["temp"]]
display(HTML(tabulate.tabulate(table, headers, tablefmt="html")))

実行結果

綺麗なテーブル表示にはなっていますが、思ったようにはできていません。

1行目にヘッダー(headers)、2行目に時間(dataset[“time”])、3行目に温度(dataset[“temp”])となってしまっています。

ヘッダーに従って、timeの列には時間を、tempの列には温度を表示してほしいわけです。

そこで使うのが、numpyという数値計算ライブラリです。

こちらはAnacondaを使っている人はすでにインストールされています。

そこでnumpyをimportしますが、これは慣例的にnpと打つだけで使えるようにしてimportします。

import tabulate
from IPython.display import HTML, display
import numpy as np

import X as Yとすると、XというライブラリをYという名前で使うことができます。

つまり今回の場合は、numpyとタイプしなければいけないところを省略形のnpとタイプするだけで、numpyとタイプしたのと同じことになるわけです。

今回はnumpyの中のtransposeという関数を用います。

transposeは行と列を入れ替える関数です。

ちょっとやってみましょう。

import numpy as np

dataset["time"] = ["8:00", "9:00", "10:00", "11:00", "12:00"]
dataset["temp"] = [20.8, 21.5, 22.3, 24.7, 25.2]

table1 = [dataset["time"], dataset["temp"]]
table2 = np.array(table1).transpose()

print(table1)
print(table2)

実行結果
[['8:00', '9:00', '10:00', '11:00', '12:00'], [20.8, 21.5, 22.3, 24.7, 25.2]]
[['8:00' '20.8']
 ['9:00' '21.5']
 ['10:00' '22.3']
 ['11:00' '24.7']
 ['12:00' '25.2']]

table1ではdataset[“time”]とdataset[“temp”]を格納したので、インデックス0に時間が、インデックス1に温度が格納され、2次元配列が生成されています。

table2では行と列を入れ替えたので、時間の1つ目と温度の1つ目がインデックス0に、時間の2つ目と温度の2つ目がインデックス1へと時間と温度の組み合わせの2次元配列へと変換されています。

ちなみにnp.array()にリストを入れることによって、通常のリストからnumpyのリストへと変換しています。

transposeのようなnumpyライブラリの関数を使う際には、このように変換する必要があるので注意してください。

そのうちにnumpyに関しても解説をしますが、とりあえず今回はnp.array()が必要だというくらいに留めておいてください。

それではこの変換したデータを用いて、テーブル表示してみましょう。

import tabulate
from IPython.display import HTML, display
import numpy as np

dataset["time"] = ["8:00", "9:00", "10:00", "11:00", "12:00"]
dataset["temp"] = [20.8, 21.5, 22.3, 24.7, 25.2]

headers = ["time", "temp"]
table = [dataset["time"], dataset["temp"]]
display(HTML(tabulate.tabulate(np.array(table).transpose(), headers, tablefmt="html")))

実行結果

timeの列に時間が、tempの列に温度が表示されました。

ではこれをExcelにコピペしてみましょう。

ちゃんとそれぞれの値が別々のセルにコピペできました。

ここで先ほどのコマンドの解説をしてみます。

ちょっとややこしいので、それぞれ分解してみました。

長くて分かりにくいコマンドでも、1つずつ分解することで理解が進みますので、今後、こういったコマンドは1つずつどういう意味か考えてみることをお勧めします。

これで綺麗なテーブル表示ができ、Excelとの連携が簡単になりました。

次回は連番を作る関数、range関数に関して解説をしていきます。

ということで今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次