2017年7月19日水曜日

R "rbindlist(l, use.names, fill, idcol) でエラー: "の解決法

もし、rbindを実行し下記のエラーとなったら(rbindとは)、

>  dt.log <- rbind(dt.log,dt.log_2)
 
 Show Traceback

 Rerun with Debug
 rbindlist(l, use.names, fill, idcol) でエラー:
  Class attributes at column 10 of input list at position 2 does not match with column 10 of input list at position 1. Coercion of objects of class 'factor' alone is handled internally by rbind/rbindlist at the moment.


↓連結したいデータをdata.frameで読み込むと解決

>  dt.log <- rbind(data.frame(dt.log),data.frame(dt.log_2))
>
 


今回のエラーは、連結したいデータがdata.tableでデータ量が多い(100万レコード以上くらい)ときに起きがち


2017年7月5日水曜日

【ドコモ本気出した】dデリバリー大感謝祭

全員に3900ポイントもすごいけど、39万円でポインコ確定も異次元すぎる


ほかのキャンペーンも併用すると何ポイントになるんだろう

ドコモ本気出したな


2017年7月3日月曜日

R write関数で何ができたっけ?

Rでファイルを出力する際、「あれ、行番号を削除する命令なんだっけ?」とか、「引用符(”:ダブルクオーテーションマーク)を外すのはどうするんだっけ?」とかついど忘れしがち。

そんなときは、Rのマニュアルを見てみよう!
なるほど、行番号はrow.names、引用符はquoteだな。ふむふむ。。

write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ",
            eol = "\n", na = "NA", dec = ".", row.names = TRUE,
            col.names = TRUE, qmethod = c("escape", "double"),
            fileEncoding = "")

write.csv(...)
write.csv2(...)

詳細は参考サイトにて

参考サイト


2017年6月24日土曜日

【R】 ‘Rcpp’ という名前のパッケージはありません

新しいPCを購入し、早速、RとRStudioをインストール。

dplyrをインストールして、いろいろ分析しようと思ったら、

  • ‘Rcpp’ という名前のパッケージはありません

というエラー!あれっ?

結局、McAfeeを停止したら解決。

マカフィー。。。

ちなみに、マカフィーの停止方法は、
富士通のQAがわかりやすい。




2017年6月10日土曜日

【R】日付から曜日を簡単に取得する方法

議員会館内(本文に関係なし)

◇あらすじ

久しぶりの投稿。転職後、仕事が忙しすぎて趣味で分析する気が全くわかず、完全にブログを放置。しかし、最近、仕事で売り上げの予測モデルを構築することがあり、これが(不確定要素や未知の変数が多そうな割に)結構良い感じの精度だった。それが契機となり、(学生の頃、半年後の為替を予測するコンテストで全国2位になった経験を活かしつつ?)株価の予測モデルを考えてみたくなってきた。ただ、モデル構築にはデータが必要。説明変数もなるべく多くあった方が良い。幸い日時の株価のデータはググれば簡単に手に入る。しかし、当然ながら欲しいデータがない場合もある。例えば、曜日とか(株価予測にどれくらい影響あるかはまだ調べてないけど)。。ただ、曜日についは日付データがあればRで簡単に取得できることが分かったので、その方法をご紹介。

◇ここから本題

