はじめに
numpy, Pandas, matplotlib, seabornなどの必須ライブラリではなく、
今回は知っていると得する、便利なデータ分析ツールを紹介していきたいと思います。
最初の段階では書籍などから地道に勉強している人も多いので、私含め知らないツールが多いなと思い、本記事を書くに至りました。
概要
最初は可視化するにもmatplotlibやseabornに慣れていないこともあり、
重要な特徴量を見つける、相関を見つけるのもままならない(or時間がかかる)かと思います。
ベテランの方でもまずは全体の特徴量同士の相関を、、
ベースモデルとしてとりあえずGBDTを使用して、、などルーティーンとなっている作業は多々あると思います。
もちろんモデルの選択や、なぜ高スコアとなるか考察をすること、
重要な情報に絞って自分で可視化できる力は大変必要だと思います。
しかし、EDA(探索的データ分析)を行うにあたり、(駆け出しの)データ分析者が少しでも最初の一歩目を短縮できればと思い、本記事が参考になりましたら幸いです。
データ分析で使える便利なライブラリ
EDAツール
モデル作成ツール
4. Pycaret
今回は**Titanicデータ**を例にして紹介していきたいと思います。
環境
- Mac OS
- jupyter notebook
- python 3.9.7
カラムの説明
今回は特に精度に対しての説明はしないですが、
表示結果のより良い把握のため、念のため各変数を記載しておきます。
項目 | 定義 | キー |
---|---|---|
PassengerId | 乗客ID | |
survived | 生存したか否か | 0:死亡,0:生存 |
Pclass | チケットのクラス | 1 = 1st, 2 = 2nd, 3 = 3rd |
Name | 名前 | |
Sex | 性別 | |
Age | 年齢 | |
SibSp | 乗船している兄弟や配偶者の数 | |
Parch | 乗船している両親や子供の数 | |
Ticket | チケット番号 | |
Fare | 運賃 | |
Cabin | 部屋番号 | |
Embarked | どの港から乗船したか | C = Cherbourg, Q = Queenstown, S = Southampton |
##1. pandas_profiling
このツールに関してはkaggleのスタートブックで紹介されていることもあり知っている方もいらっしゃるのではないでしょうか。
1-1. インストール
pip install pandas-profiling
Name: pandas-profiling
Version: 3.1.0
1-2. インポート・出力
import pandas as pd
import pandas_profiling
train = pd.read_csv('../input/titanic/train.csv')
train.profile_report()
# pandas_profiling.profile_report(train)
データの型や欠損数、サンプル数などが見れます。
1-3. 出力結果
titanicはデータが少ないため、1分足らずで完了しますが、データ量やカラムの数により、
数分以上かかる場合もあります。
Overview
右上のタブのところでそれぞれ(下記項目にて抜粋)見ることができます。
Variables
すべてのカラムにおいて、データの内容を表示してくれます。
カテゴリ変数であれば、各カテゴリごとのデータ数、量的変数であればヒストグラムを表示します。
Interactions
量的変数同士の相関を見れます。横軸と縦軸をタブで選択可能です。
Correlations
Missing values
Sample
train.head()とtrain.tail()の結果を表示します。
ちなみに下記コードでレポートの出力、保存もできるみたいです。
profile = ProfileReport(data, title="Titanic Dataset", html={'style': {'full_width': True}}, sort="None")
profile.to_file(output_file="{PASS}.html")
##2. Autoviz
こちらもEDAツールです。
macの方はbrew install libomp
するとスムーズです。
2-1. インストール
pip install autoviz
Name: autoviz
Version: 0.1.23
2-2. インポート・出力
AV = AutoViz_Class()
autoviz = AutoViz_Class().AutoViz('../input/titanic/train.csv')
2-3. 出力結果
一括で表示されます。
各カテゴリ変数ごとの平均年齢(左列)と運賃の平均(右列)がでているようです。
##3. sweetviz
個人的にはこちらが見やすくて軽いと感じています。testデータとの比較もできます。
train,testデータの偏りを見たい時、時系列データの時などに役に立つのではないでしょうか。
3-1. インストール
pip install sweetviz
Name: sweetviz
Version: 2.1.3
3-2. インポート・出力
import sweetviz as sv
train = pd.read_csv('../input/titanic/train.csv')
test = pd.read_csv('../input/titanic/test.csv')
my_report = sv.compare([train, "Train"], [test, "Test"], "MEDV")
# my_report = sv.analyze(train) # trainデータ単体で分析する場合
my_report.show_html()
実行するとブラウザ上(オート別タブ)で閲覧することができます。
3-3. 出力結果
データ(行)数、カラム数、各カラムの変数がわかります。
Testデータには"Survived"が含まれていないため、CATEGORICALのカラムが一つ少ないです。
上記Associations
ボタンをクリックすると相関係数の図が見られます。
この図はあまり見慣れていないかもしれません。
可視化ツールまとめ
上記紹介した3つの可視化ツールは非常に便利であり、基礎分析の初手で活用できるかと思います。
ただ、例えば下記のようなグラフは作成しなければいけないですね。
sns.countplot(x='Pclass', hue='Survived', data=train)
plt.show()
いずれにしても細かく見たいところは自分でプロットしていく必要があります。
4. PyCaret
機械学習モデルの作成に使える、2020年にリリースしたローコードライブラリです。
Ridge、Rasso等の単純な線形回帰モデルや、決定木系の派生モデル、
王道のLightgbm等の勾配ブースティング木系モデルも含まれていますので、
ベースモデルの構築に最初に動かしてみるのも良いのではないでしょうか。
私のkaggle notebookにもコードを記載しています。
公式のGithubを参考にすれば、他回帰、クラスタリング等含め簡単に始められます。
本記事ではTitanicデータを扱いますので、分類モデルの場合を紹介します。
4-1. インストール
pip install pycaret
Name: pycaret
Version: 2.3.5
4-2. pycaret.classificationのインポートとsetup
import pandas as pd
train = pd.read_csv('../input/titanic/train.csv')
data_unseen = pd.read_csv('../input/titanic/test.csv')
from pycaret.classification import *
exp = setup(data = train, target = 'Survived', session_id=123)
setup
関数でtrainデータと目的変数のカラムを指定します。
途中でEnterを押してください。説明変数の認識に問題があればquit
で中断できます。
データタイプの変更については本記事末の参考記事をご覧ください。
session_id
は再現可能なようにseedを与える引数です。defaultでは乱数が割り当てられます。
4-3. モデルの比較
compare_models()
全てのモデルをAccuracyをはじめとした評価指標で比較できます。
とりあえずdt:決定木(Decision Tree Classifier)
が一番精度が良さそうですので"dt"で進めます。
この結果は、setup時に指定したsession_id
を変えると変わります。(実行の度に結果は変わります)
4-4. モデルの作成
dt = create_model('dt')
引数には使用したいモデルの名前を文字列にて入力します。(決定木の場合は'dt')
この段階では、ハイパーパラメータはある決められた値で計算しているだけですので、
次で最適化を行います。
4-5. モデルのハイパーパラメータのチューニング
tuned_dt = tune_model(dt)
pre-definedの範囲内でランダムグリッドサーチを行い、チューニングを行います。
tune_model
の引数でn_iter
を設定することによりランダムグリッドサーチの回数を決められます。
今回は検証データでのスコアは、やや下がる結果になっています。
4-6. モデルのプロット
# ROC曲線
%matplotlib inline
plot_model(tuned_dt, plot = 'auc')
# 混同行列
plot_model(tuned_dt, plot = 'confusion_matrix')
ちなみに以下コードでHTML形式でモデルの各評価を見ることができます。
特徴量の重要度や学習曲線なども入っており、私はこれだけ使っています。
evaluate_model(tuned_dt)
4-7. モデルの確定
上記結果が良さそうであれば、モデルの確定を行います。
final_dt = finalize_model(tuned_dt)
print(final_dt)
チューニングしたハイパーパラメータが確定し、学習済みモデルが出来上がりました。
4-8. testデータの予測の実行
result_dt = predict_model(final_dt, data = data_unseen)
result_dt
4-9. submitする場合(おまけ)
y_pred = result_dt["Label"]
sub = pd.read_csv('../input/titanic/gender_submission.csv')
sub['Survived'] = y_pred
sub.to_csv('submission.csv', index=False)
スコアはやってみてのお楽しみです!笑
PyCaretまとめ
今回は決定木のみで例を出しましたが、他のモデルも簡単に試すことができます。
テーブルコンペの初手で試したり、簡易PoCする際とりあえず複数モデルを試したいときなどに
使えるのではないでしょうか。
実用性は、人それぞれかもしれませんが色々と面白いので触ってみるのもアリかと思います。
最後に
今回紹介したもの以外にも便利ツールがあります。最近はノーコード、ローコードが流行っているので、
まとめさせていただきました。ガリガリコードを書く人がこの先は減ってくるのではないでしょうか?
とはいえ、特徴量の選択や生成、アンサンブルの細かいチューニングなどまだまだ人間がやるところ、考えるところはたくさんありますし、「こんなもんか、、」と感じた方もいらっしゃるかもしれません。
本記事で、初学者の方ベテランの方が少しでも日々の業務が効率化できたら幸いでございます。
また、Qiita初投稿となり、見づらい点もあるかと思いますがご容赦ください。
間違いがございましたらいつでもコメントお願いいたします。
次はディープラーニングフレームワークPytorchの軽量ラッパーであるPyTorch Lightning
の便利さが伝わるような記事を書く予定です!
最後まで読んでいただきありがとうございました。
参考
以下、2つの記事は"各評価指標"やevaluate_model()
の詳細説明などもありますのでとても参考になりました。
PyCaretの初心者向けまとめ(回帰編)
PyCaretの初心者向けまとめ(分類編)