2017-01-01から1年間の記事一覧

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("…

適当なデータをsklearnでカーネル密度推定する

クロスバリデーション付きでどう書くのが楽かなと考えた。 私なりの答えはこんなん。ライブラリのimport設定は以下で使うものもまとめて書いちゃってる。 import numpy as np import matplotlib.pyplot as plt from scipy import integrate from sklearn.mod…

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…

"相関係数の標準誤差"の計算について

R

掲題の件、そういうことです。ここのCrossValidated 、及び参照されている論文を見ると、相関係数の標準誤差は として計算されるらしい。記号の意味はお察し。これをRで愚直にシミュレーションした結果とチェックしたら大体あってた(下図)ので、これでいい…

Pandasの参照先が変わるタイミング

よくわからんので、とりあえずメモ以下 import pandas as pd def hoge(x): x.iloc[1] = 100 df = pd.DataFrame({'A': range(3)}) hoge(df) df を実行すると A 0 0 1 100 2 2となるので、hoge関数にはdfのポインタ(参照)が渡されているのがわかる、これはい…

長めのID(数値)を持つ場合は明示的に文字列で読む

R

例えばこういうファイル(hoge.csv)があったとする id, value 31274832974983278756, 1.22これをRで読み込と「あ、アレ?IDの下の桁変わってない???」となるわけだ。 > library("readr") > df <- read_csv("hoge.csv") > as.character(df$id) [1] "3127483…

tibbleを下まで表示するには option('tibble.print_max')を指定する

R

これも.Rprofileなんかに突っ込んでおいたほうがいいと思うんだよな。 options('tibble.print_max' = 1000)

パッケージの”中”で使ってるパッケージはDESCRIPTIONのImportsに書けばOK

R

いろいろふわふわしていて危ういので、助けをもとめた。 DESCRIPTIONにImportsは書いておいて、パッケージ内部では常に :: を用いて他のパッケージの関数を呼び出すスタイルでやっているらしい。Wicham Hadleyのここを読むのが一番まとまっているとは思う。 …

ggplot2の軸の目盛りを10のべき乗で書く

R

ggplot2で、軸を”10のほげほげ乗”で描画するのに苦労したので、メモ。 ググった感じ、自作で関数作るしかないっぽい。必要なライブラリと適当なデータを用意。 library("ggplot2") library("scales") library("stringr") df <- data.frame(x=10^(-2:1),y=10^…

行列の非対角要素を抽出したい

対角要素はdiagで行けるけど、非対角要素がわからんかったので教えてもらった。 row, col()関数ってのがあるらしい。知らんかった… > x <- matrix(1:4, 2) > x [,1] [,2] [1,] 1 3 [2,] 2 4 > x[row(x) != col(x)] [1] 2 3 > diag(x) [1] 1 4

model.matrix関連のメモ

ちょっといじったけど超便利だった。 3つ目のLINKが最高にいい。 参考 りんだろぐ rindalog: model.frame と model.matrix Rのmodel.matrixの説明 · JoeMPhilips [R] 予測モデルを作るには formula を活用せよ - ill-identified diary formulaとは?(1) -…

行・列のIndexを指定した上でpandas.DataFrameを作る

Indexの指定がめんどくせぇわ… In [1]: import pandas as pd In [2]: df = pd.DataFrame([ ...: [0.00, 0.03, 0.000], ...: [0.01, 0.04, 0.005], ...: [0.02, 0.05, 0.010] ...: ], ...: index=pd.Index([0, 1, 2], name='hoge'), ...: columns=pd.Index(['…

関数のイコールをチェックしたいといはidentical関数

R

結構長くR書いてエル気がするが、よくよく考えるとidenticalが必要になる場面に初めてぶつかった気がするのでメモ。 今までは別のやり方で回避していたのだろうか? > #適当な関数を定義 > f <- function(){print("hoge")} > g <- function(){print("hage")}…

numpy.arrayも基本シャロー・コピーだが、部分を取るとディープ・コピー

http://d.hatena.ne.jp/teramonagi/20170411/1491892292の続き的な。bの部分集合を指定した時点でコピってんだろうなぁ。。。 >>> import numpy as np >>> a = np.array([[1, 2],[3, 4]]) >>> b = np.array([[6, 7],[8, 9]]) >>> a[[(0,0), (1,1)]] = b[[(0,…

numpy.arrayも基本シャロー・コピー

まじですぐ忘れる。 >>> import numpy as np >>> x = np.array([1,2,3]) >>> y = x >>> y[1] = 999 >>> print(x) [ 1 999 3]

numpyのrandintとrandomのrandintは違う

”端含む・含まない”問題で死亡した。Randomライブラリ(端を含む) >>> import random >>> [random.randint(0, 1) for _ in range(10)] [0, 1, 0, 1, 0, 0, 0, 1, 1, 0] Numpyライブラリ(端を含まない) >>> import numpy as np [np.random.randint(0, 1) f…

関数の中身を見る(Rで言うコンソールで関数名直打ち)

関数名を評価すると中身が飛び出してくるRに慣れすぎててPythonでどうすんのかわかんなかったのでメモ。 inspectというパッケージのgetsourceメソッドを使えばいいらしい。 >>> import inspect >>> def hoge(x): ... print("Do some awesome things.") ... r…

lubridateパッケージで月初・月末日を取る

R

こんなん。 > library(lubridate) > floor_date(as.Date("2017-03-03"), "month") [1] "2017-03-01" > ceiling_date(as.Date("2017-03-03"), "month") - 1 [1] "2017-03-31"

scikit-learnで非負値行列因子分解(NMF)

- http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.NMF.htmlを見たりググった日本語での検索結果でも何がどうなってるのかよくわからんので、ちゃんと試したメモ。非負値行列因子分解自体は要するに、ある行列MをM≒WHと近似した時…

Jupyter Notebookにloggingの結果を表示させたい

色々とStack overflow漁って調べた結果、とりあえずこれで動いた。 import sys import logging logger = logging.getLogger() handler = logging.StreamHandler(sys.stdout) handler.setLevel(logging.INFO) logger.addHandler(handler) logger.setLevel(log…

確率変数を変数変換した場合の確率分布

昔やった気もするが、すぐ忘れる&頭の体操もかねてもう一度 算数 適当な確率分布に従う確率変数x(面倒なので[0, 1]区間の一様分布想定)とそれを2乗した変数yを考える。 このときyの従う確率分布はより となる。 Rでやる 0, 1区間の一様な乱数x, 及びそれを…