IQ Botのテーブル項目に対するおまじないコードを詳しく解説


IQ Botでテーブル項目にPythonスクリプトを書くとき、最初と最後に必ず入れるコードがあります。

こちらの記事にも書きましたが、以下のコードです。

テーブル項目へのPythonスクリプトの書き方
#表の操作をするときに必ず入れるコード(最初)
import pandas as pd
df = pd.DataFrame(table_values)

# この間の部分に、処理したいコードを入れていく

#表の操作をするときに必ず入れるコード(最後)
table_values = df.to_dict()

社内でIQ Botを使っているかわいい後輩ちゃんに
「このコードって何をやっているんですか?」 と質問されたので、
がんばって答えてみました。

ライブラリ(pandas)をインポート!

まずプログラミング言語には「ライブラリ」といって、
ある分野の処理を行いやすくするための命令や関数をまとめてくれたパッケージみたいなものがあります。

Pythonにはpandasというライブラリがあって、
このpandasというのは、表やデータの配列を扱いやすくするためのライブラリです。

ライブラリを使うためには、まず該当のライブラリをインポートする必要があります。

1行目のimport pandas as pdがそのための処理です。

おまじないスクリプトの1行目
import pandas as pd      

#意味:pandasを importしてね。
#     そしてそのpandasの中身を、これから書くコードの中ではpdという名前で使えるようにしてね。

DataFrameに変換!

IQ Bot が帳票から読み取ったテーブルの情報は、table_valuesという変数にまるっと入っているのでした。
(この話が分からない人はこちらを参照)

そのtable_valuesの中身は、そのままだと扱いづらいので、
pandasで扱うのに適したDataFrameという形式に変換します。

そして、その変換後のデータをdfという名前の変数に格納します。

おまじないスクリプトの2行目
df = pd.DataFrame(table_values)    

#意味:table_valuesの中身を、pandasのDataFrame形式に変換してdfという変数に入れてね。

ここでpd.DataFrameにおけるpd.はpandasの意味です。

これをpandas.と書かずにpd.と省略して書けるのは、
おまじないコードの1行目でimport pandasas pdをつけておいたからです。

DataFrameに変換すると、どうなる?

この1~2行目までの処理をやっておくことで、ここから先は、

table_valuesに入っていた中身の全体をdf
その中の特定の列の値をdf['列名']という形で扱えるようになります。

DataFrame形式をもとの形式に戻す!

最後の処理で、これまでdfという変数にDataFrame形式で入れていたデータを、
IQ Botがもともとtable_valueを保持していた形式に戻します。

table_valueのもともとの形式はdictionary型なので、この形式に戻してあげます。

おまじないスクリプトの最後
table_values = df.to_dict()

#意味:dfの中身をdict型に変換して、table_valuesに入れてね。

このようにして、加工した結果をIQ Botに引き渡しているわけですね。

名前重要(名前についての補足)

Pandasをインポートするにあたってas pdをつけたり、
DataFrameを格納する変数の名前をdfにしたりするのは、

絶対的な決まりではありませんが、なるべくこうしておいた方がいいです。

なぜなら、そうやってコードを書く人が圧倒的に多いからです。

Pythonやpandaに関する解説記事でもだいたいみんなこのネーミング前提でコードを書いています。

なので、IQ Botを作るときのコードもそれに合わせておいた方が、
何かでつまづいたときなどに、解説を探しやすくなります。

以下のように書いても、コードが動くかどうかだけで言えば動きますが、
あまりおすすめはしません。

テーブル項目へのPythonスクリプトの書き方
#表の操作をするときに必ず入れるコード(最初)
import pandas as hoge1
hoge2 = hoge1.DataFrame(table_values)

#表の操作をするときに必ず入れるコード(最後)
table_values = hoge2.to_dict()

まとめ

  • 最初にpandasというライブラリをインポートするよ
  • IQ Botが持っているtable_valuesを、pandasで扱いやすいDataFrame形式にして変数に入れるよ
  • 最後にDataFrame形式をtable_valuesのもとの形式(dictionary型)に戻してIQ Botに渡すよ
  • 変数の名前はおまじないの通りじゃなくても動くけど、おまじないの通りにしておいた方が何かと都合がいいよ