現在、Udacityのデータエンジニアリングコースで勉強中です。
Udacityのデータエンジニアリングコースでは実際に実装をするプロジェクトがあるのですが、Udacityで提供されている環境は、Jupyter Notebookです。
Jupyter Notebookは、CLI感覚でソースを実行してみたかったり、ソースと実行結果が入り交じったドキュメントを作成したいときには便利なのですが、がっつりと実装するというケースでは使いづらいです。
Udacityのデータエンジニアリングコースのプロジェクトは、コーディング量はそれほど多くないのですが、既存コードを読んだり、いろいろ試行錯誤が必要です。これはJupyter Notebookだとつらいです。なので私はローカルに、Udacityのプロジェクトが実行できる環境を構築しました。
今回は、その環境構築の備忘録になります。
前提
環境構築は以下の環境を前提としています。
- Mac
- Anaconda導入済み
※やることは、Postgresのインストールとセットアップ、Python環境の構築なので、Windowsやpyenvでも大丈夫です。コマンドが違うので置き換えて下さい。
ローカル環境の構築に必要なこと
ローカルの環境構築に必要なことは以下の3ステップです。
- Postgresのインストール
- DBのセットアップ
- Pythonの環境構築
- コードとサンプルデータをダウンロード
Postgresのインストール
ローカル環境をあまり荒らしたくなかったので、Dockerとかも考えたのですが、コース終了後は環境ごと全部削除してもいいと思ったので、手軽さ優先でローカルに直接インストールしました。
インストールコマンド
brew install postgresql
インストール直後はDB起動していますが、パソコン再起動後は動いていないので、以下のコマンドで起動します。
postgres -D /usr/local/var/postgres
DB接続前のCLIで、
psql -l
でDB一覧が確認できます。
Udacityのプロジェクトで使用することになるDB studentdb がないので作成する必要があります。
DBセットアップ
postgresは接続しなくても、CLIで createdb のコマンドでDBを作成できます。DBの接続ユーザーは student を使う必要があるので、オーナーをstudentにします。
createdb studentdb -O student
user: studentのパスワードを、student にする必要があるので変更しておきます。
postgres=# ALTER ROLE student WITH PASSWORD 'student';
プロジェクト内で、DBを作成したり削除したりするので、フル権限を付与しておきます。
postgres=# create role student with superuser;
これでDB環境は整いました。
Pythonセットアップ
ローカルにPythonをセットアップします。Udacity用に仮想環境を用意した方がいいでしょう。すでにAnacondaはインストール済みの前提で話を進めます。
Anacondaの仮想環境作成コマンドは以下になります。
conda create -n udacity python=3.7
Pythonのバージョンは、3.7を指定しています。私は最新バージョンで構築してしまったのですが、UdacityのJupyter Notebookで実行したところ、3.8から導入されたフォーマットストリングリテラルのイコール構文(f”{hoge=}” みたいなやつ)がエラーで使えませんでした。なので、Udacityの実行環境のPythonのバージョンは2022年3月現在では3.7だと思われます。
あとは、パッケージが必要になったタイミングでインストールしていきます。最初のプロジェクトでは、psycopg2とpandasが必要です。
source activate udacity
pip install psycopg2
pip install pandas
コードテンプレととサンプルデータをダウンロード
これはスマートな方法がわかりませんでした。Gitなども用意されて折らず、git cloneみたいなことはできません。
私はルート直下にあるコードは1ファイルずつJuptyter Notebookからダウンロードしました💧 サンプルデータはフォルダなのでJupyter Notebookのターミナルで、zipコマンドで圧縮してから、その圧縮ファイルをダウンロードしました。
以上で、ローカルで開発できる環境の完成です。
ローカルにプロジェクトを作成して、そこにダウンロードしたファイルをいれて、Pycharmで実装しています。
Postgresはあまり使ったことがなかったので、コマンド調べるのに少し時間がかかってしまいました。Udacityでローカル環境構築のドキュメントを用意してくれていたら良かったのですが、ローカルで開発したい場合はどうぞぐらいの記載しかありませんでした。Udacityのデータエンジニアリングコースをやる人はこれぐらいできて当然だよねということなのでしょうか。それともローカル環境構築をサポートしたくなかったのでしょうか。たぶん後者だと思うのですが、まあ本題ではないので、どうでもいいですね😅
