pprintを上回る整形力のsetprintを作った話②
バグを修正したので、内容を変えて再度投稿しています。
setprintライブラリについて
このライブラリはpythonにて、多次元配列を扱う場合に有用なライブラリです。
特徴
-
従来の "ツリー" や "ネスト表" とは別物
「構造を見る」から「構造を空間で感じる」
ように感覚や直感で理解できる、表示形式を追求しました。 -
インデックスを単なる数字ではなく、空間配列で表現する
データを形
で見れる為、構造の地図
のようになり、
データのコロニーや想定構造の把握が容易になり、説明もしやすくなります。
配列の可視化例
2D配列
setprintでは配列の想定された構造通りに要素を並行化し、
配列構造を柔軟に表現する能力があり、
基本的な2D配列の整形を始め、多次元を経由した2D構造
を維持して整形することができます。
写真データ(RBG値) の整形例
(実際に画像を表示した時と同じ形状 : 写真が数字になった感じ)
keep_settings
['y', 'x', 'x']
-----------------------------------------------------------------------------------------------------------
>nadarray
┣━━━━ >nadarray ━━━━┳━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓
┃ >nadarray ━┳━━━┳━━┓ >nadarray ━┳━━━┳━━━┓ >nadarray ━┳━━━┳━━━┓ >nadarray ━┳━━━┳━━━┓
┃ 57 245 60 84 0 11 217 36 184 14 73 147
┣━━━━ >nadarray ━━━━┳━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓
┃ >nadarray ━┳━━━┳━━┓ >nadarray ━┳━━━┳━━━┓ >nadarray ━┳━━━┳━━━┓ >nadarray ━┳━━━┳━━━┓
┃ 64 21 51 42 68 161 228 210 56 144 134 200
┣━━━━ >nadarray ━━━━┳━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓
┃ >nadarray ━┳━━━┳━━┓ >nadarray ━┳━━━┳━━━┓ >nadarray ━┳━━━┳━━━┓ >nadarray ━┳━━━┳━━━┓
┃ 15 169 72 103 161 76 76 121 105 172 31 100
┗━━━━ >nadarray ━━━━┳━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓
>nadarray ━┳━━━┳━━┓ >nadarray ━┳━━━┳━━━┓ >nadarray ━┳━━━┳━━━┓ >nadarray ━┳━━━┳━━━┓
231 171 46 246 28 200 44 176 183 58 115 217
-----------------------------------------------------------------------------------------------------------
ルートの省略設定版
keep_settings
['yf', 'f', 'f']
-------------------------------------------------------------------------------------------------------------------------------
>nadarray
┣━━━━ >nadarray [ >nadarray [ 57 245 60 ] >nadarray [ 84 0 11 ] >nadarray [ 217 36 184 ] >nadarray [ 14 73 147 ] ]
┣━━━━ >nadarray [ >nadarray [ 64 21 51 ] >nadarray [ 42 68 161 ] >nadarray [ 228 210 56 ] >nadarray [ 144 134 200 ] ]
┣━━━━ >nadarray [ >nadarray [ 15 169 72 ] >nadarray [ 103 161 76 ] >nadarray [ 76 121 105 ] >nadarray [ 172 31 100 ] ]
┗━━━━ >nadarray [ >nadarray [ 231 171 46 ] >nadarray [ 246 28 200 ] >nadarray [ 44 176 183 ] >nadarray [ 58 115 217 ] ]
-------------------------------------------------------------------------------------------------------------------------------
↕︎ y軸 は 順序の合致
/並行要素 を意味し、
↔︎ x軸 は 次元の合致
/並行要素 を意味します。
軸で配列の整合性を取る
ことにより、直線的に並行配列との合致部分が表現
される為、
直線的で綺麗に整った整形をすることができ、他の配列との関係も容易に表すことができます。
他にも、次元共通ですが、展開する方向を柔軟に変化
することが出来き、
オブジェクトや部分別で可視化をすることがきます。
他にも、親要素と子要素の関係を線 (┣ :┃:┗) (┳ : ━ : ┓) を使用し、
複雑な関係も、直感的にわかるデザインになるよう強化しました。
大規模な2D配列での整形例
このような整形を実現できるようにしようと思ったきっかけになった配列です。
元々、写真の文字を認識しようとしていたプロジェクトの最中に生まれた配列なのですが、
だんだんと、配列を見やすく表示していったら、ライブラリ化することになりました。
配列のデバッグ例
整合性を取ったり、展開する方向を柔軟に変化する方法は、デバッグにおいても有用です。
整合性を取る場合では 順序や空間が異なる要素が突出し、異常がわかりやすくなる
展開方向を柔軟に変化する方法では オブジェクトや部分別でデバッグをすることができる。
といったメリットがあります。
順序
/ 次元
の合致
配列の setprintでは、見本やテンプレートなどの想定された配列を並行要素とすることで、
他に並行させた配列で構造の整合性を取り、 配列の順序や次元の合致を調べることができます。
test_data = {
'template':[[1,2,3]], #見本
'bug' :[[4,{'bug':5},6], [7,8,9]] #バグあり配列
}
配列毎で順序の合致を調べる
keep_settings
['y', 'y', 'x', 'x']
-------------------------------------------
◆dict
┣━━ template:►list
┃ ┗━━━━━━━ ►list ┳━━━┳━━━━━━━━━┓
┃ 1 2 3
┗━━ bug :►list
┣━━━━━━━ ►list ┳━━━┳━━━━━━━━━┓
┃ 4 ◆dict ━━┓ 6
┃ bug:5
┗━━━━━━━ ►list ┳━━━┳━━━━━━━━━┓
7 8 9
-------------------------------------------
配列毎で次元の合致を調べる
keep_settings
['x', 'x', 'y', 'y']
-----------------------------------------------------------------
◆dict ━━━━━━┳━━━━━━━━━━━━━━━━━━━━┓
template:►list ━━┓ bug:►list ━━┳━━━━━━━━━━━━━━━━━┓
►list ►list ►list
┣━━ 1 ┣━━ 4 ┣━━ 7
┣━━ 2 ┣━━ ◆dict ┣━━ 8
┃ ┃ ┗━━ bug:5 ┃
┗━━ 3 ┗━━ 6 ┗━━ 9
-----------------------------------------------------------------
要素毎 で次元の合致を調べる
keep_settings
['x', 'x', 'x', 'x']
-----------------------------------------------------------------------------
◆dict ━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
template:►list ━━┓ bug:►list ━━┳━━━━━━━━━━━━━━━━━━━━━┓
►list ┳━┳━┓ ►list ┳━━━┳━━━━━━━━━┓ ►list ┳━┳━┓
1 2 3 4 ◆dict ━━┓ 6 7 8 9
bug:5
-----------------------------------------------------------------------------
要素毎 で順序の合致を調べる
keep_settings
['y', 'y', 'y', 'y']
---------------------------------------
◆dict
┣━━ template:►list
┃ ┗━━━━━━━ ►list
┃ ┣━━ 1
┃ ┣━━ 2
┃ ┗━━ 3
┗━━ bug :►list
┣━━━━━━━ ►list
┃ ┣━━ 4
┃ ┣━━ ◆dict
┃ ┃ ┗━━ bug:5
┃ ┗━━ 6
┗━━━━━━━ ►list
┣━━ 7
┣━━ 8
┗━━ 9
---------------------------------------
配列を可視化する際に、ぜひ活用してみてくだい!!
インストール方法
pip Install setprint
雛形の実行例
from setprint import SetPrint
# 整形したい配列を指定
# ∨
list_data = SetPrint(datas)
# ''' 展開したい方向を指定
# (以下で詳しく説明) '''
# ∨
keep_settings = {1:'x',3:'yf',4:'f'}
# 整形の実行
format_texts = list_data.set_collection( route='SLIM', y_axis=False, keep_settings=keep_settings, verbose=False )
# 結果の表示 : テキストファイルへの書き込み
# (表示方法は任意 : !!! 最後に 改行'\n' を忘れずに !!! )
with open('output.txt','w') as f:
for line in format_texts:
f.write(line+'\n')
で使用できます。
詳しい展開方法や使い方について
github:
公開先
pypi:
Discussion