オススメのデータ解析学習サイト:DataCamp
今週、前職の韓国人の同期からすごーく久しぶりに連絡がありました。
12月にハーバード大学の統計学のマスターを卒業する予定で、アメリカで職探しをしている模様。韓国のヨンセ大学で学士、ハーバード大学で修士。どんだけやねん。
ここ数ヶ月は、データ分析系の仕事に手を広げており、SQL, Hiveを触っていました。
Step.1が、テーブルを作る、データを引っ張る
だとすると、
Step.2は、引っ張ったデータを分析する
です。
というわけで、Rをもう一度やり直したいとハーバード修士に相談したところ、以下のサイトを紹介してもらいました。
DataCamp
Monthly: $29
Yearly: $300
感想
無料のトライアルがあるので、ひとまずそれでRを触っていますが、とても良い!
ローカルでRを使うときは、環境整備してターミナルでコマンドを叩いてという感じなのですが、ウェブ上に直接打ち込んで、コンソールに結果も出てくる。UIが綺麗で楽しくなります。
ビデオも英語で、語学勉強にもなります。最初から英語で覚えてしまった方が汎用性が高く良いです。
マジで、大学生の時にこんなサイトがあったら良かったなぁ。
Linux バージョン管理システム
今日は、バージョン管理システムを学びました。
分散型で開発を進めていくときにメリットを発揮するようです。
分散型バージョン管理
各開発者はレポジトリのコピーを “クローン” し、自身のハード ドライブ上にそのプロジェクトの 完全な 履歴を持ちます。このコピー (または “クローン”) には、オリジナルのすべてのメタデータが含まれています。
メリット
- チェンジセットのプッシュやプル以外の操作の実行は非常に高速です。理由は、ツールがアクセスする必要があるのはリモート サーバーではなくハード ドライブだからです。
- 誰の目にもさらされることなく、新しいチェンジセットのコミットをローカルで行えます。チェンジセットのグループの準備が完了したら、それらをすべて一度にプッシュできます。
- プッシュとプル以外のすべての操作はインターネット接続なしに行えます。したがって、飛行機の中でも作業できます。また、複数のバグ修正を 1 つの巨大なチェンジセットとしてコミットする必要はありません。
- プログラマーはプロジェクト レポジトリの完全なコピーをそれぞれ持っているため、変更を同時に 1 人か 2 人のプログラマーと共有してフィードバックを得てから、その変更を全員に公開できます。
コマンドラインインターフェース
- Git
- Marcurial
Marcurialの使い方
$ hg feature ブックマーク名 : ブックマーク作成
$ hg bookmarks :どのブックマークにいるか表示
$ hg update ブックマーク名 : ブックマーク切り替え
参考:
バージョン管理とは : 集中型 vs. DVCS - Atlassian Japan
Mercurial 対 Git:なぜ Mercurial を選ぶのか? - Atlassian Japan
おまけ
-ls -la : 隠しフォルダ・ファイル(.から始まるやつ)も全て表示される
Amazon ec2でサイトを公開する
Amazon ec2でサイトを公開してみます。
1) apatchが入っていることを確認する
$ httpd -v
Server version: Apache/2.4.23 (Amazon)
Server built: Jul 29 2016 21:42:17
2) /var/www/html/ ディレクトリーにファイルを入れる
ローカルからAWSにアップロードするとき
2段階を取るのは、/bar以下は、sudo権限なので、一度にアップできなかったためです。
2-1) ホーム以下にアップロード
scp -i ~/.ssh/秘密鍵 アップしたいファイルの場所 ホスト名@IPアドレス:送りたい場所
2-2) AWS内で/var/www/htmlにアップロード
mv: ファイルを移動、ファイル名前を変更
ということで、無事にできました。
さて、LinuxってOSなのかと思ってたのですが、Linuxパッケージの総称だそうで、以下のような種類があるみたいです。
- CentOS
- Fedora
- Debian
- Ubuntu
AWSでサーバーの種類を選ぶ画面で確かに出ていたような。。また一歩deepになってきた。
Amazon ec2とRDSをつなぐ
ec2にMySQLを入れたのですが、開発の過程で外部にデータベースだけ解放したいと思っていたので、RDSを使ってみることにしました。
pythonファイルと、MySQLをつなぐために、mysql-connector-pythonを使いました。
1) mysql-connector-pythonを入れる
$ mkdir lib
$ cd lib
$ git clone https://github.com/mysql/mysql-connector-python.git
$ python setup.py build
$ python setup.py install
2) ちゃんと動くか確認する
$ python -c "import mysql.connector" //一行だけでそのまま実行できる
3) pythonファイル
import mysql.connector
if __name__ == '__main__':
connect = mysql.connector.connect(user='ユーザー名', password='パスワード',host='ホスト名', database='DB名', charset='utf8')
cursor = connect.cursor()d = ''
e = ''
f = ''
statment = 'insert into results (a,b,c) values(%s,%s,%s)'
# insert
cursor.execute(statment, (d,e,f))
connect.commit()
ちなみに、RDSのアクセス権限がわからなかったので、ひとまずダウンロードして共有しましたw
1) アマゾンRDSのデータベースをダウンロード
$ mysqldump -u ユーザー名 -h エンドポイント -p DB名 テーブル名 > results.sql
2) EC2サーバーからローカルにファイルをダウンロードする
~/Desktop/aws-comment $ scp -i ~/.ssh/秘密鍵.pem ユーザー名@IPアドレス:ファイルの場所 保存したいディレクトリ
Linuxサーバーを構築する
AWSサーバー環境を作成しています。Linuxをちゃんと理解しないとダメだなと思いつつ、さくらレンタルサーバーに逃げてました。やはり自由度がないので、AWSに再度挑戦。
1) AWSでアカウント作ってEC2(仮想サーバー)でインスタントを作る
2) 秘密鍵(拡張子.pemのファイル)をゲットする
3) sshで接続
ssh -i ~/.ssh/秘密鍵.pem ec2-user@IPアドレス
// 秘密鍵は$homeの.sshフォルダーに移す
4) 必要なパッケージを入れまくる
- MySQL:
sudo yum install mysql-server mysql
- Apatch:
sudo yum install -y httpd
- PHP:
sudo yum install -y php
- MyphpAdmin:
sudo yum --enablerepo=epel install -y phpMyAdmin
- PHP:
sudo yum install -y php
- Git (gitを使ってインストールするために)
sudo yum -y install gcc gcc-c++ make git openssl-devel bzip2-devel zlib-devel readline-devel sqlite-devel
- ANACONDA2とpyenv (python用パッケージ)
cd $HOME git clone https://github.com/yyuu/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
pyenv install anaconda2-4.1.0
pyenv global anaconda2-4.1.0
pyenv rehash
- Google Could SDK:こちら
- Google APIs Client Library for Python:こちら
- Mysql-connect-python (pythonからmysqlにやり取りするためのライブラリ):こちら
学び
- Apatchをアクティベイトしても、ポートを解放しないとブラウザから見れない。AWSでのポートの解放の仕方はこちら。
- MyphpAdminにブラウザアクセスするときは、IP adress/ myphpadmin
- 基本的にローカルでbashをいじる時は、$HOMEディレクトリー下にある.bash_profileというファイル(ユーザー個別の設定ファイル)
- .bash_profileは、lsコマンドでは出てこない
- ホームディレクトリーに行って、エディタで開く
$ vim ~/.bash_profile
- 書き換えた後は、sourceコマンドの実行
# source ~/.bash_profile
-
通っているパスの確認
echo $path
- pip(pythonパッケージ管理ツール)でインストール可能なパッケージを確認
$ pip freeze : インストールされているパッケージの一覧表示
$ pip search mysql:インストール可能なパッケージの検索
例:bashをいじってみる:
やりたいこと:プロンプトに、ディレクトリーを入れる
~/.bash_profileを開いて、
PS1='[\u@\h] \w \$ '
と入れてsorceコマンドを実行すると
[username@hostname] ~/Desktop $
となりました!
参考:
AWSのEC2に基本的なLAMP環境を作ってみる(2) - Qiita
ユーザーの環境変数を設定するbashの設定ファイルと、カスタムプロンプトについて
テキストエディタ Atom を使う
天才エンジニアに、Atomが良いですよとオススメされたので、以前から使っていたBracketから、Atomに切り替えました。プラグインが充実しているようです。
FTP機能を使って、Atomから直接サーバー上のファイルの書き換えができるプラグイン。
1) Atomのsettingから検索してEnable
2) プロジェクトフォルダーから、右クリックでRemote Sync -> Configure
3) サーバー情報を入れて完了!
おまけ:ターミナルから直接Atomを開く方法
atom . //今いるディレクトリーでatomが立ち上がる
Google クラウド自然言語APIを実装する① Pythonを使う
前回は、クラウド自然言語APIをcURLで活用してみましたが、実際のサービスに実装するにはどうしたらいいのかなと、困っていました。
弊社の天才エンジニア救世主に教えを被り、順調に進めることができました。横でコーディングを見ているとマジで惚れます。萌えます。あーー。
Google先生が、GitHubにPythonを使ったクラウド自然言語APIの実装例が載せていたので、これを参考にしながら、進めていきます。
python-docs-samples/language/api at master · GoogleCloudPlatform/python-docs-samples · GitHub
まずは、Python環境を作る
1) pyenvをインストール
pyenvとは、Pythonの様々なversionの環境を作ることができるもの。githubからインストールすると、home下に環境が作られます。
pyenv lets you easily switch between multiple versions of Python. It's simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.
というわけで、terminalを立ち上げてコマンド入力。
cd $HOME
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
exec $SHELL
pyenv install 2.7.12
pyenv global 2.7.12
pyenv rehash
これで、home下にpython環境ができました。
2) pythonの基本文法
.py : Python fileの拡張子
import : ライブラリー呼び出し
def xxxx(): :関数定義
if __name__ == '__main__': :起動プログラム。これがないと何も動かない
3) terminalで動かす
Python fileのあるディレクトリーまで移動し、そこで、以下を叩くことでファイルが起動されます。print()で出力することができます。
python test.py
こんな感じでござる。