数値計算とも相性の良いPythonとは? おススメの学習方法まで

 人気のプログラミング言語Python、なぜ人気なのか?、そしてPythonの特徴とは? どうやって学べばいいのか? 気になる人は多いと思います。
 そこで、この記事では人気のプログラミング言語であるPythonとは何か、またその特徴について記します。
特に私はPythonを科学技術計算や機械学習などのサイエンスに使っているため、その側面からPythonについて説明できればと思います。またPythonを学ぶにはどうすればよいのかについても解説しました。

この記事を読むことであなたは
・プログラミング言語Pythonとはどんな言語か?
・Pythonの特徴
・科学技術計算とPythonの関係
・Pythonをどう学べばいいのか
について理解することができます。

可読性の高いプログラミング言語 Python

 歴史的な経緯から述べますとPythonはプログラミング言語の1つで1991年にGuido van Rossum氏によって開発されました。Pythonの名前の由来はイギリスBBCのコメディ番組『空飛ぶモンティ・パイソン』にあると言われています。Pythonは一言で言えば、”シンプルで可読性の高いプログラミング言語“です。

例えば、偶数か奇数かを判定するプログラムを例にC言語とPythonで比較してみると次のようになります。

C言語

#include <stdio.h>
int main(void){
    for (int i = 0; i < 10; i++){
        if (i % 2 == 0){
            printf("%d is Even.\n", i);
        } else {
            printf("%d is Odd.\n", i);
        }
    }
}

Python

for i in range(11):
    if i % 2 == 0:
        print(str(i) + " is Even.")
    else:
        print(str(i) + " is Odd.")

どうでしょう?

見た感じPythonの方が括弧などが無い分、非常にスッキリして見えるのではないでしょうか?

実際、学習していくとわかりますが、見た目のスッキリさに加えて、覚えておかないといけない文法項目も少ないので読み易く、書き易い言語です。

このため、Pythonはプログラミング初学者でも比較的短期間に習熟することができます

C言語、Javaと並んで人気のプログラミング言語

 次のテーブルは2020年9月時点におけるTIOBE Indexというプログラミングのランキングになります。

