読者です 読者をやめる 読者になる 読者になる

遊覧飛行ーワインとゲームー

都内某所で働くゲームクリエイターのブログ。ゲームやビジネスに関する話題、シリアスゲームの紹介、作成したゲームの公開、ワインに関する記事など徒然なるままに書き記していきます。

SQLを学ぶ上で参考になったものまとめ

自分が SQL を勉強する上で約に立ったサービスや本を紹介します。

業務上 SQL を使うことが多いのですが、基本的なスキルは以下からちゃんと吸収すればしっかり身に着けることができるので、ぜひ参考にしてみてください。

 

ネット情報

まずは ドットインストール

まずはおなじみのドットインストール。
動画を使って、楽しく基礎の基礎を学ぶことができるため、最初のとっかかりとしてはすごくオススメです。

MySQLとPostgreSQLのほかに、SQLiteなんかもあった気がします。

 

MySQL初心者講座

ドットインストールの次に、復習もかねてこのサイトで勉強すれば、さらに基礎の定着が図れること間違いなし!

mysqlweb.net

 

練習問題

練習問題としては、このサイトに掲載されている問題を解きまくれば、さらに腕を磨くことができるでしょう。

テーブルの結合を結構使うことになるので、それまわりの練習にも最適です。

 

書籍

脱初級テキスト

とりあえずネットで基礎を学んだうえで、このテキストの内容を読み進めていくと飛躍的に実力が向上するでしょう。

実際の業務でも使用するようなテクニックはもちろん、DBに関する理論的な話や深い裏話なんかも載っているため、単純に読み物としても学ぶところが多いです。

なるべく標準SQLを使おうというスタイルのため、特定の方言に偏った内容ではありません。

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)

 

 

分析系

分析系で参考にするならこのテキストかと。

PostgreSQLを使用した本で、特に WIndow関数あたりは分析を行っていくうえで自由自在に使えるようになったおく必要があります。

現場でも使えるような分析系の集計が主なため、これから分析に挑戦してみようという方は必見ですね。

10年戦えるデータ分析入門 SQLを武器にデータ活用時代を生き抜く (Informatics &IDEA)

10年戦えるデータ分析入門 SQLを武器にデータ活用時代を生き抜く (Informatics &IDEA)

 

 

その他オススメ記事 

yuranhiko.hatenablog.com

yuranhiko.hatenablog.com

yuranhiko.hatenablog.com

yuranhiko.hatenablog.com

MySQLメモーDAU、課金UU、課金率の集計ー

MySQLを使ってDAU、課金UU、課金率を表示する方法のメモ。

 

使用するテーブル

サンプル用の仮テーブルとして、以下のようなものを想定します。

access_log

f:id:ngyope:20160908231832j:plain

  • d:アクセスした日時
  • access_time:アクセスした時間
  • uid:アクセスしたユーザーのID

 

spend_money_log

f:id:ngyope:20160908231834j:plain

  • d:課金した日時
  • t:課金した時間
  • uid:課金したユーザーのID
  • amount:課金額

 

DAU、課金UU、課金率の集計

MySQLのクエリ

SELECT
accesst.d AS date,
COUNT(DISTINCT accesst.uid) AS dau,
COUNT(DISTINCT moneyt.uid) AS puu,
ROUND(COUNT(DISTINCT moneyt.uid)
/ COUNT(DISTINCT accesst.uid), 2) AS p_rate
FROM
access_log accesst
LEFT OUTER JOIN
spend_money_log moneyt
ON
accesst.d = moneyt.d
GROUP BY
date
ORDER BY
date
;

 

  • まず、access_log と spend_money_log を d(日時)で join
  • DAU:access_log から、日別に DISTINCT で uid を集計
  • 課金UU:spend_money_log から、日別に DISTINCT で uid を集計
  • 課金率:課金UU ÷ DAU

 

集計結果

f:id:ngyope:20160908233542j:plain

R の caret パッケージメモ~train:caret 決定木~

R で "caret" パッケージを使用する際の備忘録です。
今回は "train関数" を使用して決定木の構築を行います。

 

使用するデータ

使用するデータは一般化線形モデルの際にも使用した "Titanic" です。
沈没したタイタニック号の生存者数を「性別」「年齢」「等級」ごとに分類したデータです。

 

データの下準備

データの下準備は、一般化線形モデルを構築した際と同じです。

テーブルを変換する "expand.table関数" を使用しています。

> install.packages("caret")
> library(caret)
> install.packages("epitools") #テーブル変換関数のパッケージ
> library(epitools)

> Titanic1 <- expand.table(Titanic) #テーブル変換
> head(Titanic1)
Class Sex Age Survived
1 1st Male Child Yes
2 1st Male Child Yes
3 1st Male Child Yes
4 1st Male Child Yes
5 1st Male Child Yes
6 1st Male Adult No

 

train関数で rpart を実行

