Julia vs. Python:データサイエンスに最適なのはどれですか?

Pythonがカバーする多くのユースケースの中で、データ分析はおそらく最大かつ最も重要になっています。Pythonエコシステムには、科学計算とデータ分析の作業を迅速かつ便利にするライブラリ、ツール、およびアプリケーションがロードされています。

しかし、特に「科学計算、機械学習、データマイニング、大規模線形代数、分散並列計算」を目的としたJulia言語の背後にいる開発者にとって、Pythonは十分に高速でも便利でもありません。Juliaは、科学者やデータアナリストに、迅速で便利な開発だけでなく、驚異的な実行速度を提供することを目指しています。 

Julia言語とは何ですか?

Juliaは、2009年に4人のチームによって作成され、2012年に一般に公開されました。これは、Pythonや、科学計算やデータ処理に使用されるその他の言語やアプリケーションの欠点に対処することを目的としています。「私たちは貪欲です」と彼らは書いた。彼らはもっと欲しかった: 

リベラルなライセンスを備えたオープンソースの言語が必要です。Rubyのダイナミズムを備えたCのスピードが必要です。Lispのような真のマクロを持ちながら、Matlabのような明白で馴染みのある数学表記を備えた同像性の言語が必要です。Pythonのように一般的なプログラミングに使用でき、Rのように統計が簡単で、Perlのように文字列処理が自然で、Matlabのように線形代数が強力で、シェルのようにプログラムを結合できるものが必要です。学ぶのは簡単ですが、最も深刻なハッカーを幸せに保つ何か。私たちはそれをインタラクティブにし、コンパイルしたいと思っています。

(Cと同じくらい速いはずだと言いましたか?)

ジュリアがそれらの願望を実行する方法のいくつかはここにあります:

  • ジュリアはコンパイルされ、解釈されません。 ランタイムパフォーマンスを高速化するために、JuliaはLLVMコンパイラフレームワークを使用してジャストインタイム(JIT)コンパイルされます。最高の状態で、ジュリアはCの速度に近づくか、それに匹敵することができます。
  • ジュリアはインタラクティブです。Juliaには、Pythonが提供するものと同様のREPL(read-eval-print loop)またはインタラクティブなコマンドラインが含まれています。簡単な1回限りのスクリプトとコマンドをすぐにパンチインできます。
  • Juliaの構文は単純です。Juliaの構文はPythonの構文に似ていますが、簡潔ですが、表現力があり強力です。
  • Juliaは、動的型付けと静的型付けの利点を兼ね備えています。「符号なし32ビット整数」などの変数の型を指定できます。ただし、型の階層を作成して、特定の型の変数を処理する一般的なケースを許可することもできます。たとえば、整数の長さや符号を指定せずに整数を受け入れる関数を作成できます。特定のコンテキストで必要ない場合は、完全に入力しなくても実行できます。
  • Juliaは、Python、C、およびFortranライブラリを呼び出すことができます。Juliaは、CおよびFortranで記述された外部ライブラリと直接インターフェースできます。PyCallライブラリを介してPythonコードとインターフェースを取り、PythonとJuliaの間でデータを共有することも可能です。
  • Juliaはメタプログラミングをサポートしています。Juliaプログラムは、Lispのような言語を彷彿とさせる方法で、他のJuliaプログラムを生成し、独自のコードを変更することさえできます。
  • Juliaにはフル機能のデバッガーがあります。 Julia 1.1は、ローカルREPLでコードを実行し、結果をステップスルーし、変数を検査し、コードにブレークポイントを追加できるデバッグスイートを導入しました。コードによって生成された関数をステップスルーするなど、きめ細かいタスクを実行することもできます。

関連ビデオ:Pythonがプログラミングを容易にする方法

PythonはITに最適で、システムの自動化から機械学習などの最先端の分野での作業まで、さまざまな種類の作業を簡素化します。

JuliaとPython:Julia言語の利点

