Kaggleや機械学習を始めて、EDA(Exploratory Data Analysis)のやり方に苦戦する方も多いのではないでしょうか。
EDAは簡単に言うとデータ全体の傾向を掴み、「どんな説明変数が使えそうか」「何か意味のある説明変数を作れそうか」と言ったことを考える、非常に重要な工程です。

と常日頃思っておりました。
そんな中、先日下記の記事を拝見しました。
4 Libraries that can perform EDA in one line of python code
様々なEDAをコード数行で一気に行ってくれるツール4選を紹介しています。
本日はこの中の1つの「Pandas-profiling」を実際にKaggleのtitanicを使って試したので、「ここが使えそう」「良いと思った」という点を紹介したいと思います。
※当初は4つのうち2つずつ記事で紹介する予定だったのですが、想定よりボリューミーになったので、一旦Pandas-profilingのみをまずは1つの記事にしました。
※Pandas-Profilingについては下記の記事でもお勧めしている「実践Data Scienceシリーズ PythonではじめるKaggleスタートブック」にも紹介されているため、以前に実装したことがありますが、別のコンペでの実装だったので今回はよりポピュラーなtitanicで試してみます。
-
-
初心者向け|おすすめのKaggle本と使い方を解説
・何となくKaggleを始めてみたけど、機械学習の全体像が分からない ・とりあえず欠損値処理と簡単なコードを書いてsubmitしてみたけど、この後どう勉強を進めていけばいいんだろう こん ...
続きを見る
本記事の目次は以下の通りです。
①前準備
②Pandas-profilingの実装
③Pandas-Profilingの便利ポイント
④PandasProfilingのちょっと残念だと思ったポイント
⑤まとめ
①前準備
STEP1:コマンドプロンプトでpip installしておく
記事にあるとおり、下記のコマンドでpandas-profilingをpipインストールしておきます。
※初心者の方に念のため補足ですが、下記コマンドはjupyter notebookではなく、「cmd」とPCで検索をしてコマンドプロンプトを起動するか、やっていることはほぼ同じですがanacondaをインストールしている場合は「Anaconda Prompt」を起動しても良いです。
STEP2:jupyter notebookで必要な内容をインポートしておく
jupyter notebookを立ち上げ、下記をインポートしておきます。
command
#pandas_profilingのインポート
import pandas_profiling as pdp
#pandasのインポート
import pandas as pd
STEP3:データの読み込み
今回はKaggleのtitanicで、train.csvを読み込んでいきます。
command
df_train = pd.read_csv("train.csv")
ここまでできたら準備完了です、早速便利ツールを使っていきましょう!
②Pandas-profilingの実装
では、早速やっていきましょう。
command
report = pdp.ProfileReport(df_train)
#jupyter notebookの作業ディレクトリの直下に「profile_report.html」を保存
report.to_file('profile_report.html')
これだけです・・・!!!めちゃくちゃ簡単ですよね。さて、このreportをブラウザで開きますと、下記の様な画面が表示されます。
※下記画面は全体のごく一部です。
はい、これだけで既に便利です。笑
カラムがいくつあって、おおざっくりと、欠損はどれくらいあるのか?データ容量はどれくらいか?といった外観を出してくれています。
さて、このpandas-profilingの出力画面を全て紹介するとものすごく長くなるので、次の章で私が「特に便利」と思ったポイントを紹介していきます。
③Pandas-profilingの便利ポイント
■便利ポイント1:各カラムのカテゴリ別の件数・欠損が一目でわかる
上記で、目的変数のSurviedと説明変数の1つのPclassを表示しています(実際の画面はPclassの下にずらっと全変数の情報が表示されます)。
私はpandas-profilingを使う前は、例えば

と思った時は、いちいち下記のコードを書いていました(もっと良いやり方があるかもですが・・)。
command
df_train["Survived"].value_counts().plot(kind = "bar")
これを各カラムに対して行っていたら結構大変なので、pandas-profilingでぱっと出せるようになったことは非常にありがたいです。
■便利ポイント2:ヒートマップが表示される
こちらも、毎回手で相関係数を出し、ヒートマップの表示コードを書いていたので、非常に便利だと思いました。
変数間の相関の確認は必須と言っても過言ではないので、重宝します。
■便利ポイント3:欠損値情報がカラム別に分かる
私は毎回、全カラムに対して欠損がどれくらいあるかをエクセルにまとめていたので、この情報を出せることはめちゃくちゃありがたいです。
④PandasProfilingのちょっと残念だと思ったポイント
ここまでPandas-profilingの便利ポイントをご紹介してきましたが、1つだけ個人的に残念だなと思っている点を紹介します。
それは、データ量が大きいと処理に非常に時間がかかる点です。
Kaggleのtitanicくらいであれば、今回のtrain.csvは900行弱なのですぐに処理が終わるのですが、以前別のコンペで試した時、データが約38万行ありました。
その時、全データでpandas-profilingしたところ1.5時間では終わらず、処理をしたまま寝て、起きたらできていたというレベル感でした。
※詳細は下記Qiita記事をご覧ください(私が書いたものです)。
kaggleを題材に、Kaggleスタートブックで勉強してみた【前編】
データが多い場合にはサンプリングをして実装する必要があり、そのあたりの調整が少しだけ手間だな、と思いました。
ただ、このポイントを差し引いてもなお使うメリットが大きすぎるので、「まずは初手」として試すことをお勧めします!
⑤まとめ
いかがでしたでしょうか。
Pandas-profilingの使い方・便利ポイント・少しだけ残念だなと思うポイントを紹介しました。
「少しだけ残念」とは書きましたが、お手軽にデータの全体像を確認できるメリットは非常に大きいので、積極的に使っていきたいと思います。
次回は冒頭で紹介した記事の2つ目に紹介されている、「sweetviz」を紹介します!
最後までお読み頂きありがとうございました。