機械学習でも使える!?Python便利ライブラリ bidict

データサイエンス

機械学習でも使える!?Python便利ライブラリ bidict

今回は機械学習の用途などでとても便利なPythonライブラリである、bidictを紹介したいと思います!
みなさんはこんな経験はないでしょうか?

あなた
あなた

機械学習の学習データの前処理として、idやファイル名を0から始まるインデックスに変換したい!
機械学習の処理が終わったら、推論されたインデックスから元のidやファイル名に逆変換したい!

このようなとき、こんなコードを書いたりしていませんか?

>> # idをインデックスに変換するためのdictを作成
>> id2index = {'id1': 0, 'id2': 1, 'id3': 2}
>> 
>> # インデックスをidに変換するためのdictを作成
>> index2id = dict([(v, k) for k, v in id2index.items()])
>> index2id
{0: 'id1', 1: 'id2', 2: 'id3'}

bidictを用いることで、このような処理をシンプルに記述することができます!

>> from bidict import bidict
>> # idをインデックスに変換するためのdictを作成
>> id2index = bidict({'id1': 0, 'id2': 1, 'id3': 2})
>> 
>> # 簡単に双方向アクセスができる
>> id2index.inverse
{0: 'id1', 1: 'id2', 2: 'id3'}
>> id2index.inverse[1]
'id2'

bidict

bidict logo
bidict

bidictは、Pythonのdictクラスを拡張し、要素の双方向アクセスを簡単に行うことができるようになるライブラリです。

GitHub - jab/bidict: The bidirectional mapping library for Python.
The bidirectional mapping library for Python. Contribute to jab/bidict development by creating an account on GitHub.

githubのREADMEにて、以下のように紹介されています。

  • Google, Venmo, CERN, Bank of America Merrill Lynch, Bloomberg, Two Sigmaといった様々な企業や機関によって長年使用されています。
  • 安全性、シンプルさ、柔軟性などを兼ね備えたAPIを持ちます。
  • 高速で軽量であり、Pythonの標準ライブラリ以外のランタイム依存関係はありません。
  • Pythonのcollections.abcインターフェースとネイティブに統合します (従来のlistやdictなどと同様に利用できる)。
  • すべてのパブリックなAPIにtype hintを提供します。
  • 非常に最適化された純粋なpythonコードで実装されます。
  • 使用されるすべてのpythonバージョンに対して十分なカバレッジのテストとドキュメントがあります。

インストール方法

他のライブラリ同様、pipコマンドで簡単に導入することができます。

$ pip install bidict

何ができるのか

前述に示した通り、要素に双方アクセス可能なdictクラスとして利用ができます。
通常のdictクラスと同じメソッドが用意されているので、同じ感覚で利用することができます。

ユースケース

このようなデータ構造が必要になるのは、やはり機械学習のコードで頻出する「idなどを0から始まるインデックスに変換、逆変換したい」というケースではないでしょうか?
従来ならば、簡単なワンライナーを書いて逆変換用のdictを作らなければいけないところを、bidictを用いることでシンプルに記述することができるようになります。

まとめ

機械学習の用途などで便利なbidictを紹介しました!
僕自身このような処理を書く機会がかなり多かったので、初めて知った時は非常に感動しました。
是非皆さんもbidictを活用して、よりシンプルなコードを実装していきましょう!

コメント

タイトルとURLをコピーしました