機略戦記

Maneuver warfare

R: 複数のvectorやfactorに対してすべての組み合わせを列挙する関数なんだっけ

R

結論 expand.grid() 解説 library(dplyr) library(tidyr) week <- c('月', '火', '水', '木', '金', '土', '日') am_or_pm <- c('AM', 'PM') expand.grid(week=week, am_or_pm=am_or_pm) %>% arrange(week, am_or_pm) こうすると、 week am_or_pm 1 月 AM 2 …

R: factor型の変数から「次のlevelのfactor」を得たい

R

課題 > week <- factor(c('月', '火', '水', '木', '金', '土', '日'), levels=c('月', '火', '水', '木', '金', '土', '日')) > week [1] 月 火 水 木 金 土 日 Levels: 月 火 水 木 金 土 日 > monday <- week[1] > monday [1] 月 Levels: 月 火 水 木 金 …

全体最適を行うためには「部分非最適」を受け入れる必要がある

大体の仕事は、いくつかの機械や人、あるいは組織が連携して働いて最終的な成果(製品とかサービスとか)を作る。 このような仕事において、最終的な成果を増やすためには、「改善を行って効果がある部分」と「ない部分」がある事を認識する必要がある。それを…

相手に合わせて言い方を変える

「ある製品のソースコードのあるモジュールのがクッソ汚くて直さねばならない」という話を、 収支責任者には「機会損失なので直すべきです」 PMには「リスク要因なので直すべきです」 エンジニアには「技術的負債なので直すべきです」 みたいに言い方を変え…

冗長性は「無駄」であると同時に「備え」でもある

バナナの危機 バナナはそんなに好きな果物では無かったが、最近良くバナナを食べるようになった。 私達が慣れ親しんでいる種のバナナが近いうちに流通しなくなる可能性があるからだ。なくなると聞くと惜しくなる。 何が原因でバナナが流通しなくなる可能性が…

ポケモンGOが面白いのは現実と仮想が接続されるから

7/22にポケモンGOがリリースされて以来、4日間ほど遊んで見て、このゲームは面白いと感じた。 なぜそのように感じたのか自分なりに考えてみたので、考えたことをメモしておく。 ポケモンGOで遊ぶと画面の外と中とが相互に影響を与える事が実感できる 画面の…

人生を改善するには正味作業時間を増やすしかない

年末なので内省的になった*1結果できたエントリです。生暖かい視点でご覧ください。 正味作業とは、作業全体のうち「価値を付与することに貢献した部分」のことである。 これはトヨタ生産方式に含まれる諸概念の内の一つだ。 例 これは「ボールペンに対しキ…

エンジニアからデータ分析になって3ヶ月が経った

これは【その1】ドリコム Advent Calendar 2015の21日目の記事です。 前日は、奈良阪さんの研修で新規ゲームアプリをモデルとビューに分けて作ったり色々したら捗った話です。【その2】ドリコム Advent Calendar 2015もよろしくお願いします。 私は、2015年1…

R : POSIXctをas.Date() する時にtzを指定しない場合、POSIXctのタイムゾーンに何が設定されていてもUTCとみなして処理されているのでは?

R

POSIXctはタイムゾーンを伴った日時型であり、これをas.Date()という組み込み関数に渡すと、Dateという日時型に変換できる。 この関数の挙動にどうにも違和感がある。 どうもこの関数、POSIXctをas.Date() する時にtzを指定しない場合、POSIXctのタイムゾー…

ggplot2 ヒートマップの並び順を変更したい。

stackoverflow.com factorのlevels順に表示されるっぽいので、levelsを任意の順番に並び替えればできるらしい。できた。

R 「エラー: 関数 "grid.newpage" を見つけることができませんでした」と言われる

R

結論 library(grid)する。 > # エラーになる > grid.newpage() エラー: 関数 "grid.newpage" を見つけることができませんでした > > # gridを読み込めば大丈夫 > library(grid) > grid.newpage() 説明 grid.newpage()はggplot2に含まれていない。