(引用:https://www.tiobe.com/tiobe-index/)

C言語、Javaと言えば古くからあるプログラミング言語ですが、それと比較するとPythonは比較的新しいプログラミング言語と言えます。しかし、このランキングの第3位にランクインしています。

なぜ、こんなにPythonが人気なのでしょうか?

実は統計解析、画像処理、機械学習などの分野でライブラリが豊富にあると言うことが挙げられます。特に機械学習の分野ではPythonのライブラリであるTensorFlow, Keras, PyTorchがほぼデファクトスタンダードになっています。このため、AIの発展とPythonの人気は密接に関係しているわけです。また、機械学習以外の分野でもそれぞれの分野に何かしらのライブラリが存在するため、Pythonの活躍できるフィールドが非常に広いことも人気の理由です。

ミニコラム:私がPythonを始めたきっかけ
余談にはなりますが、私がPythonに注目したのは2012年ごろです。当時はまだ大学の学部生でした。
当時、研究室にB先生という准教授の先生がいました。B先生は直感が鋭い先生で、最先端の技術に対して非常に感度の高い方でした。そして、その先生が次はPythonだと言っていました。
私は当時、Fortranというプログラミング言語を使っていました。
Fortranは数値計算の研究室では伝統的に使われていて、最初に習うプログラミング言語かと思います。
Fortranは研究室で代々受け継がれているコード遺産などの関係上、今でも数値計算に使われているプログラミング言語だと思います。
ただ、私はB先生が注目しているというだけの理由で”次は間違いなくPythonの時代だ”と思いました。はっきり言って根拠のない自信でしたが、Pythonの勉強を始めたのです。このため、比較的早くFortranからPythonに切り替えることができました。今思えば、ただのラッキーでしたが、あの時の直感に従っていて良かったと思います。

豊富なライブラリ

 Pythonは非常に多くのライブラリを持っています。このため、Pythonはシンプルで可読性が高いが、同時に強力なプログラミング言語であるのはこのライブラリのお陰です。

以下に、特に科学技術計算・機械学習で活躍するPythonのライブラリを紹介します。

  • Numpy: 行列計算、乱数生成など数値計算をする上で最も重要なライブラリ
  • Scipy: 数値積分、常微分方程式、最適化などより科学技術計算向きの関数を揃えたライブラリ
  • Matplotlib: データの可視化で最も代表的なライブラリ。グラフ描画の細かい設定も可能
  • Seaborn: データをより洗練された形で可視化できる。統計データのプロットに強い
  • Pandas: データ分析用のライブラリ。カテゴリごとの分析や、Excel, csvへのファイル入出力も可能
  • TensorFlow / PyTorch /Keras: 深層学習用のライブラリ。学習データの前処理から訓練まで充実
  • H5py: HDFフォーマットでのファイル入出力が簡単に行える
  • PyCUDA: GPUでの演算をサポート。CUDA CとPythonを繋ぐライブラリ
  • OS / glob: ディレクトリの操作、ファイルのコピー、リストの取得などファイル操作に活躍

 豊富なライブラリがあるおかげで1からプログラミング(車輪の再発明)をする必要がないわけです。
これはとても大事な性質ではないでしょうか。どんなに優秀な人でも使える時間は限られています。
世界中の誰かが作ってくれたライブラリを利用することで、より速く、より正確に(バグ無しに)開発することができるのです。

つまり、Why Python?、と聞かれたら
これに対する答えは、“目的をより早く達成できる”からだと言えます。

データサイエンスに強い

 上で豊富なライブラリがあることの1つの具体例ではありますが、Pythonはデータサイエンスに強いです。
少し具体的に考えてみましょう。例えば、大量の画像があって、それを機械学習で分類器を作らないといけないというタスクがあったとしましょう。

 もし、C言語でこのタスクを全てやらないといけないということになると、実装しないといけないことが膨大です。まず、画像ファイルのリストを取得する関数を作り、次に画像を読み込み配列に格納する関数、機械学習のモデルを定義する関数、誤差逆伝播する関数、、、。一体、幾つの関数を作ればいいのでしょうか?
途中の学習過程をプロットするのはどうしましょう?

恐らく、膨大なコード量にうんざりすることになるでしょう。汎用性も考えると少なくとも数千行程度のプログラムでは収まらないのは確かです。しかも、忘れてはいけないのはそこは出発点です。
そもそもの目的は学習させて、分類器を作ることですから、効率が悪すぎますよね。

 一方で、Pythonで同じことをする場合には、globでファイルリストを取得し、
PyTorchでモデルを定義し、損失関数を定義し、そのまま学習させる。
可視化はmatplotlibで行う。トータルでのコーディング量と言えば、とても簡単なモデルであれば100行程度、もう少し一般的なモデルでも1000行程度ではないでしょうか。

つまり、

データさえあれば、半日以内にさっさとモデルを作り、PDCAを回せるのです。

開発スピードが全然違いますよね。ライブラリの力は偉大です。データサイエンスをやる上では、Pythonはほぼ必須の言語であると言えるわけです。

科学技術計算とPython

 科学技術計算、数値計算の世界ではまだまだC言語やFortranが活躍している分野ではありますが、企業の研究所はもちろん、大学においてもPythonによる数値計算へシフトしつつあります。

Pythonは科学技術計算ともとても相性の良いプログラミング言語です。

ここではFortranとPythonで比較しながらPythonがなぜ、科学技術計算と相性が良いのか紹介していきたいと思います。

前処理からデータ入手力、可視化までPythonで完結

 例えば、Fortranの場合、計算処理の部分はFortranで、可視化はgnuplotというフリーソフトを使うのが一般的です。そして、gnuplotもそのまま使うというよりはスクリプトファイルの中にグラフ描画の設定を書きます。そして、最後にプログラムのコンパイルをして、プログラムを実行し、gnuplotのスクリプトまでを順に実行するような形になります。また、途中結果の数値データをファイル入出力用をするには別途、サブルーチンを書く必要があります。

この場合、それぞれの要素が独立しているため、結構結果を確認するまでの手順が面倒です。

 一方でPythonの場合はどうでしょうか? Pythonの場合、計算の処理部分はNumpy、データ入出力はH5py、途中の結果の可視化もMatplotlibを使えば良いので、1つのプログラムの中で一連の流れが完結するのです。同じプログラミングの中で完結しているため、データの受け渡しがとてもスムーズです。しかも、各ライブラリの関数を呼び出せば良いのでコード自体もとても短いです。

 もう一つ、Fortranと決定的に違うのはJupyter Notebookというインタラクティブな実行環境があることです。このJupyter Notebookのおかげで変数の中身を確認したり、ちょっとしたアイデアを試すことがかなり簡単にできるのです。

これは様々な角度から試行錯誤をする必要のある科学技術計算ではとても重要な要素です。

Numpy, PyCUDAを使うことで計算速度も高速

 PythonはよくFortranと比較してスクリプト言語だから計算が遅いと言われます。実際、ライブラリを使わないピュアなPythonとFortranで比較するとPythonは比較にならないほど遅いでしょう。

 しかし、この計算速度の遅さはライブラリの力で解決できるのです。例えば、Numpyは高速な行列演算やベクトル演算を備えているため、Numpyを利用した演算はC言語やFortranと遜色の無い計算速度で実行できます。また、PyCUDAを使うことで、1コアの逐次計算だけでなくGPUを利用した並列計算も行う事ができます。

 PyCUDAでは実際の関数部分はCUDA Cで書くことになりますが、純粋なCUDA Cを書くよりもコード量は短く、またPythonの様々なライブラリと連携することができますので、メリットは非常に大きいです。

つまり、Pythonは必要なライブラリも揃っているし、演算速度も問題無い為、科学技術計算ととても相性の良いプログラミング言語だと言えます。

Pythonを学ぶには?

 それでは、そんな魅力的なプログラミング言語Pythonを学ぶにはどうすればよいでしょうか?
多くの方法がありますが、今回は低予算(無料~5000円以下)で始める為の方法について紹介します。

書籍で学ぶ

 この方法が一番馴染みがあると思います。Pythonに関する日本語の書籍はここ数年で数多く出版されていますので、そんなに困らないのではないでしょうか?科学技術計算とPythonの組み合わせでは次の書籍が参考になると思います。

現場で使える! Python科学技術計算入門 NumPy/SymPy/SciPy/pandasによる数値計算・データ処理手法

 後は、NumpyとScipyのライブラリにフォーカスした書籍だと次の書籍があります。

NumPy&SciPy数値計算実装ハンドブック

 ここで紹介した書籍以外もPython自体の文法入門書についても書籍は数多くあります。一度、ご自身で調べてみてください。書籍の役割は次の動画で学ぶという選択肢が出てきたことで補完的な使い方になると思います。つまり、基本は動画で学び、細かいところの確認や辞書代わりに書籍も手元に置いておく、現代の効率の良い学びはこんな感じではないでしょうか。

動画で学ぶ

 最近はYoutube、そして私も講座を出させていただいているUdemyなど動画教材はかなり充実してきています。個人的には動画教材はかなりおススメです。何故かと言うと、ハンズオンで一緒にコードを書いていく動画が多いため、実践に繋がりやすいからです。

 Udemyの場合、有料になってしまいますが、月に1,2回程度、1500円前後で受講できるセールをやっています。この時期に纏め買いして、受講するというのがおススメです。

おススメのUdemy講座を2つ紹介しておきます。(*もちろん、これ以外にもたくさんいい講座があります)

現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル

 この講座は現役のシリコンバレーのエンジニアである酒井潤さんが出されているとてもボリュームのあるPythonの講座です。UdemyのPython講座では文句無しのトップレベルと言えるでしょう。全くの初心者が受講すると量に圧倒されるのである程度Pythonの知識が付いてから学ばれると良いかと思います。Pythonを深く、広く理解するためにはこの講座を除いてないのではないでしょうか?
 また、コードスタイルというプログラムの書き方にも踏み込んで講義をされているので洗練されたプログラミングスキルを身に付けるのにおススメです。

【世界で18万人が受講】実践 Python データサイエンス

 こちらもUdemyの特に初期における看板講座だと思います。Pythonの書籍を多数出されている辻真吾さんデータサイエンティストJose Portillaさんの英語版講座を日本語化したものです。Pythonの基礎からとても易しく解説している分、順番的にはコチラから受講される事をお勧めします。

 最後に、我田引水ですが、私が出しているUdemy講座についても紹介しておきます。

【1日で習得】技術者のためのPythonデータ分析

 こちらの講座は上の2つに比べると更にプログラミング初心者向けな内容です。対象の受講者としてはメーカーで普段、実験をやっている人向けに作った講座です。実験家の方は実験データの整理から分析までExcelで全て完結していることがとても多いですが、Pythonを使う事でもう少し高度な分析が手軽にできますよ、という内容になっています。もし興味がありましたら、覗いてみてください。

ネットで学ぶ

 上の動画・書籍と併用しつつ補うような形で使うのがこのネットで学ぶという事だと思います(当ブログもここに該当します)。書籍、動画の場合はその分野のメジャーな分野(例えば、Pythonで言うと機械学習やWeb開発)は網羅されている可能性がありますが、少しマイノリティになると書籍や動画のどちらもが無い場合があります。こういう場合は、個人のブログやGit Hub(*オンライン上でコードなどをシェアするサービス)を活用しましょう。

 ただ、Pythonの文法が理解できている前提があったり内容が断片的だったりするので、動画講座などで基礎を固めつつ、自身の興味に合った内容を探すようにしましょう。

The following two tabs change content below.
メーカーR&D職 研究開発業務にPythonを使用。 Udemy講師およびKindleで電子書籍を出版。 Udemyでは受講生 約15,000名 Pythonの適用範囲: データ分析、画像処理、統計解析、並列計算、流体解析、深層学習