PythonとRとRustの使い分け

普段使っているプログラミング言語はPython、R、Rustの3言語です。

この一年間でやった主なプログラミング関係のこと:

  • データ分析
  • データの視覚化
  • APIからデータを取得
  • ウェブスクレイピング
  • 機械学習
  • SQLite/Postgresを利用したアプリの開発やデータの分析
  • ウェブアプリの開発
  • コマンドラインアプリの開発

どれもPythonかRかRustを使いました。

Python

一般的なプログラミング

何をするにしてもPythonが無難なことが多いです。

作業を自動化するためのスクリプトや、ちょっとしたウェブアプリなどもPythonで書きます。本格的なアプリケーションであれば他の言語も検討するかもしれませんが、パッとツールを作りたい時はPythonが役立ちます。

データ関係

ファイルからデータを読み込んで統計やグラフを表示するという一連の流れはRを使った方がやりやすいと感じることが多いですが、Pythonでもやります。

APIからデータを入手したりウェブスクレイピングを行う際にもPythonを使うことが多いです。

主なパッケージ:pandas, seaborn, japanmap

機械学習

Rでもできると思いますが、Pythonの方が情報が多いので、Pythonでやっています。

R言語

データ関係

データの分析のためにはtidyverseがとても使いやすいので、Rを使うことが多いです。

視覚化のライブラリはPythonでもありますが、Rのggplotが一番使いやすいと感じるので、少し凝ったものを作る場合は基本的にRを使います。

主なライブラリ:tidyverse

R Markdown

LaTeXの数式などを含んだPDFを作成するときには非常に便利です。

Rust

Rustはコマンドラインアプリを開発するときに使います。

言語自体の難易度はC言語やC++と似たようなものかもしれませんが、全体的にツールなどがよりモダンで使いやすいと感じています。

ゼロからはじめるプログラミング言語Rust(3) 他のプログラミング言語から見たRustの特徴とは? | TECH+

そのほか、Rustを取り巻くエコシステムが健全に機能していることも紹介されしている。ビルドツール、開発者コミュニティ、ユーザーコミュニティなどがうまく回っており、情報共有サイトなどの活用も進んでいる。

今後Rustのエコシステムがより発達すればコマンドラインアプリ開発以外の用途でも使いたいと考えていますが、現状RustがPythonより明らかに優れていると感じる分野が(自分の用途では)コマンドラインアプリ開発だけなので、このような使い方になっています。

求めているライブラリが見つからないことはまだあるので、短期的にはRustよりGo言語などの方が無難かもしれませんが、長期的にはRustにはかなり期待できると考えています。

あまり使っていない言語

SAS

一応Base Programmerの試験に合格しましたが、普段使うことは正直ほとんどありません。

Java

勉強していたことはあるので、復習すればそれなりに書けると思いますが、今はあまり使っていません。データ関係でも使える場面は多そうなので、勉強する価値はありそうです。

Processingとかももっとやりたいです。

C言語

以前勉強していましたが、使う理由があまりなくてしばらく使っていません。メモリ関係の勉強をする際にRustとC言語を比較しながら両方勉強するといいかもしれません。

他に気になっている言語

Scala

R言語以外で関数型プログラミングを勉強するのであれば、(僕の用途では)Scalaが一番実用的な印象を受けます。

Javascript

ウェブ関係のことをやるためというよりは、データの視覚化のためのライブラリが色々あるので、そのために勉強してもいいかなとは考えています。

Shell

基本Pythonでいい気がしますが、Shellも役立つことはありそうです。

Julia

PythonやRより速いみたいですが、今はまだ必要性を感じません。今もしPythonで速度が足りないのであれば、まずはPythonとRustを一緒に使うことを考えると思います。

今後

個人的には今メインで使っている3言語は気に入っています。ここにScalaやJavaやJavascriptが加わるとできることの幅が広がっていいと思いますが、しばらくはPythonとRとRustにフォーカスするつもりです。