と。

Github: https://github.com/8-u8

Rに育てられて、Rと生きている話

この記事は

R Advent Calendar 2022の24日めの記事ですが期日前投稿します。

Rのコードが出てこないAdvent Calendar記事

今回は僕のキャリアとRとの付き合い方に関して語ります。
なぜこのタイミングかというと、年末で現職を退職し、
2023年からは別の会社でRを使うからです。
僕はR言語と一緒にキャリアを開拓してきたところがあり、
成功も失敗もRで経験してきました。
転職活動もRでの経験をメインに置いて進め、どうにか丸く納まった、という感じです。

よくデータ分析・データサイエンスの市場では「RとPython、どちらがいい?」
という議論は山ほどあります。僕のキャリアの師のTJOさんもよく議論しています。

tjo.hatenablog.com

僕はR派なのですが、今の仕事的には圧倒的にRが馴染んでおり、
結果Rで成果を積み重ねてこられたところがあります。
加えてコミュニティに受け入れられ、育てられたなあという感慨もあります。
結局Rでできないことはなく、Rで出来ないことを作っているのは自分自身なので、
自分自身の成長が、そのままRでできることの拡大につながるのだなと、
ようやく今年に入って理解(わか)った形です。

とはいえこの記事を開いた人はどこかでRでキャリアが開けるのか
少し不安なのだと思います。結論Rだけに固執していては難しいかもしれませんが、
Rを通して見聞が広がれば、巡り合せ次第で、僕くらいにはなれるようです。
僕になろうと思う人はそんなにいないと思いますが。

そういう感じで、一切実装は出てきません。読み物としてご笑覧あれ。

仕事でRを使い、他の人にもRを使ってもらう

TokyoRで聞いた発表を仕事に反映する

Rは卒論や修論でも書き捨てでコードを書いていたので、
文法自体はある程度把握した状態で仕事が始まりました。
実際のところRproject{tidyverse}の使い方を積極的に意識したのは
仕事を始めてからです。それまでは書き捨てのコードでsetwdディレクトリを設定して、
ディレクトリ直下にあらゆるファイルを配置するような運用をしていました。
それ故に参照するべきファイルがわからなくなったり、
Rでやれる範囲を過小評価し、Excelで手作業してしまったりして、
結果ミスってよくお客さんに謝罪していたなあと思います。

Rproject{tidyverse}の使い方を知るきっかけがTokyoRでした。
どちらもTokyoRの初心者セッションで、ymattuさんの発表で
初めて出会い、使い方を覚えてすぐに仕事に反映していました。

ymattu.github.io

ymattu.github.io

ここではあくまで基本的な使い方で、プラスアルファで仕事をしながら試行錯誤したり、
考えたりして「計算や分析の設計をミスらないようなR環境を作る」という、
自分なりのスタイルを確立していけたかなと思います。
スタイルを確立できると、表計算ソフトでやるべき仕事は、計算ロジックの確認とか、
アドホックなスタイルの調整という、表計算ソフトが得意な部分に収まり、
それもRmarkdownで簡略化出来たりと、Rでできることの幅がかなり広がったなあと思います。
2~3年かかったものの、計算や分析の設計ミスもかなり事前に把握できるようになりました。
TokyoRでの関わりなしには、Rでキャリアを積み上げることは諦めていたかもしれません。

もちろん、仕事に反映しても運用までにこぎつけられなかったものもたくさんあります。
とにかく試して難しかったら一旦脇においてを繰り返しています。

自分だけがRを使える状態からの脱却

TokyoRではまず「個人がRを使って成果を出す」ことについて、とても丁寧に、
ほぼ最短距離で到達できるコンテンツが、10年分蓄積されています。
一方で「チームでR使う」という点は応用的で、かつ組織ごとにベストな在り方が異なり、
その体制づくりは非常に難しいなと思いました*1

僕はGoogleのコーディングガイドを参考に、 コーディングルールを作ったり、
gitを使ったコード管理やレビューを導入したりすることで、
一人では出来ないR開発を進められるような体制をいくつか模索していきました。
エンジニアとしてのバックグラウンドは僕になく、今の会社は開発の会社でもないので、
エンジニアの観点に立てばもっとできることはあると思うのですが、
Rを標準環境として定義し、Rを前提に分析を設計できるような準備を立ち上げられたのは
「会社を変えた」という意味では大きいのかなと思います。

TokyoRでの学びは個人のスキルアップとしてとても参考になり、
その上で「自分だけの成果」にならないようにすることに意識を向けられるかどうかが、
Rを仕事で使い、Rでキャリアを積み上げるときにカギとなったところだなあと思います。

プログラミング言語」としてのRの再発見