決定木を構築するアルゴリズムには CHAID, C4.5 / C5.0 / See5, CART など様々ありますが、ここでは CART を採用します。
CART で決定木を構築するメソッドは "rpart" です。

> titanic.rp <- train(
data = Titanic1,
Survived ~ Sex + Age + Class,
method = "rpart",)
<以下省略>

 

"rpart" では木の複雑度である "cp" をもとに木をコントロールすることができます。
"train関数" を使った場合は Accuracy に基づいて最も適切な cp を探索し、その最適値で最終的なモデルを出力します。

> titanic.rp
CART

2201 samples
3 predictor
2 classes: 'No', 'Yes'

No pre-processing
Resampling: Bootstrapped (25 reps)
Summary of sample sizes: 2201, 2201, 2201, 2201, 2201, 2201, ...
Resampling results across tuning parameters:

cp Accuracy Kappa
0.01125176 0.7822764 0.4195169
0.02250352 0.7769538 0.4161458
0.30661041 0.7189166 0.1863290

Accuracy was used to select the optimal model using the largest value.
The final value used for the model was cp = 0.01125176.
data = Titanic1,
Survived ~ Sex + Age + Class,
method = "rpart",)

 

 "summary関数" を用いれば、モデルに関して様々な情報を確認することができます。

> summary(titanic.rp)
<以下省略>

 

決定木のプロット

最終的な木のモデルは x$finalModel に格納されています。
ここでは "fancyRpartPlot関数" を用いて木のプロットを行います。

> library(rattle)
> fancyRpartPlot(titanic.rp$finalModel)

 

f:id:ngyope:20160830124513j:plain

R の caret パッケージメモ~train:caret 一般化線形モデル~

R で "caret" パッケージを使用する際の備忘録です。
今回は "train関数" を使用して一般化線形モデルで回帰分析を行います。

 

使用するデータ

使用するデータは "Titanic" です。
沈没したタイタニック号の生存者数を「性別」「年齢」「等級」ごとに分類したデータです。

 

データの下準備

いつも通り、"caret" パッケージをライブラリ化します。

また、"Titanic" のデータはそのままでは使いづらいため、テーブル変換用の関数を使って使いやすい形に変換します。

> install.packages("caret")
> library(caret)
> install.packages("epitools") #テーブル変換関数のパッケージ
> library(epitools)

> Titanic1 <- expand.table(Titanic) #テーブル変換
> head(Titanic1)
Class Sex Age Survived
1 1st Male Child Yes
2 1st Male Child Yes
3 1st Male Child Yes
4 1st Male Child Yes
5 1st Male Child Yes
6 1st Male Adult No

 

train関数でglmを実行

一般化線形モデルを指定するメソッドは "glm" です。
一般化線形モデルはパラメータ調整が必要ないため、コードは以下の通りとなります。
ロジスティック回帰分析を行うため、family は「二項分布 "binomial()"」を指定します。

titanic.glm <- train(
data = Titanic1,
Survived ~ Sex + Age + Class,
method = "glm",
family = binomial())
<以下省略>

 

Accuracy は約78%ということでボチボチかなと思います。

> titanic.glm
Generalized Linear Model
2201 samples
3 predictor
2 classes: 'No', 'Yes'
No pre-processing
Resampling: Bootstrapped (25 reps)
Summary of sample sizes: 2201, 2201, 2201, 2201, 2201, 2201, ...
Resampling results:
Accuracy Kappa
0.7772942 0.4447814

 

summary関数を使ったあとは、普通の glm関数と同じですね。

> summary(titanic.glm)
Call:
NULL
Deviance Residuals: 
Min 1Q Median 3Q Max 
-2.0812 -0.7149 -0.6656 0.6858 2.1278
Coefficients:
Estimate Std. Error z value Pr(>|z|) 
(Intercept) 0.6853 0.2730 2.510 0.0121 * 
SexFemale 2.4201 0.1404 17.236 < 2e-16 ***
AgeAdult -1.0615 0.2440 -4.350 1.36e-05 ***
Class2nd -1.0181 0.1960 -5.194 2.05e-07 ***
Class3rd -1.7778 0.1716 -10.362 < 2e-16 ***
ClassCrew -0.8577 0.1573 -5.451 5.00e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 2769.5 on 2200 degrees of freedom
Residual deviance: 2210.1 on 2195 degrees of freedom
AIC: 2222.1
Number of Fisher Scoring iterations: 4

 

メソッドで "glmStepAIC" を選択する

メソッドで "glmStepAIC" を選択すると、AIC (赤池情報量規準) に基づいて変数選択を行い、最適なモデルを構築してくれるので便利です。

titanic.glm <- train(
data = Titanic1,
Survived ~ Sex + Age + Class,
method = "glmStepAIC", #AICに基づきモデル構築
family = binomial())
<以下省略>

R の caret パッケージメモ~train:caret 線形回帰~

