シリコンバレーのマーケター日記

東京、シンガポールを経てシリコンバレーで働く、マーケター。英語、プログラミング、データ分析は次世代マーケターの必須スキルだと信じて進む。

Rを使ってユーザーのログデータの分析。URL編

やりたいこと

ユーザーのログデータから取ってきたパラメータ付きURLを分割して集計する。

 

パッケージのインストール

install.packages("dplyr")

library("dplyr")

 csvファイルの読み込み

url <- read.csv("/Users/yuyu/downloads/view.csv", header=TRUE)

正規表現で分割する関数を定義

div <- function(x){return (strsplit(x, split="\\/\\?id=|\\&") )}

分割できるようにデータ型を文字列にして、分割

res <- lapply(as.character(url$uri), div)

配列から欲しいデータを抽出する関数を定義

get <- function(x){ return (x1[2]) }

実行

list <- lapply(res, get) 

 

データの最初だけ表示:head(list)

書き出し:write.csv(list2, "list2.csv", quote=FALSE, row.names=FALSE)

集計:table <- table(list)

ディレクトリ確認:getwd()

 

正規表現

メタ文字 特殊な意味を持つメタ文字はその前に バックスラッシュ記号をおくことで表現される。メタ文字は . \ | ( ) [ { ^ $ * + ? である

抜き出し

> hits <- grep ("\\?id=", uri)
> uri[hits] 

置き換え

sub(".*\\?id=([0-9]+)", "\\1", contenthits)

分割

strsplit(id1, "\\&")

 

参考サイト:

ベクトルが[でリストが[[で - 盆栽日記

f:id:yuyutata:20161026004755p:plain

オススメのデータ解析学習サイト:DataCamp

今週、前職の韓国人の同期からすごーく久しぶりに連絡がありました。

12月にハーバード大学の統計学のマスターを卒業する予定で、アメリカで職探しをしている模様。韓国のヨンセ大学で学士、ハーバード大学で修士。どんだけやねん。

 

ここ数ヶ月は、データ分析系の仕事に手を広げており、SQL, Hiveを触っていました。

Step.1が、テーブルを作る、データを引っ張る

だとすると、

Step.2は、引っ張ったデータを分析する

です。

 

というわけで、Rをもう一度やり直したいとハーバード修士に相談したところ、以下のサイトを紹介してもらいました。

DataCamp

Monthly: $29

Yearly: $300

感想

無料のトライアルがあるので、ひとまずそれでRを触っていますが、とても良い!

ローカルでRを使うときは、環境整備してターミナルでコマンドを叩いてという感じなのですが、ウェブ上に直接打ち込んで、コンソールに結果も出てくる。UIが綺麗で楽しくなります。

ビデオも英語で、語学勉強にもなります。最初から英語で覚えてしまった方が汎用性が高く良いです。

マジで、大学生の時にこんなサイトがあったら良かったなぁ。

 

f:id:yuyutata:20161023132151p:plain

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の設定ファイルと、カスタムプロンプトについて