Recommended
PDF
ビジネス活用事例で学ぶデータサイエンス入門 #6
PDF
PDF
DARM勉強会第3回 (missing data analysis)
PDF
データ解析のための統計モデリング入門3章後半
PPTX
[The Elements of Statistical Learning]Chapter8: Model Inferennce and Averaging
PDF
PPTX
PDF
PDF
データ解析のための統計モデリング入門 6.5章 後半
PDF
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
PDF
PPTX
PDF
第六回「データ解析のための統計モデリング入門」前半
PDF
PDF
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
PDF
統計学における相関分析と仮説検定の基本的な考え方とその実践
PDF
PDF
PPTX
PPTX
forestFloorパッケージを使ったrandomForestの感度分析
PDF
時系列解析の使い方 - TokyoWebMining #17
PPTX
PDF
PDF
PDF
PDF
PDF
PDF
「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#1資料
PPTX
「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#7資料
PDF
「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料
More Related Content
PDF
ビジネス活用事例で学ぶデータサイエンス入門 #6
PDF
PDF
DARM勉強会第3回 (missing data analysis)
PDF
データ解析のための統計モデリング入門3章後半
PPTX
[The Elements of Statistical Learning]Chapter8: Model Inferennce and Averaging
PDF
PPTX
PDF
What's hot
PDF
データ解析のための統計モデリング入門 6.5章 後半
PDF
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
PDF
PPTX
PDF
第六回「データ解析のための統計モデリング入門」前半
PDF
PDF
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
PDF
統計学における相関分析と仮説検定の基本的な考え方とその実践
PDF
PDF
PPTX
PPTX
forestFloorパッケージを使ったrandomForestの感度分析
PDF
時系列解析の使い方 - TokyoWebMining #17
PPTX
PDF
PDF
PDF
PDF
PDF
Viewers also liked
PDF
「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#1資料
PPTX
「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#7資料
PDF
「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料
PDF
DOCX
PDF
「ビジネス活用事例で学ぶ データサイエンス入門」輪読会 #4資料
PDF
Similar to ビジネス活用事例で学ぶデータサイエンス入門 #2
PDF
Tokyor60 r data_science_part1
PPTX
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで
PDF
PDF
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
PDF
PDF
PPT
PDF
PDF
PDF
PDF
20180807_全部見せます、データサイエンティストの仕事
PDF
PDF
PDF
PDF
「データサイエンティスト・ブーム」後の企業におけるデータ分析者像を探る
PDF
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V k-1
PDF
PDF
第9回 大規模データを用いたデータフレーム操作実習(3)
PDF
PDF
ビジネス活用事例で学ぶデータサイエンス入門 #2 1. 2. 自己紹介
しまじろう よう
SIer で SE(金融・情報系)
個人事業主
ソーシャルゲームベンチャーでデータ解析者・PM を担当
現在は不動産仲介プラットフォーム企業で解析基盤周りのお
仕事をしています
C#/Ruby/R/Rails/DB
数学/統計・機械学習/経営/マーケティング
※中小企業診断士を取得予定
Twitter: you_s1025
2
3. 4. 5. 前処理
DAU
log_date app_name user_id
2013-08-01 game-01 33754
2013-08-01 game-01 28598
2013-08-01 game-01 30306
# csv の読込
dau <- read.csv("DL76333/R/section4-dau.csv", header=T, stringsAsFactor=T)
user_info <- read.csv("DL76333/R/section4-user_info.csv", header=T, stringsAsFactors=T)
UserInfo
install_date app_name user_id gender generation device_type
2013-08-01 game-01 33754 M 20 iOS
2013-07-16 game-01 28598 M 50 iOS
2013-07-20 game-01 30306 F 30 iOS
# 2テーブルの結合
dau.user.info <- merge(dau, user.info, by=c("user_id", "app_name"))
# 月の情報を追加
dau.user.info$log_month <- substr(dau.user.info$log_date, 1, 7)
DAU-UserInfo
user_id app_name log_date install_date gender generation device_type log_month
33754 game-01 2013-08-01 2013-08-01 M 20 iOS 2013-08
28598 game-01 2013-08-01 2013-07-16 M 50 iOS 2013-08
30306 game-01 2013-08-01 2013-07-20 F 30 iOS 2013-08
5
6. 属性別分析: 性別
# 1-1. 性別で分類
tbl.gender <- table(dau.user.info[, c("log_month", "gender")])
barplot(tbl.gender) # 棒グラフをプロット
# 1-2. 軸の入れ替え
t(tbl.gender)
barplot(t(tbl.gender))
# 1-3. 100分率の積み上げグラフで確認
t(sweep(tbl.gender, 1, rowSums(tbl.gender), "/") * 100)
barplot(t(sweep(tbl.gender, 1, rowSums(tbl.gender), "/") * 100))
性別ごとの推移(8月 9月)以外でも確認
※t (転置)関数でデータの縦と横を入れ替える
月ごとの絶対値では分かりづらい?
sweep/rowSums 関数で各列と行の総和との比を計算
問題が無い事を確認
※sweep, rowSums 関数については補足を参照
6
7. 属性別分析: 年代
# 2-1. 年代で分類
tbl.generation <- table(dau.user.info[, c("log_month", "generation")])
barplot(tbl.generation)
# 2-2. 軸の入れ替え
t(tbl.generation)
barplot(t(tbl.generation))
# 2-3. 100分率の積み上げグラフで確認
t(sweep(tbl.generation, 1, rowSums(tbl.generation), "/") * 100)
barplot(t(sweep(tbl.generation, 1, rowSums(tbl.generation), "/") * 100))
年代ごとの推移(8月 9月)以外でも確認
※t (転置)関数でデータの縦と横を入れ替える
月ごとの絶対値では分かりづらい?
sweep/rowSums 関数で各列と行の総和との比を計算
問題が無い事を確認
7
8. 属性別分析: 性別 x 年代
# 3-1. 年代で分類
dcst.gender_generation <- dcast(dau.user.info,log_month gender+generation,
value.var="user_id", length)
barplot(as.matrix(dcst.gender_generation[, -1]))
# 3-2. 軸の入れ替え
t(as.matrix(dcst.gender_generation[, -1]))
barplot(t(as.matrix(dcst.gender_generation[, -1])))
# 3-3. 100分率の積み上げグラフで確認
t(sweep(dcst.gender_generation[, -1], 1,
rowSums(dcst.gender_generation[, -1]), "/") * 100)
barplot(t(sweep(dcst.gender_generation[, -1], 1,
rowSums(dcst.gender_generation[, -1]), "/") * 100))
性別x年代ごとの推移(8月 9月)以外でも確認
sweep/rowSums 関数で各列と行の総和との比を計算
問題が無い事を確認
※t (転置)関数でデータの縦と横を入れ替える
月ごとの絶対値では分かりづらい?
8
9. 属性別分析: デバイス
# 4-1. デバイスで分類
tbl.device <- table(dau.user.info[, c("log_month", "device_type")])
barplot(tbl.device)
# 4-2. 軸の入れ替え
t(tbl.device)
barplot(t(tbl.device))
# 4-3. 100分率の積み上げグラフで確認
t(sweep(tbl.device, 1, rowSums(tbl.device), "/") * 100)
barplot(t(sweep(tbl.device, 1, rowSums(tbl.device), "/") * 100))
デバイスごとの推移(8月 9月)以外でも確認
※t (転置)関数でデータの縦と横を入れ替える
月ごとの絶対値では分かりづらい?
sweep/rowSums 関数で各列と行の総和との比を計算
9月の比率が明らかに8月と異なる
9
10. 属性別分析: デバイス > 日次 UU 推移
# 日付xデバイス の単位でユーザ数を算出
dau.user.info.device.summary <- ddply(dau.user.info, .(log_date, device_type), summarize, dau=length(user_id))
# log_date を日付型へ変換
dau.user.info.device.summary$log_date <- as.Date(dau.user.info.device.summary$log_date)
# 折れ線グラフの描画
ggplot(dau.user.info.device.summary, aes(x=log_date, y=dau, col=device_type, lty=device_type, shape=device_type)) +
geom_line(lwd=1) +
geom_point(size=4) +
scale_y_continuous(label=comma, limits=c(0, max(dau.user.info.device.summary$dau)))
Android の減
少が原因
これまでの分析で Android に問題が
ありそうな事が分かってきたので本
当に9月に問題が発生しているのか
を日次 UU の推移で確認
9月の2週辺りから明らかに減少
10
11. 12. 補足: sweep 関数
12
sweep(x, MARGIN, STATS, FUN= - )
• x: データ
• MARGIN: STATS を適用する方向 1:列 / 2:行
• STATS: 適用する統計量
• FUN: 演算子 or 関数 ※デフォルトは - (減算)
データと統計量との演算を行/列ごとに実施
# 3x5行列を生成
A <- matrix(1:15, 3)
# 各行を1サンプルとする偏差の算出
sweep(A, 1, apply(A, 1, mean))
# 各列の総和に対する比率の算出 ※列ごとに値の合計値が100(%)になる
sweep(A, 2, colSums(A), "/") * 100
13. 補足: rowSums/colSums 関数
13
各行(列)ごとに総和を算出
rowSums(x) / colSums(x)
• x: データ
# 3x5行列を生成
(A <- matrix(1:15, 3))
[,1] [,2] [,3] [,4] [,5]
[1,] 1 4 7 10 13
[2,] 2 5 8 11 14
[3,] 3 6 9 12 15
# 行/列 ごとの総和を計算
[1] 6 15 24 33 42rowSums(A) #=> [1] 35 40 45
colSums(A) #=> [1] 6 15 24 33 42
14. 補足: merge 関数①
14
2つのデータを結合する
merge(x, y, by, all)
• x: データ1
• y: データ2
• by: 結合に用いる項目(キー)名を配列で指定
• by.x: x 側で用いる結合のキーを指定 ※x, y 側で項目名が異なる場合に使用
• by.y: y 側で用いる結合のキーを指定 ※x, y 側で項目名が異なる場合に使用
• by: x, y 共に指定された結合のキーを用いる
• all: 結合する際に主軸とするデータ(x, y)を指定
• all.x=TRUE x に y を紐付ける ※左外部結合に相当
• all.y=TRUE y に x を紐付ける ※右外部結合に相当
• all=T x, y の両方が主軸になる ※両側外部結合に相当
※指定しない場合は内部結合に相当
# データの準備
x <- data.frame(id=1:5, value=seq(10, 50, 10))
y <- data.frame(key=4:8, score=seq(400, 800, 100))
x
id value
1 10
2 20
3 30
4 40
5 50
y
key scoer
4 400
5 500
6 600
7 700
8 800
15. 補足: merge 関数②
15
y
x
#内部結合: 合致する行だけが残る
merge(x, y, by.x= id , by.y= key )
id value score
4 40 400
5 50 500
#左外部結合: x の側だけ全て残る
merge(x, y, by.x= id , by.y= key , all.x=T)
id value score
1 10 NA
2 20 NA
3 30 NA
4 40 400
5 50 500
#両側外部結合: x, y の両方とも全て残る
merge(x, y, by.x= id , by.y= key , all=T)
id value score
1 10 NA
2 20 NA
3 30 NA
4 40 400
5 50 500
6 NA 600
7 NA 700
8 NA 800
#右外部結合: y の側だけ全て残る
merge(x, y, by.x= id , by.y= key , all.y=T)
id value score
4 40 400
5 50 500
6 NA 600
7 NA 700
8 NA 500
T
T
F
F