R

ドルコスト平均法のご利益をRで理解する

R

掲題の件、そういう時あると思います。 結論 まあ、ちょっと考えれば自明なんだが、以下です。 ドルコスト平均法は平均的なリターンを押し下げる(儲かる投資なら!)効果があるので嬉しくはない ドルコスト平均法は最終的な儲けのバラツキ(標準偏差)を押…

最も近い値を持つ要素のインデックスを返す

R

掲題の件、あると思います。 例えばこういうやつ(z(=3)の値に最も近いxの要素(=2.9)を探す)。 > z <- 3 > x <- c(1,2,2.9,3.5,4) > index <- which.min(abs(z - x)) > x[index] [1] 2.9 これをzがベクトルのときでも動くようにしたいと考えた2実装が以下…

大きめのSparse行列をnormalizeしたい時の書き方

R

掲題の件、あると思います。 私は今まで行列っぽいデータを normalize するとき*1は以下のように書いていました。 最後の結果を見たらわかるように行ごとに和をとると1になるようになっています。 > x <- matrix(1:4,2) > x [,1] [,2] [1,] 1 3 [2,] 2 4 > …

米国株式市場の2020年1月1日からの相関構造

R

米国株式市場の2020年1月1日からの相関構造 すげぇ強かった(おしまい) "^DJI" : ダウ平均 "^RUT": ラッセル指数 "^GSPC": S&P500 "^IXIC": ナスダック指数 再現用のCode library("dplyr") library("tidyr") library("stringr") library("tidyquant") libra…

特定の列だけ外して処理したい場合には . (dot) を名前に持つ列と lsを組み合わせると良い

R

株式会社ホクソエムの社長から教えていただいた。 いちいち dplyr::select なぞせんでもこうするだけで .y を除いた処理を実行できる。 > df <- data.frame( + x = 1:3, + .y = 2:4 + ) > df x .y 1 1 2 2 2 3 3 3 4 > ls(df) [1] "x"

dplyrでうっかり八兵衛にならないように !! を意識する

R

うっかりやっちまったのでメモっておく。 まず適当な data.frame() を定義する。 > df <- data.frame(x=sample(1:2, 10, replace=TRUE), y=sample(c("a", "b"), 10, replace = TRUE)) > df x y 1 2 a 2 2 b 3 2 b 4 2 b 5 1 b 6 1 a 7 2 b 8 1 b 9 1 b 10 2 …

SBI証券の手数料プランはスタンダード/アクティブプランのどちらを選ぶべきか?

俺はSBI証券を使っているのだが、その手数料プラン(アクティブ or スタンダード)をどっちにするのかあまり真面目に考えてこなかったので、真面目に考えたい。 俺の俺による俺のためのデータサイエンスだ。 さて、国内株式の手数料を教えてくださいのページ…

データフレーム(data.frame)を一行ずつ処理したい

R

ナウく書きたい。 rmap でもいいけど、以下のように purrr::pmap() が良さげ。 > head(iris, 3) %>% + purrr::pmap_dfr(function(...) { + df_row <- tibble(...) + print(df_row) + df_row + }) # A tibble: 1 x 5 Sepal.Length Sepal.Width Petal.Length P…

特異値分解の検算

R

すぐ忘れる。 svd関数の戻り値をxとして x$u %*% diag(x$d) %*% t(x$v) で元通り。 > b <- array(rnorm(10), dim=c(5,2)) > b [,1] [,2] [1,] -0.5036082 -1.218417405 [2,] -0.7905285 1.331412278 [3,] 0.8311744 -0.147847237 [4,] -0.8628976 0.68170753…

各大グループにおいて、各小グループの値がどの程度の割合を占めているのかを出す

R

昔、 r-wakalangで教えてもらったがメモってなかった話なのでメモっておく。 こういうデータ df があった時に > df <- data.frame( + big_group=rep(letters[1:2], 30), + small_group=rep(1:3, 10), + value=runif(30) + ) > head(df, 10) big_group small_…

データ増やした時の標準誤差の減り具合

