インプレスの「スッキリわかる Pythonによる機械学習入門」のエラー対策記事です。
2024年2月時点の最新実行環境において、書籍に記述されているコードを間違いなく入力しても実行結果が記載と異なる箇所があったので対策方法を掲載します。
書籍が出版された後も実行環境は更新され続けるので、書き方が変わってしまったり期待通りの結果が得られなくなることは仕方がないことではあります。
とはいえ、最新の実行環境でも書籍に記載されている結果になってほしいですよね。
そんな悩める人たちに役立てば幸いです。
エラー内容
P.266 第Ⅱ部 第7章 「分類2:客船沈没事故での生存予測」 – 7.4.6 モデルの評価 / ダミー変数化のコード7-22 get_dummies関数
male = pd.get_dummies(df2['Sex'], drop_first = True)
male
を実行すると
male
0 True
1 False
2 False
3 False
4 True
…
となり、結果が数値ではなく、「True」と「False」で表示されます。
実行環境
下記の環境で発生を確認しています。
- Anaconda3-2023.09-0-Windows-x86_64
- JupyterLab 3.6.3
- Python 3.11.5
- pandas 2.0.3
エラーの原因
get_dummiesメソッドに対するdtype引数のデフォルトがbool型になっている為です。
pandas 1.5.2のAPI referenceでは、dtypeのデフォルトは np.uint8型ですが、pandas 2.0.3以降ではbool型になっています。
解決方法
期待結果としては、「文字列を数値に変換する」ことなので、dtypeに ‘uint8’ を指定します。
male = pd.getdummies(df2['Sex'], drop_first = True, dtype = 'uint8')
male
を実行すると
male
0 1
1 0
2 0
3 0
4 1
…
となります。
同様に、P.288 コード8-4 「ダミー変数化した列を連結してCRIME列を削除」に対して対策すると、P.293 コード8-8 「各特徴量の列とPRICE列の相関関係を示す散布図を描く」に対するKeyErrorエラーが表示されなくなります。(対策しなくてもKeyErrorの後にグラフは表示されます)
P.500 コード14-3 「CRIME列のダミー変化」についても対策することで、実行結果の “low”と”very_low”がそれぞれ 0 と 1 で表示されるようになります。
コメント