このシリーズでは、データサイエンス初心者でもできるようにDocker(ドッカー)を用いて分析環境を構築していきます!
このシリーズを読むことで、Dockerとはなにかを理解できるだけなく、Dockerによる分析環境ができるようになります!
Docker(を含めたインフラ分野の知識)はデータサイエンティストではもはや実務では必須の知識です。
今回の記事では以下のことを扱います!
- バフェットコード様からダウンロードしたcsvファイルをローカルからクラウドに送信し簡単に分析する
- ローカル環境でdockerコンテナ上でvscodeを使いデバック実行する
Dockerは、現在データサイエンスを専攻している大学生は授業で習っており、今すぐにでも覚えるべき知識です。
それでは、Dockerを学んでいきましょう!
※今回の記事はMacOSでかつバージョンが10.14以上(CtalinaまたはMojave)を想定しています。
WineyTradeの記事にでてくるコードはLINE@にて配布をしております!
LINEのメッセージ欄に各記事のキーワードをお送りいただければ、ダウンロードリンクを送付いたします!
ソースコードを見逃したくない方は、今のうちにLINE登録をしておいてくださいね!

目次
ファイルをローカルのPCからクラウドに送信しデータを分析しよう

前回私たちは、AWSのEC2上でjupyternotebookを起動させました。
今回は、ローカルにあるPCからクラウドであるEC2にファイルを送信し、そのファイルを使って分析をする流れをみていきます。
ローカルとクラウドでのファイルの送受信ができることで、気軽にデータの分析環境にファイル/フォルダを送ったり、分析結果をローカルに落としたりすることができるようになります。
それでは一緒に学んでいきましょう!
EC2にSSH接続でアクセスしjupyternotebookフォルダがあることを確認する
まずは前回と同様に、EC2を起動し、ターミナルからSSH通信で接続しEC2にアクセスします!
まずは、AWSにログインしEC2のインスタンスのメニューに行きます。

そして、停止中のコンテナを起動させます。
起動させたあと、途中で長時間利用しない場合は必ず停止させるようにしましょう!!
(AWS使用にあたって発生した損失/損害について当サイトは一切の責任を負いかねます。)

その後、EC2にターミナルを起動し、パブリックIPv4DNS(黄色い枠で囲っているものの下のモノ)やpemキーを利用し、EC2にSSH接続します。
ssh -i docker.pem ec2-user@<<先ほどコピーしたDNS>>

接続するかを聞かれるので、”yes”を選択し、EC2にアクセスします。
EC2にインスタンスに接続することができました。
ここで、”ls”コマンドを打ち、現在いる場所にどのようなフォルダがあるか確認します。
その中で、jupyternotebookがあることを確認します。

jupyternotebookフォルダがあることを確認できたので、次の作業に移るためにexitをします。

バフェットコードからcsvファイルを取得しsftpを使いEC2にファイルを送信する
次に、EC2のjupyternotebookの環境でデータ分析をするための、分析対象となるファイルを送信していきます。
今回は、バフェットコード様からcsvファイルをダウンロードし、ファイルを送信していきます!
今回は、Zホールディングス(証券コード:4689)を例にcsvをダウンロードします。
まずは、4689と検索します。

すると、Zホールディングスの財務データが表示されますので、ここで業績のメニューに切り替え、右上のクリックしダウンロードします。

すると、Downloadsフォルダにcsvがあることがわかります。

sftpで接続をし、EC2上でファイルの送受信ができるようにアクセスします。
サーバー(今回だとEC2)にファイルを転送する際に暗号化して安全な送信を行う通信手段。
下記のようなコマンドを打ち、sftpで接続します。
なお、sftpコマンドに関しては下記の記事をみるとわかりやすいです。
sftp -i docker.pem ec2-user@<<先ほどコピーしたDNS>>

接続後、put コマンドで送信したいローカルPCにあるファイルを指定し、EC2にファイルを送信します。
put <<送信したいローカルにあるファイル>>

送信完了後、確認のために”ls”コマンドを打つと、jupyternotebookフォルダのとなりに先ほどダウンロードしたバフェットコード様のcsvファイルがあることがわかります。

確認できたところでexitします。

その後、いつものようにSSH接続でアクセスし、実際にEC2にあることを確認します。

csvが確認できました!

jupyternotebookを起動しファイルがあることを確認する
まずは、jupyternotebookフォルダに移動し、csvファイルを srcフォルダに移動させいます。

その後、dockerをstartし起動させます。
sudo service docker start

その後、dockerコマンドが打てるかdocker infoで確認します
docker info

加えて、docker-composeコマンドが打てるかdocker-cで確認します。
docker-compose --version

確認ができたところで、juypternotebookコンテナを起動します。
docker-compose up -d

jupyternotebookコンテナ起動したところで、EC2インスタンスメニューにいき、パブリックDNSをコピーし、webブラウザにペーストしていきます。

<パブリックDNS>:8888 とブラウザに打ち込むとEC2上のjupyternotebookにアクセスすることができます。
加えて、workフォルダに移動するとcsvファイルがあることもわかります。

EC2上で簡単な分析を行う
簡単に分析をしていきます。今回は、”決算年度ごとのROEの推移の描画”と”「売上高」と「株価」と「ROE」の相関性”をみていきます。
新規ファイルを作成していきます。
ファイルを作成後、下記のようなコードをかくと、csvファイルの中身を確認することができます。
今回のファイルは直近の年間の業績の財務データを簡単に分析してきます。

