タグ

ブックマーク / teramonagi.hatenablog.com (17)

  • rlangと戯れて気が付いたこやつとの私的正しい付き合い方 - My Life as a Mock Quant

    掲題の件、Tidy Evalというかrlangパッケージを、下記の記事をはじめいろいろ使いこなそうと試行錯誤してきた。 いい加減、俺なりの楽なやり方が見つかったのでまとめておく。 eval(parse(text=...))をモダンに書きたい - My Life as a Mock Quant 全ての引数の名前と値をlistとして取得したい - My Life as a Mock Quant rlangパッケージとかTidy Eval周りをお勉強するための日語の参考資料は、油谷さんのこれしかほぼこれしかないと思う。 dplyr再入門(Tidyeval編) - Speaker Deck ちなみに俺はとっかかりとして、このHadleyの動画が一番しっくりきた。 www.youtube.com これを見た後 Programming with dplyr • dplyr を読めばなんとなく使いこな

    rlangと戯れて気が付いたこやつとの私的正しい付き合い方 - My Life as a Mock Quant
    Gln
    Gln 2018/11/05
  • 三連ドット(..., dot-dot-dot, ellipsis)の取り扱い - My Life as a Mock Quant

    これもr-wakalangに投げ込んで教えてもらった話なので、まずは簡単にまとめる。 基的な使い方 適当な...を持つ関数を定義する。 f1 <- function(x, ...) { dots <- list(...) print(dots) } これに対して以下の実行結果からわかるように、引数にマッチしなかったもの(ここではx以外)がリストのdots変数として関数内で使えるようになっているのがわかる。 要するに、多言語でいうところの可変長変数のようなもんだ。 list(...)という書き方の原点がどこにあるのかは不明だが、下記参考資料にあるR Language Definitionにも載ってるし、まぁこれはこういうもんかと思っておく。 > f1("a", 3) [[1]] [1] 3 > f1("b", a=3, b=7) $a [1] 3 $b [1] 7 ...のマッチに関する注

    三連ドット(..., dot-dot-dot, ellipsis)の取り扱い - My Life as a Mock Quant
    Gln
    Gln 2016/08/19
  • 各グループごとにXXX(標準化など)したデータを作成する - My Life as a Mock Quant

    今までは、例えば、下記のようなあるデータフレームのデータを、日付ごとにスケーリング(scale())し、その結果をデータフレームとして返すような処理として、以下のように書いていた。 これは「各日付ごとに全IDのデータ(r)列が存在し、それを日付ごとにスケーリングしたい!」という処理である。 (これはsummarizeだとうまくいかないので四苦八苦したあげく、以下のように書いていた) > library("dplyr") > library("tidyr") > df <- data.frame(date=rep(Sys.Date() + 1:3, each=3), id=rep(1:3, 3), r=rpois(9, 2)) > df date id r 1 2016-07-22 1 1 2 2016-07-22 2 2 3 2016-07-22 3 1 4 2016-07-23 1 2

    各グループごとにXXX(標準化など)したデータを作成する - My Life as a Mock Quant
    Gln
    Gln 2016/07/25
  • こういうことが言いたいだけなんじゃねぇの? - My Life as a Mock Quant

    他の部分に対する突っ込みはよくわからないが、とりあえずここはこうだろうと。 データサイエンスのを買ったが一部アツすぎる内容で萎えた話 | JUMPERZ.NET Blog ↑このを買ったのだが、95ページ周辺にむちゃくちゃな事が書いてあって萎えた。 統計学では「仮説検定」という手法があります。 しかし、仮説検定は(中略)、人数が(サンプルサイズ)が多い場合には、ほとんどの結果が「統計的に有意な差がある」という結果になります。 差がわずかしかない二つの集団を比べる場合は、そんなことはない。 当?"標準偏差1"という値に比べて十分に小さい"0.1"という間隔を持つ2つの正規分布からなるサンプル(10^i個; i∈{1,2,3,4,5,6,7})に対して、各々、平均値の差を見る検定であるt検定をかけたところ、 library(magrittr) r <- list() for(i in 1

    こういうことが言いたいだけなんじゃねぇの? - My Life as a Mock Quant
    Gln
    Gln 2014/08/23
  • 1:length(x) の代わりに seq_along(x) を使うと良いってごみ箱が言ってた - My Life as a Mock Quant

    @teramonagi 1:length(x) の代わりに seq_along(x) を使うと良いってごみ箱が言ってた。— kos59125 (@kos59125) 2014, 8月 18 seq_alongの方が、空っぽのベクターに対しても安全に動作しますよっと。 > x <- 1:3 > 1:length(x) [1] 1 2 3 > seq_along(x) [1] 1 2 3 > x <- c() > 1:length(x) [1] 1 0 > seq_along(x) integer(0)

    1:length(x) の代わりに seq_along(x) を使うと良いってごみ箱が言ってた - My Life as a Mock Quant
    Gln
    Gln 2014/08/23
  • 地図を描きたい俺はgoogleVisパッケージかggmapパッケージかどちらを使おうか迷うが、静的な地図を描きたい場合はggmapで良いみたい - My Life as a Mock Quant

    掲題の件、そういうことです。動的にインタラクティブに地図いじりたい!って人はgoogleVisパッケージでいいけど、静的な地図ならggmapなな印象だね!・・・と以下に書いてあった。 R help - googleVis plot and knitr/sweave というわけで、今、静的な地図に興味がある俺はggmapをちょいとお勉強。 日を中心として地図を描く 基にして、ここで紹介するget_map, ggmap関数がggmapパッケージのメイン関数となる。 get_map関数はGoogle Mapを筆頭とする4つのデータソースから地図を取得する関数になってて、source引数でデータソースを指定する。 また、それぞれにソースに対して直接アクセスする関数 - get_googlemap - get_openstreetmap - get_stamenmap - get_cloudma

    地図を描きたい俺はgoogleVisパッケージかggmapパッケージかどちらを使おうか迷うが、静的な地図を描きたい場合はggmapで良いみたい - My Life as a Mock Quant
    Gln
    Gln 2014/08/15
  • magrittrがいい感じ - My Life as a Mock Quant

    dplyrパッケージとmagrittrの組み合わせはいい感じだ。 dplyrパッケージで出来るだけデータフレームの状態でデータを捌いておいて magrittrパッケージの関数を使って、必要なところだけベクトル化して捌く というイメージだな。 magrittrパッケージのマニュアルに載っているAliases群を噛ませるとより%>%をエンジョイできるぞとそういうことです。 Aliaseはこちらに書いてある。 例えば全く意味がないけど、以下のような"流れる"コードが書けるわけです。 library(dplyr) library(magrittr) iris %>% mutate(Width=Sepal.Width+Petal.Width) %>% group_by(Species) %>% summarize(AverageWidth=mean(Width)) %>% use_series(Av

    magrittrがいい感じ - My Life as a Mock Quant
    Gln
    Gln 2014/06/26
  • ベクトル(文字列)の頻度を可視化したい with dplyr, ggplot2 - My Life as a Mock Quant

    ggplot2が苦手な俺がどうやってそれをやったのかという備忘録。 必要なパッケージは以下の3つ。適当にinstall.packagesしておくべし。 library(ggplot2) library(magrittr) library(data.table) サンプルデータは適当に作った文字列ベクトル x <- sample(letters[1:15], 100, replace=TRUE) これをggplot2で可視化(棒グラフ)にしたい。したいんだが、ggplot2苦手な俺はがんばった。もちろん 気が付いたらRがF#になる日が来るのかもしれない、そんなことを考えていました - My Life as a Mock Quant magrittrがいい感じ - My Life as a Mock Quant を見てもわかるように、dplyr & chain脳になった俺は%>%を使って処理を

    ベクトル(文字列)の頻度を可視化したい with dplyr, ggplot2 - My Life as a Mock Quant
    Gln
    Gln 2014/06/26
  • 配列(array)の書き方がよくわからんかったのでメモ - My Life as a Mock Quant

    行列でもたまに混乱するのに、更に次元が上がった多次元配列になんてなるともう???ってなる低能です。もちろん、配列を使うのではなくて、"行列を要素に持つリスト"を使うのも手かとは思いますが、arrayの方が便利そうだったので、行列を一次元だけあげた3次元配列を例にちょっとメモっておく。 配列(array)を作成するにはarray関数を使っておけという感じ。matrix関数と同じように第一引数には要素の値を入れて、第二引数には各次元(1次元(行)、2次元(列)、3次元…)の要素数をベクトルで指定しておく。ここでは全12要素を持つ配列(2(1次元目、行)×2×2(2次元目、列)×3(3次元目))を作成。 > a <- array(1:12, c(2, 2, 3)) > a , , 1 [,1] [,2] [1,] 1 3 [2,] 2 4 , , 2 [,1] [,2] [1,] 5 7 [2,

    配列(array)の書き方がよくわからんかったのでメモ - My Life as a Mock Quant
    Gln
    Gln 2014/05/15
  • data.tableからの重複除去 - My Life as a Mock Quant

    unique関数+by引数な感じで。 > a <- data.table(A=1:5,B=letters[1:10]) > a A B 1: 1 a 2: 2 b 3: 3 c 4: 4 d 5: 5 e 6: 1 f 7: 2 g 8: 3 h 9: 4 i 10: 5 j > duplicated(a, by="A") [1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE > unique(a, by="A") A B 1: 1 a 2: 2 b 3: 3 c 4: 4 d 5: 5 e

    data.tableからの重複除去 - My Life as a Mock Quant
    Gln
    Gln 2014/04/01
  • scikit-learnでサポートベクトル回帰、及びそのパラメーター推計 with クロスバリデーションやってみる - My Life as a Mock Quant

    サポートベクトル回帰(Support Vector Regression, SVR)の理論が大体脳内整理出来たので、実践もしたいぞと、そしてちょいとpythonを使う別件があるので、慣れの意味も込めてR言語ではなくpythonとその機械学習ライブラリであるscikit-learnを使ってやるぞとそういうことです。 scikit-learn自体のインストールはこの記事の最下部にある日語のLINKを見れば良いと思う。 俺はpip使ってインストールしたような気がするけど、なにぶんずいぶんと昔なので忘れてしまった。pipで入れるなら pip install scikit-learnでOK。裏でコンパイルが走っていたような記憶があるので、C++のコンパイラいれておかないとだめかも。 windows用のバイナリファイルだと Scikit Learn - Browse Files at SourceF

    scikit-learnでサポートベクトル回帰、及びそのパラメーター推計 with クロスバリデーションやってみる - My Life as a Mock Quant
  • ケイグォ(Kaggle)が俺にまだ知らないRの機能を使えと囁いている - My Life as a Mock Quant

    cut関数(連続データの離散値化) 連続値をとるデータを適当な区間(breaksで指定)で分割して、factor化してくれる。 > x <- rnorm(10) > x [1] 0.07927061 0.81770466 0.21693545 -0.95629685 1.77248104 -1.29774920 -1.05448409 -0.55145272 2.30786460 [10] -0.74214539 > cut(x, breaks=c(-10,-3,0,3,5,10)) [1] (0,3] (0,3] (0,3] (-3,0] (0,3] (-3,0] (-3,0] (-3,0] (0,3] (-3,0] Levels: (-10,-3] (-3,0] (0,3] (3,5] (5,10] factor型を数値型に変換 factor型は単純にas.numericしても正しい数

    ケイグォ(Kaggle)が俺にまだ知らないRの機能を使えと囁いている - My Life as a Mock Quant
    Gln
    Gln 2013/02/17
  • お勉強したことメモ - My Life as a Mock Quant

    主に私が良く使うC++と違う点についてハマった点とか、新しく学んだ事をつらつらとメモって置く。 結局、プロパティ(property)はディスクリプタ型の一部つーことらしい。 __new__は__init__(コンストラクタ)より先に呼ばれる 親クラスのコンストラクタは明示的に呼ばないとだめ 親クラスのメソッドを明示的に呼ぶには、例えば下の例だと Parent.__init__(self) super(Child,self).__init__() のどちらでも動作するが、最近の規格(new style class。objectを継承して書くクラス)だとsuper関数を使用したものが推奨されているぽい。逆に上のはold styleってこと。 pep8, Pylintでコードの綺麗さチェックできる ↓適当に継承&プロパティ使ってみたコード # -*- coding: utf-8 -*- clas

    お勉強したことメモ - My Life as a Mock Quant
  • 第20回R勉強会@東京(#TokyoR)でのTalk内容 - My Life as a Mock Quant

    脳みその体操のために指数分布とポアソン分布について第20回R勉強会@東京(#TokyoR) : ATNDで「指数分布とポアソン分布のいけない関係」というタイトルでお話させていただきました。その際の資料は以下です。 指数分布とポアソン分布のいけない関係 View more presentations from teramonagi Rっぽい箇所が最後にしかないのですが、その際に使用したコードは以下です。コピペして実行すれば私が上の資料のP33で示したグラフを作成することができます。 #1単位時間内に到着する訪問者数を数えるシミュレーション VisitorCounter <- function(lambda) { counter <- 0 time.arrival <- rexp(1, rate = lambda) while(time.arrival < 1) { counter <- co

    第20回R勉強会@東京(#TokyoR)でのTalk内容 - My Life as a Mock Quant
    Gln
    Gln 2012/02/09
    「指数分布とポアソン分布について第20回R勉強会@東京(#TokyoR) : ATND」
  • インポータンス・サンプリング(importance sampling)の有難味について - My Life as a Mock Quant

    なんとなーく頭でわかっているつもりになっていたものをちゃんと手を動かしてやっておきたい。 まず、インポータンスサンプリングについて一言で説明しておくと 「ある量の期待値を計算したいという状況において、その確率変数が大きな値を取る個所を重点的*1にサンプリングしてやることで、期待値評価の精度をあげる手法」 ということができる。 問題設定としては以下のような期待値評価をモンテカルロ法で計算したい、そんな状況を考える。 意味合いとしては「指数分布に従うxを使って正規分布(ガウシアン)的な関数の期待値を評価したい」ということ。 ここで,は適当に決める定数で、今回はそれぞれ10000, 6と設定した。 この積分自体は解析的に計算できて となって、以下ではこの答えをきちんとモンテカルロ法で再現できるかどうかというのが問題になる。 まずはパス数を1,000パスとしてR言語を使って評価したい関数を定義する

    インポータンス・サンプリング(importance sampling)の有難味について - My Life as a Mock Quant
    Gln
    Gln 2012/01/19
  • 中心極限定理使って標準正規分布に従う乱数を作る - My Life as a Mock Quant

    「同一の分布に従う独立な乱数の和は正規分布に従う」という中心極限定理の教えを使って標準正規分布に従う乱数を生成する関数。 何か思いついて即使いたい時に特に何もインクルードしなくてもさっと使えるようにメモ。 double NormalRand() { double result = 0; for(int i = 0; i < 12; i++) { result += static_cast<double>(std::rand()) / RAND_MAX; } return(result - 6.0); } ↓コピペしてコンパイルすれば動くmain関数付きのコード #include<iostream> double NormalRand() { double result = 0; for(int i = 0; i < 12; i++) { result += static_cast<doub

    中心極限定理使って標準正規分布に従う乱数を作る - My Life as a Mock Quant
  • グラフのX軸に日付を入れる - My Life as a Mock Quant

    金融系なんで、時系列データ良く扱うわけですがグラフのX軸に日付を入れる方法を毎回忘れるのでメモ。肝はaxis.Date関数。 こんな感じでコードを書く。 x <- Sys.Date() + 1:1000 y <- cumsum(rnorm(1000)) par(xaxt="n") plot(x, y, main = "Title",xlab = "Date", ylab = "Val", type = "l") par(xaxt = "s") axis.Date(1, at = seq(min(x),max(x),"years")) par(xaxt="n")で一旦PLOT時にX軸書かせないよう設定した後にPLOTし、par(xaxt = "s")でまた軸を書けるようにしてaxis.Dateで日付を書く。結果はこんなグラフになる。 最後のaxis.Dateはaxisをオーバーライドしている

    グラフのX軸に日付を入れる - My Life as a Mock Quant
    Gln
    Gln 2011/06/19
  • 1