これまたTokyoRではあるのですが、応用セッションやLTでは、
Rで変なものを作ってくる人が一定割合でいました。
たとえば、RでJavaのVMを書く人や、 Rの関数を魔改造する人などがいました*2
Rは変なことができるんだなあと思う反面、そういえばRはプログラミング言語じゃないか、
という(当たり前な)気付きもあり、プログラミング言語としてのRであれば、
回帰係数の算出だけではなく、データの読み込みから分析計算の実行、
結果の整理・可視化に至るまでを一通りのシステムとして設計できるじゃないか、
という再発見が、個人的にはキャリアとして視野を広げられたと思います。
結果2020年に入ってからは集中的にRを書いたら、
後はもう必要なタイミングで実行するだけになって、結果的に仕事が減りました。
本当のエンジニアからみたらGUIもないので大したことではないのですが、
あくまで自分にとっては大きい学びでもありました。
よく「RはPythonよりはプログラミング言語としての汎用性に劣る」とも言われますが、
逆に言えばRでプログラミングを覚えるステップを置くことで
Pythonのような汎用性に勝る言語をより柔軟に使えるようになる側面もあるとは思います*3
実際RでJavaVM作れたらプログラミングの汎用性って何なのか、とも思うので、
Rがいいなあとぼんやり思う人なら信じてRを使えば良いのでは、と思います。

どうせ表計算ソフトは使うので上手く同居する

これはキラキラTech企業には当てはまらない部分もあるかもしれませんが、
表計算ソフトってとんでもなく汎用的な計算ソフトウェアなので、
Rだけ、Pythonだけで仕事ができる環境は本当に一握りだと思います。
Rだけ書けても、Rで書いた結果をRを知らない人にも共有できる場がないと
仕事が価値になりません。
表計算ソフトはその意味で、人類の多くに理解しやすい視覚化を提供します。
仕事を始めたときは「この会社から表計算ソフトによる運用を根絶するからな……」
と息巻いていましたが、正直それはあまりにも無謀です。
仕事をRで閉じて全部やることはもちろん可能です。
ただし、仕事は往々にしてチームで価値を高めていくものなので、
チームで最適なソフトウェアの選択を行う必要があると思います。
僕は結局ggplot2とRmarkdownでのレポーティング・ドキュメンテーションを諦め、
表計算ソフトのグラフ化で会社のフォーマットに合わせるなどの妥協をしていました。
表計算ソフトでは重すぎる計算をRで済ませるとか、
誰も気にしないようなファイル整理を徹底的に行うとか、効率的に仕事を動かしたり、
プロジェクトが進行するごとに非効率にならないようにしたりと、
裏ではフルでRを使っていたなあと思います。

Rについてブログ記事を書く

2016年頃からはてなブログを始めていたのですが、
それまでは研究に関連した社会学統計学関連の理論的な議論が多く、
Rによる実装は、仕事を始めた2018年から本格的にRに関する記事が増えたと思います。

socinuit.hatenablog.com

心がけとして、実装はgithubで管理しており、自分で都度振り返る事ができるようにしていました。

github.com

github.com

ブログが誰にどれだけ読まれているかを意識することはあまりないのですが、
転職活動の際に「ブログ読んでます!」と言われたことが何回かあったので、
自分がやったことや考えたことを人の目に映る形で残すことで、
いつか誰かが評価してくれる、ということと同時に、
下手なことは書けないなあと、身の引き締まる思いです。

Rで素晴らしいキャリアを積み上げることはできる。

僕は間違いなくRでキャリアを積み重ねています。
僕が生き証人になれるのであれば、まあもっと要領がよく、能力のある方なら
もっと上を目指せるでしょう。これが市場価値において、どの程度評価されるか、
将来性があるかは知ったことではなく、ただ事実として、僕はRで仕事をしてきました。
Rのお陰でPythonにも触れる機会を得たし、Rustにも手を出せるようになりました。
おそらくデータ分析系の職種市場価値を決めるための要因として大きいのは、
メインに使う言語ではなく、データそのものに対する関心や、
分析手法・アルゴリズムに対する熱意、あるいはビジネスに対する使命感の方だと思います。
結局お気持ちかよ。結局お気持ちでしょう。
Rでできないことはないし、Pythonでもそうです。
冒頭述べた通り、出来ないことを作っているのは自分自身なので。

結論「Rを使うべきか、Pythonを使うべきか」ということで
キャリアを迷う必要はあまりないと思います。
Rに出会い、面白い言語だと思うのであれば、Rを使いこなせるようになれば良く、
Pythonに出会って気が合うと思うなら、Pythonを使いこなせるようになれば良いと思います。
結局のところ周辺環境にも依存します。その点も含めて、どちらに向き合い続けられるかで
付き合う言語を選んで良いんじゃないでしょうか。

次の会社は身の丈よりちょっと大きなことをやることにしていますが、
Rでなんとかできると思います。
ちょっと大きいくらいならオーバーサイズってことでごまかせるだろとも思っています。
もちろん、身の丈に合うように自分を成長させる努力は惜しむつもりはないですが、
努力が報われなくても「それはそれ」と思うようにします。

座右の銘は「真面目に不真面目」、やっと不真面目に入門出来た感じがするな。

最後に、TokyoRを始めとする日本国内のRのコミュニティにこの場で心から感謝します。
次の会社の決め手もRユーザが同僚にいることでしたし、 その縁の始まりはTokyoRの懇親会でした。
僕のキャリアを語る上でRのコミュニティは外せません。これからもよろしくお願いします。

蛇足

あ、ほしいものリストを置いておきますね。

www.amazon.jp

*1:もちろん例外はあり、たとえばKoshiishiさんのチームでの運用例は大いに参考にしていました。

*2:Atusyさんのスライドはリンクが切れていました

*3:直後に述べるように、RとPythonでは、汎用性においてそこまで違いを感じませんが、技術選定でPythonが多く使われるのは事実としてそうなので、こう言っています。RでもYoutube見れるし。