1. Pythonの基礎2020-07-07T17:09:06+09:00

ここでは数値計算に必要なPythonの基礎を学びます。

1.1. AnacondaとJupyterLab

最初にプログラミング環境を整える必要がある。webアプリやスマホアプリ、デスクトップアプリを作りたい人、他の言語に慣れている人などは、pythonの公式www.python.org からpythonをダウンロードして自分で環境を整えるのもいいし、有料無料の各種統合開発環境(Visual Studio, VS Code, PyCharm等)をインストールするのもいいだろう。ただし、本講義のように数値計算やデータサイエンスのみをターゲットにする場合は、Anacondcaというディストリビューションで環境を構築するのがお手軽なので、本講義ではAnacondaを使って環境を構築する。

1.2 Variables

1.2. 変数の定義¶ コードの中で、変数名 = 値 と書くと、メモリのどこかに「値」というデータが「変数名」(Variable)という名前がつけられて保存される。「変数」や「値」のこと(*や/などの演算子以外のもの)をコンピューターの用語でOperand(オペランド)という。なおpythonではどんな環境でもエラーメッセージは英語で表示されるので、プログラミングの基本英単語も覚える必要がある。本講義でも適宜英語を併記する。  変数に使う大文字と小文字は厳密に区別される。「値」の中身を画面に表示したいときは、printという関数(function)で出力できる。 In [1]: a = 1 print(a) [...]

1.3. Python Data Types

1.3. pythonのdata type(データ型)¶Pythonの変数にはいろいろなdata type(データ型)があるが、最も基本的なタイプとして int(整数) float(浮動小数点数) string(文字列) boolean(ブール) の4つがある。ある変数がどのtypeになっているかはtypeというfunctionで調べられる。 In [1]: [...]

1.4. NumPy/SciPy

      1.4. NumPy/SciPy¶  python本体(標準ライブラリー)には、数学/物理に使える関数はほぼ何も定義されていないので、python本体だけでは数値計算はできない。一般的にコードを書くときにはpython本体だけでなく、さまざまなモジュール(module)を必要に応じて追加(インポート, import)していくことになる。数値計算では、NumPyという非常に強力な数値計算モジュールが用意されていて、数学で使える基本的な関数はほんどすべて揃っている。今後講義でコードを書くときは、ほぼ100%、NumPyを使うことになるし、pythonを使っている科学技術計算、機械学習を含むデータサイエンスでは常にNumPyを用いていると思っていい。それほど重要なモジュールである。</br>  SciPyはNumPyを基にしてさらに高度な数値計算が可能なモジュールである。ざっくりいうと上位互換と思っていい。公式に細かい使い方が書かれているので、functionのargumentや「こんな関数ないかな」と調べるときに参考にするよい。公式なので当たり前だがgoogleで検索して出てくる適当なサイトより網羅的にかつ正確に書かれている。  モジュールを取り込むにはimportを使う。以下のように、numpyをimportしてnpと省略するところからすべてのコードが始まる。 In [1]: [...]

1.5. 1D Array

1.5. 一次元配列とその操作¶ pythonの標準ライブラリー(python本体)には配列を扱うlistが用意されている。普通のアプリを作成する場合にはよく使うのだが、科学技術計算に使うためには、計算の利便性と高速化の面でlistは適さない。数値計算、科学技術計算用では、NumPyに用意されているndarrayというdata typeの配列が広く使われている。このndarrayは、行列、ベクトル計算用の高速アルゴリズムに最適化されていて、NumPyやSciPyで提供されるさまざまなfuntionが利用できる。さらにはデータ解析モジュールのPandasや機械学習モジュールのscikit-learnでもndarrayが使われているのでデータサイエンスでは必須の配列である。  まず$0$から$9$まで$10$個の数字を要素に持つベクトルを作ってみよう。 In [3]: import numpy as np x [...]

1.6. Graphs

1.6. データの可視化¶ データの可視化に便利なmoduleはたくさん存在するが、入門者向けにはmatplotlibが簡単で覚えやすいだろう。まずmoduleを読み込んで簡単なプロットをしてみる。 In [1]: import matplotlib.pyplot as plt import numpy as [...]