下記のようなコードを書き、財務データの順番を逆にし、分析をしやすいように書き換えます。

その後、下記のようなコードを書き、決算年度ごとのROEの推移を描画させます。
株主資本利益率のことで、株主資本に対してどれだけ効率的に利益を上げているかを示す指標。
こちらをみると、年数がたつにつれROEが減少していることがわかります。

その後、下記のようなコードを書き、「売上高」と「株価」と「ROE」の相関性をみていきます。
あるもの事と別のあるもの事が互いに影響を及ぼす関係性
今回は、相関係数を用いて相関性をみていきます。
数値的に相関性を表すために持ちいられるもの。
最大値1最小値-1の範囲で、”1”に近づけば近づくほど正の相関が見られ、”-1”に近づけば近づくほど負の相関が見られる。また、相関係数が”0”に近づくと相関関係が無いと表わされる。

上記の結果をみると、売上高と株価、ROEと株価においては相関性がみられないですが、ROEと売上高には強い負の相関性がみられます。
これは、利益率を高めるより、大きな売上を立てより利益を生み出すことにシフトしていることがわかります。
イメージ、300円の商品が200円で売られていたのと、100円の商品が50円で売られていた場合、100円の商品の方が値引き率が大きいですが、300円の商品の方が値引き額の方が大きい、といった具合です。
ファイナンスの世界の場合、利益率より利益額の方がより大きな利益を生む関係で優先されやすいため、Zホールディングスの相関性は非常にきれいなものだと考えられます。
このように、簡単に分析をすることができました!
クラウド上のフォルダをローカルに取得してみる
最後に、ローカルに今回分析したjuypternotebookフォルダを取得してみます。
まずは、EC2からexitします。

そこから、sftpでアクセスします。
下記のようなコマンドを打ち、sftpで接続します。
sftp -i docker.pem ec2-user@<<先ほどコピーしたDNS>>

接続後、get コマンドで送信したいクラウド上にあるファイルを指定し、ローカルPCにフォルダを送信します。
今回はフォルダであるため、 -r オプションを使用しています。
get -r <クラウド上にあるフォルダ>

その後、exitし、ローカルPCにフォルダがあることを確認します。

確認できました!
インスタンスを停止する
最後にインスタンスを停止させます。
インスタンスメニューにいき、Stop instanceを選択しインスタンスを停止させます。

停止が確認できました。
たまに停止と表示されているのに、リロードすると停止できていないこともあるので、確実に停止できていることを確認しましょう。(AWS使用にあたって発生した損失/損害について当サイトは一切の責任を負いかねます。)

ローカル環境でdockerコンテナ上でvscodeを使いデバック実行をしよう!

ここでは、オマケとして、ローカル環境でvscodeを利用する際に、dockerコンテナ上でデバック実行をする方法を紹介していきます。
こちらを学ぶことで、docker上でもブレイクポイントを設定しコードの動きをみることができ、コードのどこにエラーがあるのかなどを特定しやすくなります。
作者である私も普段使っていますので是非覚えましょう!
今回起動するコンテナをつかうためのフォルダを取得する
今回コンテナを起動するにあたって、wineytradeのgithubにあるtestenvというフォルダを使用します。
今回使用するフォルダ→ WineyTrade/testenv: WineyTrade testenv (github.com)

早速、下記のようなコマンドをうち、フォルダを取得します。
git clone https://github.com/WineyTrade/testenv.git
この時、まだgit をインストールされていない場合は下記の記事をご覧ください。
【初心者向け】Gitのインストール方法をわかり易く解説(画面付き) (eng-entrance.com)
取得すると、testenvフォルダの構成が確認できます!

vscodeを立ち上げRemote-Containersをインストールしdockerコンテナを起動する
先ほど取得したフォルダでvscodeを開きます。

今回、vscodeでコンテナをデバック実行するために、Remote Containersという拡張機能をインストールします。
こちらは、microsoft社が開発したもので、コンテナを起動後、コンテナ内に入りvscodeを利用できる優れものです。

インストールがし終わったら、早速docker-compose -d でコンテナを起動させます。

コンテナ内に入りdocker上でデバック実行をする
コンテナを起動後、左側にあるメニューで、PC画面のようなアイコンをクリックします。

その後、 testenvコンテナを選択し、+マークをクリックし、コンテナ内に入ります。

コンテナ内に入ると、Open Folderと出るので、こちらをクリックします。

クリック後、どこのフォルダで作業するか指定できるようになるので、ここで/workdirを選択します。

すると、左下の黄色い文章の通り、コンテナ内に入ったことがわかります。
このコンテナ内では、vscodeの拡張機能がローカルPCのものと同期しないので、とりあえずすぐ試せるようにpythonの拡張機能を入れてpythonが実行できるようにします。

その後、ブレイクポイントをfakeという変数を宣言した後に置きます。

その後、キーボードでfn + f5 を押し、pythonfileを選択し、デバック実行をします。
デバック実行をすることができました!

まとめ
今回は、
- クラウドサービスとはなにか簡単に理解する
- クラウドで分析環境を作成し、分析環境の準備をする
といった流れをおこなっていきました!
ここまで読んで下さりありがとうございました!
全8回のDockerのシリーズを通し、dockerで分析環境を構築することができるようになりました!
Dockerは分析だけでなくweb開発など様々な分野で応用が効くためぜひ色々な場面で使いこなせれば良いと思われます!
WineyTradeの記事にでてくるコードはLINE@にて配布をしております!
ソースコードを見逃したくない方は、今のうちにLINE登録をしておいてくださいね!