R data.tableから一定量のレコードをサンプリングしたい

結論 dplyrつかう。 library(dplyr) dt %>% sample_n(100) # 100レコード取り出す dt %>% sample_frac(0.1) # 全レコードの10%を取り出す

R ある関数が現在のスコープに存在するか調べたい

結論 たとえばlibrary()関数が現在のスコープに存在するか確認する場合: target_function_name <- 'library' exists(target_function_name)

[R] キーワード付き引数みたいな事がしたい

R

rubyで言うところのキーワード付き引数みたいな事がしたい。 結論 普通に引数を定義するだけで、キーワード付き引数のように振る舞う。 function_argument_biheibia_test <- function(argument1, argument2) { print(argument2) } function_argument_biheibi…

[dplyr] group_byを行う時、集約に使うキーを変数で指定したい。

R R

やりたい事 ここにirisがある。 > head(iris) Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa 6 5.4 3.9 1.7…

catするとき、一緒にファイル名を表示したい

結論 空文字でgrepする。 $ find . | xargs grep ""

[R] 2つ文字列ベクターに対して全ての組み合わせを求めたい

R

結論 > expand.grid(c('a', 'b', 'c'), c('1', '2', '3')) Var1 Var2 1 a 1 2 b 1 3 c 1 4 a 2 5 b 2 6 c 2 7 a 3 8 b 3 9 c 3 説明 例えば、「10段階にカテゴライズされた年齢」と「性別」に対して組み合わせを求めたい時とかに使う。

プログラム実行中のある時点で処理を止め、止めた位置のコンテキストを維持したまま対話的にコードを実行したい(Rubyのbinding.pryみたいな事がしたい)

R R

結論 止めたい位置でbrowser()を実行する。 例: このようなスクリプトがあったとする。 a <- 1 止めたい位置にbrowser()を挿入する。 a <- 1 browser() 実行時にconsoleが起動し、対話的にコードを実行できる。 Browse[1]> a [1] 1 説明 browser()が実行され…

[R] 文字列が複数格納されたvectorを結合して一つの文字列にしたい

R

結論 > string_vector <- c('abc', 'def', 'ghi') > Reduce(function(x, y){ paste(x, y) }, string_vector) [1] "abc def ghi" こうすれば行ける。 もっとシンプルな方法は無いものか… 背景 ある変数のclassをチェックして、想定外の値だったらstop()させる…

R あるdata.tableが指定したカラムを備えているか判定したい。ただし指定したカラム以外のカラムがくっついていてもTRUEを返させたい。

R

結論 # 期待するカラム(の名前) expect_column_names <- c('V1', 'V2') # 判定したいテーブルが持っているカラム。 # 「V3は別にマストで存在していて欲しい訳ではないがあっても問題ない」という条件で判定したい。 column_names <- names(data.table(V1=1,…

R で data.tableに変数で指定した名前の列を追加したい

R

結論 eval以外のいい方法が見つからなかった。 sample_data_table <- data.table(V1=1, V2=2) new_column_name <- 'new_column' expr <- parse(text = paste(new_column_name, ":= V1+V2")) sample_data_table[, eval(expr)] ## Checking the result print(s…

MacでRを実行している時、処理が終わったら通知を行う方法

R

結論 # 処理 system("osascript -e 'display notification \"done.\"'") 結果 説明 AppleScriptから通知を行う事ができる。 osascriptを使うことで、AppleScriptのコードをシェルからevalできる ← これでshellから通知を行える sysytem()を使うことで、shell…

R6でAll elements of public, private, and active must be namedと言われた時チェックすべき点

R

