34
[JPOUG Presents] デスクトップアナリティクス奨め Tomoaki Uchimura 12-Jun-2015

[db tech showcase Tokyo 2015] E33: [JPOUG Presents] デスクトップアナリティクスの奨め ~ use R! ~ by 日本オラクル株式会社 内村友亮

Embed Size (px)

Citation preview

[JPOUG Presents]

デスクトップアナリティクスの奨め

Tomoaki Uchimura 12-Jun-2015

自己紹介:内村 友亮(うちむら ともあき)

• 2007年に中途入社後、DBアーキテクトとして大規模ミッションクリティカルシステムのマイグレーションやアップグレードに

従事。2013年から、テクノロジー製品のリファレンス展開するコンサル部門を

担当。最近の関心事はRとCloud。

• 拙著、即戦力のOracle管理術、 Oracleの現場を効率化する100の技、 発売中。 (いずれも技術評論社)

2

• ビジョン:DBでアジアを変える

• 日本オラクル株式会社 テクノロジーコンサルティング統括本部

テクニカルアーキテクト本部 DBソリューション部 部長

はじめに

• 今、アプリケーションとITインフラの

「はざま」を埋めるDBAが扱うデータに変化の兆しがあります。構造化データに加えて、非構造化データが含まれるようになりました。

• 理由は、お客様や業務部門担当者様が

、統計解析を使って、データを有効活用するようになったからです。

• このような状況を踏まえて、まずは身の丈のスキルアップとして、デスクトップアナリティクスを始めませんか?というお話をさせて頂きます。

3

データの活用度

データの多様さ

R C

C

C

C R R

Analytics Data modeling

Structured Data (SoR)

Unstructured Data (SoE)

①データの範囲が広がり、

②データ活用が可能に。

Program Agenda

1

2

3

デスクトップアナリティクスの奨め

デスクトップアナリティクスを知ろう

統計解析環境「R」を知ろう

デスクトップアナリティクスをやろう

4

4

