皆さん、こんにちは! Functional FebruaryとMechanical Marchが終わりました。さて、次はAnalytical Aprilの番です。今回はデータサイエンスにぴったりの言語に注目していきます。
ここ数か月と同じように、この動画ではErikと私が、今月の内容と取り上げる言語について手短に紹介します。
いつもどおり、Erikがこのあと言語について説明してくれますが、まずは私から今月の実用的な詳細をお伝えします。
まずは今月の注目言語です。今月はJulia、Python、Rの3つだけです。それぞれかなり性格が異なりますし、言うまでもなくPythonは非常に多目的な言語ですが、今月はこれらの言語をデータサイエンスの視点で使ってみることをおすすめします。
Analytical Aprilのバッジを獲得するには、これらの言語のいずれかで演習を5つ完了する必要があります。違いについてはこのあと見ていきますが、ExercismでいうところのPythonトラックには素晴らしいシラバスがあるので、ぜひ試してみてください。今月中にはJuliaのシラバスも公開したいと考えています。作業の多くは終わっていて、あとは仕上げるだけです。Rにはシラバスはありませんが、楽しく取り組める興味深い演習がたくさん用意されています。
試せる注目の演習は次の5つです。
- etl: データを別の形式に作り変える方法を学べます
- largest-series-product: 数字の並びからパターンを効率よく探す練習ができます
- saddle-points: 多次元配列や行列を扱う方法を学べます
- sum-of-multiples: 数値の並びを絞り込んで合計する練習ができます
- word-count: 文字列を単語に分割して数えます
Analytical Aprilのバッジに加えて、1年間続く#12in23バッジがあることもお忘れなく。これは、年間を通していつでも注目の演習を解くことで獲得できます。つまり、今年中にPython、R、Juliaのいずれかでこの5つの演習を解けば、このバッジがもらえます! 演習の一覧は、Analytical Aprilのページからリンクされているフォーラムの投稿で確認できます。
最後に、言語の話に入る前に。3月に新しいDiscordサーバーを公開しました。そこでは楽しいやり取りがたくさん行われているので、ぜひのぞいてみてください。リンクは下の説明欄にあります!
それでは、言語を見ていきましょう。まずそれぞれの言語をざっと見渡してから、機能と用途を詳しく見ていきます。まずはPythonから始めましょう。
Python
- 1980年代後半、Guido van RossumがABCプログラミング言語の後継として考案・開発しました。最初のリリースは1991年です。
- オランダの政府資金による研究機関、Centrum Wiskunde & Informatica(CWI)で開発されました。CWIは、Edsger Dijkstraが研究の大半を行った場所として有名です。
- GuidoはCとシェルスクリプトでプログラミングしていましたが、どちらにも欠点がありました。Pythonは、欠点を避けつつ両方のいいとこ取りを目指しています。
- Python Software Foundationが管理しており、言語の変更はPython Enhancement Proposals(PEP、RFCに似た仕組み)を通じて行われます。
R
- オークランド大学のRoss IhakaとRobert Gentlemanが作成しました。Rは、S言語の別実装と考えることができます(違いは比較的小さい)。Sはその後、Sの商用(非オープン)実装であるS-plusに引き継がれました。Rは構文の大半をSと共有していますが、その意味論はSchemeに着想を得ています。
- 目標:統計計算とグラフィックスにより適し、コンピューター科学者が設計した同種のソフトウェアよりも使いやすい言語を作ること。
Julia
- Jeff Bezanson、Stefan Karpinski、Viral B. Shah、Alan Edelmanがオープンな形で開発し、現在は1000人を超えるコントリビューターがいます。
- 目標:Cの速度、Rubyの動的な性質、LISPのメタプログラミング、Pythonの汎用性、Rの統計サポート、MatLabの線形代数サポート、Perlの文字列処理能力を兼ね備え、しかも大規模な並列実行を支えられる、自由な高水準言語を作ること。
- 科学技術計算に優れていますが、汎用言語でもあります(Webアプリ向けのGenieフレームワークなど)。
多くの言語と同じく、この3つもすべて不満から生まれました :)
では、用途の観点から見ると、これらの言語はそれぞれどんなときに使い分けるのでしょうか?
Python
- 真の汎用言語(Webサイト、スクリプト、科学技術計算)
- さまざまな用途に使えます。AI(TensorFlow)、科学技術計算(NumPy)、スクリプト、Webサイト(Django)、組み込みシステム(micro python)、ハードウェアとの連携(Raspberry Piなど)、ゲーム(EVE Online)、そしてPythonは火星まで行きました。
- プログラミングを学ぶのに最適です。豊富なリソースと巨大なコミュニティがあります。Pythonらしいコードの書き方(つまり慣用的なPythonコードの書き方)に関する指針も豊富で、たとえば「明示的であることは暗黙的であることよりも良い」「読みやすさが大切」といった考え方があります。多くのOSには標準でインストールされています。
- 現在もっとも使われている言語のひとつで、ドキュメントやライブラリが豊富で、コミュニティも大きいです。
R
- Rは幅広い場面で使われています。研究者が実験データを分析したり、大学で統計やデータ分析を教えたり、保険など統計が重要な金融分野でも使われます。小売(Amazonはデータ分析にRを使用)や製造業(John Deereは生産すべき交換部品の数を推定)でも同様です。National Weather Serviceは天気や災害の予測に役立てており、データジャーナリズム(現実のデータを分析して意味を見出し、しばしば可視化する分野)でも使われます。医療分野でも広く使われており、たとえば前臨床試験に基づいて薬の安全性を判断するのに使われます。
Julia:
- 科学技術計算、データマイニング、機械学習、線形代数、分散コンピューティングに適しています。記法は数式の記法に近いので、数式からコードへの変換は比較的簡単です。
- 分散コンピューティング:タスク(=コルーチン)とチャネルによって、コードを並列に実行し互いに通信させることができます。メッセージパッシングを使ったマルチプロセス対応もあります(ハイパフォーマンスコンピューティングに最適)。
- Celesteプロジェクト(178テラバイトの天文学データを分析するためにJuliaコードを動かすスーパーコンピューター)で使われました。その結果、Juliaはペタフロップスを達成した言語の仲間入りをしました。当時それはC、C++、Fortranだけでしたが、Juliaは初の動的言語でした。毎秒1000兆回の浮動小数点演算、つまり1のあとに0が15個続く数です。Clima(気候モデリングの連合)にはCaltech、MIT、NASAのJet Propulsion Laboratoryの人々が参加し、気候予測モデルを開発しています。ほかにもCERNやASMLで使われています。
では、プログラミングの観点ではどう違うのでしょうか? 関数型なのか、オブジェクト指向なのか、それとも…?
Python:
- 動的型付けで、強い型付け
- マルチパラダイム:命令型、関数型でもありますが、実際にはオブジェクト指向言語です(すべてがオブジェクト)
- 標準のインタプリターであるCPythonは、バイトコードにコンパイルしてから仮想マシン上で解釈実行します。PyPyはCPythonの代替で、機械語にジャストインタイムコンパイルします。
R:
- 動的型付けで、強い型付け
- マルチパラダイムで、中核は関数型ですが、手続き型やオブジェクト指向のスタイルもサポートします。
Julia:
- 動的型付けで強い型付け、ジャストインタイムコンパイル
- マルチパラダイム:命令型、オブジェクト指向(多重ディスパッチによるオーバーロード)、関数型(高階関数、部分適用、パイプ演算子)
- コードは実行時にジャストインタイムでコンパイルされます。
引き続きプログラミングの観点から見ていきますが、これらの言語には特に際立った機能があるのでしょうか?
Python:
- 心地よい構文:空白に意味があるため、スコープが分かりやすくなります。コードはたいてい読みやすく、たとえば真偽値の条件(and/or)は人間が読める形で書けます。
- 表現力が高い:比較的少ないコードで多くのことができます(リスト内包表記、ジェネレーター、デコレーター)。
- 幅広い用途に対応する膨大なライブラリがあります。
- 前述のとおり、多くの異なる場面で使える真の汎用言語です。
Julia
- 多重ディスパッチ。すべての引数の型に基づいて、どの関数を呼び出すかを決めます(関数のオーバーロードのようなものです)。
- 動的でありながら高い性能。Juliaの性能はFortranに匹敵し、Cに迫ることもあります。「普通の」コードがそのまま高性能になることが多く、トリッキーな小細工は必要ありません(むしろ小さな関数が推奨されます)。コードをGPUで動かすためのライブラリもあります。
- 分散コンピューティング:タスク(=コルーチン)とチャネルによって、コードを並列に実行し互いに通信させることができます。メッセージパッシングを使ったマルチプロセス対応もあります(ハイパフォーマンスコンピューティングに最適)。
- 科学技術計算、データマイニング、機械学習、線形代数、分散コンピューティングに適しています。記法は数式の記法に近いので、数式からコードへの変換は比較的簡単です。
R:
- 柔軟なデータ型:ベクトルが中心となる型で、スカラーさえベクトルです。ベクトルにはメタデータを関連付けられます(たとえば要素の名前)。リストは異種混合で、異なる型の要素を持てます。同じ長さのベクトルをまとめるための特別なデータフレーム型もあります。
- ベクトル化された演算により、簡潔で効率的、かつ読みやすい形でベクトルを更新できます。
- Rは、データ操作、計算、グラフィカル表示のためのソフトウェア機能を統合したスイートです。R Studioを使えば、データの探索、可視化、操作が簡単に行えます。データマイニングに最適です。
- コミュニティが素晴らしく、親しみやすく多様です。R for Data Science Online Learning Communityは、あらゆるスキルレベルのR学習者が一緒にスキルを高め合うコミュニティです。メンバーが連絡を取り合い、困ったときに助け合えるオープンなSlackグループもあります。
4月中にどれを試すか迷っている人には、どうやって決めるよう勧めますか?
IT業界のすべてと同じで、ケースバイケースです! この場合は、主に目標とこれまでの経験によるでしょう。
プログラミングを始めたばかりで、AIや機械学習に興味があり、いろいろなことに使える言語を学びたいなら、まずはPythonから始めるのがおすすめです。 Pythonで利用できるリソースの数は膨大で、無料のオンラインコースもたくさんあります PythonはAIや機械学習のあらゆる場面で使われています Pythonは非常に多くの目的に使えます Pythonトラックでは学習モードが使えるので、言語の核心となる概念を楽しく学べます
統計の仕事に興味がある、データを探索・可視化したい、あるいはデータを扱う別の方法に興味があるなら、R言語は絶好の選択です。 Rのデータ型はデータの集合(ベクトルやリスト)を基盤にしており、集合に対して簡単に演算を適用できます(ループは不要) RStudio IDEは、データの探索と可視化に最適です Rは統計分析を優れた形でサポートしています Rではデータを簡単にグラフ化できます
科学技術計算に興味がある、コードを並行実行したい、性能をとことん重視したい、あるいは他のほとんどの言語とは違う何かを持つ、現代的でエレガントな言語を学びたいなら、Juliaがおすすめです。
- 多重ディスパッチは多くの人にとって目新しいもので、信じられないほど強力です
- Juliaは科学技術計算に最適です
- Juliaの型システムは柔軟で表現力豊かです
- Juliaは卓越した性能を持っています
- Juliaは並行実行に最適です
もちろん、時間があれば3つすべてを試してみることをおすすめします! 実際に試してみないと、どの言語を楽しめるかは分からないものです。