R6パッケージを使って作ったクラスについて、以下のエラーが出る事がある。 R6::R6Class("XxxxXxxx", public = list(initialize = function(xxxxx) { でエラー: All elements of public, private, and active must be named. R6で定義しているメソッドについ…

R あるコードを処理するのにかかった時間を測定する方法

R

結論 system.time({ # 測定したいコード })

rubyでcall stack参照するメソッドがなんだっけ

結論 callerだった。 使用例: $ pry [1] pry(main)> caller => ["/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/pry_instance.rb:355:in `eval'", "/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10…

パターンに一致するファイルの拡張子を全部変更したい

カレントディレクトリにある*.csvの拡張子を.txtに変える。 for fname in *.csv; do mv $fname ${fname%.csv}.txt; done

Rで、指定したdata.tableの全てのカラム名にprefixを付けたい。

R

結論 table <- data.table(a=1,b=2,c=3) prefix <- 'hoge' old_names <- names(table) new_names <- paste(prefix, old_names, sep='.') setnames(table, old_names, new_names) これで、 処理前にnames(table) #=> "a" "b" "c"だったカラム名が、 names(tab…

RのR6パッケージを使ってクラスを作るとき、クラスメソッドとかスタティックメソッドみたいな物を定義したい。

R

背景 R6パッケージで作ったこんなクラスに対して、クラスメソッドとかスタティックメソッドみたいな物を付けたい。 クラスメソッドとスタティックメソッドは違うものだけど、とにかくクラスをインスタンス化しなくても使えるメソッドを付けたい。 # ある証券…

RでrandomForest()を実行した時、 Are you sure you want to do regression?と警告される。

R

前提 logical型の目的変数をrandomForest() (randomForestパッケージの)で予測したい。 regressionでは無くclassificationがしたい訳だが、以下の警告がでる。 > nikkei225.rf <- randomForest(is_up~., data=train.rf, mtry = 184) 警告メッセージ: randomF…

Rで長時間かかる処理が終わった時に音声で知らせて欲しい。

R

結論 # 長時間かかる処理 system("say 'done.'") 説明 system()でシェルコマンドが実行できるので、sayなどで音をだす。

importance(randomForest)の結果をdata.table (もしくはdata.frame)で得たい

R

前提 RのrandomForestパッケージにあるimportance()関数を使うと、学習した各種特徴量が目的変数の説明にどのくらい寄与しているのか得られる。 この時、この結果は、特徴量をrownameとするMatrixとして得られる。これをV1を特徴量の名前、V2を寄与度とするd…

Rで畳み込みがやりたい(Haskellで言うfoldとかrubyで言うinjectみたいなやつ)

R

結論 Reduce()を使うっぽい。 Reduce(function(x, y){ x + y }, c(1,1,1,1,1) ) [1] 5 > Reduce(function(x, y){ x * y }, c(1,2,3,4,5) ) [1] 120

御社ァ!!

$ ruby -e '7.times.map{|_| ["御社","貴社"].sample + ["アァァ", "アァ", "ァ", ""].sample + ["...", "!?", "!", "!!", ""].sample }.each_slice(3){|shout| puts "「#{shout.join([" 」\n「",""].sample)}」" }' 実行例 「貴社!?御社...貴社ァ!?」 「貴…

コマンドの実行結果をファイルに出力しながら標準出力にも表示したい

結論 (なんらかのなにか) | tee output.txt これで、output.txtに実行結果が書き込まれつつ、画面にも表示される。

NYSOLシリーズのRubyMで超高速にcsvを扱いたい

MCMDで有名なNYSOLプロジェクトがこのようなライブラリを出してる。 RubyM rubyでcsvを高速に扱うためのライブラリで、公式Webサイトによれば、標準のCSVやFasterCSVなどと比較して桁違いに早いらしい。 インストールに結構手間取ったので作業メモを残してお…

異なるディレクトリに入った同名のファイルを1箇所にまとめたい

異なるディレクトリに入った同名のファイルを1箇所にまとめたい。 ファイル名が同一なので、何かユニークな名前に変える必要がある。 結論 for i in `find . | grep .gz` do before=$i after=`echo $before | sed 's/\.\///g' | sed 's/\//_/g'` `cp $before…

例えば`find .`の結果に対して繰り返し同じ処理を適用したい

あるコマンドの実行結果として得られたすべての行に対して別の処理を行いたい。 例えばfind .の結果に対して繰り返し同じ処理を適用したい。 結論 for line in `find .` ; do ; echo $line ; done 解説 find .の結果が変数$lineに格納される。 echo $lineがf…

Twitter APIを制限目一杯まで実行したい

結論 あるAPIを残り何回叩けるか、いつ制限がリセットされるかなどの情報を取得できるTwitter APIがあるので、そいつから取得した情報を元に制限一杯まで実行すれば良い。 このAPI: GET application/rate_limit_status | Twitter Developersdev.twitter.com …

SSHが切断されてもリモートでコマンドを実行し続けるやつなんだっけ

結論 $nohup コマンド

twitter gemで、screen_nameではなくuser_idを指定してfollower_idsを取得したい

結論 client.follower_ids(user_id: SURVEY_USER_ID).to_a ちなみにscreen_nameで指定する場合はこう client.follower_ids(SURVEY_USER_SCREEN_NAME).to_a 説明 ここを読んだら分かった。 twitter/friends_and_followers.rb at b299925d22d9ccf75c50328cea34…

twitter APIをrubyから実行したい

結論 twitter gem使おう sferik/twittergithub.com 補足 twitter gemを使うのにあたって、各種認証情報が必要だ。 認証情報を得るにはTwitterAppを作る必要がある(ようだ)。 tiwtterAppを作るには、地震のtwitterアカウントに電話番号を登録しておく必要があ…

twitterのscreen nameからuser_idを調べる

TwitterのユーザーIDを調べるwebサービスsyncer.jp

Macで`du --max-depth=1`が使えない気がする

結論 du -d 1でOK

RでH2O failed to start, stopping execution.が発生した

R

結論 Java SEをバージョンアップしたら解消した。 説明 java -versionでバージョンが確認できる。 ╰─$ java -version java version "1.6.0_65" Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609) Java HotSpot(TM) 64-Bit Server VM (build…

カンマ区切りの1行のデータを複数行の形式に変換したい

sh

結論 $ echo 'a,b,c' | tr ',' '\n' a b c 説明 trで置換する。

はじめてTokyoR勉強会に参加した

R

あらすじ kaggle初挑戦: タイタニック乗客のプロフィールから生存率をランダムフォレストで予測してみた - 時系列のフリーランチshinya131-note.hatenablog.jp 先週の日曜日にRをインストールして、Kaggleをやり始めた。 大変おもしろいのでもっと勉強する事…

install.packages('dplyr')でpackage ‘dplyr’ is not availableと言われた

R

環境 RStudio + R Mac OS 結論 Rのバージョン古かった。アップデートしたら成功した。 説明 dplyrという便利そうなパッケージを知ったのでさっそくインストール。 以下のようになってインストール出来ない。 > install.packages("dplyr") Warning in install…

ワイルドカードで指定したExcelで作ったS-JISのCSVを全部UTF8に変換したい

結論 for f in *.csv ; do ;cat $f | iconv -f CP932 > $f.utf8 ; rm $f ; mv $f.utf8 $f ; done 説明 シェルでワイルドカードで指定したファイル全てに対して特定の処理をしたい - 時系列のフリーランチshinya131-note.hatenablog.jp Excelで作成されたSJIS…

シェルでワイルドカードで指定したファイル全てに対して特定の処理をしたい

結論 for f in *.csv ; do ; (ここお好きな処理を書く。$fにファイル名が入っている) ; done 説明 イテレーターみたいなやつ

Excelで作成されたSJISのCSVをシェルで扱いたい。というかUTF-8に変換したい。

sh

結論 cat from_excel.csv | iconv -f CP932 -t UTF-8 説明 iconvで文字コード変える Excelが使っている文字コードは厳密にはS-JISではなくてCP932