★データ解析備忘録★

ゆる〜い技術メモ

Tokyo.R #54の振り返りと補足

6/18にTokyo.Rに参加したので、遅ればせながら振り返りと(自分の知識の範囲内での)補足をしたいと思います。

初心者セッション

10分で分かるR言語入門 ver.2.19

質疑

パッケージを手動で入れるには?
パッケージはinstalll.packagesや{githubinstall}パッケージでオンラインで入れるのが普通ですが、tar.gzやzipでパッケージをローカルからインストールしたいとき。
基本的にはzipやtar.gzを特定のディレクトリにいれてinstall.packagesをしてやれば入ります。以下はzipの例。

setwd("~/Downloads")
install.packages("hoge.zip", repos = NULL, type = "source")

初心者におすすめのサイトは?
qiita.com

プログレスバーを表示したい

  • {dplyr}およびその前身の{plyr}にその機能があります。

Home · MRAN

  • あとfor文の進捗状況を見たいときは以下が参考になります。

http://gg-hogehoge.hatenablog.com/entry/2013/08/18/095448
gg-hogehoge.hatenablog.com

  • Stanでベイズ推定をするときの事後分布からのサンプリング進捗はデフォルトで出てくるようになってます。
続きを読む

【SAS】PROC SQL では LIMIT 句が使えない

普通のSQLを書くとき、データが巨大だと一部をちら見するためにLIMIT 1000と書いて一部だけを抽出したりします。
SASPROC SQLではSQLの構文がほぼそのまま使えて便利なのですが、LIMIT句はどうやら使えないようです。
代わりにOUTOBS=1000で指定すれば良いそうです。
以下参考URL
communities.sas.com

コード例は以下になります。
hogeというデータセットからA列が30以上の行を1000個だけ取ってくることを考えます。

普通のSQLで書くと以下のように書けばよいです。

select A
from hoge
where A > 30
limit 1000

2016/05/04 追記
PROC SQLではできませんが、PROC FEDSQLならできるそうです。
データステップ100万回      SAS新手一生: PROC SQL では LIMIT 句が使えない けどPROC FEDSQLでは使えるよ。ついでにOFFSET句も。の話

SASYAMAさんに感謝!

SASの(よく使う)ショートカットキー一覧

よく使いそうなSASのショートカットキーをまとめました。
製品版でしか試してないのでSAS雲丹でも同じかはわかりません。

他のソフトと同じもの

キー 機能
Ctrl+C コピー
Ctrl+X 切り取り
Ctrl+V ペースト
Ctrl+A 全選択
Ctrl+S 上書き保存
Ctrl+Shift+S 新規ファイル名で保存
Ctrl+F 検索
Ctrl+H 置換
Ctrl+ ファイルの先頭に移動
Ctrl+ ファイルの末尾に移動
Ctrl+N 新規画面の立ち上げ

SAS独自のもの

キー 機能
F9 ショートカット一覧の表示
F3 エディタ画面選択時にサブミット
F3 ログ、アウトプット画面選択時にエディタ画面に移動
F11 設定したタイトル一覧表示
Ctrl+/ 選択箇所を/**/でコメントアウト
Ctrl+[, ] 対応する括弧へ移動
Alt+[, ] 対応するdo-endペアへ移動
Ctrl+Shift+/ 選択箇所のコメントアウト解除
Ctrl+Shift+U 選択箇所を大文字に変換
Ctrl+Shift+L 選択箇所を小文字に変換

Treasure Dataの日付範囲指定はイコールを含むのか

Treasure Dataでクエリを書くとき、where句で日付指定をする場合が多いわけですが、範囲はイコールを含むのでしょうか?
以前書いた記事でちょろっと触れてそこに答えもあるのですが、イコールの有無に焦点を当てたものも欲しかったのでメモ。
< 時間 < なのか <= 時間 <= なのかは意外と重要です。
y-mattu.hatenablog.com
それと、公式のUDFマニュアルにも書いてあります。
docs.treasuredata.com


結論

そもそもTreasure Dataでは日付指定はTD_TIMR_RANGE関数を使うわけですが、結論としては以下の二つは同値です。

TD_TIME_RANGE(time,'2016-03-20 00:00:00', '2016-03-21 00:00:00', 'JST')
TD_TIME_RANGE(time,'2016-03-20', '2016-03-21', 'JST')

つまり
2016-03-20 00:00:00 >= time and time < 2016-03-21 00:00:00
となります。
TD_TIME_RANGE関数は、前半はイコールを含むけど後半はイコールを含まないみたいです。

また、ありがちな間違いとして例えば

TD_TIME_RANGE(time,'2016-03-20 00:00:00', '2016-03-20 23:59:59', 'JST')

としてしまうことがあります。実際僕もしばらくこれで書いていた時期がありました。
しかし、この書き方は2016-03-20 00:00:00 >= time and time < 2016-03-20 23:59:59を意味しているので23:59:59の値は取ることができません。
気を付けましょう。

ちなみに

たぶんTreasure Dataユーザーなら知ってると思いますが、Hive とPresto では文字列の囲み方が""''と違います。