まずは蝋の翼から。

学んだことを書きながら確認・整理するためのメモブログ。こういうことなのかな?といったことをふわっと書いたりしていますが、理解が浅いゆえに的はずれなことも多々あると思うのでツッコミ歓迎

使い方メモ(不便解決)

pipeを用いてpythonを極力メソッドチェーンで書く

この記事はなにか やりたいこと pipeを使わないで処理をする pipeを使って処理 余談 この記事はなにか 可読性/保守性を上げるために、できる限りメソッドチェーンで書きたい。 過去にメソッドチェーンについての記事は書いたが、どうしてもメソッドチェーン…

Tidyevalでの関数型プログラミング俺俺メモ

プログラミングをするときにはDRYの法則と言われるように、同じような処理は関数で書いて使い回す方がメンテ効率や可読性が上がる。 特に、データサイエンス的な場合はコードの使い捨てがしやすいので煩雑になるので特に意識した方が良い。 zerebom.hatenabl…

正規表現で文字列からほしい部分を抽出する

Rでstr_match_all(string, pattern)でstringに対してマッチしたpattern文字列を抽出する。 pattern部分は()を入れることでpattern中の一部分だけを取ることができる。 listの1要素目がマッチした部分の全体、2要素目以降が括弧でマッチさせた抽出される。 _a…

pythonで動的にオブジェクトを作成する

目的 pythonで動的にオブジェクトを変えたい。 ユースケース 乱数を変えたランダムサンプリングデータを複数個作りたいときや、絞り込みを変えたデータを作成したいときなど。 execでのやり方 execを使うと文字列でコードを書けるので利用する。 docs.python…

mutate_atで引数付き関数を使う

やりたいこと mutateでは、関数を以下のように適用を適用することができる。 library(tidyverse) iris %>% group_by(Species) %>% mutate(Sepal.Length_lag2 = lag(Sepal.Length,2)) # Sepal.Length Sepal.Width Petal.Length Petal.Width Species Sepal.Len…

モデルに対して値の推定結果を作成する

やりたいこと モデルを作成して、そのモデルをある値に適用したときの推定結果を作成したい。 今回は モデルの学習データの推定値 任意の値をモデルに適用したときの推定値 の2パターンについて書く。 共通処理 今回、モデルはdiamondsに対して線形モデルlog…

purrrを使って、関数の引数を変えて適用したDFを結合していく

やりたいこと 関数の引数を変えて適用したDFを結合したい。 以下のように、指定した列colに対してunder_value以下となるdfを抽出して、そのunder_valueをfiltered_values列に追加する関数filtered_under_valueで考える。なお、見た目上わかりやすいためhead…

ggplotで他の変数を基準に並び替える

数値で並び替える場合 以下のようなグラフで考える。 library(tidyverse) data(diamonds) # データ作成 df = diamonds %>% group_by(clarity, cut) %>% summarise(n = n()) %>% ungroup() # わかりやすいものだけ抽出 df_filtered = df %>% filter(clarity %…

map2を使ってサブサンプルに分けた各データに対して複数モデルを適用する

表題通り、サブサンプルに分けた各データに対して複数モデルを適用したい。 より具体的に書くと、以下のdropoutさんの記事では 複数のモデルを当てはめる場合 diamondデータに対して、3モデルを適用 サブサンプルに分けて分析する場合 diamondデータをclarit…

ggplotのfacet日本語テキストを折り返す

