NTTデータCCSでデータ分析案件を担当している tomofuji です。普段はExcelで事足りてます。
はじめに
皆さん、データ分析の際にどんなツールを使用しているでしょうか。
Excel、MATLAB、Tableau、PowerBI、SAS、SPSS、Databricks、R、etc.
有料のものからフリーのものまで、目的や対象となるデータ量に応じていろいろなツールが存在しています。そして、そのほとんどのツールはインストールが必要であったり、クラウドサービスであればインターネット接続が必要となります。
それでは、インターネットから切り離された環境ではどうしましょうか?
そもそも、そんな環境あるのか? とか、そんな状況でデータ分析なんて・・・と思いますよね。実際にそんな状況に遭遇した経験からこれは有効だと感じた方法をご紹介いたします。
どんな使用環境が考えられるか
まずは、置かれた状況を整理してみましょう。
データについて
なかなかな機密情報であるため、組織の内部ネットワークのみに接続し、外部とはアクセスできないよう隔離されています。内部で収集されたデータはデータベースに蓄積されており、内部のシステムのみ参照可能な状況です。
実施したい分析内容
データベースに蓄積されているデータから、データマイニングにより何かしらの傾向や規則性を見出すのがミッションです。そのためには、データベース接続、データ取得、データ分析、分析結果の保存、レポート作成と一連の操作が必要となります。
実現方法・・・
これらを満足する分析手順をモデル化し、今後の運用へと引き継いでいきます。この分析モデルに到達するまでの試行錯誤を実施する環境をどうするか。
今時、分析っていったらPythonじゃね?
Notebook ならメモリ上にデータをキープしたまま、計算して、途中経過を可視化してとか、いろいろできんじゃね。
天使か悪魔か、どちらともつかない囁きが聞こえ、Jupyter Notebook で決定いたしました。今回は Jupyter Notebook を使用していますが、同様の手順で JupyterLab を使用することも可能です。
分析ツールとしてのPython
Pythonをデータ分析で使用するのはそれほど的外れなことではありません。なぜなら、ライブラリが豊富にそろっているからです。ちょっとした可視化から機械学習でAIモデルを作ることだってできてしまいます。
NumPy、pandas、Matplotlib、scikit-learn、TensorFlow、PyTorch、Django、Flask、etc.
市販のパッケージソフトを使用したデータ分析を否定しているわけではありませんが、オフライン環境ではライセンス更新など今どきの仕様に対して、不便なことが多そうです。
それに、ユーザによる情報がインターネット上にたくさん公開されているのも安心材料になるかと思います。残念ながら現地の作業環境では調べられませんが、事前にオンライン環境で調べた結果を持ち込むことは可能です。
では、さっそく環境を構築していきましょう。まずは、インターネットに接続できる環境で作業を進めていきます。ここでは、Windows版で説明していきます。
-
Python本体をダウンロード
-
任意のバージョンで【Windows embeddable package (64bit)】を選択
※インストーラーは使用しません -
ダウンロードしたZIPファイルを展開(フォルダ名はいい感じにしておいてください)
-
展開したフォルダ内にある「pythonXXX._pth」(XXXはバージョン番号)を編集
pythonXXX.zip . # Uncomment to run site.main() automatically #import site -
最後の行のコメント「#」を削除
-
get-pip.py をダウンロード
※あるいはコマンドプロンプト or PowerShell から以下のコマンドを実行> cd [Pythonを展開したフォルダ] > curl -O https://bootstrap.pypa.io/get-pip.py -
pip をインストール
※引き続きコマンドプロンプト or PowerShell から以下のコマンドを実行> python get-pip.py -
pip を使用してライブラリをインストール
> cd Scripts > pip install --upgrade pip > pip install notebook numpy matplotlib scikit-learn※「Scripts」フォルダに移動していない場合、「pip」が見つかりませんというエラーが発生します。
※必要なライブラリをインストールしてください。
※ローカルの環境でライブラリを追加したい場合、ダウンロードした配布ファイルをコピーして pip によるインストールも可能です。こちらについては別の記事にて触れることができればと思います。 -
Jupyter Notebook が起動できるか確認
> jupyter notebookサービスが立ち上がり、ブラウザが起動されnotebookが使用できるようになりました。
-
Pythonを展開したフォルダをzip圧縮し、他のマシンへコピー&展開すれば Jupyter Notebook が使えるようになっているはずです
結局、仮想環境ってそういうこと?
Pythonをインストーラーなしで動作できる環境を構築することができたでしょうか。ただ、このままでは何かと不都合が起きそうな気配がします。そこで、以下のバッチファイルを作成し、このバッチファイルをダブルクリックして起動するようにしましょう。
@echo off
set PYDIR=%~dp0\python
set PATH=%PYDIR%;%PYDIR%\Scripts
start jupyter notebook
@echo on
このバッチファイルから起動しない場合は、Pythonを展開したフォルダの「Scripts」フォルダへ移動してからコマンドを実行する必要があります。このひと手間を省くための仕組みがこのバッチファイルです。
では、このバッチファイルの内容を確認してみましょう。いたってシンプルです。肝は中央の行のパスの設定です。pipコマンドでインストールしたライブラリは「Scripts」フォルダの中に格納されます。そのため、このフォルダをパスに設定することで、pipによって配置されたコマンド群を実行することができるようになります。
パス(path)について
プログラムを実行する際には、実行ファイルが格納されているフォルダを含めた絶対パスで実行します。毎回そんな長いファイル名を打ち込むのは大変なので、プログラムのファイル名だけで実行できる方法が各OSで用意されています。
実行しようとしているフォルダへ移動してそこから実行する場合は、何事もなく実行できます。問題は、現在のフォルダと異なるフォルダに配置されているプログラムファイルを実行する場合です。まずは、現在のフォルダに該当のプログラムファイルがあるか確認し、存在していればそれを実行してくれます。ファイルが存在していない場合は、パスに設定されているフォルダを前の方から順に調べて、該当ファイルが存在すれば、それを実行することになります。
Pythonの場合、複数の異なるバージョンを共存させることがあります。意図したバージョンを起動させるには、このパスの設定をひと工夫する必要があるわけです。
さて、Pythonに馴染みのある方は、仮想環境を作らなくていいのか?と疑問を持った方もおられるかもしれません。それについては、パスの順番を入れ替えることで、仮想環境の働きに近いことを実現することができるため、あえて仮想環境を作成することを省いております。
パスの管理をご自身でされるのであれば、本記事のような単一用途の持ち運び環境であれば、あえて仮想環境を作らなくても運用できそうですね。ただ、面倒だったり設定を誤ったりすると動作しなかったりといろいろと不都合がありそうなので、仮想環境を使うことが広まったのだと思います。
仕組みがわかってしまえば、何だそんなことかと思うかもしれません。逆に仕組みを意識させずに機能が提供されるおかげで、パスの働きがどのようなものなのかを知らずに日々過ごしている方が大半ではないでしょうか。時にはどんな仕組みで動作しているのかに思いを馳せるのはいかがでしょう。本記事がそのきっかけとなれば嬉しい限りです。
ちょっとしたトラップにご注意を!
ライブラリがインストールされたPythonフォルダを持ち運ぶことで、動作環境を簡単に構築できるようになったかと思います。このまま使用してもらう分には問題は発生しないでしょう。
しかし、ライブラリを追加したくなることがないとは言えません。当初の目的のようにインターネットへ接続できない状況であればライブラリの追加は一苦労する覚悟を持ち合わせていることでしょう。ところが、インターネットへ接続できるのにこの環境で pip を使用したライブラリのインストールができないというトラップが発生します。
これは、pip をインストールした際に、pip の実行ファイルにインストール先のフォルダパスが刻み込まれることにより発生する事象です。是非、バイナリエディタで「pip.exe」の中身を覗いてみてください。
※以下の画像はインストール先ディレクトリが異なる例です。
原因がわかれば対策は簡単です。環境構築の手順7を再実行することで、この問題を解消することができます。Pythonのインストール先を変更した場合は、念のため pip の再インストールをしておくことをおススメします。
おわりに
インターネットに接続できない環境へPythonを持ち込む手順をご紹介させていただきました。一部の方でもお役に立てたのならば幸いです。
むしろ、仮想環境の仕組みやパスの働きに思いを馳せることができ、そちらの方が主題っぽくなってしまいました。知らないよりは知っていた方がよいことではあるので、ご容赦いただければと思います。