1.8. 2D plots

 行列や二次元配列が扱えるようになったので、行列の可視化や画像処理について紹介したい。matplotlibには可視化や画像処理に関する関数がいろいろと用意されている。 まずmoduleをimportする。

1.7. 2D Array

 2次元以上の配列あるいは行列を表すのにも、1次元配列のときに紹介したndarrayを使う。2次元の場合[[]]のように括弧を二重にすることがポイントである。例でみてみよう。

1.9. For-loops

 繰り返し似たような作業を実行させるときには、forループを使う。書式は微妙に違うがC/C++やJava、その他の言語でも頻繁に使う構文だ。ただNumPyを上手に用いるとforループを使わなくても同じことができる場合が多く、実際のところforループを使わないでNumPyを利用した方が圧倒的に処理速度が速いので、NumPyに慣れてきたらなるべくforループを使わないように頭を働かせることをお勧めする。

1.10. If Statements

 どの言語でも条件を分岐するにはif文が使われる。pythonではforループと同じように、if文の最後に:をつけ、改行してインデントを入れて条件を書く。実行文にインデントを入れないとforループと同様、文法エラーになる

1.11. Functions

 数学や物理でfunction(関数)といえば、sinとかexpのような初等関数をイメージすると思うが、情報処理の分野では、「ある入力に対して、何か出力してくれる手続きのまとまり」という意味でも使われる。この”function”という概念は、どのプログラミング言語でも極めて重要な概念である。どの言語でも基本的なfunctionは組み込まれているし(これをbuilt-in function、組み込み関数という)、module内で誰かが作ったfunctionを使うこともできる。同様に、自分で新たなfunctionを定義することもできる。なお、情報処理の分野では入力のことを一般に引数(ひきすう, argument)と呼び、出力のこと戻り値(return)と呼ぶ。

1.12. Classes and Objects

 オブジェクト指向は現代のプログラミングにおいて欠かすことできない概念で、世の中で使われているほとんどのプログラミング言語はオブジェクト指向といっても過言ではない。例外的にC言語はオブジェクト指向ではないがCにオブジェクト指向を追加したものがC++である。数値計算のコードを一人で書く場合には、オブジェクト指向の対となる概念である「手続き型指向」で書くこともできるが、大規模なコードや複数の人で分担してコードを書く場合には、オブジェクト指向のご利益は絶大だ。せっかくpythonを勉強しているのに「オブジェクト指向がわからない」のはちょっと恥ずかしいので、本講義でもオブジェクト指向プログラミングについて少し説明する。より高度な内容については適宜専門書を読むことをお勧めする。

1.13. Image Processing

 class, function, 属性など基本的なpythonの使い方を習得したので、これまでの復習を兼ねて簡単な画像処理をしてみよう。matplotlibには画像データを読み込む関数image.imreadも用意されている。下記の画像はリンクフリーのサイトからダウンロードした。「白地図 japan05.jpg」で検索すると出てくる。

1.14. SymPy

 数値計算ではないが、数式の変形や簡略化をpythonにさせたい場合は、SymPyというモジュールを使うと便利である。商用の数式処理ソフトにMathematicaというものがあるが、これと似たことをpythonにやらせることができる。SymPyを使うときは、symbols(複数形のsがついていることに注意)というfunctionを使って、変数を明示的に宣言しないといけいない。なお、SymPyでは複素数はI(大文字のi)で表し、jではない。

1.15. Plotly

 すでにMatplotlibを使ったFigure作成を紹介したが、plotlyというモジュールを用いると、グリグリいじることのできるインターラクティブな美しい図を描画することができる。現在のところ、AnacondaではデフォルトでインストールされていないモジュールでJupyterLab 1.1.4ではAnaconda Navigatorからもインストールできなくなったようなので、自分でインストールする必要がある。インストールした後でrebuildに失敗するとJupyterLab自体が起動しなくなったりするので、これ以降はpipによるモジュールのインストールに関する知識がそこそこあって、自分で問題解決できる中級者向けに説明する。初心者でもチャレンジしたい人は試してみるとよい。

Go to Top