8時くらいの防衛省周辺の様子。いつもは左の方に見えるスカイツリーも雪で見えない。
データ分析に関する備忘録。主にR言語を使ったデータの前処理や統計、機械学習などの方法を記録。ビッククエリとトレジャーデータがお気に入り。オフラインとオンラインの連携が最近のマイブーム。
注目の投稿
【kepler.gl】コロナ対策による人流の変化も地図上に可視化(各種メディアで報道)
kepler.glのサイト画面 kepler.glを使ってコロナ対策の効果を分析したところ、テレビ、新聞、ネットのメディアから問い合わせや報道依頼が殺到。今も、土日返上で都内や全国の人流変化を分析しています。この記事では人流変化の可視化に便利なkepler.glにつ...
2016年11月24日木曜日
2016年11月16日水曜日
【トレジャーデータ】データベース名が数字の場合(sql:presto)
データベース名の先頭が数字の場合通常ならエラーとなるが、""でDB名を囲むことでエラー回避できる。
例
FROM
"1_db". tb
例
FROM
"1_db". tb
ラベル:
presto
,
SQL
,
Treasure Data
,
トレジャーデータ
2016年11月8日火曜日
【R】data.tableとdplyrの内容が良くまとまっているページ
Rで大規模データの処理をするには、data.tableとdplyrが必須です。
下記のページは、その内容が簡潔にまとめられていて非常に参考になります。
大規模データの高速処理 ーdata.table、dplyrー
http://kohske.github.io/ESTRELA/201410/index.html
特に、他のサイトではあまり紹介されていないキーの設定の説明があるところ良いです。
setkey(dt, key)
d: データテーブル
key: キーとなるカラム名
これだけでデータ集計が高速に!
下記のページは、その内容が簡潔にまとめられていて非常に参考になります。
大規模データの高速処理 ーdata.table、dplyrー
http://kohske.github.io/ESTRELA/201410/index.html
特に、他のサイトではあまり紹介されていないキーの設定の説明があるところ良いです。
setkey(dt, key)
d: データテーブル
key: キーとなるカラム名
これだけでデータ集計が高速に!
ラベル:
data.table
,
dplyr
,
R
,
データ処理
,
大規模データ
2016年10月31日月曜日
2016年10月28日金曜日
【トレジャーデータ】先頭のバックスペース(\b)を除去(regexp_replace)
TDに溜まっているデータから記事別UUを集計しgs(google spreadsheet)にデータをアップロードしたところ下記のエラーが出てしまった。
An invalid XML character (Unicode: 0x8) was found in the value of attribute "inputValue" and element is "gs:cell"
結論から言うと、記事タイトルの先頭にバックスペースが紛れ込んでたレコードが一部あり、これが原因でエラーが出ていた(原因解明にTDのサポートが大変参考になった!)。
修正部分抜粋↓
) SELECT
メモ
本件で参考になるサイト
てか、そもそも何で記事タイトルにバックスペースが紛れ込んでいるんだろう??
An invalid XML character (Unicode: 0x8) was found in the value of attribute "inputValue" and element is "gs:cell"
結論から言うと、記事タイトルの先頭にバックスペースが紛れ込んでたレコードが一部あり、これが原因でエラーが出ていた(原因解明にTDのサポートが大変参考になった!)。
修正部分抜粋↓
) SELECT
-- yesterday.title, --記事タイトルをそのままセレクトすると\bが紛れているのでエラー
-- ltrim(yesterday.title), --空白除去。当初は先頭文字の空白が原因かと考えたが違っていた
regexp_replace(yesterday.title, '[\b]') as title, --これで成功
メモ
- regexp_replace(column, '[\b]') --バックスペースを除去
- regexp_like(column,'^[\b]') --バックスペースがあるレコードを特定
本件で参考になるサイト
てか、そもそも何で記事タイトルにバックスペースが紛れ込んでいるんだろう??
ラベル:
\b
,
Google Spreadsheet
,
regexp_like
,
regexp_replace
,
Treasure Data
,
トレジャーデータ
,
バックスペース
2016年10月27日木曜日
【トレジャーデータ】記事別DAU階級推移(SQL:case文を使う)
閲覧記事のDAUの構造的変化を把握したいときは、各記事をDAU階級*に分けてその変化を見る方法があります。
*DAU階級例
階級分けはkmeans等を使う場合が多いですが、複数のPJやメディア等を横串で評価する場合は定性評価で統一基準を設けても良いです(と思っています)。
実際には、下記のような集計をおこない階級別の推移を見て、施策の効果や現状の課題等を把握します。
具体的なSQLの例は下記となります。
データ名:data(すでに各記事のdauを集計済)
データ構造:date_time(yyyy-MM-dd), page_name(記事の名前), dau
補足:集計は度数分布表やヒストグラム作成に用いるcase文を利用
SELECT
date_time,
SUM(CASE
WHEN dau >= 10001 THEN dau END) AS A_dau,
SUM(CASE
WHEN dau >= 5001 AND dau < 10000 THEN dau END) AS B_dau,
SUM(CASE
WHEN dau >= 1001 AND dau < 5000 THEN dau END) AS C_dau,
SUM(CASE
WHEN dau >= 101 AND dau < 1000 THEN dau END) AS D_dau,
SUM(CASE
WHEN dau >= 1 AND dau < 100 THEN dau END) AS E_dau
FROM
data
WHERE
--自動集計するためのコード
TD_TIME_RANGE(TD_TIME_PARSE(date_time),
TD_TIME_ADD(TD_SCHEDULED_TIME(),
'-7d'), --7日分のデータを集計
TD_SCHEDULED_TIME(),
'jst')
GROUP BY
date_time
ORDER BY
date_time
今回は各記事のDAUを集計していますが、
THEN dau END → THEN 1 else 0 END
とすることで階級別の記事数を集計できます。
*DAU階級例
| 階級 | UU数(dau) |
| A | 10001~ |
| B | 5001~10000 |
| C | 1001~5000 |
| D | 101~1000 |
| E | 1~100 |
階級分けはkmeans等を使う場合が多いですが、複数のPJやメディア等を横串で評価する場合は定性評価で統一基準を設けても良いです(と思っています)。
実際には、下記のような集計をおこない階級別の推移を見て、施策の効果や現状の課題等を把握します。
| date_time | A_dau | B_dau | C_dau | D_dau | E_dau |
| 2016-10-20 | ? | ? | ? | ? | ? |
| 2016-10-21 | ? | ? | ? | ? | ? |
| 2016-10-22 | ? | ? | ? | ? | ? |
| 2016-10-23 | ? | ? | ? | ? | ? |
| 2016-10-24 | ? | ? | ? | ? | ? |
| 2016-10-25 | ? | ? | ? | ? | ? |
| 2016-10-26 | ? | ? | ? | ? | ? |
具体的なSQLの例は下記となります。
データ名:data(すでに各記事のdauを集計済)
データ構造:date_time(yyyy-MM-dd), page_name(記事の名前), dau
補足:集計は度数分布表やヒストグラム作成に用いるcase文を利用
SELECT
date_time,
SUM(CASE
WHEN dau >= 10001 THEN dau END) AS A_dau,
SUM(CASE
WHEN dau >= 5001 AND dau < 10000 THEN dau END) AS B_dau,
SUM(CASE
WHEN dau >= 1001 AND dau < 5000 THEN dau END) AS C_dau,
SUM(CASE
WHEN dau >= 101 AND dau < 1000 THEN dau END) AS D_dau,
SUM(CASE
WHEN dau >= 1 AND dau < 100 THEN dau END) AS E_dau
FROM
data
WHERE
--自動集計するためのコード
TD_TIME_RANGE(TD_TIME_PARSE(date_time),
TD_TIME_ADD(TD_SCHEDULED_TIME(),
'-7d'), --7日分のデータを集計
TD_SCHEDULED_TIME(),
'jst')
GROUP BY
date_time
ORDER BY
date_time
今回は各記事のDAUを集計していますが、
THEN dau END → THEN 1 else 0 END
とすることで階級別の記事数を集計できます。
登録:
投稿
(
Atom
)