掲題の件、これはふつー「1/√データ数」ですが、適当にデータとして0だけ突っ込んでいったらどうなるんじゃいと思ってやってみたら大体似たようなもんだった。 理論的な話はあとで考える。 > size_unit <- 10^3 > x <- c() > y <- c() > for (i in 0:9){ + …

各Bin・Cellに同じ数だけデータが入っているHistgramを作る

R

調べた感じ引数ではやれなそうだったので、やむなく quantile 関数で対応することにした。 > x <- rnorm(1000) > tmp <- hist(x, breaks=quantile(x, c(0, 0.2, 0.4, 0.6, 0.8, 1))) > tmp $breaks 0% 20% 40% 60% 80% 100% -3.4892322 -0.9159784 -0.265114…

”関数の引数になってる変数名を取得する”を新旧の書き方で書く

前も書いた気がするんだが一応。 rlangのほうがモダンなやつ > f1 <- function(x){rlang::expr_text(rlang::enexpr(x))} > f2 <- function(x){deparse(substitute(x))} > a <- 123 > f1(a) [1] "a" > f2(a) [1] "a"

パッケージ開発中に依存パッケージインストールするにはdevtools::install_deps()

とりあえず開発してるPackageをRStudioあたりで開いておいて、以下を叩けばOKだって。 devtools::install_deps(dependencies = TRUE) なるほどね~ - https://www.rdocumentation.org/packages/devtools/versions/1.13.6/topics/install_deps

DataExplorer packageでデータを大雑把に把握する

R

「データを大雑把にとらえるために何も考えずにこれに突っ込む」みたいな感じで使えてよい。 あと、BLOG移転したい。(パッケージは別途インストール済として)たった↓だけのコードで library("DataExplorer") create_report(iris) こういう結果がでる。repo…

あれば環境変数からとる、なければGlobal環境からとる

R

掲題の件がやりたいので、こんな関数をかいた。 get_from_env_or_global_env <- function(x){ if(Sys.getenv(x) != ""){ Sys.getenv(x) } else if(exists(x)){ eval(parse(text = x), envir=.GlobalEnv) } } #環境変数からとる > get_from_env_or_global_env…

bitFlyer LightningのAPI経由でRからBitcoinを買う

R

すっかり放置していたbitFlyer LightningのAPIをRから使う - My Life as a Mock Quantの続き。 POST系のメソッドをやろうとして昔失敗して放置していたのだが、なんか今日やったらうまくいった。 こんなんでRからBitcoinを指値で発注できます(そして2018年6…

N個の独立な一様乱数(-1, 1)の和の標準偏差は1/3√N

手計算で確認&ボケ防止にRでチェック。 sizes <- 2**(1:15) y <- numeric(length(sizes)) for(i in seq_along(sizes)){ x <- numeric(10**3) for(j in seq_len(10**3)){ x[j] <- sum(runif(sizes[i], min=-1, max=1)) } y[i] <- sd(x) } plot(sizes, y) lin…

glue::glue()をちょっと便利に使う

R

glueパッケージのglue()は、いわばPythonでいう .format() を使えるようにするパッケージなわけで、以下のようにテンプレートの文字列 (ここでは"a is {a}" )を、その”傍にある”*1 変数で勝手に埋めてくれるので便利に使えるわけです。 > a <- 123 > glue::g…

purrr::map_dfr = lapply + dplyr::bind_rows

そういうことなんだよな〜シミュレーション系でよく使うのでメモ。 > dplyr::bind_rows(lapply(1:3, function(x){head(iris, 1)})) Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 5.1 3.5 1.4 0.2 setosa 3 5.1 3.…

R MarkdownでTwo Column(2列)なレポートを作りたい

R

将来的にオレオレJulia v.s. Rチートシートを作るための礎。 主にこちらのStackoverflowを見て適当にCSSコピペった。以下のMarkdownが のような形でHTMLになる。 この左右どちらかをJuliaのengineに帰ればHTML版のチートシートは作れるぞと。 --- title: "Tw…

paste0()を捨てたい

R

文字列を結合するときに使う paste0()を捨てたくて、 `%+%` <- function(x, y){paste0(x, y)} を定義してみた。 こんな感じで使う。 > "hoge" %+% "moge" [1] "hogemoge" うれしい・・・かな? tidyverseあたりに出てきてもよさそうな機能なんだが、出てきた…

bitFlyer LightningのAPIをRから使う

R

"何でもRでやるおじさん日本代表(タヒチ在住)"として、いい加減書いておかねばならないと思った。 まずは、APIキーを頑張って以下から取得してください。 https://lightning.bitflyer.jp/developer そして、その情報とbitFlyerのURLをなんでもいいんだけど…

全ての引数の名前と値をlistとして取得したい

R

この前教えてもらったのから察するに、こんなんでいいっぽい。 三連ドット(...)的に全部の引数が取れればもっと楽そうだが・・・ > f <- function(x=NULL, y=1){ + purrr::map(rlang::set_names(c("x", "y")), ~ rlang::eval_tidy(rlang::sym(.x))) + } > f…

eval(parse(text=...))をモダンに書きたい

R

掲題の件、 eval(parse(text=...))をモダンな書き方にしたいと思って、r-wakalangで回答貰ったやつのメモ。昔ながら(一部、purrr使ってるんでモダンにも見えるが・・・)の書き方だとこんなん > hoge1 <- function(x){x+1} > hoge2 <- function(x){x+2} > >…

Rのパッケージをtidyに開発する

R

この記事は tidyポエム Advent Calendar 2017 - Adventar の24日目の記事です。 はじめに 今年はRのパッケージをゴリっと開発することが多かったので、そこで培った2つのノウハウをここにメモっておきます。 tidyなデータ処理があるようにtidyなパッケージ…

R Markdownの出力HTMLの幅を広げる

R

「R Markdownの出力HTMLの幅を広げたいときはどうするんだ」と思っていたが、こんな感じでCSS書けばいいだけだった。 --- title: "Untitled" author: "Nagi Teramo" output: html_document --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TR…

rlang::eval_tidy()と!!は違う

R

老害度が増してきているので、dplyrパッケージなどの裏側で使われている新しい"Rの評価"を与えるrlangパッケージについて勉強してた。 rlang::eval_tidy()と!!は違うんだなってことである。まずはそれらのパッケージを読みこむ。 library("rlang") library("…

WTI原油価格連動型上場投信(1671)の粗い可視化

R

石油に強い興味があるので、WTI原油先物に連動するETFの価格データをサクッと取得&簡易表示。まずデータの取得&可視化。変数名はxtsクラスのオブジェクトなのでdfは正しくないが、まぁいいや… library("quantmod") #quantmodがYahoo Japanのサイトから抜い…

R・Pythonのロジスティック回帰結果が一致することを確認

ちゃんと一致するのかなって不安になったので適当なデータでチェック。 元になるデータはこの記事のものをそのまま流用している&何なのかは知らん。 Python編 その1 Pythonのコード import pandas as pd import sklearn.linear_model df = pd.read_csv("ht…