

決定木を描画するために以下のコードを実行。

[code]

    # indexの抽出
    x_0 = df_info.resample('M').count()
    x_0 = x_0.drop(x_0.columns.values,axis=1)
    time_index = x_0.index
    print(time_index)
    
    #決定木を描画
    viz = dtreeviz(
        clf,
        data_e, 
        data_o,
        target_name='Class',
        feature_names=time_index,
        class_names=['False','True'],
    ) 
    viz
    
[/code]

以下のTypeError が出ます。

[code]

    C:\Users\ichir\AppData\Local\Temp\ipykernel_10292\1620574054.py:10: DeprecationWarning: dtreeviz() function is deprecated starting from version 2.0. 
     For the same functionality, please use this code instead: 
     m = dtreeviz.model(...) 
     m.view()
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    Cell In[35], line 10
          7 print(time_index)
          9 # 決定木を描画
    ---> 10 viz = dtreeviz(
         11     clf,
         12     data_e, 
         13     data_o,
         14     target_name='Class',
         15     feature_names=time_index,
         16     class_names=['False','True']
         17 ) 
         18 viz
    
    File ~\anaconda3\lib\site-packages\dtreeviz\compatibility.py:254, in dtreeviz(tree_model, X_train, y_train, feature_names, target_name, class_names, tree_index, precision, orientation, instance_orientation, show_root_edge_labels, show_node_labels, show_just_path, fancy, histtype, highlight_path, X, max_X_features_LR, max_X_features_TD, depth_range_to_display, label_fontsize, ticks_fontsize, fontname, title, title_fontsize, colors, scale)
        251 shadow_tree = ShadowDecTree.get_shadow_tree(tree_model, X_train, y_train, feature_names, target_name, class_names,
        252                                             tree_index)
        253 model = DTreeVizAPI(shadow_tree)
    --> 254 return model.view(precision, orientation,
        255                   instance_orientation,
        256                   show_root_edge_labels, show_node_labels, show_just_path, fancy, histtype, highlight_path, X,
        257                   max_X_features_LR, max_X_features_TD, depth_range_to_display, label_fontsize, ticks_fontsize,
        258                   fontname, title, title_fontsize, colors, scale)
    
    File ~\anaconda3\lib\site-packages\dtreeviz\trees.py:454, in DTreeVizAPI.view(self, precision, orientation, instance_orientation, show_root_edge_labels, show_node_labels, show_just_path, fancy, histtype, leaftype, highlight_path, x, max_X_features_LR, max_X_features_TD, depth_range_to_display, label_fontsize, ticks_fontsize, fontname, title, title_fontsize, colors, scale)
        451         return self.shadow_tree.leaves
        453 n_classes = self.shadow_tree.nclasses()
    --> 454 colors = adjust_colors(colors, n_classes)
        456 if orientation == "TD":
        457     ranksep = ".2"
    
    File ~\anaconda3\lib\site-packages\dtreeviz\colors.py:119, in adjust_colors(colors, n_classes, cmp)
        116         COLORS["classes"] = get_hex_colors(n_classes, cmp)
        117     return COLORS
    --> 119 return dict(COLORS, **colors)
    
    TypeError: dict() argument after ** must be a mapping, not float
    
[/code]

以下各変数になります。

[code]

    x_0.head(5)
    
    日時
    2018-11-30
    2018-12-31
    2019-01-31
    2019-02-28
    2019-03-31
    
    
    df_info.head(5)
        顧客ID    宿泊者名    プラン 金額
    日時              
    2018-11-01 00:02:21 110034  若松 花子   B   19000
    2018-11-01 00:03:10 112804  津田 美加子  D   20000
    2018-11-01 00:06:19 110275  吉本 美加子  D   20000
    2018-11-01 00:08:41 110169  坂本 直人   B   19000
    2018-11-01 00:12:22 111504  青山 零    A   15000
    
[/code]

よろしくお願いします。


CC BY-SA 4.0
2023-01-30T04:27:22.283
93615
2023-01-31T01:36:35.557
2023-01-30T12:33:18.660
48948
48948
question
python python3
決定木描画でエラーが出る


前回の質問もそうですが、[dtreevizの改版](https://pypi.org/project/dtreeviz/#history)
により仕様が変わったものと思われます。

例えばこれらの記事のプログラムですが、1.4.1版まではそのまま動作しますが、2.0.0版以後では前回および今回の質問のようなエラーが発生します。  
[dtreevizをインストールして決定木を可視化する【Python】](https://self-
development.info/dtreeviz%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%82%92%E5%8F%AF%E8%A6%96%E5%8C%96%E3%81%99%E3%82%8B%E3%80%90python%E3%80%91/)  
[Pythonライブラリ(決定木の可視化)：dtreeviz](https://note.com/kiyo_ai_note/n/n0df3f4d33139)

変更された仕様を調べてそれに合うようにプログラムを修正するか、以下のようにdtreevizをインストールする際に動作する版数を指定して試してみてはどうでしょう？  
Jupyterのセル上でのインストール例：

[code]

    !pip install -U dtreeviz==1.4.1
    
[/code]

* * *

2.0.0版以後はどうなったのかという情報は以下のリリース時の情報に記述があるようです。  
[Releases / 2.0.0](https://github.com/parrt/dtreeviz/releases/tag/2.0.0)

それに沿って最新版へ対応するようにプログラムを修正するとしたら以下のようになるのでは？

importは以下の形にする：

[code]

    import dtreeviz
    
[/code]

メソッドの呼び出しは(実は既にエラーメッセージの冒頭に書かれていますが)以下のようにする：

[code]

    viz = dtreeviz.model( #### 以下省略
    
[/code]


CC BY-SA 4.0
2023-01-30T14:29:03.143
93624
2023-01-30T14:59:50.803
2023-01-30T14:59:50.803
26370
26370
93615
answer


以下のように変えた結果、実行できました。

[code]

    import dtreeviz
    
    # indexの抽出
    x_0 = df_info.resample('M').count()
    x_0 = x_0.drop(x_0.columns.values,axis=1)
    time_index = x_0.index
    print(time_index)
    
    # 決定木を描画
    viz = dtreeviz.model(
        clf,
        data_e, 
        data_o,
        target_name='Class',
        feature_names=time_index,
        class_names=['False','True']
    ) 
    viz.view()
    
    
[/code]

dtreeevizのバージョンは調べたところ1.4.0 です。  
conda環境なので、それが関係あるかどうか不明です。


CC BY-SA 4.0
2023-01-31T01:36:35.557
93630
2023-01-31T01:36:35.557
48948
93615
answer