ColabではじめるPython #04

条件分岐はif文のみ。

Pythonの基本的な構文に、条件分岐繰り返しがあります。これは他のプログラミング言語でもほぼ共通して存在するものです。

条件分岐(Conditional Branch)とは、条件により処理を分岐させることをといい、if文を用います。C/C++などに存在するswitch文はPythonには存在しません。一般的に、分岐が少ない場合はif文分岐が多い場合はswitch文を使うことが多いですが、Pythonではすべてif文で記述します。switch文は分岐をシンプルに表現できますが、Pythonでは辞書を使ってif文をシンプルに表現できます。

if文は以下のフォーマットで記述します。elif文はいくつでも入れることができます。

if 条件式1:
条件式1が真の場合の処理
elif 条件式2:
条件式1が偽で条件式2が真の場合の処理
else:
すべての条件式が偽の場合の処理

if文のサンプルコードは以下のとおりです。

なお、条件式は「x == 1」のように記述しますが、この「==(等しい)」を比較演算子といい、他には「!=(異なる)」「>(大なり)」「<(小なり)」などがあります。また、複数の条件式を「and(論理積)」「or(論理和)」などの論理演算子で組み合わせることが可能です。

条件と処理を添字と値で表現できる場合は「dict = {1:”A”, 2:”B”, 3:”C”}」のような辞書を定義することで「if x in dict: print( dict[ x ] )」のようなシンプルな構文で記述することができます。ここでの「in」はin演算子といい「変数 in イテラブルオブジェクト」のフォーマットで記述することで、リストやタプルなどのイテラブルオブジェクト(要素を順番に取り出すことのできるオブジェクト)から順に要素を取り出して変数に代入します。

またif文は、条件式をヘッダ(Header)、条件式にひもづく処理をスイート(Suite)とする二つの部分に分けられます。このようなヘッダとスイートの組合せからなる構文を複合文 といいます。

Pythonでは、複合文のヘッダの行末のコロン「:」スイートの各行の行頭のインデント(スペースまたはタブ)の記述が必須となります。また、同じ複合文内のインデント量は揃える必要があります。こういった記述ルールを守らないと実行時にエラーとなるわけですが、この厳格なルールがPythonの可読性を高める要因のひとつになっています。

繰り返しはfor文またはwhile文。

繰り返し(Loop)は、同じ処理を自動的に複数回実行することをいい、for文またはwhile文を用います。

for文は以下のフォーマットで記述し、リストやタプルなどのイテラブルオブジェクトから順に要素を取り出して変数に代入し、要素の数だけ処理を繰り返し実行します。ここでの「in」は前述のif文と同様のin演算子です。

for 変数 in イテラブルオブジェクト:
  処理

while文は以下のフォーマットで記述し、条件式が真の場合に処理を繰り返し実行します。

while 条件式:
条件式が真の場合の処理

なお、for文もwhile文も複合文となるため、前述のヘッダとスイートの記述ルールを守る必要があります。サンプルコードは以下のとおりです。

また、Python特有の記述方法にリスト内包表記があり、for文を以下のフォーマットで記述します。

変数Y = [ 処理 for 変数X in イテラブルオブジェクト ]

リスト内包表記でのfor文のサンプルコードは以下のとおりです。

リスト内包表記を使うことで、for文で繰り返し処理をした出力をそのままリスト型の変数に代入することが可能となります。また、記述が非常にシンプルになるため、Pythonの可読性を高める要因のひとつになっています。

強力な拡張モジュール。

さて、ここまではPythonの基本機能の説明でしたが、PythonにはNumPyPandasscikit-learnなど数多くの強力なデータサイエンス向け拡張モジュールがあり、それらの機能を利用することで生産性は飛躍的に向上します。

利用するには、モジュールの読み込みが必要で、以下のフォーマットで記述します。なお、モジュール名には任意の別名をつけることができます。また、モジュール内の特定のクラスのみをインポートすることも可能です。

import モジュール名 as 別名
from モジュール名 import クラス名

試しにNumPyとPandasを使ってみます。以下の例のように、NumPyは「np」、Pandasは「pd」という別名をつけることが一般的です。

最後に、データサイエンスでよく利用する拡張モジュールをいくつかご紹介しておきます。いろいろなウェブサイトやGitHubでサンプルコードが提供されているので、それに倣えばある程度は実装できるかと思います。ただ、これまでに説明した基本機能をしっかりと把握していないと、細かいところで必ずつまづきます。何事も基礎が大切ということですね。

モジュール名 概要
NumPy
  • 数値計算用
  • 配列や行列の演算を高速に実行可能
  • 高速なC言語で実装
Pandas
  • データ解析用
  • 行列や時系列データの扱いに優れるデータフレームを提供
  • 速度が必要な部分はC言語などで実装
scikit-learn
  • 機械学習用
  • SVMやK平均法など回帰・分類に関するあらゆるアルゴリズムを提供
  • いくつかのコアアルゴリズムは高速なCythonで実装
matplotlib
  • グラフ描画用
  • 散布図や箱ひげ図などあらゆるグラフを描画可能
Seaborn
  • グラフ描画用
  • matplotlibをさらに拡張したモジュールで、より簡単に美しいグラフを描画可能