免責 本資料に記載された内容は、情報の提供のみを目的としています。したがって、本資料を用いた運用は、必ずお客様自身の責任と判断によって行ってください。これらの情報の運用の結果について、講演者はいかなる責任も負いません。本資料は Oracle Database の製品サポートとは無関係ですので、本資料を元に Oracleサポートに問い合わせることはご遠慮ください。また、本資料で紹介するパーティションやクラスタなどの応用的な機能を使用するためには、追加ライセンスなどが必要な場合があります。詳しくはオラクル社ホームページ(http://www.oracle.com/jp/index.html)を確認願います。なお、本資料において示されている見解は、講演者の見解であって、オラクル社の見解を必ずしも反映したものではありませんのでご了承ください。本資料記載の情報は、2015 年 6 月 4 日現在のものを掲載していますので、ご利用時には、変更されている場合もあります。また、ソフトウェアはバージョンアップされる場合があり、本資料での説明とは機能内容や画面図などが異なってしまうこともあり得ます。

デスクトップアナリティクスの奨め

5

日々の仕事に分析習慣を取り入れませんか?

• The Oracle R Enterprise 1.4 brings Deep Learning power to the Enterprise by using the existing computational power of the Oracle Database and taking advantage of an innovative proprietary parallel solver that can solve very large problems with extreme compute efficiency while still using the data science language of choice – R.

機械学習 - Deep Learning がもう使えます

(サンプルコード) library(h2o) localH2O = h2o.init(ip = "localhost", port = 54321, startH2O = TRUE) # データの読み込み(今回はiris) irisPath = system.file("extdata", "iris.csv", package = "h2o") iris.hex = h2o.importFile(localH2O, path = irisPath) h2o.deeplearning(x = 1:4, y = 5, data = iris.hex, activation = "Tanh") # H2Oのシャットダウン h2o.shutdown(localH2O)

6

http://www.cs.utexas.edu/~cannata/dataSci/Oracle%20Advanced%20Analytics/Oracle%20R%20Enterprise-1-4-new-features-2176517.pdf

相関分析(cor) – 収入と消費財の関係は?

7

総務省の家計調査

千万円

デスクトップアナリティクスをお奨めする理由は?

• DBAが扱うデータが変化

–構造化・非構造化によらず活用することが増えている

–お客様や業務部門の方の判断を最適化し続けるために、多様化した膨大なデータの価値を知として最大化するプレッシャーが高まった。

• DBAが扱う業務フローが変化

–業務に、統計解析を活用することが増えている

–統計解析手法と外部環境の多様化した膨大なデータが入手しやすくなり、データの本当の価値を判断しやすくなった。

8

先に紹介した点の他に、次の理由があるからです。

新たなスキルセットとしてのデスクトップアナリティクス

• 近年、日本企業では戦略的なデータの活用が加速化している

• 近い将来、DBAが扱うデータは

、構造化データから非構造化データへ広がりを見せる

• 構造化/非構造化のデータを問わず、データを棚卸できれば、その先にデータ活用が可能に!

9

データの活用度

データの多様さ

R C

C

C

C R R

②データ活用が可能に。

デスクトップアナリティクスは、DBAが注力すべき技術領域のひとつです。

Analytics Data modeling

Structured Data (SoR)

Unstructured Data (SoE)

①データの範囲が広がり、

デスクトップアナリティクスを知ろう

10

日々の仕事に統計解析を使うには?

デスクトップアナリティクスの使いどころ

11

効率化できる

ことを探す

思考の無限ループを有限ループにする

量が多すぎるデータを俯瞰する

(データ→情報→知見→判断)

Heatmap – 表領域ごとの論理読み込みデータブロックの状況

12

(サンプルコード)

13

13 Step

setwd("<作業用のパスを指定>") # 作業ディレクトリを指定する library(reshape2) # ライブラリの読み込み seg1 <- read.csv("seg.csv") # セッションデータを読み込む seg2 <- melt(seg1, id=c("ROWNUM","BEGIN_INTERVAL_TIME","TABLESPACE_NAME"), na.rm=TRUE) # マトリクス形式にする seg3 <- acast(seg2, seg2[,2]~seg2[,3],value = seg2[,4],fun.aggregate = sum) x <- (1:nrow(seg3)) # 描画時のx軸の値を設定する y <- (1:ncol(seg3)) # 描画時のy軸の値を設定する png("plot01.png") # 出力先を指定 image(x,y,seg3,col=heat.colors(100), xaxt = "n", yaxt = "n", ann=FALSE) # ヒートマップを描画 axis(side=1,labels=c(rownames(seg3)),at=1:nrow(seg3),cex.axis=0.8,las=1) # x軸ラベルの設定 axis(side=2,labels=c(colnames(seg3)),at=1:ncol(seg3),cex.axis=0.8,las=1) # y軸ラベルの設定 title(main="表領域ごとの論理読み込みデータブロックの状況") # タイトルの指定 dev.off() # 出力を終了する

※このサンプルコードは、セグメントレベルの履歴統計情報を、以下のSQLで事前出力しています。 SQL> SELECT ROWNUM||','||BEGIN_INTERVAL_TIME||','||TABLESPACE_NAME||','||datum FROM ( SELECT ss.BEGIN_INTERVAL_TIME, sego.TABLESPACE_NAME, SUM(seg.LOGICAL_READS_DELTA) datum FROM DBA_HIST_SEG_STAT seg, DBA_HIST_SNAPSHOT ss, DBA_HIST_SEG_STAT_OBJ sego WHERE seg.SNAP_ID = ss.SNAP_ID AND seg.DBID = ss.DBID AND seg.INSTANCE_NUMBER = ss.INSTANCE_NUMBER AND seg.DBID = sego.DBID AND seg.TS# = sego.TS# AND seg.OBJ# = sego.OBJ# GROUP BY ss.BEGIN_INTERVAL_TIME, sego.TABLESPACE_NAME ORDER BY ss.BEGIN_INTERVAL_TIME )dhseg;

古典的多次元尺度法 – テクノロジスト探索器

14

(サンプルコード)

15

# (事前準備)スキルマトリクスやレジュメから、個人を特定しないように、技術情報だけを抽出したテキストを作成しておきます。 library (RMeCab) # 日本語形態素解析用ライブラリ library(rgl) # 三次元プロット用ライブラリ sb <- docMatrix(mydir = "/test/doc", minFreq = 2 ) # ドキュメントを読み込み、最低出現頻度2回を抽出する。 sb.p <- sb/apply(sb, 1, sum) # 個別値を行単位に合計したもので割ることで相対値を求める。 sb.ed<-dist(t(sb.p[5:83,])) # dist関数で、距離行列を求める(全データ点同士の距離) sb.mds<-cmdscale(sb.ed, 3) # cmdscale関数で、古典的多次元尺度法により、3次元化する x <- sb.mds[,1] # x値の設定 y <- sb.mds[,2] # y値の設定 z <- sb.mds[,3] # z値の設定 plot3d(x, y, z, type="s", col=rainbow(12), size=4) # 三次元プロット(s指定は、固有値の球体表示) text3d(x, y, z, text=rownames(sb.mds), adj=1, justify="right") # テキストの表示 grid3d(c("x", "y+", "z")) # グリッドの表示

12 Step

Word cloud – Twitterから見えるOpenWorldの状況

16

(サンプルコード)

17

25 Step

# (事前準備)Twitterアプリケーションを作成しておきます。 setwd("<作業ディレクトリを指定>") # 作業ディレクトリの指定 library( twitteR ) # Twitter接続用に、パッケージ「twitteR」を読み込みます consumerKey <- "XXXXX" # Consumer Key をセットします consumerSecret <- "XXXXX" # Consumer Secret をセットします accessToken <- "XXXXX" # Access Token をセットします。 accessTokenSecret <- "XXXXX" # Access Token Secret をセットします setup_twitter_oauth( consumerKey, consumerSecret, accessToken, # R で認可情報を使用するため、 accessTokenSecret ) # setup_twitter_oauth()関数を実行します tweets <- userTimeline( "Oracle", n = 3200) # TwitterのTimelineを取得します sink( file = "tweets.R" ) # 結果をファイル "tweets.R" に書き込みます tweets # 変数「tweets」を表示します sink() # 出力を再びコンソールに切替えます library( RMeCab ) # 日本語テキストの解析用に、パッケージ「RMeCab」を読み込みます twitWord <- RMeCabFreq( "tweets.R" ) # RMeCabFreq()関数で、変数「Tweets」を日本語形態素解析します excludeWord <- read.table( "Exclude.txt", header = T ) # 除外キーワードリストを読み込みます twitWord <- twitWord[twitWord[, 2] == "名詞"& ( twitWord[, 3] == "一般" | twitWord[, 3] == "固有名詞" ),] # 変数「Tweets」を、一般名詞と固有名詞に絞り込みます twitWord <- cbind( twitWord, c(rep(0, times = nrow( twitWord )))) # 変数「twitWord」に、除外用フラグ列を追加します twitWord[na.omit( match( excludeWord$exclude, twitWord$Term )), 5] <- 1 # 除外キーワードリストとマッチするものは除外フラグをオンにします twitWord <- twitWord[ twitWord[,4] > 4 & twitWord[,5] == 0, ] # 頻出度が5回以上の語に絞り込みます library( wordcloud ) # ワードクラウド生成用に、パッケージ「wordcloud」を読み込みます library( RColorBrewer ) # カラーパレット用に、パッケージ「RColorBrewer」を読み込みます wordcloud( twitWord[,1],twitWord[,4], scale = c( 6, 1 ), # ワードクラウドを描画します min.freq = 3, max.words = Inf, random.order = FALSE, rot.per = .05, colors = brewer.pal( 8, "Dark2" ))

アソシエーション分析 – 技術領域ともの

18

(サンプルコード)

19

24 Step

# 初期処理 library(RMeCab) # ライブラリの読み込み library(arules) # ライブラリの読み込み library(arulesViz) # ライブラリの読み込み library(igraph) # ライブラリの読み込み setwd("<作業ディレクトリを指定>") # 作業ディレクトリの指定 output <- "<結果の出力先ファイル>" # 結果出力ファイル exclude <- "<除外したいキーワードを列挙したファイル>" # 除外キーワードリスト e1 <- read.table(exclude, header=T) # 除外キーワードリストの読み込み(恣意的なデータ除外) files <- list.files() # 日報ファイルのリストを取得 for (file.name in files) { # 日報ファイルを繰り返し処理する kekka <- RMeCabFreq( file.name ) # RMeCabによる日報の読み込み buf4 <- kekka[kekka[,2]=="名詞" & kekka[,3]=="固有名詞",] # 名刺と固有名詞のみを抽出 kekka2 <- rbind(buf4) # 対象となる行を追加 kekka2 <- cbind(kekka2, c(rep(0, times=nrow(kekka2)))) # 除外用フラグを追加(5列目) kekka2[na.omit(match(e1[,1], kekka2[,1])), 5] <- 1 # 除外用フラグオン kekka3 <- kekka2[kekka2[,5] == 0,] # 除外しないキーワードを抽出 kekka4 <- t(paste(kekka3[,1], "," )) # キーワード(1列目)を抽出して、csv形式に連結(paste)後に、行列転置(t) write.table(kekka4, output, quote=F, row.names=F, col.names=F, append=T) # 一旦、フラットファイルに出力 } kekka5 <- read.transactions(output,sep=",",rm.duplicates=TRUE) # トランザクションとして読み込む ap<-apriori(kekka5,parameter=list(supp=0.08,maxlen=10,confidence=0.8)) # aprioriによるルール抽出 inspect(head(sort(ap,by="support"),n=100)) # 内容を一部確認 # 前ページのサンプルは、GEXF (Graph Exchange XML Format)に変換して、gephi(オープンなグラフ可視化プラットフォーム)で描画しています。

20

Bayesian network– 新しいリファレンス展開 の兆し

(サンプルコード) # 週報からコンサルタント毎の技術用語を抽出し、CSVファイルを作成。 # その後、エクセル上で、類義語をまとめ、因子となる売上高を追加します。 setwd("working_dir") # 作業ディレクトリ tcList <- "tc_name_dic.txt" # 社員名リスト mailList <- "mail_name_dic.txt" # メール⇔日本語名マッピング用 prodList <- "product.txt" # 社員名リスト library(reshape2) # クロス集計用ライブラリ library(igraph) # グラフ描画用ライブラリ library(RMeCab) # 日本語形態素解析用ライブラリ modeRead <- "r" # ファイル読み込みモード txtFrom <- "^From" # メールアドレス抽出用 txtDmain <- "@oracle.com" # メールアドレス抽出用 txtBig <- "<" # メールアドレス抽出用 txtFreq <- "Freq" # クロス集計用 files <- list.files() # ファイルリスト取得 kekka2 <- data.frame() # 空のデータフレーム作成 tc <- read.table(tcList, header=T) # テクコンメンバの読み込み ml <- read.table(mailList, header=T, sep=",") # メール⇔日本語名マッピング用 pl <- read.table(prodList, header=T) # 製品リストの読み込み for (file.name in files) { # 週報データを読み込む # 名前リスト抽出 kekka <- RMeCabFreq(file.name) # 日本語形態素解析 kekka <- cbind(kekka, FLG=c(rep(0, times=nrow(kekka)))) # 除外用フラグを追加(5列目) kekka <- cbind(kekka, FLG2=c(rep(0, times=nrow(kekka)))) # 除外用フラグを追加(6列目) kekka[na.omit(match(tc[,1], kekka[,1])), 5] <- 1 # テクコンメンバフラグオン kekka[na.omit(match(pl[,1], kekka[,1])), 6] <- 1 # 製品リストフラグオン # メールアドレス抽出(テキスト冒頭にFromを含むもの) awrBuf <- file(file.name, modeRead ) # ファイル読み込み awrTxt <- as.list(readLines(awrBuf)) # テキスト読み込み close(awrBuf) # ファイルクローズ mailBuf <- matrix(awrTxt[grep(txtFrom, awrTxt, perl = TRUE)]) # メールアドレス抽出(テキスト冒頭にFromを含むもの) mailAdr <- matrix(gsub("¥"", "", toupper(sub(txtDmain, "", ifelse(regexpr(txtBig, mailBuf) == -1, substr(mailBuf[,1], 7, nchar(mailBuf)), substr(mailBuf, 7, regexpr(txtBig, mailBuf)-2)))))) # メールアドレス(英字)を日本語氏名に変換する mailAdr2 <- matrix(if(!is.null(grep(mailAdr[1,],ml$empeng))) { ml[grep(mailAdr[1,],ml$empeng),2] } else { mailAdr[1,] }) kekka <- cbind(kekka, NAME=c(rep(mailAdr2, times=nrow(kekka)))) # 氏名を追加(6列目) kekka2 <- rbind(kekka2, kekka[kekka[,6] == 1,]) # 結果をバインドする } kekka3 <- aggregate(kekka2$Freq, list(kekka2$NAME, kekka2$Term), sum) # 週報提出、製品名で、頻出度を集計 kekka4 <- melt(kekka3, value_name=(x)) # クロス集計準備 ksl <- dcast(kekka4, Group.1~Group.2,sum) # Var1とVar2でクロス集計 write.csv(ksl, “BayesNet2014.csv”, append=TRUE) # ファイル出力

# ベイジアンネットワークを作成します library(deal) # ベイジアンネットワーク用ライブラリ setwd("working_dir") # 作業ディレクトリ bayesNet <- "BayesNet2014.csv" # ネットワーク用ファイル bn <- read.table(bayesNet, header=T, sep=",") # データファイル読み込み rownames(bn) <- bn$Name # 行名の変更 bn <- subset(bn[,3:length(bn)]) # 分析対象データの切り出し bn[,1] <- as.factor(bn[,1]) # 分析対象をfactorに変換する。(他はinteger) bn.nw <- network(bn) plot(bn.nw) bn.pr <- jointprior(bn.nw) bn.ln <- learn(bn.nw,bn,bn.pr) bn.nw <- getnetwork(bn.ln) bn.as <- autosearch(bn.nw,bn,bn.pr) plot(getnetwork(bn.as)) print(bn.as)

21

61 Step

22

Graph analysis – 技術領域とヒト

23

(サンプルコード)

setwd(“working_dir”) # 作業ディレクトリ tcList <- “tc_name_dic.txt" # 社員名リスト mailList <- “mail_name_dic.txt" # メール⇔日本語名マッピング用 prodList <- “product.txt" # 社員名リスト library(igraph) # グラフ描画用ライブラリ library(RMeCab) # 日本語形態素解析用ライブラリ modeRead <- "r" # ファイル読み込みモード txtFrom <- "^From" # メールアドレス抽出用 txtDmain <- "@oracle.com" # メールアドレス抽出用 txtBig <- "<" # メールアドレス抽出用 txtFreq <- "Freq" # クロス集計用 files <- list.files() # ファイルリスト取得 kekka2 <- data.frame() # 空のデータフレーム作成 tc <- read.table(tcList, header=T) # メンバリストの読み込み ml <- read.table(mailList, header=T, sep=",") # メール⇔日本語名マッピング用 pl <- read.table(prodList, header=T) # 製品リストの読み込み for (file.name in files) { # 週報データを読み込む # 名前リスト抽出 kekka <- RMeCabFreq(file.name) # 日本語形態素解析 kekka <- cbind(kekka, FLG=c(rep(0, times=nrow(kekka)))) # 除外用フラグを追加(5列目) kekka <- cbind(kekka, FLG2=c(rep(0, times=nrow(kekka)))) # 除外用フラグを追加(6列目) kekka[na.omit(match(tc[,1], kekka[,1])), 5] <- 1 # 対象メンバフラグオン kekka[na.omit(match(pl[,1], kekka[,1])), 6] <- 1 # 製品リストフラグオン # メールアドレス抽出(テキスト冒頭にFromを含むもの) awrBuf <- file(file.name, modeRead ) # ファイル読み込み awrTxt <- as.list(readLines(awrBuf)) # テキスト読み込み close(awrBuf) # ファイルクローズ mailBuf <- matrix(awrTxt[grep(txtFrom, awrTxt, perl = TRUE)]) # メールアドレス抽出(テキスト冒頭にFromを含むもの) mailAdr <- matrix(gsub("¥"", "", toupper(sub(txtDmain, "", ifelse(regexpr(txtBig, mailBuf) == -1, substr(mailBuf[,1], 7, nchar(mailBuf)), substr(mailBuf, 7, regexpr(txtBig, mailBuf)-2)))))) mailAdr2 <- matrix(if(!is.null(grep(mailAdr[1,],ml$empeng))) { ml[grep(mailAdr[1,],ml$empeng),2] } else { mailAdr[1,] }) # メールアドレス(英字)を日本語氏名に変換する kekka <- cbind(kekka, NAME=c(rep(mailAdr2, times=nrow(kekka)))) # 氏名を追加(6列目) kekka2 <- rbind(kekka2, kekka[kekka[,6] == 1,]) # 結果をバインドする }

# 週報提出者、週報出現氏名でグループ化 kekka3 <- aggregate(kekka2$Freq, list(kekka2$NAME, kekka2$Term), sum) # 自分自身へのエッジを削除 kekka4 <- kekka3[substr(kekka3[,1], 1, regexpr(" ", kekka3[,1]) - 1)!=kekka3[,2],] sortlist<-order(kekka4[,2],decreasing = TRUE) fwn<-kekka4[sortlist,] wng<-graph.data.frame(fwn[fwn$x > 5,]) # 頻出度がn回以上を対象とする # 属性の表示の有効化 igraph.options(print.graph.attributes=TRUE) igraph.options(print.vertex.attributes=TRUE) igraph.options(print.edge.attributes=TRUE) V(wng)$color <- rgb(221, 221, 221, maxColorValue=255) # 通常のノードはライトグレー V(wng)$frame.color <- rgb(221, 221, 221, maxColorValue=255) # ノードのフレームもライトグレー # 週報提出メンバを赤色にする V(wng)[V(wng)$name%in%ml$empjp[ml$dept == "DBソリューション部"]]$color <- rgb(255, 0, 102, maxColorValue=255) V(wng)[V(wng)$name%in%ml$empjp[ml$dept == "DBソリューション部"]]$frame.color <- rgb(255, 0, 102, maxColorValue=255) V(wng)$size <- degree(wng) # ノードサイズを次数により決定 E(wng)$weight <- E(wng)$x # 頻出度によって重みを付ける E(wng)[E(wng)$Freq > 10]$weight <- 11 # 10より頻出度の高いものは11にする # グラフの描画 tkplot(wng, layout=layout.fruchterman.reingold, vertex.label=V(wng)$name, vertex.label.color="blue", edge.width=E(wng)$weight*0.05, edge.curved = TRUE, canvas.width=1200, canvas.height=600)

70 Step

注意

• 非構造化データはノイズの塊

–データ分析の視点を明確にしてからデータ収集する

•統計解析の種類を決めるとよい

–現状の把握、因果関係の洞察、今後の予測、のどれか?

–デスクトップ・アナリティクスであれば、「因果関係の洞察」が良い

•情報源や解析手法を明確にする

–完璧な情報ではないが、客観的なデータが存在すること

– これら情報源や手法は明らかにできるし、どの解析も再現できること

•バイアス(偏り)に注意して拙速な断言にならないように!

24

統計解析環境「R」を知ろう

25

急速に利用者が拡大する統計解析環境「R」

26

統計解析環境として爆発的に普及が進む R言語 R言語は、2000年以降急速に普及が進んでいます。また、R言語を利用可能な分析官・技術者を確保しやすくなっています。

http://r4stats.com/articles/popularity/ より引用

統計ソフトウェアのメーリングリスト投稿数の推移

R言語

• R言語は統計解析やグラフ処理を行うためのオープンソースのプログラミング言語とその環境です。 http://www.r-project.org/

• 統計解析・データマイニングの実行環境としてR言語は急速に利用者が拡大しています。

• オープンソースコミュニティから提供される数千ものパッケージによって高い機能拡張性を備えます(CRAN)。

27

R言語の課題と、その解決に向けたアプローチ 広く普及しているR言語を利用しながら、従来のR実行環境が苦手としていた大規模な分析処理を高速に実行することを可能とします。

• 従来のR言語実行環境(R実行環境)は、大量データの処理に課題を抱えています。

– 課題1 : メモリーの制約

• 処理中の一時データを含めてデータをメモリー上に展開して処理を行うため、処理データ量に制限があり、 大規模データの扱いには向いていません。

– 課題 2 : シングル・スレッド処理

• 一般的にシングルスレッド処理のため、大規模処理に向いていません。(結果を得るまで相当な時間を要します)

• Oracle R Enterprise は、R言語を Oracle Database内の処理に変換・実行することで、これらの課題を解決します。

– メモリーの制約を解消します。

• Real Applications Clusterを利用した複数ノードでの分散処理や、必要に応じてDisk上の領域を利用することで、大量データの解析も可能です。

– 分散処理を実現します。

• 複数ノードを利用した分散処理により、大規模な処理も高速に実行可能です。

28

Oracle R Enterprise 概要 大量データ処理を得意とし、「サンプリングデータ」の代わりに「全量データ」を分析することで、より正確なビジネス上の洞察を得ることも可能です。

• R言語で記述された処理をOracle Database内の処理に変換し、DB内部で高速に実行します。

• R言語ツール(Rクライアント)から透過的に Oracle R Enterprise の機能を利用することが可能ですので、 従来からご利用のツールはそのままお使い頂けます。

• 約300個のR関数をDB内処理に透過的に変換します。

• DB内の処理に変換できない処理に関しても、 DBサーバ内で、Rプロセスを起動・実行する仕組みを有しますので、追加機器をご用意いただく必要はありません

Oracle Database In-Memoryとの併用効果

• 集計処理が大量に行われるようなアルゴリズム (例: バスケット分析) では、処理の高速化が望めます。

• 複雑な計算処理が中心のアルゴリズムでは、CPUによる計算処理が中心となるため、Database In-Memoryの効果はさほど望めません。 このような処理では、CPUごとの数値計算ライブラリ(例: Intel MKL)を活用し、高速処理を実現しています。

PUBLIC

29

Oracle R Enterprise アーキテクチャ 大量データ分析の性能性に優れています。なお、DB内処理に変換できない部分もDBサーバ上でRプロセスを実行することで追加の機器が不要です。

R Engine R Engine R Engine Other R packages

Rの処理をDB内の処理に変換・オフロードします。

Oracle R Enterprise packages

R Engine

Oracle R Enterprise packages

SQL R

結果 結果

DB内の処理に変換出来ないものはDBサーバ上でRのプロセスを起動・実行します。

Other R packages

Rクライアント

• RスクリプトをOracle Databaseで実行するようにスクリプトを発行します。

• グラフの描画や処理フローの制御は、通常のRの機能を利用し、クライアント側で実行します。

Oracle Database内部での実行

• Rの関数をSQLに変換して実行します。

• Oracle Databaseの並列実行の仕組みを活用し、大量のデータに対応します。

• Oracle Databaseの持つ統計関数、データマイニング機能を内部的に活用します。

Oracle DatabaseサーバでのR実行

• データベースが複数のRのプロセスをデータベースサーバ上に外部プロセスとして起動しますので、追加機器が不要です。

• SQLやPL/SQLからRのスクリプトを呼び出し可能です。

分析者 DB

Oracle DB サーバ

外部 プロセス

ご参考情報 オラクルユニバーシティ「Oracle R Enterprise エッセンシャルズ」は、これからR言語を活用する方向けに用意された体系的なエントリーモデルの研修です。

• お問い合わせ先: – オラクルユニバーシティ – http://www.oracle.com/jp/education/

– Tel:0120-155-092

• このコースでは、Oracle R Enterprise の活用方法を説明します。OREでは、R 言語の実行環境として Oracle Database を活用することで R 実行エンジンのメモリ制約を解消し、R インタフェースや SQL インタフェースを用いてデータの分析・グラフ化を行う事ができます。講義と演習を通じて膨大なデータセットから ORE を用いて予測モデルを作成する方法を体系的に学習することができます

30

デスクトップアナリティクスをやろう

31

デスクトップアナリティクスは、DBAが注力すべき技術領域のひとつです

データ全体の80%を占めるといわれる非構造化データ

• Systems of Engagement and the Future of Enterprise IT: A Sea Change in Enterprise IT – http://www.aiim.org/futurehistory

–ジェフリー・ムーア(「キャズム」の著者)が2011年に出版したホワイトペーパー

–非構造化データとは、データの入口と出口に障壁のない、any-to-many-to-one で相互にアクセスされるデータ

# 検討事項 構造化データ 非構造化データ

1 フォーカス トランザクション インタラクション

2 ガバナンス コマンド&コントロール

コラボレーション

3 主たる要素 事実、コミットメント

洞察、アイディア

4 与える価値 事実と根拠 発見と対話のための場

5 存続期間 永続的 一時的

6 検索可能性 易しい 難しい

32

構造化データと非構造化データの比較表

デスクトップアナリティクスの奨め

• 近年、日本企業では戦略的なデータの活用が加速化している

• 近い将来、DBAが扱うデータは

、構造化データから非構造化データへ広がりを見せる

• 構造化/非構造化のデータを問わず、データを棚卸できれば、その先にデータ活用が可能に!

33

データの活用度

データの多様さ

R C

C

C

C R R

②データ活用が可能に。

デスクトップアナリティクスは、DBAが注力すべき技術領域のひとつです。

Analytics Data modeling

Structured Data (SoR)

Unstructured Data (SoE)

①データの範囲が広がり、

ご参考情報 書籍「Oracleの現場を効率化する100の技」は、R環境のみならず、データベースを効率化するコンサルタントの技を惜しげもなく公開しています。

• Oracle Databaseには,開発効率を向上したり,運用の問題を解決する機能が豊富に備わっています。本書では,Oracleを知り尽くしたデータベースコンサルタントが豊富な現場経験をもとに100の便利技を紹介します。

• 2015年5月26日発売

• A5判/432ページ

• 定価(本体2,980円+税)

• ISBN 978-4-7741-7332-0

• R環境については6章に記載

34