ジュリアは最初から科学的および数値計算のために設計されました。したがって、Juliaがそのようなユースケースに有利な多くの機能を備えているのは当然のことです。

  • ジュリアは速いです。JuliaのJITコンパイルと型宣言は、「純粋な」最適化されていないPythonを桁違いに打ち負かすことができることを意味します。Pythonはでき作らCythonのようなツールを使って外部のライブラリ、サードパーティ製のJITコンパイラ(PyPy)、および最適化の方法によっては高速になりますが、ジュリアは、ゲートの速い右アウトになるように設計されています。
  • Juliaの構文は数学に適しています。Juliaの主な対象読者は、Matlab、R、Mathematica、Octaveなどの科学計算言語と環境のユーザーです。Juliaの数学演算の構文は、計算の世界の外で数学の数式を書く方法に似ているため、プログラマー以外の人も簡単に理解できます。
  • Juliaには自動メモリ管理があります。Pythonと同様に、Juliaはメモリの割り当てと解放の詳細についてユーザーに負担をかけず、ガベージコレクションを手動で制御する手段を提供します。Juliaに切り替えても、Pythonの一般的な便利さの1つが失われることはありません。
  • ジュリアは優れた並列処理を提供します。数学と科学計算は、特定のマシン、特に複数のコアで利用可能なすべてのリソースを利用できるときに繁栄します。 PythonとJuliaはどちらも操作を並行して実行できます。ただし、Pythonの並列化操作の方法では、多くの場合、スレッドまたはノード間でデータをシリアル化および逆シリアル化する必要がありますが、Juliaの並列化はより洗練されています。さらに、Juliaの並列化構文は、Pythonの構文よりもトップヘビーではなく、その使用のしきい値を下げています。
  • Juliaは、独自のネイティブ機械学習ライブラリを開発しています。Fluxは、Juliaの機械学習ライブラリであり、一般的なユースケース向けの既存のモデルパターンが多数あります。完全にJuliaで記述されているため、ユーザーは必要に応じて変更でき、Juliaのネイティブのジャストインタイムコンパイルを使用してプロジェクトを完全に最適化します。 

JuliaとPython:Pythonの利点

Juliaはデータサイエンス専用に設計されていますが、Pythonは多かれ少なかれその役割に進化していますが、Pythonはデータサイエンティストにいくつかの魅力的な利点を提供します。「汎用」Pythonがデータサイエンス作業に適している理由のいくつかは次のとおりです。

  • Pythonはゼロベースの配列インデックスを使用します。 PythonとCを含むほとんどの言語では、配列の最初の要素はゼロでアクセスされstring[0]ます。たとえば、Pythonでは文字列の最初の文字が使用されます。 Juliaは、配列の最初の要素に1を使用します。これは恣意的な決定ではありません。 Mathematicaのような他の多くの数学と科学のアプリケーションは1-インデックスを使用しており、Juliaはその聴衆にアピールすることを目的としています。実験的な機能を使用してJuliaでゼロインデックスをサポートすることは可能ですが、デフォルトでは、プログラミングの習慣が根付いたより一般的な視聴者による採用の妨げとなる可能性があります。
  • Pythonの起動オーバーヘッドは少なくなります。 PythonプログラムはJuliaプログラムよりも遅い場合がありますが、Pythonランタイム自体はより軽量であり、通常、Pythonプログラムが起動して最初の結果を提供するのにかかる時間は短くなります。また、JITコンパイルはJuliaプログラムの実行時間を短縮しますが、起動が遅くなるという代償を伴います。Juliaの起動を高速化するために多くの作業が行われていますが、Pythonにはまだ優位性があります。
  • Pythonは成熟しています。ジュリア言語は若いです。ジュリアは2009年から開発が進んでおり、その過程でかなりの量の機能のチャーンが発生しています。対照的に、Pythonはほぼ30年前から存在しています。
  • Pythonにははるかに多くのサードパーティパッケージがあります。 Pythonのサードパーティパッケージの文化の広さと有用性は、依然としてこの言語の最大の魅力の1つです。繰り返しになりますが、ジュリアの比較的新しいことは、その周りのソフトウェアの文化がまだ小さいことを意味します。その一部は、既存のCおよびPythonライブラリを使用する機能によって相殺されますが、Juliaが成功するには独自のライブラリが必要です。 FluxやKnetなどのライブラリにより、Juliaは機械学習やディープラーニングに役立ちますが、その作業の大部分は依然としてTensorFlowまたはPyTorchで行われます。
  • Pythonには何百万ものユーザーがいます。言語は、その周りに大規模で献身的で活発なコミュニティがなければ何もありません。Juliaの周りのコミュニティは熱狂的で成長していますが、それでもPythonコミュニティのサイズのほんの一部にすぎません。Pythonの巨大なコミュニティは大きな利点です。 
  • Pythonは高速化しています。Pythonインタープリターの改善(マルチコアおよび並列処理の改善を含む)を取得する以外に、Pythonは高速化が容易になりました。mypycプロジェクトは、型注釈付きのPythonをネイティブCに変換します。これは、Cythonよりもはるかに扱いにくいものです。通常、パフォーマンスは4倍向上し、純粋な数学演算ではさらに多くのパフォーマンスが向上します。