目的:日付から曜日を取得
方法:weekdays(dt.data$time)
補足:株価データの取得先(http://k-db.com/stocks/

・方法

> #データを読み込む
> dt.data <- read.csv(file("stocks_8411-T_1d_2017.csv",encoding = 'cp932'))
>
> #一部データの表示(こんなデータ)
> head(dt.data)
        日付  始値  高値  安値  終値    出来高    売買代金
1 2017-06-09 198.9 200.4 198.1 199.7 156941400 31296039870
2 2017-06-08 198.3 200.5 197.2 197.4 173075000 34342113170
3 2017-06-07 196.0 197.7 195.2 197.0 105695500 20771395690
4 2017-06-06 197.0 198.6 196.3 196.7  99978900 19742685840
5 2017-06-05 197.6 197.9 196.4 197.0 106257500 20945506730
6 2017-06-02 195.1 200.9 195.0 200.1 175604300 34933279840
>
> #日付をオブジェクト化しないとエラーが出る
> weekdays(dt.data$日付)
 UseMethod("weekdays") でエラー:
   'weekdays' をクラス "factor" のオブジェクトに適用できるようなメソッドがありません
>
> #日付をas.POSIXltでオブジェクト化(as.DATEでも良い)
> dt.data$time <- as.POSIXlt(dt.data$日付, format="%Y-%m-%d")
>
> #曜日を取得
> dt.data$weekdays <- weekdays(dt.data$time)
>
> #結果
> head(dt.data)
        日付  始値  高値  安値  終値    出来高    売買代金       time weekdays
1 2017-06-09 198.9 200.4 198.1 199.7 156941400 31296039870 2017-06-09   金曜日
2 2017-06-08 198.3 200.5 197.2 197.4 173075000 34342113170 2017-06-08   木曜日
3 2017-06-07 196.0 197.7 195.2 197.0 105695500 20771395690 2017-06-07   水曜日
4 2017-06-06 197.0 198.6 196.3 196.7  99978900 19742685840 2017-06-06   火曜日
5 2017-06-05 197.6 197.9 196.4 197.0 106257500 20945506730 2017-06-05   月曜日
6 2017-06-02 195.1 200.9 195.0 200.1 175604300 34933279840 2017-06-02   金曜日
>

◇その他:日付関連の投稿



つぶやき
メモリ32GB以上のノートPCほしいなー。重さ800g以下で。。


2017年3月25日土曜日

DMPを構築する上で重要なこと ~ユーザID編~

ユーザベースの分析から可視化されたインターネット上の行動ネットワーク

DMPを構築する上で重要なことは、ユーザを一意に識別するIDの付与基盤。これが無いとユーザベースの分析は不可能だ。もし、会員情報がとれている場合はその会員IDを用いればいい。しかし、そうした会員IDがない場合やログインしてない場合のユーザ行動を把握するには、どのようにすればよいだろうか?

現在、ユーザーIDを付与する基盤として、インティメートマージャー社のIMIDなどがある。同社には、電通なども資本を投下しており、今後成長が期待される。しかし、IMIDでサファリユーザを分析するとPV数イコールUU数となる。つまり、日本で高いシェアを持つiPhoneユーザの多くを補足できないという問題がある。理由は、アップル社がサードパーティーのクッキー利用を制限しているため、ファーストとサードパーティーのクッキーシンクがうまくできないからだ(と考えられる)。そして、その制限は、今後はさらに厳しくなることが予想される。

ではどうすべきか?発想を変えてみよう。ユーザのクッキーを取得して内部で照合するのではなく、ユーザのファーストのクッキーにIDを付与する。こうすれば、ファーストのクッキーに記録されているIDがそのままユーザを識別するIDになるため、クッキーシンクの問題は解消される。また、ファーストのクッキーにIDを付与するため、クッキーが削除されない限り、すべての閲覧行動をユーザベースで把握することができる(もちろん、アクセスログをとっていればだが)。

前職でユーザIDのインフラ化に向けた事業を一度提案したが、企業の成長ステージや規模の問題、そして、すぐに収益が上がらない点等を考慮して自ら取り下げた。しかし、個人的には将来のデータ活用の根幹を形成する極めて魅力的な事業だと思っているので、再度チャレンジしたい。


◇参考サイト

2017年3月15日水曜日

【R:自分用】クロス集計、ロジスティック、決定木、コレスポンデンス

#ライブラリを読み込む
library(dplyr)
library(data.table)
library(tidyr)
#
library(rpart) #決定木用
library(rpart.plot) #決定木用
library(partykit) #決定木作図用
#
library(MASS) #コレスポンデンス分析用
library(factoextra) #作図用

#cross集計
dt.cross <- dt.log %>%
  group_by(user_id,name) %>%
  summarise(n=max(value)) %>%
  spread(name,n)
dt.cross[is.na(dt.cross)] <- 0 #NAを0にする

#上記クロス集計に目的変数をjoin
dt.buy_next <- dt.log_next %>%
  group_by(user_id) %>%
  summarise(count = length(user_id))
dt.for_model <- left_join(dt.cross, dt.buy_next, by = "user_id")
dt.for_model$user_id <- NULL
dt.for_model[is.na(dt.for_logit)] <- 0 #NAを0にする

#ロジスティック分析
result <- glm(count ~ .,data = dt.for_model)
summary(result)

#出力
write.csv(summary(result)$coefficients[,"Estimate"],
          "C:/logit_Estimate.csv")
write.csv(summary(result)$coefficients[,"Pr(>|t|)"],
          "C:/logit_Pvalue.csv")

#---
#決定木
#method = "class" yが質的変数 cpは破線と交わる値が理想だが目的に合わせて適時設定
result.tree <- rpart(count ~., data = dt.cross_model, method = "class",cp = 0.002)
print(result.tree)
#検証
printcp(result.tree)
plotcp(result.tree)
#
#作図
plot(as.party(result.tree))


#---
#コレスポンデンス分析
#nfは軸を意味する
result.1 <- corresp(tmp, nf=3)
#
#write results:任意の場所に書き出す
write.csv(result.1$rs,
          "C:/result_1_rs.csv")
write.csv(result.1$cs,
          "C:/result_1_cs.csv")
#
#作図
#一般的な図
#biplot(result.1, xlim = c(-0.8, 0.8), ylim = c(-0.6, 0.6))
#少し見栄えの良い図
fviz_ca_biplot(result.1) + theme_minimal(base_size = 12)
#
#寄与率
result.1.koyuti <- result.1$cor^2
sum(result.1.koyuti)
kiyoritu <- 100*result.1.koyuti / sum(result.1.koyuti)
kiyoritu

2017年3月8日水曜日

【R:最速入門】インストールから外部結合までを30分以内で!?

RStudioで外部結合のコードを実行したときの画面。エディタのデザインはオプションで自由に変えられる。下記の順序で進めれば、Rが初めてでもインストールから外部結合をできる環境を構築するまで30分もかからずにできる(と思います)。

◇ちょっと背景

愛用のMacBook Airが壊れてしまい、新たにWindows PC(MB-B502E)を購入。価格は約4万円と安いが、少々もっさり。。でも、ボーナスまでこれで耐え忍ぶしかない!

◇ということで、新しいPCに「R」をインストール!

  • まずはRのサイトにいく(Rのサイト:OS選択画面
  • Download R for Windowsをクリック
    OS選択画面:Windowsをクリックする
  • base 又は install R for the first timeをクリック
    独自のRを構築したい人以外はbaseでOK
  • Download R 3.3.3 for Windowsをクリック
    バージョンは2017/03/08時点のもの
  • ファイルをダウンロードして実行すると、言語の選択を求められる。今回は日本語で
    日本語を選択
  • 次へをクリック
    インストールの開始
  • 説明を読んで次へをクリック
    読んだことない。。
  • 次へをクリック
    インストール先を変更したい方はどうぞ
  • 次へをクリック
    OSが64bitの方は32bitいらないかも
  • 次へをクリック
    デフォルトで問題なし
  • 次へをクリック
    そのままでOK
  • 次へをクリック
    ただ、R Studio使うのでデスクトップにアイコン無くてもOK
  • インストールされます
    インストール中
  • Rのインストールは完了です
    完了画面
  • Rを起動。一応、これでも使えるが、コンソールからコードを書くのは大変面倒で作業効率が極めて悪い。そのため、R Studioをインストール。
    これでも使えるが作業効率悪い
  • R Studioのサイトにいく(R StudioのHP
  • Download RStudioをクリック
    下の方にもダウンロードのリンクがある
  • 一番左の「RStudio Desktop Open Source License」をダウンロード
    バージョン選択画面
  • 「RStudio 1.0.136 - Windows Vista/7/8/10」をクリック
    クリック後、ファイルがダウンロードされる
  • 次へをクリック
    ダウンロードしたファイル実行するとセットアップがはじまる
  • 次へをクリック
    必要に応じてインストールフォルダを変更できる
  • インストールをクリック
    ショートカットを作成しないこともできる
  • 完了をクリック
    これで終わり
  • RStudioを起動するとこんな感じ
    コンソール画面が出てくるがここにコードは基本書かない
  • 左上のFileからNew Fileを選択してR Scriptを開く
    このR Scriptで作成したファイルにコードを書いていく
  • 実際にコードを書いてみた様子
    Rで外部結合をするためのコード
  • 実際のコード

#Rで外部結合するには?left joinとright joinを

#パッケージインストール
install.packages("data.table")
install.packages("dplyr")

#インストールしたパッケージを使う
library(data.table)
library(dplyr)

#サンプルデータを作成
v.x <- c(1,2,3)
v.x1 <- c("a","b","c")
v.y <- c(1,2,30)
v.y1 <- c("A","B","C")
#データフレーム型にする(外部結合するため)
df.x <- data.frame(id = v.x, name = v.x1)
df.y <- data.frame(id = v.y, name = v.y1)

#データを表示
df.x
df.y

# left join
left_join(df.x, df.y, by = "id")

# right join
right_join(df.x, df.y, by = "id")



  • 全てのコードを選択してRunをクリック(Sourceでも全コードを実行できるが、実際の作業では部分的に実行する事が多くほとんどRunしか使わない。そのため、ここでもRunを用いた)
  • 実行結果
> #Rで外部結合するには?left joinとright joinを
> #パッケージインストール
> install.packages("data.table")
Installing package into ‘C:/Users/mtsuj/OneDrive/Documents/R/win-library/3.3’
(as ‘lib’ is unspecified)
trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.3/data.table_1.10.4.zip'
Content type 'application/zip' length 1502201 bytes (1.4 MB)
downloaded 1.4 MB

package ‘data.table’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
C:\Users\mtsuj\AppData\Local\Temp\RtmpKsWlwv\downloaded_packages
> install.packages("dplyr")
Installing package into ‘C:/Users/mtsuj/OneDrive/Documents/R/win-library/3.3’
(as ‘lib’ is unspecified)
trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.3/dplyr_0.5.0.zip'
Content type 'application/zip' length 2557605 bytes (2.4 MB)
downloaded 2.4 MB

package ‘dplyr’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
C:\Users\mtsuj\AppData\Local\Temp\RtmpKsWlwv\downloaded_packages
> #インストールしたパッケージを使う
> library(data.table)
data.table 1.10.4
  The fastest way to learn (by data.table authors): https://www.datacamp.com/courses/data-analysis-the-data-table-way
  Documentation: ?data.table, example(data.table) and browseVignettes("data.table")
  Release notes, videos and slides: http://r-datatable.com
> library(dplyr)
-----------------------------------------------------------------------------------
data.table + dplyr code now lives in dtplyr.
Please library(dtplyr)!
-----------------------------------------------------------------------------------

 次のパッケージを付け加えます: ‘dplyr’ 

 以下のオブジェクトは ‘package:data.table’ からマスクされています: 

     between, first, last 

 以下のオブジェクトは ‘package:stats’ からマスクされています: 

     filter, lag 

 以下のオブジェクトは ‘package:base’ からマスクされています: 

     intersect, setdiff, setequal, union 

> #サンプルデータを作成
> v.x <- c(1,2,3)
> v.x1 <- c("a","b","c")
> v.y <- c(1,2,30)
> v.y1 <- c("A","B","C")
> #データフレーム型にする(外部結合するため)
> df.x <- data.frame(id = v.x, name = v.x1)
> df.y <- data.frame(id = v.y, name = v.y1)
> #データを表示
> df.x
  id name
1  1    a
2  2    b
3  3    c
> df.y
  id name
1  1    A
2  2    B
3 30    C
> # left join
> left_join(df.x, df.y, by = "id")
  id name.x name.y
1  1      a      A
2  2      b      B
3  3      c   <NA>
> # right join
> right_join(df.x, df.y, by = "id")
  id name.x name.y
1  1      a      A
2  2      b      B
3 30   <NA>      C


参考サイト



新しいPCはこんな感じです
マウスコンピュータのWindows PC(MB-B502E


2017年3月6日月曜日

【送別会】素晴らしい送別会ありがとうございます

送別会の集合写真(旧社長室およびマーケティングビジネス本部の仲間)

今日は現職の最終出社日です。約9ヶ月間と短い間ですが、データ分析の基盤を構築したり、クライアントに新たな分析サービスを提供する事業を立ち上げるなど、大変濃密な時間を過ごすことができました。これも皆様のお力添えのお陰です。心より感謝申し上げます。

萩焼の贈り物
萩焼の贈り物も頂きました。山口県出身なので大変嬉しいです。

入社の時にお世話になった野口さん

最後は一人で撮影


Thank you so much!




【すごい】ルンバに募金箱つけて大学に放つ!?

ルンバ募金の図解

ルンバに募金箱をつけて大学に放ったところ、2729円集まったそうです。。

発想と行動力がすごい!!!


モザイクエンペラーさんのブログ



*データ分析に全く関係ないですが衝撃的だったのでご紹介させて頂きました。

2017年3月3日金曜日

【トレジャーデータ:Presto】SQLでのクロス集計は?caseとmap_aggならどっち?表頭項目を指定しない方法は?

SQLでのクロス集計は?

SQL(Presto)では、CASE式やmap_agg関数を利用してクロス集計をする方法がある。

CASE式の例はこちらを参照(【トレジャーデータ:Presto】各ユーザの曜日別アクセス率を集計してライフスタイルに合ったアプローチをする)。

また、CASE式以外にもmap_agg関数を使う方法もある。
例えば、下記のようなテーブル(access_log)があるとする。timeはタイムスタンプ。

table:access_log
timecategoryuser_id
1488508906経済記事id2140001
1488508907経済記事id2140001
1488508908物理記事id2140002
1488508909医学記事id2140002
1488508910医学記事id2140001
1488508911文学記事id2140003
1488508912物理記事id2140002
...
...
...

そして、下記のようなコードを書く。

SELECT 

  days,

  --集計したいcategoryの項目を指定する

  COUNT(kv['経済記事']) AS "経済記事",

  COUNT(kv['医学記事']) AS "医学記事",

  COUNT(kv['物理記事']) AS "物理記事",

  COUNT(kv['文学記事']) AS "文学記事"

FROM (

    SELECT 

      TD_TIME_FORMAT(time,

        'yyyy-MM-dd','jst') AS days,

      --map集計:キーと値の重複なしペアをつくる

      map_agg(

        category,

        user_id

      ) kv

    FROM

      access_log

    GROUP BY

      TD_TIME_FORMAT(time,

        'yyyy-MM-dd','jst'),

      category,

      user_id

  )

GROUP BY

  days

このコードを実行すると、表側を日次、表頭を各記事カテゴリとするUU(ユニークユーザ数)を集計することができる。(ここで、ユニークユーザ数となる理由は、map_aggでキーと値で重複なしのペアをつくり、そのデータをもとに集計しているため)
 

time経済記事医学記事物理記事文学記事
2017-03-012527
2017-03-02675363
2017-03-0321674
.....
.....
.....

ただ、map_aggでの集計はメモリを多く使うためデータが大きい場合には適さない。実際、数千万レコード以上のデータを対象に集計をした際、メモリ不足となり集計できなかった(エラーをみると80GB以上のメモリを使っていた)。一方、CASE式で同様の集計したところ問題なくできた。

caseとmap_aggならどっち?

結論としては、CASE式。理由は、計算が速く、メモリ消費も抑えることができるため。一方、map_aggはあまり大規模データのクロス集計に適さないと言える(と、思いますがmap_aggを有効に使う方法があれば教えて頂きたいです)。

表頭項目を指定しない方法は?

case、map_aggも共に表頭項目の指定を一つ一つ記載する必要がある。そのため、項目が未知の場合や項目が膨大にある場合には対応が難しい。そこで、表頭項目を指定しなくてもクロス集計できる方法をいろいろ調べた(ネットで2日くらい探索したりTDの中の人に聞いてみた)が、残念ながら見つからなかった。どうやら、SQL以外の方法で集計するしかなさそう。。

Rでは表頭項目を指定しなくてもクロス集計できる

Rではacast(R クロス集計(acast))やspread(R 高速に大規模データのクロス集計をおこなう(tally, spread))を使えば、一つ一つ表頭項目を指定せずにクロス集計できる。特に、spreadは大規模データでも高速に処理できるため大変オススメ。


。。。SQL上で表頭項目の指定を必要としないクロス集計が簡単にできたら良いのに…
一応、TDの中の人にお願いしておきました。


map_aggの参考サイト

 

【トレジャーデータ:Treasure Workflow】Workflow: Example Libraryがアップデート

  Workflow: Example Library がアップデートされたらしい。時間があるときにみてみよ、


ちなみに、Terasure Workflow については下記参照
【トレジャーデータ:Treasure Workflow】今注目のTreasure Workflowとは?その導入手順と活用例(SQL文ループ処理)の紹介


Workflowのアップデートについて(TDのアカウントないと見れないかも)


 その他のアップデートについて(TDのアカウントないと見れないかも)



2017年2月26日日曜日

【動画】Style ’20 コンセプトムービー







音楽めっちゃいい!




【送別会】永田町パーティー:道中を楽しむ


送別会(永田町パーティー)を開いて頂きました。現職は約9か月という短い期間で退職することになりましたが、大変密度の濃い時間を過ごすことができました。皆様に感謝です。

…誰もが貨幣を創造できる社会の実現を目指し、大学院を飛び出して凡そ3年。少し遠回りをしている気がしますが、焦らず道中を楽しみながら進んできたいと思っています。ハンターハンターのジンも「道草を楽しめ」って言ってますしね。


  
  



 Thank you very much!

2017年2月23日木曜日

【トレジャーデータ:Ower権限】Ower権限を別のアカウントに移行するには?OwerとAdminの違いは?

Ower権限の移行方法

TDの中の人に聞いたところ、ユーザサイドでは権限移行できないとのこと。そのため、Ower権限の移行は、中の人にお願いする必要がある。直接チャットでお願いすれば数日程度で移行してもらえる。

ちなみにOwerとAdminの違いは?

Owerは、全ユーザのパーミッション(アクセス権限)等の設定ができる。
Adminは、他のAdminとOwnerユーザのパーミッション等の設定ができない。

◇詳しくは下記参照

2017年2月22日水曜日

【統計】何人分のアンケートが集まれば統計的に十分と言えるか?

母集団と必要なサンプル数(下記サイト参照)

  • 母集団:100人→必要なサンプル数:80人
  • 母集団:1,000人→必要なサンプル数:278人
  • 母集団:10,000人→必要なサンプル数:370人
  • 母集団:100,000人→必要なサンプル数:383人
  • 母集団:1,000,000人→必要なサンプル数:384人
なるほど、400人くらい確保できれば大体どんなアンケートでも大丈夫そう

参考サイト



2017年2月21日火曜日

【トレジャーデータ:Treasure Workflow】今注目のTreasure Workflowとは?その導入手順と活用例(SQL文ループ処理)の紹介


 Treasure Workflowとは?

Treasure Workflowは最近導入されたばかりのTreasure Data(TD)の最新サービス。このサービスを活用することで、TDだけでなく、GoogleのBigQueryやG Suite、Amazon Redshift、Microsoft Azureなど複数クラウドやWebサービス上のデータを統合して管理することができるとされる。TDはこのサービスを軸にして、LDM(Live Data Management)というDMP(Data Management Platform)を超えた概念、すなわち、ベンダーを超えたデータの相互アクセスを可能にする世界観を目指しているとのこと(確かに、今様々な企業で構築・運用されているDMPをそのまま統合・管理できればすごい便利そう)。


取り急ぎ、Treasure Workflowを試してみる

Treasure Workflowでは、クエリをメタなレベルで処理することができる。例えば、複数のクエリを任意の順序で実行したいときやクエリのループ処理をしたいとき等に使える。特に、ループ処理は通常のSQLでは記述できないため、Treasure Workflowが大いに活躍すること間違いなし。そこで今回は、Treasure Workflowを使ったクエリのループ処理について試してみる(ちなみに、ループ処理のためのdigファイルの書き方は、TDの中の人から頂いたサンプルを参考にしました)。


導入手順

  1. コンソールを起動(windowsだとコマンドプロンプト)
  2. 自分のTDアカウントにログインする
  3. TDをアップデートする(td update)
  4. Treasure Workflowをインストール(td workflow)

ループ処理方法


1.クエリ操作するファイル(dig)とクエリを格納するフォルダを作成(必要に応じて)



td_testというフォルダ下に、クエリを保管するフォルダとdigファイルを作成している

2.クエリを作成

sample.sql
SELECT 
  TD_TIME_FORMAT(time,
    'yyyy-MM-dd',
    'jst') AS time_date,
  AVG(CLOSE) AS daily_avg_close
FROM
  #TDにサンプルで入っているナスダックのデータ
  sample_datasets.nasdaq
WHERE
  #datetime_fromとdatetime_toはdigファイルで定義
  TD_TIME_RANGE(time,
    '${datetime_from}',
    '${datetime_to}',
    'JST')
GROUP BY
  TD_TIME_FORMAT(time,
    'yyyy-MM-dd',
    'jst')

3.digファイルを作成

sample.dig
_export:
  basetime: "2011-03-01 00:00:00"
  loopcount: 5
  td:
    database: workflow_temp

+loop:
  loop>: ${loopcount}
  _do:
    +step:
      _export:
        datetime_from: ${moment(basetime, "YYYY-MM-DD HH:mm:ss").
         add(i, "days").format("YYYY-MM-DD HH:mm:ss")}
        datetime_to: ${moment(basetime, "YYYY-MM-DD HH:mm:ss").
         add(1 + i, "days").format("YYYY-MM-DD HH:mm:ss")}
      td>: queries/sample.sql
      insert_into: roop_test

4.コンソールで実行(事前にdigファイルがあるディレクトリに移動しておく)

 td wf run sample
で実行


実行中の画面

5.結果

 しっかりデータが入っている


1ループ1日分の処理が5回されるため5日分のデータがテーブルに入る



◇参考サイト(一部、TDのアカウントが無いと見れないかも)