78
88

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

データ分析に使える便利なpythonライブラリ4選

Last updated at Posted at 2021-12-08

はじめに

 numpy, Pandas, matplotlib, seabornなどの必須ライブラリではなく、
今回は知っていると得する、便利なデータ分析ツールを紹介していきたいと思います。

 最初の段階では書籍などから地道に勉強している人も多いので、私含め知らないツールが多いなと思い、本記事を書くに至りました。

概要

 最初は可視化するにもmatplotlibやseabornに慣れていないこともあり、
重要な特徴量を見つける、相関を見つけるのもままならない(or時間がかかる)かと思います。

ベテランの方でもまずは全体の特徴量同士の相関を、、
ベースモデルとしてとりあえずGBDTを使用して、、などルーティーンとなっている作業は多々あると思います。

もちろんモデルの選択や、なぜ高スコアとなるか考察をすること、
重要な情報に絞って自分で可視化できる力は大変必要だと思います。
しかし、EDA(探索的データ分析)を行うにあたり、(駆け出しの)データ分析者が少しでも最初の一歩目を短縮できればと思い、本記事が参考になりましたら幸いです。

データ分析で使える便利なライブラリ

EDAツール

  1. pandas-profiling
  2. Autoviz
  3. sweetviz

モデル作成ツール
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分足らずで完了しますが、データ量やカラムの数により、
数分以上かかる場合もあります。

スクリーンショット 2021-12-07 18.43.32.png

Overview

HTML形式で出力されます。
スクリーンショット 2021-12-07 18.45.56.png

右上のタブのところでそれぞれ(下記項目にて抜粋)見ることができます。

Variables

すべてのカラムにおいて、データの内容を表示してくれます。
カテゴリ変数であれば、各カテゴリごとのデータ数、量的変数であればヒストグラムを表示します。
スクリーンショット 2021-12-07 19.06.50.png

Interactions

量的変数同士の相関を見れます。横軸と縦軸をタブで選択可能です。
スクリーンショット 2021-12-07 19.13.02.png

Correlations

ピアソン、スピアマン等の相関係数を見ることができます。
スクリーンショット 2021-12-07 19.26.56.png

Missing values

欠損数の確認ができます。
スクリーンショット 2021-12-07 20.07.34.png

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. 出力結果

一括で表示されます。

スクリーンショット 2021-12-07 20.10.52.png
スクリーンショット 2021-12-07 20.12.18.png
スクリーンショット 2021-12-07 20.12.52.png
スクリーンショット 2021-12-07 20.13.25.png
スクリーンショット 2021-12-07 20.15.44.png
各カテゴリ変数ごとの平均年齢(左列)と運賃の平均(右列)がでているようです。
スクリーンショット 2021-12-07 20.16.41.png
スクリーンショット 2021-12-07 20.18.44.png

##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. 出力結果

スクリーンショット 2021-12-07 20.48.59.png
データ(行)数、カラム数、各カラムの変数がわかります。
Testデータには"Survived"が含まれていないため、CATEGORICALのカラムが一つ少ないです。

スクリーンショット 2021-12-07 20.53.08.png

見たいカラムを選択すると右側に詳細が表示されます。
スクリーンショット 2021-12-07 20.59.49.png

上記Associationsボタンをクリックすると相関係数の図が見られます。
この図はあまり見慣れていないかもしれません。
スクリーンショット 2021-12-07 20.53.30.png

可視化ツールまとめ

 上記紹介した3つの可視化ツールは非常に便利であり、基礎分析の初手で活用できるかと思います。
ただ、例えば下記のようなグラフは作成しなければいけないですね。

sns.countplot(x='Pclass', hue='Survived', data=train)
plt.show()

スクリーンショット 2021-12-07 19.56.21.png

いずれにしても細かく見たいところは自分でプロットしていく必要があります。

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)

スクリーンショット 2021-12-07 21.11.23.png

setup関数でtrainデータと目的変数のカラムを指定します。
途中でEnterを押してください。説明変数の認識に問題があればquitで中断できます。
データタイプの変更については本記事末の参考記事をご覧ください。

session_idは再現可能なようにseedを与える引数です。defaultでは乱数が割り当てられます。

4-3. モデルの比較

compare_models()

スクリーンショット 2021-12-07 21.13.11.png

全てのモデルをAccuracyをはじめとした評価指標で比較できます。
とりあえずdt:決定木(Decision Tree Classifier)が一番精度が良さそうですので"dt"で進めます。
この結果は、setup時に指定したsession_idを変えると変わります。(実行の度に結果は変わります)

4-4. モデルの作成

dt = create_model('dt')

スクリーンショット 2021-12-08 10.33.53.png

引数には使用したいモデルの名前を文字列にて入力します。(決定木の場合は'dt')
この段階では、ハイパーパラメータはある決められた値で計算しているだけですので、
次で最適化を行います。

4-5. モデルのハイパーパラメータのチューニング

tuned_dt = tune_model(dt)

スクリーンショット 2021-12-08 9.15.35.png
pre-definedの範囲内でランダムグリッドサーチを行い、チューニングを行います。
tune_modelの引数でn_iterを設定することによりランダムグリッドサーチの回数を決められます。
今回は検証データでのスコアは、やや下がる結果になっています。

4-6. モデルのプロット

 # ROC曲線
%matplotlib inline
plot_model(tuned_dt, plot = 'auc')

スクリーンショット 2021-12-08 9.18.53.png

 # 混同行列
plot_model(tuned_dt, plot = 'confusion_matrix')

スクリーンショット 2021-12-08 9.19.29.png

ちなみに以下コードでHTML形式でモデルの各評価を見ることができます。
特徴量の重要度や学習曲線なども入っており、私はこれだけ使っています。

evaluate_model(tuned_dt)

スクリーンショット 2021-12-08 9.31.24.png
スクリーンショット 2021-12-08 9.30.59.png

4-7. モデルの確定

上記結果が良さそうであれば、モデルの確定を行います。

final_dt = finalize_model(tuned_dt)
print(final_dt)

スクリーンショット 2021-12-08 9.41.54.png
チューニングしたハイパーパラメータが確定し、学習済みモデルが出来上がりました。

4-8. testデータの予測の実行

result_dt = predict_model(final_dt, data = data_unseen)
result_dt

スクリーンショット 2021-12-08 9.45.02.png
この新しい"Label"というカラムに予測結果が入ります。

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の初心者向けまとめ(分類編)

78
88
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
78
88

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?