Se ha denunciado esta presentación.
Se está descargando tu SlideShare. ×

ログ解析入門withR InnovationEggNo3

Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Próximo SlideShare
アクセス解析基礎
アクセス解析基礎
Cargando en…3
×

Eche un vistazo a continuación

1 de 53 Anuncio
Anuncio

Más Contenido Relacionado

A los espectadores también les gustó (14)

Similares a ログ解析入門withR InnovationEggNo3 (20)

Anuncio

Más reciente (20)

ログ解析入門withR InnovationEggNo3

  1. 1. ログ解析入門 with R 2014/6/4 Innovation Egg 第三回 かわはら
  2. 2. ログ解析とR 解析… 重要なのは解析始めるまで…
  3. 3. ログ解析とR 解析… http://nexal.jp/blogs/2384.html 重要なのは解析始めるまで…
  4. 4. ログ解析とR 解析… 重要なのは解析始めるまで… きちんと管理しましょう
  5. 5. ログ解析とR 解析… 重要なのは解析始めるまで… 管理できていたら
  6. 6. ログ解析とR 解析… 重要なのは解析始めるまで… 活用してみる?
  7. 7. ログ解析とR 解析… 重要なのは解析始めるまで… (ちょっと)見てみる
  8. 8. ログ解析とR (ちょっと)見てみる ツール? かんたんに、でも、くわしく、 データを見てみたい
  9. 9. ログ解析とR かんたんに、でも、くわしく、 データを見てみたい
  10. 10. ログ解析とR • 実際、重要なのは解析始めるまで きちんと(できれば目的を持って 目的に沿った)管理をする • R: ログを様々な切り口で見るツール 比較的簡単に、詳しくデータを見られる
  11. 11. R、使ったことありますか? • 聞いたことある? • 使っている? R in Google Trend
  12. 12. R、使ったことありますか? 2013 Data Science Salary Survey: From O'Reilly Strata Conference: Making Data Work
  13. 13. R、使ったことありますか? Githubでの人気度 StackOverflowでの人気度 言語 2012年9月 2013年1月 2013年6月 2014年1月 JavaScript 1位 1位 2位 1位 Java 2位 2位 1位 2位 PHP 3位 3位 3位 3位 … … … … … R 17位 17位 16位 15位
  14. 14. Rって? • 統計解析環境 • プログラミング言語 http://www.r-project.org/ What is R? R is a language and environment for statistical computing and graphics.
  15. 15. なぜR? • 統計解析や付随する • 学びやすい データ処理、可視化 の環境が充実 http://www.okada.jp.org/RWiki/?R%A4%F2%C1%A6%A4%E1%A4%EB100%2B%A4%CE%CD%FD%CD%B3
  16. 16. 統計解析環境?? この辺の分析が手軽に実装できる tjo.hatenablog.com/entry/2013/06/10/190508 データセット名 タイトル 説明 airmiles 商用航空会社マイ レージ 1937年から1960年の各年の、合州国の商用航空会社の 課税利用者マイル数。 airquality ニューヨークの大気 状態観測値 ニューヨークの大気状態観測値。1973 年の五月から。 anscombe 同じ' 線形単回帰 に対する Anscombe の四 つ組 同じ通常の統計的性質(平均、分散、相関、回帰直線)を 持つが、全く異なる 四つの x-y データセット。 attenu Joyner-Boore の地震波の減衰 データ このデータはカリフォルニア州の 23 の地震のピーク時加速度 を、様々な観測基地で測定したデータを与える。このデータは 多くの研究者により、基本加速度に対する距離による減衰 効果を推定するために用いられてきた。 cars 車の停車距離 車が停車するまでに必要な距離のデータ。 データは 1920 年代に得られたことを注意せよ。 co2 Mauna Loa 火 山の大気中の炭酸 ガス濃度 大気中の CO2 濃度が百万分の一単位 (ppm) で表され、 preliminary 1997 SIO manometric mole fraction scale で報告されている。 discoveries 重要な発見の数 1860年から1959年の各年における ``偉大な'' 発明と科 学的発見の数。 http://d.hatena.ne.jp/hoxo_m/20120214/p1 >100のサンプルデータ
  17. 17. Rを使うメリット • 統計解析や付随する • 学びやすい 分析が楽! データ処理、可視化 の環境が充実
  18. 18. Rを使うデメリット • ソフトウェア開発 • 大量データ処理 (?文字列処理) 汎用性が低い・・・ Webアプリ開発
  19. 19. Rを使う? もし統計解析が必要なら
  20. 20. Rについて • 文法とデータフレーム • パッケージ • IDE
  21. 21. Rについて: 文法とデータフレーム a <- 1 + 1 #2 b <- 2:10 #2, 3, ... 10 >b[5:7] 6, 7, 8
  22. 22. データフレーム: 変数毎の計算を容易に Label1 Label2 Label3 Label4 1 A 2011/4/1 TRUE 10 B 2013/8/9 FALSE 5 C 2017/1/1 FALSE ←変数 観測値 dat$Label1 ... 1, 10, 5 Rについて: 文法とデータフレーム
  23. 23. 実際使う上でのポイント 処理速度は遅いかもしれません ★ for文は使わない 時間かかる ☆ apply関数を使う ☆ package活用(dplyr, doSNOW etc) Rについて: 文法とデータフレーム
  24. 24. Rについて: パッケージ データ抽出、ログ解析のための おすすめパッケージ
  25. 25. Rについて: パッケージ DB? SQL? • RODBC • sqldf RからODBCを使うことで、各種のデータベース上 に格納されたテーブルをデータフレームに読み込む RでデータフレームをSQLで操る
  26. 26. Rについて: パッケージ GoogleAnalytics • RGoogleAnalytics RでGoogleAnalyticsを扱う
  27. 27. Rについて: IDE RStudio
  28. 28. Rについて • 統計解析用プログラミング言語 分析には便利 ⇔ 汎用性は低い • 基本データ構造: データフレーム • パッケージを活用 • RStudioから使うと更に便利
  29. 29. ログの取得と解析 • DBからログ取得  ODBCを使って  CSV, GA, etc... • ログ解析と活用  傾向みてみる  予測してみる
  30. 30. ログの取得と解析 Package: RODBC RからODBC(Open Database Connectivity: RDBMSにアクセ スするための共通インタフェース (API))を利用してDBにアクセス http://cran.r-project.org/web/packages/RODBC/index.html インストール&呼び出し CRANからダウンロード RStudioでインストール、呼び出し if(!require(RODBC)){ install.packages(“RODBC”) } library(RODBC)
  31. 31. ログの取得と解析 RからODBC #DB接続を開始 conn <- odbcConnect(DB, user_id, passwd) #テーブル名の表示 sqlTables(conn) データソース名 ユーザーID パスワード
  32. 32. ログの取得と解析 RからODBC #SQL実行 sqlQuery(conn, query) queryの例: query1 <- “select * from table” #各IPアドレスからのアクセス数を取得 query2 <- “select ip_address as ip, count(*) as n from table” #昨日までの1週間分のデータを取得 day_b0 <- Sys.Date() #今日 day_b8 <- day_b1-8 #8日前 query3 <- paste(“select * from table where time>=”, day_b1, “and time <”, day_b8) #接続終了 close(conn)
  33. 33. ログの取得と解析 RからODBC #データdatの確認 #head: 上から6行を返す データが多いとき #summary: 各変数の統計量 head(dat)
  34. 34. ログの取得と解析 RからODBC #データdatの確認 #head: 上から6行を返す データが多いとき #summary: 各変数の統計量 summary(dat) 大小がある変数 は最大値~最小 値、第1、3四分 位点を出す 多い順に最大6つ 並べる
  35. 35. ログの取得と解析 RからGoogle Analytics #データの集計 library(RCurl); library(rjson) source(“RGoogleAnalytics.R”) ga <- RGoogleAnalytics() ga$SetCredentials("username", "passwd") query <- QueryBuilder() query$Init(start.date = "2014-01-01", end.date = "2014-05-31", dimensions = c("ga:date","ga:hour"), metrics = "ga:visitors", sort = "ga:date", table.id = "ga:xxxxxxxxxx") dat <- ga$GetReportData(query)
  36. 36. ログの取得と解析 CSV, TXT, 固定長etc... #データの集計 dat <- read.table(“xxx.txt”) dat <- read.csv(“yyy.csv”) dat <- read.fwf(“zzz.csv”) 殆どの形式でデータの読み込みは簡単
  37. 37. ログの取得と解析 集計 #SQLに慣れている場合 library(sdldf) ans <- sqldf(query) #queryの例 query1 <- “select ... from dat ... (略)” query2 <- c(“create index idx_ip on dat(ip)”, “select ip, count(*) as n from dat group by ... (略)”) for文は使わない
  38. 38. ログの取得と解析 集計 #SQL文を使わない library(dplyr) ans <- summarize(group_by(dat, ip, ...), n=n(), funx = fun(x)...) 速度はdplyr≒sqldf for文は使わない
  39. 39. (例)datasciencetoolkit.orgのAPIを利用してIPアドレスから経度・緯度を取得 IPtoXY <- function(x) { URL_IP <-paste("http://www.datasciencetoolkit.org//ip2coordinates/", x, sep = "") api_return <- readLines(URL_IP, warn = F) lon1 <- api_return[grep("longitude", api_return)] lon <- gsub("[^[:digit:].]", "", lon1) lat1 <- api_return[grep("latitude", api_return)] lat <- gsub("[^[:digit:].]", "", lat1) return(paste(lat, lon, sep = ":")) } ログの取得と解析 IP address
  40. 40. ログの取得と解析 IP address (例)Google Map上に表示 map_ip <- function(id, ip) { URL_IP <- data.frame(ip=paste("http://www.datasciencetoolkit.org//ip2coordinates/", ip, sep = "")) y <- unique(URL_IP) api_returnx <- apply(y, 1, readLines, warn=F) api_return <- unlist(api_returnx) lon1 <- api_return[grep("longitude", api_return)] lon <- gsub("[^[:digit:].]", "", lon1) lat1 <- api_return[grep("latitude", api_return)] lat <- gsub("[^[:digit:].]", "", lat1) loc <- data.frame(id=id, lonlat=(paste(lat, lon, sep = ":"))) plot(gvisMap(loc, locationvar="lonlat", tipvar="id", option=list(showTip=F, enableScroll=T, useMapTypeControl=T))) return(data.frame(id, lat, lon)) }
  41. 41. ログの取得と解析 時間の扱い #日付型への変換 dat$time <- as.POSIXct(dat$time, origin=“1970/1/1”) dat$time <- strptime(dat$time, “%Y-%m-%d %H:%M:%S”) #日ごとに分類 dat$day <- as.Date(dat$time) #曜日ごとに分類 dat$weekdays <- weekdays(dat$time)
  42. 42. *時系列分析をする場合 補完するためのapprox関数が役立つ~~~ #間隔を統一する >> 時間軸のテンプレートを作る #ts, tfは開始、終了の時間の整数化 time.t <- seq(ts, tf, by=3600) #dat$yが何か指標の場合 dat$t <- as.integer(dat$time, origin=“1970/1/1”) dat.t <- data.frame(t = time.t, y = approx(x=t, y=y, xout=time.t, method=“linear”)) ログの取得と解析
  43. 43. ログの取得と解析 集計 #reshape関数でクロス集計 #dat: day(曜日), hour, アクセス数の場合 reshape(dat, idvar=“day”, timevar=“hour”, direction=“wide”)
  44. 44. ログの取得と解析 集計 #結果のプロット
  45. 45. ログの取得と解析 傾向を見てみる #決定木を使う データフォーシーズ:http://www.data4cs.co.jp/service/case_crm04.html 例
  46. 46. ログの取得と解析 age >= 35.5age < 35.5 hour < 3 hour >= 3 repeat >= 2repeat < 2 傾向を見てみる (例)何が購買に結び付いているのか 「dat」 会員ID 年齢 男女(男=1, 女=0) 訪問時間、曜日 etc 誰が(どんな層の会員が) いつ(曜日、時間) 購入する傾向にあるのか ■購入 ■非購入
  47. 47. ログの取得と解析 age >= 35.5age < 35.5 hour < 3 hour >= 3 repeat >= 2repeat < 2 傾向を見てみる library(mvpart) tree <- rpart(purchase~. data=dat) plot(tree) #これだけ ■購入 ■非購入
  48. 48. ログ取得と解析 • データ取得にはSQL文が使える • 分類項目を決めてデータを集計する • 目的変数(購買、アクセス等)と 他の変数の関連性を見つける ⇒ R: 短いコードでサクサクできる
  49. 49. おまけ レコメンドシステム
  50. 50. http://japan.zdnet.com/web/sp_08ec/20374062/2/ アイテム間の距離: ユーザーの訪問、購買履歴より計算 (例)ピアソン相関係数 おまけ #アイテムベースの協調フィルタリング #アイテム同士の類似度を測り、ユーザーが好んだアイテムに近いアイテムを提案 #アイテム: 商品、ページ etc
  51. 51. おまけ a b c d e f g a を推薦 空間上に a~gを配置
  52. 52. おまけ ユーザー×ページ毎の訪問回数 ページ間の距離
  53. 53. http://kobexr.doorkeeper.jp/events/11097

×