データサイエンス100本ノック（構造化データ加工編）の環境構築（Windows10）

#はじめに
一般社団法人データサイエンティスト協会が、**構造化データの加工を実践的に学べる無料の学習環境「データサイエンス100本ノック（構造化データ加工編）」**を[GitHubに公開](https://github.com/The-Japan-DataScientist-Society/100knocks-preprocess)しました。
本記事は、初学者の方でも無料の学習環境を構築できるように、導入手順の詳細を記載しました。
（構築する実行環境は下図になります。）
![dss_structure.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329863/ec7d6786-8920-f62c-8003-27a60e27f426.png)

#前提条件（Windows10）
1. [Docker Desktop for Windows](https://hub.docker.com/editions/community/docker-ce-desktop-windows/)<br>
※起動しない場合は、Hyper-Vが「無効」になっている可能性があるので[「有効」に設定。](https://docs.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v#enable-the-hyper-v-role-through-settings)
2. [Git for Windows](https://git-scm.com/downloads)<br>
※インストール時のデフォルト設定である改行コード変更を「無効」に設定。<br>
※本記事のコマンドはPowerShellで実行・検証済。

```
> git config --global core.autocrlf input
```

#環境構築
学習環境用のディレクトリ（今回はdss）を作成し、100本ノックのリポジトリをクローンする。
その後、100本ノックのディレクトリ内に移動し、`docker-compose`コマンドを使ってコンテナを作成する。（10分前後の時間がかかる。）
※環境構築中に警告のポップアップが表示される場合、DockerのローカルPCに対するアクセス権限がない可能性があるため**「Share it」**を選択してアクセス権限を付与する。
※上記の方法で起動できない場合、DockerのSettingsでファイル共有が設定されているかを確認する。

```
> mkdir dss
> cd dss
> git clone https://github.com/The-Japan-DataScientist-Society/100knocks-preprocess.git
> cd 100knocks-preprocess
> docker-compose up -d --build
```
起動済みのコンテナを確認し、**「dss-notebook」**と**「dss-postgres」**の出力を確認できれば環境構築が成功。

```
> docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
b35f99d4148a        dss-notebook        "tini -g -- start-no…"   23 seconds ago      Up 22 seconds       0.0.0.0:8888->8888/tcp   dss-notebook
3cb559c7f66d        dss-postgres        "docker-entrypoint.s…"   27 seconds ago      Up 26 seconds       0.0.0.0:5432->5432/tcp   dss-postgres
```

#使い方
ブラウザで下記のURLにアクセスすると、構築したJupyterの環境にアクセスできる。

```
http://localhost:8888
```
`work`ディレクトリ配下に、構造化データ加工の演習問題の.ipynbファイルがある。
**必要ライブラリのインポートや加工前のデータ取得は、最初のセルに記述済み。**
演習問題に適した処理を、空欄のセルに入力して実行し、学習を進める。
![dss_jupyter_work.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329863/ac06ff61-fb5e-1752-9852-0a03f1714035.png)
演習問題の解答は、`work/answer`ディレクトリ内に.ipynbファイルがある。
そのため、演習問題のファイルで回答した処理の正否を確認しながら作業可能。
![dss_jupyter_answer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329863/08e1936c-dd20-9692-b886-d9bb2e1ae184.png)

#学習環境の停止・起動
下記のコマンドで、構築した環境を停止可能。

```
> docker-compose stop
```
また、2回目以降に起動する場合は、下記のコマンドで起動可能。

```
> docker-compose start
```

# 補足事項
## 構築した環境のレスポンスが遅い場合
Docker Desktop for WindowsのSettingsでResourcesのMemory値を変更してください。
推奨は、[4.00GB以上](https://digitalpr.jp/r/39499)です。
![docker_settings_resources.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329863/07e9d6ec-63b2-44d8-3a47-65775c1f168a.png)


## 8888ポートが使用されている場合
もし、ローカルホストの8888ポートを他の開発環境（LAMPなど）で利用している場合は、docker-compose.ymlを下記のように変更（notebookのportsの値を変更）することで対応可能。

```docker-compose.yml
  notebook:
    ports:
      - "888:8888"
```
上記の場合、下記のURLでアクセス可能になる。

```
http://localhost:888
```

# まとめ
Windows10環境における、データサイエンス100本ノック（構造化データ加工編）の環境構築手順を記載いたしました。
上記の手順で不明点や疑問点等がありましたら、コメントいただけますと幸いです。

# 参考リンク
[データサイエンス100本ノックのガイド](https://github.com/The-Japan-DataScientist-Society/100knocks-preprocess/blob/master/docker/doc/100knocks_guide.pdf)