俺、サービス売って家買うんだ

Swift, Vue.js, 統計, GCP / このペースで作ってればいつか2-3億で売れるのがポっと出来るんじゃなかろうか

Pythonで分析開発環境をつくる (AWS RDS + iPython + Anaconda)

アクセスログとは別にデータベースに直接アクセスして分析したいみたいなことって結構あると思うんですよね。
でもわざわざsshでログインして、そのサーバーに分析環境作ってみたいのって面倒な上になんかぶっ飛ばしちゃいそうで怖いじゃないですか。
なので今回は、Pythonでフレッシュな状態の RDSにアクセスしてiPython+Anacondaでパワフルに分析できるように環境を整えようと思います。

  • Anacondaのインストール
  • iPythonの初期設定
  • RDSの設定と接続テスト

f:id:hayato1986:20150803175412p:plain

1. Anacondaのインストール

Anacondaはnumpyとかipythonとか分析に必要なライブラリが一括で入っているパッケージです。
Pyの分析環境構築は日本語ドキュメント少ないし、こけまくるので素直にAnaconda使ったほうがいいと思います。

インストールコマンド

#まずはpyenvのインストール
$brew install pyenv
$export PATH="$HOME/.pyenv/shims:$PATH"
#pyenvでAnacondaのインストール
$pyenv install anaconda3-2.1.0
$pyenv rehash
$pyenv global anaconda3-2.1.0
$conda update conda
#MySQL環境を想定しているので、pymysqlをインストール :
$pip install PyMySQL #utf8mb4を使っていない場合はpip install pymysql3でもOK.

[参考]

起動確認

ここまででインストール作業は終わりです。ipythonが起動するか試してみます。

$mkdir analysis 
$cd analysis
$ipython notebook --pylab inline #グラフをnotebookないで表示するために pylab inlineする

localhost:8888でipythonのサイトが開かれると重います。ロケールエラーが出るかもしれません

ValueError: unknown locale: UTF-8

そのときは、.bashrcに以下を追加してsource .bashrcしてください。

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

2. iPythonの初期設定

毎回importするライブラリは決まっているので、起動したら常にimportされるようにしておきましょう。

$vi ~/.ipython/profile_default/startup/00-initial.py

で新規ファイルを作成して

  import pandas as pd
  from pandas.io import sql
  import numpy as np
  import pylab as pl
  import pymysql

とすればデフォルトで上記のライブラリが読み込まれるようになります。

3. RDSの設定と接続テスト

RDSでの設定

まずはRDSでリードオンリーユーザーを作りましょう。参考
その後、AWSコンソール上で、「Public AccessibleをYESに」「セキュリティグループでローカルからDBポートへのアクセスを許可する」を行います。

接続テスト

ipythonから接続テストをします。

$con = pymysql.connect(
                              host='AWSのエンドポイント', 
                              port=3306, 
                             user='リードオンリーユーザー名', 
                             passwd='*****************', 
                             db='yourdb' ,
                             charset='utf8mb4')

$df = sql.read_sql('''SELECT * FROM USER limit 1''', con)
$df

として結果が帰ってくればOKです!

オラッ!オラオラッ!!