R で "caret" パッケージを使い始めたので、その備忘録です。
まずは、線形回帰分析 (lm) の仕方をメモ。

 

最初に、"caret" パッケージをインストール。
"caret" をライブラリ化すると、合わせて "lattice", "ggplot2" もロードされます。 

> install.pachages("caret")

> library(caret)

  

今回は、車が停滞するまでに必要な距離(速度別)のデータである "cars" を使用します。
※余談ですが、このデータは 1920年代に測定されたものだそうです。

> dim(cars)
[1] 50 2


> head(cars)
   speed  dist
1        4      2
2        4    10
3        7      4
4        7    22
5        8    16
6        9    10

 

 

モデル構築を行うには "train関数" を使用します。

> cars.lm <- train(

 + data = cars,        # 元となるデータを選択

 + dist ~ .,               # 結果変数と説明変数を選択

 + method = "lm")   # モデル選択。線形回帰は "lm"

  

モデルの評価は "RMSE" の値を確認します。
この値が小さいほど、モデルの性能がいいことを示します。

> cars.lm
Linear Regression

50 samples
1 predictor

No pre-processing
Resampling: Bootstrapped (25 reps)
Summary of sample sizes: 50, 50, 50, 50, 50, 50, ...
Resampling results:

RMSE Rsquared
15.16135 0.6679958

Tuning parameter 'intercept' was held constant at a value of TRUE

 

cars.lm のサマリーを表示。ここは普通に lm関数を使った時と同じかと。

> summary(cars.lm)

Call:
lm(formula = .outcome ~ ., data = dat)

Residuals:
Min 1Q Median 3Q Max
-29.069 -9.525 -2.272 9.215 43.201

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -17.5791 6.7584 -2.601 0.0123 *
speed 3.9324 0.4155 9.464 1.49e-12 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 15.38 on 48 degrees of freedom
Multiple R-squared: 0.6511, Adjusted R-squared: 0.6438
F-statistic: 89.57 on 1 and 48 DF, p-value: 1.49e-12

 

散布図に回帰直線を引く際は "lattice" パッケージ中の "xyplot関数" を使用します。
"lattice" パッケージは "caret" をロードする際に合わせてロードされます。

> xyplot(dist ~ speed, data = cars, type = c("p", "r"), col.line = "red",
+ main = "speed x dist (cars)")

 

f:id:ngyope:20160829235947j:plain

魚介のカルパッチョに合う安旨白ワイン~エヴォディア 白~

エヴォディア白

出典:Yahoo! ショッピング

人気ワインマンガ『神の雫』で紹介されたことがあるスペインワイン「エヴォディア」。1,000円台という安さにもかかわらず、パーカー・ポイントで89点をたたき出したまさに「安旨ワイン」です。アーティスティックな流線形が描かれたラベルが特徴的ですね。

以前は赤ワインしかなかったようですが、どうやら日本限定で白ワインの販売も行っているらしく、「それなら買うしかないだろう!」と即決で購入したのがこの「エヴォディア 白」。今回は、このワインの紹介です。 

エヴォディア 白 750ml

エヴォディア 白 750ml

出版社/メーカー: 日本酒類販売
メディア: 食品&飲料
この商品を含むブログを見る
 

 

続きを読む

【書籍紹介】Web系サービスの企画者必読!ユーザー定着率を高める4つのステップ

Webサービス企画のノウハウ

出典:GATAG 

他者の決断や行動に影響を与え、習慣的な行動を作り上げるにはどうすればいいか?……良いプロダクトなのになかなか使ってもらえない、グロースハックを駆使しているのにユーザーが定着しない、そのような悩みを持った企画者、開発者にお勧めします。

 出典:本書裏表紙

継続的にサービスを使ってくれるユーザーの存在は、Webサービスやそれに類似するサービスを安定的に運営するうえで非常に強固な基盤となるのは言わずもがな。

ですが、思ったほどユーザーの継続率が伸びない、なかなか新規が定着しない……といった悩みを抱え、日々どうすればユーザーが定着してくれるのかに頭を悩ませている企画者、運営スタッフも少なくはないはずです。

今回紹介する『Hooked ハマるしかけ 使われつづけるサービスを生み出す[心理学]x[デザイン]の新ルール』は、そんな悩みを抱えている人に1つのヒントを提供してくれるような本です。 

Hooked ハマるしかけ 使われつづけるサービスを生み出す[心理学]×[デザイン]の新ルール

Hooked ハマるしかけ 使われつづけるサービスを生み出す[心理学]×[デザイン]の新ルール

作者: ニール・イヤール,ライアン・フーバー,Hooked翻訳チーム,金山裕樹,高橋雄介,山田案稜,TNB編集部
出版社/メーカー: 翔泳社
>発売日: 2014/05/23
メディア: 単行本(ソフトカバー)
この商品を含むブログ (3件) を見る
 
続きを読む