めんどくさがり屋なデータサイエンティストのためのPythonライブラリ5選
以下の文章は執筆者のPrathamesh Gadekarさんからの許可を得て翻訳したものです。
はじめに
データサイエンスは多くの面で興味深いフィールドですが、同時に多くの課題も伴います。データの前処理やクリーニング、深い洞察を引き出すためのデータの視覚化、そして最適な結果を引き出すためのモデルのチューニングなど、多くのステップが要求されます。
そこでこの記事では、作業効率を向上させ、時間を節約できるように設計された5つのPythonライブラリを取り上げます。これらのライブラリを使えば、数行のコードで包括的なレポートを生成したり、ハイパーパラメータを最適化したり、機械学習モデルをデプロイしたりすることができます。
それでは、これらのライブラリがどのようにデータサイエンスプロジェクトを進める手助けとなるのかを探求していきましょう。
データ解析とモデル作成には、Iris Datasetを用います。
データはこちらからご参照ください。HTMLファイルのプレビューはこちらのリポジトリで行います。
#Importing the pandas
import pandas as pd
#Loading the data
data = pd.read_csv('Iris.csv')
以下は、生産性を向上させるための5つのライブラリです。
SweetViz
これは探索的データ解析(EDA)専用のオープンソースPythonライブラリです。たった数行のコードで、グラフや図表を含んだ包括的なレポートを作成することができます。
レポートはHTMLやJupyter Notebookの形式で提供されるため、閲覧や共有が簡単です。さらに、相関分析(ヒートマップ)やヒストグラムなど、さまざまな図表がレポートに組み込まれています。
また、レポートのカスタマイズも可能で、データセット間の比較も可能なので、結果として、そこから新たな洞察を得ることもできます。ライブラリをインストールするには以下のコードを使用してください:
pip install sweetviz
データセットのレポートを生成するには、analyze
関数を使用します。
#Importing SweetViz
import sweetviz
#Generating report
report = sweetviz.analyze(data)
#To save the HTML format of the report, use this:
report.show_html()
#To view the report inside a Jupyter Notebook, use this:
report.show_notebook()
HTMLレポートは以下の画像のようになっています。
こちらのライブラリの詳細や機能については、こちらのドキュメントで確認できます。レポートのプレビューはこちらです。
Pandas Profiling
Pandasライブラリには、data.info()、data.isnull()、data.describe()など、データ分析のためのさまざまな関数が用意されています。しかし、これらの関数をそれぞれ個別に適用していると、かなりの時間がかかることがあります。
Pandas Profilingライブラリを使用すれば、これらのプロセスを自動化し、たった数行のコードで包括的なレポートを生成することが可能です。このライブラリはSweetVizに非常に似ていますが、機能の数はこちらの方が多いです。
ライブラリをインストールするには、コマンドプロンプトに次のコードを入力します:
pip install pandas-profiling
ProfileReportを使用してレポートを生成することができます。
#Importing ProfileReport
from pandas_profiling import ProfileReport
#Generating Report
report = ProfileReport(data)
レポートは、以下のようなセクションに分かれています:
- 概要セクション:ここではレポートの基礎となるデータの基本情報を確認できます。変数の種類、重複している行の有無、欠損値の存在及びその数、そして観測点の総数などの情報が提供されます。
- アラートセクション:ここでは、データセットに関連する様々な問題や、変数の分布、変数間の関連性に関する情報を得ることができます。
- 再現:ここでは分析の開始から終了までの日付範囲を確認できます。また、全体の分析にどれくらいの時間がかかったかも示しています。
- 変数:このセクションでは、任意の特徴に対して単変量解析を実行することができます。その特徴の平均や中央値、その他、異なる値の数といった情報が得られます。
- インタラクション:このセクションの目的は、2変量解析を実行することです。それにより、2つの特徴間の散布図を作成することが可能になります。
- 相関:このセクションでは、変数間の相関を視覚的に捉えることができるヒートマップが表示されます。
- 欠損値:ここではデータセット内の欠損値を視覚化するための行列が表示されます。
- サンプル:データセットの最初の10行と最後の10行を見ることができます。data.head(10)とdata.tail(10)を使って得られる情報と同等です。
ライブラリやその機能についての詳細は、こちらのドキュメントを確認できます。Profile Reportはこちらです。
LazyPredict
場合によっては、データセットにさまざまな機械学習モデルを適用し、どのモデルがデータセットに最も適しているかを迅速に判断することは非常に重要です。これらを手動でインポートし、多くの異なるモデルを一から訓練して比較することは、時間がかかるうえに複雑なプロセスになり得ます。このような場面で、LazyPredictライブラリが役立ちます。
ハイパーパラメータの調整なしにさまざまなモデルを比較できるオープンソースのPython auto-MLライブラリです。数行のコードで、様々な機械学習モデルを訓練し、比較することができます。分類問題と回帰問題の両方で使用することができます。
ライブラリをインストールするには、コマンドプロンプトに次のコードを入力します:
pip install lazypredict
このライブラリを使用して、Irisデータセットの最適なモデルを見つける方法は以下のとおりです:
# Separating the target variable and rest of the data.
y = data['Species']
data.drop('Species',inplace=True,axis=1)
X = data
# Splitting the dataset into train and test data
X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=.5,random_state =1)
clf = LazyClassifier(verbose=0,ignore_warnings=True, custom_metric=None)
#Training the models
models,predictions = clf.fit(X_train, X_test, y_train, y_test)
# Printing the output
models
各モデルの精度、F1スコア、実行時間などのさまざまな指標に基づいてモデルを比較します。
こちらのライブラリの詳細や機能については、このGitHubレポジトリでご確認ください。
さらに、煙検出データにLazyPredictを実装した私のブログ、こちらで閲覧できます。
FLAML
FLAMLはLazyPredictのように、データサイエンティストが機械学習モデルの比較ができるツールです。ただし、モデルの比較だけではなく、ハイパーパラメータの調整とモデルの最適化にも役立ちます。
Microsoftによって開発されたライブラリですが、Microsoft Researchによって開発されたハイパーパラメータの最適化とモデルの選択システムを使用しています。
FLAMLでは、LightGBM、XGBoost、Random Forestsなどがデフォルトのモデルとして用意されています。さらに、モデルの追加や訓練時間の制約設定といった柔軟な機能もあります。
ライブラリをインストールするには、コマンドプロンプトに次のコードを入力します:
pip install flaml
FLAMLを使用して最適なモデルを見つける方法:
from flaml import AutoML
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
# Separating the target variable and rest of the data.
y = data['Species']
data.drop('Species',inplace=True,axis=1)
X = data
#Using Label Encoder to convert categorical variables to numerical variables
label_endcoder = LabelEncoder()
y = label_endcoder.fit_transform(y)
# Splitting the dataset into train and test data
X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=.5,random_state =1)
automl = AutoML()
#Training the models
automl.fit(X_train, y_train, task="classification")
最適なモデルを調べるには、次のコードを使用します:
automl.best_estimator
この場合、最適なモデルはxgb_limitdepthです。
最適なモデルのハイパーパラメータに関する情報を取得するには、次のコードを入力します:
automl.best_config
ライブラリやその機能についての詳細は、公式ドキュメントで確認できます。
PyCaret
このライブラリは、コーディングの労力を大幅に削減し、データ分析に集中できるようにすることを目的に開発されました。PyCaretは、機械学習プロセスの自動化を支援するエンドツーエンドのモデル管理ツールです。
特徴量エンジニアリング、欠損値の補完、ハイパーパラメータの調整、さらにはデプロイまでを自動化します。
データ準備プロセスの一部として、PyCaretを使用して正規化、スケーリング、主成分分析(PCA)を使用した特徴選択、外れ値の削除など、さまざまな機能を実行できます。
トレーニングフェーズでは、モデルの追加や削除、時間制約の指定、異なるモデルの比較、ROCカーブなどのさまざまなグラフのプロットが可能です。
モデルはAWS、Google Cloud Platform(GCP)、Microsoft Azureにデプロイできます。変換パイプラインとトレーニング済みモデルオブジェクトをpickleファイルとして保存し、いつでも取り出すことも可能です。
ライブラリをインストールするには、コマンドプロンプトに次のコードを入力します:
pip install pycaret
データの準備:
from pycaret.classification import *
#Loading the data, defining the target varaible and performing normalizing
#the data using z-score
clf = setup(data = data, target = 'Species',normalize=True,
normalize_method='zscore'))
最適なモデルの検索:
# compare models
compare_models()
ロジスティック回帰のROCカーブのプロット:
lr = create_model('lr')
# plotting the ROC Curve
plot_model(lr, plot = 'auc')
モデルの保存:
#Saving the model in a pikle file (pipeline.pkl)
save_model(lr,'pipeline')
ライブラリやその機能についての詳細は、こちらのドキュメントから確認できます。
記事執筆者より:
以上の有用な技術は存在しますが、しかし私はデータの準備からデプロイまでのすべてのプロセスがマニュアルで実行されるべきだと考えています。このアプローチを取ることで、データ準備からモデルのデプロイメントまでの各ステップを深く理解し、貴重な経験を積むことができます。
オートメーションツールはプロセスを加速する可能性がありますが、それによってデータから得られる重要な洞察を見逃す危険があります。また、適切なモデル選択と調整が欠けることで、時間を無駄にしてしまう可能性もあります。
結論として、これらのライブラリは、時間が限られている場合にのみ使用すべきです。