書籍『Pythonでデータを視覚化する 』の紹介
20230524:dtreeviz の実行エラーを回避する方法を追加
20230304:PairPlot の実行エラーを回避する方法を追加
はじめに
ご縁あり、『 Pythonでデータを視覚化する 』という書籍を執筆させていただきました。
当記事は、本書の雰囲気をつかんでいただくため、意識したこと、特徴、できること等の概要をまとめたものです。
どんな本?
1.ChatGPTに尋ねてみました (笑)
いきなり乱暴なアプローチで、すいません。
どうしてもChatGPTに尋ねてみたかったのです。お付き合いください。
ChatGPTへの質問
「 Pythonでデータを視覚化する」という本のタイトルから、期待される内容を挙げてください。
ChatGPTからの回答:
Pythonでグラフやチャートなどでデータを視覚化する方法
データ可視化ライブラリの使い方
データ可視化を利用したデータ分析の技法
機械学習や統計モデリングへのデータ可視化の活用法
導入のためのPythonプログラミングの基礎知識
なんと、これが、ほぼあたってるんです!。 ChatGPT、スゲーな。^^;
・・・おふざけはここまでです。以下より、本書の内容をフォローさせていただきます。
2.「Pythonでグラフを描いてみよう!」を後押しします
本書で実行する内容はコードも掲載していますが、あくまでも、主は「視覚化」です。
なぜPythonか?といいますと、それはもう Python を使うと 視覚化のバラエティが とても拡がるからです。
本書は、簡単に描くことができるよということと、視覚化のバラエティも拡がるよということを体感いただくため、以下のような内容にしています。
ノーコードでグラフが描くことができるNotebookを付属しています。
Pythonがはじめての方でも、実際にグラフを描きながら、本書を読み進めることができます。
巷で有名なデータセットを数多く読み込める ようにしています。
静的なグラフだけでなく、画面上で操作できるインタラクティブなグラフなど、いろんなグラフを描きます。
任意のcsvデータも読み込めますので、すぐに実務で使えます。
以下は、本書付属のNotebookの実行例です。Google ColabのFormsと呼ばれる機能を利用し、フォームに X軸 や Y軸 の項目名を入力するだけでグラフが描画できるようにしていますので、これまでPythonに、まったく触れたことがない方でも大丈夫です。描けます。
3.グラフを簡単に描画するパターンをお伝えします
私はこれまで、Pythonでグラフが手っ取り早くアプリケーション的に描けるようになりたい! という思いだけでやってきましたが、思いだけではどうにもならないのがコーディングです。
元々、私はプログラマーではありませんので、描きたいグラフに挑むたびにコーディングに詰まり・・・を繰り返していましたが、簡単に実行できるライブラリを選んだり、処理をパターン化したりすれば楽になる と気づいてからは、コーディングに詰まることが減りました。
Pythonであるライブラリを使って、グラフA,Bを描く場合、以下のような手順で実行します。
別のライブラリも使ってグラフC,Dを、さらに別のライブラリを使ってグラフE,Fを・・・という場合、ライブラリや描くグラフが増えるほど、複雑になりますが、
一括処理 や 共通化 や 一工夫 を行うと、ひとつのNotebookですっきり扱うことができるようになります。
グラフを描くコードは個別となりますが、これもコード記述が簡単で、別のライブラリへの転用が楽なライブラリを選ぶ等、できるだけ簡単に実行できる方法や処理のパターンがわかると、応用においてとても助けになります。
ただ、はじめてPythonに触れる方は、「パターンを理解しなきゃ」と気構えることはないと思います。まずは、実行してみて、「よし、描けた」という小さな達成感が大切と思います。
本書では、pairplot、ヒストグラム、散布図、Joint-Plot、決定木など10種類のグラフ(細かく区分すると18種類)を、6つの視覚化ライブラリを使って描きます。(本書で描くグラフは、グラフ種類 × ライブラリ ≒ 約35種 です。)
描くグラフが多いと「複雑なのでは?」と思われるかもしれませんが、先の処理のパターン化等により、ライブラリの違い等は意識せず、ひとつのNotebookで同じように実行できます。
「描くグラフ毎に異なるところはあるけど、実行の大部分は同じなんだな」と思っていただけるとよいなと思います。
4.データを丸ごとプロファイリングしてくれるライブラリも紹介
本書では、データセットを与えるだけでデータプロファイリングレポートを作成する dataprep というライブラリも使用します。
数多くのデータ項目で構成されたデータセットを
と、無茶ぶりされることはありませんか?
このような時、データセットを与えるだけで、速攻でプロファイリングレポートを作成することができたら。。。 これが、できるんです。
生データを見て呆然としてしまうことから卒業できます。
「さようなら、これまでの俺」というやつです。
Titanicデータで実行した「データプロファイリングレポート」:サンプル
① このURLにサンプルをアップしました → https://github.com/hima2b4/Python_visuallization_lesson/blob/bde2ac87fb6b14c3f7c2494be5b3301bd4c9b865/DataPrep_Sample-Report_Titanic.html
このURLをコピーして、
② 以下のサイトを起動し、URLをペースト → [LET'S SEE]ボタン をクリックすると、ブラウザに「データプロファイリングレポート」が表示されます。画面上で操作できるインタラクティブなレポートとなっています。「データプロファイリングレポート」が、どのようなレポートか知りたい方は是非どうぞ。
もしくは、以下の動画を見ていただければ、プロファイリングレポートの内容を掴んでいただけると思います。
5.実務で手間取りがちなデータクリーニングをフォロー
あるグラフを基本的なコードで いざグラフ実行! ・・・という時、案外、実務でつまりがちなのがデータの乱れです。
ということはよくあるのではないでしょうか?
本書では、ダウンロードできるNotebookに いくつかのデータクリーニング項目を実装し、例題に沿って処理を進めながらクリーニングを行い、その後、グラフを描くスタイルとしています。
任意のcsvデータを読み込んだ場合でも、同じように対処することができますので、実務でも活かしていただければと思います。
6.とってもきれいな決定木も描きます
Pythonには、とってもきれいな決定木 を描くことができる dtreeviz というライブラリがあります。
極論かもしれませんが、私は これを描くためだけに Pythonを使う のもあり!といっても過言ではありません。
「描きたい!」と思った時点で、描けたも同然です。願いは叶います。(笑)
※ 本書では、乱れたデータをクリーニングして → 決定木描いて → 機械学習してからもう一度 描いてみる という流れで説明しています。
最後に
ここまでの説明で想像されたことと思いますが、本書はすでにPythonをゴリゴリ使っておられる方ではなく、これから活用してみよう!活用してみたい!という方をイメージしています。
活用してみたい!と思っていただくため、
どんなグラフが描けるか?を知っていただき興味を持っていただくこと
ちょっとしたパターンさえわかれば、簡単に実行できるんだなということを知っていただくこと
を意識したつもりです。(伝わるとよいですが)
以下は、私の気持ちを代弁して下さっている 「さくら准教授」さんのツイート*です。
「さくら准教授」さんも、どのような図が描けるのかまずは知っておくの大事 とおっしゃってますね。・・・うん、たしかに。ほんと、そう思います。
本書がPython視覚化のバラエティを知るひとつのきっかけとなれば幸いです。
※ 上記ツイートにある correlogram ですが、① 自己相関をプロットしたデータに周期性があるかを見るグラフ、② データのすべての2変数間の相関を行列形式で一覧表示した相関行列グラフ、いずれも correlogram と呼ばれています。correlogram を直訳すると 相関図 なので、まぁそうなのかなと思いますが、①と②は性質が異なるグラフなので、同じ名前で呼ばれていることに少し違和感を覚えます。
「コレログラム」で調べると前者が、「correlogram」で調べると後者がよくヒットします。
後者の相関行列グラフは、pairplot とか 多変量連関図 とも呼ばれており、こちらは本書でも描きます。データ全体をつかむことができるとてもよいグラフです。
FAQ: dtreevizエラー回避について
dtreeviz の実行エラーを回避する方法:202305024追加
scikit-learn 及びdtreeviz の Ver.up により、dtreeviz実行時にエラーが出ることがわかりました。scikit-learn と dtreevizのVer.指定してインストールすれば、エラーは回避できます。
① 以下の添付画像のように、「1.インストール」の前に以下のコードをNotebookのセルに追加して実行してください。
!pip install scikit-learn==1.1.3
② 同じく以下の添付画像のように「1.インストール」の一つ目のセルにある「!pip install dtreeviz --quiet」→「!pip install dtreeviz==1.4.1 --quiet」に変更してください。
!pip install dtreeviz==1.4.1 --quiet
追加したscikit-learnを実行すると、添付画像のように「RESTART RUNTIME」(ランタイム再起動)を求められることがあります。この場合は 「RESTART RUNTIME」ボタンをクリックし、再起動を終えてから「1.インストール」から順に実行してください。
FAQ: PairPlotエラー回避について
pairplot 実行エラーの回避方法について(20230304)
scikit-learn の Ver.up により、実行時にエラーが出ることがわかりました。 scikit-learn をVer.指定してインストールすれば、エラーは回避できます。
Notebookの「1.インストール」に以下のコードを追加し、実行してください。
※ scikit-learnを追加インストールするタイミングにより、挙動が異なるようです。Notebookメニューの[ランタイム] → セッションの管理 → アクティブなセッションをすべて終了(ゴミ箱マーククリック)→ 「1. インストール」のセルに「!pip install scikit-learn==1.1.3」を追加 → 最初のセルから順に起動 してください。
!pip install scikit-learn==1.1.3
以下のように [RESTART RUNTIME]ボタン が表示された時は、ボタンを押して、データの読込みも再度実行してください。
参考 :エラー表示内容
ImportError Traceback (most recent call last)
in
2
3
----> 4 from seaborn_analyzer import CustomPairPlot
5
6 cp = CustomPairPlot()
1 frames
/usr/local/lib/python3.8/dist-packages/seaborn_analyzer/custom_class_plot.py in
5 import pandas as pd
6 from scipy import stats
----> 7 from sklearn.metrics import auc, plot_roc_curve, roc_curve, RocCurveDisplay
8 from sklearn.model_selection import KFold, LeaveOneOut, GroupKFold, LeaveOneGroupOut
9 from sklearn.preprocessing import label_binarize
ImportError: cannot import name 'plot_roc_curve' from 'sklearn.metrics' (/usr/local/lib/python3.8/dist-packages/sklearn/metrics/init.py)