これはなにか ggplotのfacet内の文字を任意の文字数で折り返し(改行)をしたい。 どういうことかというと、下記のようにirisベースでテキトーにSpeciesを日本語化して文字数を増やしたもので考える。 library(dplyr) iris2 = iris %>% mutate(Species_jp = ca…

DataGripのショートカットキーなど俺俺メモ

もともとSQLはSublime Textで書いて、クエリ投げるのはDataGripだったんですがいいかげん1つに完結させるためにDataGripをちゃんと使えるようにする。 ちなみにDataGripってどんなん?っていう部分は以下の記事が端的でわかりやすい qiita.com キーボードシ…

Jupyter Labのショートカットキー俺俺メモ

Jupyter Lab(Notebookは一部違うが概ね同じっぽい?)をなんとなく使ってて、インデント系と実行系くらいしかショートカットキーを知らなかったのでちゃんと調べて使いそうなやつをメモ。ちなみにMacです。 公式ドキュメントに見当たらないが、有志によるチー…

Python, RでDBに接続するときのパスワードをコードに直打ちしない

Python, RともにDBに接続するときにパスワード情報をソースに直打ちすると、gitなどにアップするときに色々とヤバいので直打ちしない方法をメモ。 json設定ファイルから 以下のようなpassword管理用のjsonファイルを作る。 { "redshift": { "id": "myID", "p…

lemonパッケージでggplotをいい感じに見せる

ggplotをきれいに見せるパッケージlemonを動かしたので紹介。 基本的に公式ベース github.com facetしたときの軸目盛りの明示 以下のようなデータがあるとする。 library(tidyeval) g = mtcars %>% # ggplot(aes(wt, mpg)) + ggplot(aes(wt, mpg, color = fa…

{{ }}を用いると、普段のdplyrの書き方を関数内でもほぼできるようになった模様

dplyrではNSEなどの関係で、関数内で普段通りのdplyr的な書き方はできなくて色々とややこしかったのが、rlang 0.4.0からは{{ }}を使って直感的な書き方ができるようになったらしい。 www.tidyverse.org www.r-bloggers.com 関数を使わないでコピペを繰り返す…

ggplotの軸の桁表示を制御する

ggplotで、桁数が大きいと自動でe+n表示へと変わる。 自分で分析する場合はいいが、この表示に慣れていない人に見せる際にわかりづらいので制御する。 まずはデフォルトでの表示。デフォルトでは107以降が存在する場合e+nの表示になる。 library(tidyverse) …

ggplotのでいちいちbreaks+seqを使わずに目盛りの刻み幅を指定する

ggplotではX軸の目盛り幅を指定するときはscale_x_continuousに対してbreaksオプションに対してseqを用いて刻み幅nでX軸に値を表示します。 ただし、seqでの指定だと breaks = seq(xmin, xmax, n)といったようにxの表示最大値と最小値を意識して使わないとい…

pythobnでpprintを使ってリスト・辞書をきれいに出力する

割と常識っぽいが知らなかったのでメモ。 リスト・辞書は通常のprintでは1行にすべて表示されるがpprint.pprintを使うときれいに表示される。 以下のようなデータでおこなう。 import pprint hoge = [[1,2,3,4,5,6,7,8,9,10],[1,2,3,4,5,6,7,8,9,10],[1,2,3,…

Rで任意の範囲でヒストグラムを作りたい

問題 ggplotではgeom_histgramを用いるとヒストグラムを作成できる。また、オプションとしてbinwidthを指定するとビン幅を決めることができる。 library(tidyverse) data <- c( -1, 1, 11, 27, 31) data %>% tibble() %>% ggplot(aes(x = .)) + geom_histogr…

Rの並び替えをfactorのlevelsで制御する

概要 問題 Rで列の並び順を固定したい 解決方法 factorを用いてfactor型に変換し、その際にlevelを指定する。 実践 データを読み込む library(tidyverse) library(tidylog) df_iris = iris %>% tibble() %>% select(species=Species, sepal_length=Sepal.Len…

Rで縦持ち・横持ち化する

Rでは、今まで縦持ち化するときにはtidyr::gather、横持ち化するときはtidyr::spreadを使っていたがオプションが毎回よくわからずドキュメントを読んでいたが、それはみんな同じことを思ってたみたいでdplyr1.0以降では再設計されてtidyr::gather→tidyr::piv…

pandasのMultiindexを整理する

この記事はなにか こういうデータフレームを こういう形にしたい。 以下の記事の「集約」という節でpandasのMultiindexをもとの形式に戻すやり方を書いたがもうちょっとわかりやすい方法があったのでメモ。ただし、メソッドチェーンで完結していない。 knknk…

文字列からformulaを作りたい

やりたいこと リストにある文字を組み合わせて作った式をfor文で動的に変えていきたい。 問題点 以下のコードのように、felm関数のformulaに文字列で式を渡した場合エラー。 ちなみに、lfe::felmは固定効果モデルを使うときの関数。 knknkn.hatenablog.com l…

facet_gridで1軸に複数要素を指定する

めちゃくちゃしょうもない小ネタですが、以下のようにfacet_gridで軸列を指定するときに+を使うと複数指定が可能になる模様。 facet_grid(. ~ c(color, cut))とかで複数要素指定できるんかなー → できないやんけ!と思ってたら。。。。 library(tidyverse) d…

ggforce::facet_matrixを用いてfacet_grid(c(A,B,C) ~ c(D,E))的な表現を実現する

以下のツイートを見かけたので試してみた記事。 ggforce::facet_matrix 凄いわ.tidyr::gather をスキップできる…….ggplot(iris) + geom_boxplot(aes(Species, .panel_y)) + ggforce::facet_matrix( rows = vars(everything(), -Species), cols = vars(Spec…

Stanのmodelブロックの意味

Stanを書くとき、モデル式を書いてそれをコードに落とし込むという流れで書いている。感覚的にコードを書いているのだが、冷静に振り返ると何故ここにこれを書くのか?ということがわからなくなってきたのでメモ。 というか、前の記事みたいにエラーが出た際…

Rでメモリを解放したい

デカイオブジェクトを何個も作る場合、メモリが足りなくなる。それゆえに、使わなくなったら削除してメモリを空けたい。 ただ、Rではどうやらメモリを食っているオブジェクトを削除するだけではメモリが空かないみたい(Rに限った話なのかは不明)。 以下は現…

複数のモデルを管理する

purrrとbroomの使い方をマスターするために。以下の記事をトレースする。 内容自体は引用元記事の方がちゃんとしているのでそちらを読んでもらいたい。本記事は、読むにあたって理解が薄い人(=自分)用の補足メモを書きながらのトレースとなる。そのため、本…

themeを作ってggplotの出力コードをコピペで何回も繰り返さない

はじめに ggplotを使っていて、結構何回も同じこと書いていることが多いなーと感じたので改めて省略できる部分を省略することを考える。 そもそもプログラマーのための原則として、DRY原則というものもある。 DRY原則 | プログラマが知るべき97のこと また、…

glue::glue()による動的なファイル名/クエリの生成

Rのglue::glue()を使うと、{}で囲った変数名に応じた変数で補完した文字列が生成される。 library(glue) for (i in 1:3){ print(glue('hoge{i}')) } # => # hoge1 # hoge2 # hoge3 glueを利用して、動的にファイルを作成する。以下では、irisをspecies毎に分…